From 5795871bcccc9ade9c43990e9ddbfbd4e0aad76b Mon Sep 17 00:00:00 2001 From: naomiaro Date: Tue, 21 Dec 2010 23:33:58 -0500 Subject: [PATCH] layout has more widget-like setup now. side playlist reused in search. --- application/configs/navigation.php | 2 +- application/controllers/LibraryController.php | 19 ++-- application/controllers/SearchController.php | 30 ++++-- .../controllers/SideplaylistController.php | 3 +- .../scripts/{sidebar.phtml => library.phtml} | 4 +- application/layouts/scripts/search.phtml | 21 ++++ .../views/scripts/library/update.phtml | 2 + .../views/scripts/search/display.phtml | 23 ----- .../js/campcaster/library/advancedsearch.js | 40 +++++++- public/js/campcaster/library/context-menu.js | 15 +++ public/js/campcaster/library/library.js | 96 +------------------ public/js/campcaster/library/spl.js | 82 ++++++++++++++++ 12 files changed, 196 insertions(+), 141 deletions(-) rename application/layouts/scripts/{sidebar.phtml => library.phtml} (87%) create mode 100644 application/layouts/scripts/search.phtml create mode 100644 application/views/scripts/library/update.phtml create mode 100644 public/js/campcaster/library/context-menu.js create mode 100644 public/js/campcaster/library/spl.js diff --git a/application/configs/navigation.php b/application/configs/navigation.php index 9af489d6c..a5de95b29 100644 --- a/application/configs/navigation.php +++ b/application/configs/navigation.php @@ -65,7 +65,7 @@ $pages = array( 'label' => 'Search', 'module' => 'default', 'controller' => 'Search', - 'action' => 'display', + 'action' => 'index', 'resource' => 'search' ) ) diff --git a/application/controllers/LibraryController.php b/application/controllers/LibraryController.php index 7f575669b..fffba5873 100644 --- a/application/controllers/LibraryController.php +++ b/application/controllers/LibraryController.php @@ -24,16 +24,23 @@ class LibraryController extends Zend_Controller_Action public function indexAction() { - $this->view->headScript()->appendFile('/js/contextmenu/jquery.contextMenu.js','text/javascript'); $this->view->headScript()->appendFile('/js/campcaster/library/library.js','text/javascript'); - - $this->view->headLink()->appendStylesheet('/css/jquery.contextMenu.css'); + $this->_helper->layout->setLayout('library'); + $this->_helper->actionStack('context-menu', 'library'); + $this->_helper->actionStack('contents', 'library'); + $this->_helper->actionStack('index', 'sideplaylist'); } public function contextMenuAction() { + $this->_helper->viewRenderer->setResponseSegment('library'); + + $this->view->headScript()->appendFile('/js/campcaster/library/context-menu.js','text/javascript'); + $this->view->headScript()->appendFile('/js/contextmenu/jquery.contextMenu.js','text/javascript'); + $this->view->headLink()->appendStylesheet('/css/jquery.contextMenu.css'); + $pl_sess = $this->pl_sess; $contextMenu; @@ -43,8 +50,6 @@ class LibraryController extends Zend_Controller_Action $contextMenu[] = array('action' => '/Playlist/add-item', 'text' => 'Add To Playlist'); $this->view->menu = $contextMenu; - - $this->_helper->actionStack('contents', 'library'); } public function deleteAction() @@ -77,12 +82,12 @@ class LibraryController extends Zend_Controller_Action public function contentsAction() { + $this->_helper->viewRenderer->setResponseSegment('library'); + $query["category"] = $this->_getParam('ob', "dc:creator"); $query["order"] = $this->_getParam('order', "asc"); $this->view->files = StoredFile::getFiles($query); - - $this->_helper->actionStack('index', 'sideplaylist'); } public function searchAction() diff --git a/application/controllers/SearchController.php b/application/controllers/SearchController.php index 4309d4c5b..8eccc5598 100644 --- a/application/controllers/SearchController.php +++ b/application/controllers/SearchController.php @@ -14,6 +14,7 @@ class SearchController extends Zend_Controller_Action $ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext->addActionContext('newfield', 'html') + ->addActionContext('display', 'json') ->initContext(); $this->form = new Application_Form_AdvancedSearch(); @@ -21,7 +22,12 @@ class SearchController extends Zend_Controller_Action public function indexAction() { - // action body + $this->_helper->layout->setLayout('search'); + + $this->_helper->actionStack('context-menu', 'library'); + $this->_helper->actionStack('display', 'search'); + $this->_helper->actionStack('contents', 'library'); + $this->_helper->actionStack('index', 'sideplaylist'); } public function displayAction() @@ -29,11 +35,15 @@ class SearchController extends Zend_Controller_Action $this->view->headScript()->appendFile('/js/campcaster/library/advancedsearch.js','text/javascript'); $this->view->headLink()->appendStylesheet('/css/library_search.css'); + $this->_helper->viewRenderer->setResponseSegment('search'); + + $request = $this->getRequest(); + $this->form = new Application_Form_AdvancedSearch(); $form = $this->form; - // Form has not been submitted - pass to view and return - if (!$this->getRequest()->isPost()) { + // Form has not been submitted - displayed using layouts + if (!$request->isPost()) { $sub = new Application_Form_AdvancedSearchRow(1); $form->addSubForm($sub, 'row_1'); $form->getSubForm('row_1')->removeDecorator('DtDdWrapper'); @@ -43,18 +53,20 @@ class SearchController extends Zend_Controller_Action } // Form has been submitted - run data through preValidation() - $form->preValidation($_POST); + $form->preValidation($request->getPost()); - if (!$form->isValid($_POST)) { - $this->view->form = $form; + if (!$form->isValid($request->getPost())) { + $this->view->form = $form->__toString(); return; } - // Form is valid - $this->view->form = $form; + // form was submitted, send back strings to json response. + //$this->view->form = $form->__toString(); - $info = $form->getValues(); + $info = $form->getValues(); $this->view->files = StoredFile::searchFiles($info); + $this->view->results = $this->view->render('library/update.phtml'); + unset($this->view->files); } public function newfieldAction() diff --git a/application/controllers/SideplaylistController.php b/application/controllers/SideplaylistController.php index e18205bd0..cebef65c7 100644 --- a/application/controllers/SideplaylistController.php +++ b/application/controllers/SideplaylistController.php @@ -17,7 +17,8 @@ class SideplaylistController extends Zend_Controller_Action public function indexAction() { - $this->_helper->layout->setLayout('sidebar'); + $this->view->headScript()->appendFile('/js/campcaster/library/spl.js','text/javascript'); + $this->_helper->viewRenderer->setResponseSegment('spl'); $pl_sess = $this->pl_sess; diff --git a/application/layouts/scripts/sidebar.phtml b/application/layouts/scripts/library.phtml similarity index 87% rename from application/layouts/scripts/sidebar.phtml rename to application/layouts/scripts/library.phtml index c53955f4f..c54e6d9f5 100644 --- a/application/layouts/scripts/sidebar.phtml +++ b/application/layouts/scripts/library.phtml @@ -10,8 +10,8 @@ - -
layout()->content ?>
+ +
layout()->library ?>
layout()->spl ?>
diff --git a/application/layouts/scripts/search.phtml b/application/layouts/scripts/search.phtml new file mode 100644 index 000000000..6d7ee53f1 --- /dev/null +++ b/application/layouts/scripts/search.phtml @@ -0,0 +1,21 @@ + +doctype() ?> + + + + Campcaster + headScript() ?> + headLink() ?> + + + + + + + +
layout()->library ?>
+ +
layout()->spl ?>
+ + + diff --git a/application/views/scripts/library/update.phtml b/application/views/scripts/library/update.phtml new file mode 100644 index 000000000..113029e1d --- /dev/null +++ b/application/views/scripts/library/update.phtml @@ -0,0 +1,2 @@ +partialLoop('library/libraryTablePartial.phtml', $this->files); diff --git a/application/views/scripts/search/display.phtml b/application/views/scripts/search/display.phtml index 5dd4dc8b8..d742638df 100644 --- a/application/views/scripts/search/display.phtml +++ b/application/views/scripts/search/display.phtml @@ -1,29 +1,6 @@ form->setAction($this->url()); echo $this->form; ?> Add Submit - -files) { -?> - - - - - - - - -partialLoop('library/libraryTablePartial.phtml', $this->files); -?> -
TitleArtistAlbumTrackLength
-No Results"; - } -?> diff --git a/public/js/campcaster/library/advancedsearch.js b/public/js/campcaster/library/advancedsearch.js index 831e6cd11..95fbddd61 100644 --- a/public/js/campcaster/library/advancedsearch.js +++ b/public/js/campcaster/library/advancedsearch.js @@ -28,15 +28,49 @@ function ajaxAddField() { }); } +function searchLibrary() { + var url, data; + + url = '/Search/display/format/json'; + data = $("form").serializeArray(); + + $.post(url, data, function(json){ + + if(json.form) { + $("#search") + .empty() + .append(json.form); + } + + + if(json.results) { + $("#library_display tr:not(:first-child)").remove(); + $("#library_display tbody").append(json.results); + + $("#library_display tr:not(:first-child)") + .contextMenu({menu: 'myMenu'}, contextMenu) + .draggable({ + helper: 'clone' + }); + } + + }); +} + $(document).ready(function() { $("#search_add").click(ajaxAddField); - $("#search_submit").click(function(){ - $("form").submit(); - }); + $("#search_submit").click(searchLibrary); $('[id^="fieldset-row_"]').each(function(i, el){ addRemove(el); }); + $("#library_display tr:not(:first-child)") + .contextMenu({menu: 'myMenu'}, contextMenu) + .draggable({ + helper: 'clone' + }); + + setUpSPL(); }); diff --git a/public/js/campcaster/library/context-menu.js b/public/js/campcaster/library/context-menu.js new file mode 100644 index 000000000..6a27470a0 --- /dev/null +++ b/public/js/campcaster/library/context-menu.js @@ -0,0 +1,15 @@ +function contextMenu(action, el, pos) { + var method = action.split('/').pop(), + url; + + if (method === 'delete') { + url = action + '/format/json'; + url = url + '/id/' + $(el).attr('id'); + $.post(url, deleteItem); + } + else if (method === 'add-item') { + url = action + '/format/json'; + url = url + '/id/' + $(el).attr('id'); + $.post(url, setSPLContent); + } +} diff --git a/public/js/campcaster/library/library.js b/public/js/campcaster/library/library.js index a4753ab10..08c6fd5b3 100644 --- a/public/js/campcaster/library/library.js +++ b/public/js/campcaster/library/library.js @@ -1,19 +1,3 @@ -function contextMenu(action, el, pos) { - var method = action.split('/').pop(), - url; - - if (method === 'delete') { - url = action + '/format/json'; - url = url + '/id/' + $(el).attr('id'); - $.post(url, deleteItem); - } - else if (method === 'add-item') { - url = action + '/format/json'; - url = url + '/id/' + $(el).attr('id'); - $.post(url, setSPLContent); - } -} - function deleteItem(json){ var id; @@ -35,75 +19,6 @@ function setLibraryContents(data){ ); } -//-------------------------------------------------------------------------------------------------------------------------------- -//Side Playlist Functions -//-------------------------------------------------------------------------------------------------------------------------------- - -function setSPLContent(json) { - - if(json.message) { - alert(json.message); - return; - } - - $('#spl_name').empty() - .append(json.name); - $('#spl_length').empty() - .append(json.length); - $('#spl_sortable').empty() - .append(json.html); -} - -function addSPLItem(event, ui){ - - var url, tr, id; - - tr = ui.helper; - - if(tr.get(0).tagName === 'LI') - return; - - id = tr.attr('id'); - - url = '/Playlist/add-item/format/json'; - url = url + '/id/'+id; - - $.post(url, setSPLContent); -} - -function deleteSPLItem(){ - - var url, pos; - - url = '/Playlist/delete-item/format/json/view/spl'; - - pos = $('form[name="SPL"]').find(':checked').not('input[name="all"]').map(function() { - return "/pos/" + $(this).attr('name'); - }).get().join(""); - - url = url + pos; - - $.post(url, setSPLContent); -} - -function moveSPLItem(event, ui) { - var li, newPos, oldPos, url; - - li = ui.item; - - newPos = li.index(); - oldPos = li.attr('id').split("_").pop(); - - url = '/Playlist/move-item' - url = url + '/format/json'; - url = url + '/view/spl'; - url = url + '/oldPos/' + oldPos; - url = url + '/newPos/' + newPos; - - $.post(url, setSPLContent); -} - - $(document).ready(function() { $("#library_display tr:first-child span.title").data({'ob': 'dc:title', 'order' : 'asc'}); @@ -139,15 +54,6 @@ $(document).ready(function() { helper: 'clone' }); - $("#spl_sortable").sortable(); - $("#spl_sortable" ).bind( "sortstop", moveSPLItem); - $("#spl_remove_selected").click(deleteSPLItem); - - $("#side_playlist").droppable(); - $("#side_playlist" ).bind( "drop", addSPLItem); - - $('input[name="all"]').click(function(){ - $('form[name="SPL"]').find('input').attr("checked", $(this).attr("checked")); - }); + setUpSPL(); }); diff --git a/public/js/campcaster/library/spl.js b/public/js/campcaster/library/spl.js new file mode 100644 index 000000000..3fa1ed6c2 --- /dev/null +++ b/public/js/campcaster/library/spl.js @@ -0,0 +1,82 @@ +//-------------------------------------------------------------------------------------------------------------------------------- +//Side Playlist Functions +//-------------------------------------------------------------------------------------------------------------------------------- + +function setSPLContent(json) { + + if(json.message) { + alert(json.message); + return; + } + + $('#spl_name').empty() + .append(json.name); + $('#spl_length').empty() + .append(json.length); + $('#spl_sortable').empty() + .append(json.html); +} + +function addSPLItem(event, ui){ + + var url, tr, id; + + tr = ui.helper; + + if(tr.get(0).tagName === 'LI') + return; + + id = tr.attr('id'); + + url = '/Playlist/add-item/format/json'; + url = url + '/id/'+id; + + $.post(url, setSPLContent); +} + +function deleteSPLItem(){ + + var url, pos; + + url = '/Playlist/delete-item/format/json/view/spl'; + + pos = $('form[name="SPL"]').find(':checked').not('input[name="all"]').map(function() { + return "/pos/" + $(this).attr('name'); + }).get().join(""); + + url = url + pos; + + $.post(url, setSPLContent); +} + +function moveSPLItem(event, ui) { + var li, newPos, oldPos, url; + + li = ui.item; + + newPos = li.index(); + oldPos = li.attr('id').split("_").pop(); + + url = '/Playlist/move-item' + url = url + '/format/json'; + url = url + '/view/spl'; + url = url + '/oldPos/' + oldPos; + url = url + '/newPos/' + newPos; + + $.post(url, setSPLContent); +} + +function setUpSPL() { + + $("#spl_sortable").sortable(); + $("#spl_sortable" ).bind( "sortstop", moveSPLItem); + $("#spl_remove_selected").click(deleteSPLItem); + + $("#side_playlist").droppable(); + $("#side_playlist" ).bind( "drop", addSPLItem); + + $('input[name="all"]').click(function(){ + $('form[name="SPL"]').find('input').attr("checked", $(this).attr("checked")); + }); +} +