diff --git a/airtime_mvc/application/controllers/NewPlaylistController.php b/airtime_mvc/application/controllers/NewPlaylistController.php index b8d2f231a..7d768ffaf 100644 --- a/airtime_mvc/application/controllers/NewPlaylistController.php +++ b/airtime_mvc/application/controllers/NewPlaylistController.php @@ -48,8 +48,6 @@ class NewPlaylistController extends Zend_Controller_Action $modified = $this->_getParam('modified', null); if ($obj->getLastModified("U") !== $modified) { $this->createFullResponse($obj); - Logging::info($obj->getLastModified("U")); - Logging::info($modified); throw new PlaylistOutDatedException(sprintf(_("You are viewing an older version of %s"), $obj->getName())); } } @@ -199,9 +197,9 @@ class NewPlaylistController extends Zend_Controller_Action $objInfo = Application_Model_Library::getObjInfo($type); Logging::info("editing {$type} {$id}"); - if (!is_null($id)) { - Application_Model_Library::changePlaylist($id, $type); - } +// if (!is_null($id)) { + Application_Model_Library::changePlaylist($id, $type); +// } try { $obj = new $objInfo['className']($id); @@ -552,8 +550,8 @@ class NewPlaylistController extends Zend_Controller_Action $result['id'] = $bl->getId(); $result["modified"] = $bl->getLastModified("U"); } else if ($params['type'] == 'playlist') { - $result["modified"] = $this->view->modified; $this->setPlaylistNameDescAction(); + $result["modified"] = $this->view->modified; } $this->_helper->json->sendJson($result); diff --git a/airtime_mvc/public/css/_showbuilder.css b/airtime_mvc/public/css/_showbuilder.css index b62688186..048a06d4f 100644 --- a/airtime_mvc/public/css/_showbuilder.css +++ b/airtime_mvc/public/css/_showbuilder.css @@ -513,6 +513,10 @@ li.ui-state-default { left: 4px; } +[tab-type='md'] > .editor_pane_wrapper { + overflow-x: hidden; /* Show the y-direction scrollbar (magic!) */ +} + .inner_editor_wrapper { max-height: 60%; overflow-x: hidden; @@ -534,12 +538,16 @@ li.ui-state-default { .spl_sortable { position: relative; - min-height: 0; + height: 100%; overflow: auto; flex: 1 100%; margin: 4px 0; padding: 0; + + display: flex; + flex-direction: column; + justify-content: center; } .spl_sortable .list-item-container { @@ -551,7 +559,6 @@ li.ui-state-default { color: white; text-align: center; - vertical-align: middle; font-size: 20px; } diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index ca84a1238..670ca444b 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -2627,13 +2627,15 @@ label span { } fieldset > legend { - font-size: 16px; - line-height: 140%; - background: #333; width: 100%; - margin: 0px; - padding: 0px; - border: 0px; + box-sizing: border-box; + + background: #333; + font-size: 16px; + line-height: 1em; + border: 0; + margin: 0; + padding: 10px 0 10px 10px; } fieldset.padded > legend { diff --git a/airtime_mvc/public/js/airtime/common/livechat.js b/airtime_mvc/public/js/airtime/common/livechat.js index d905913dd..11fa67163 100644 --- a/airtime_mvc/public/js/airtime/common/livechat.js +++ b/airtime_mvc/public/js/airtime/common/livechat.js @@ -22,7 +22,6 @@ $(document).ready(function() { var ifr = document.getElementById('livechat-compact-container'); if (ifr) { LC_API.on_chat_state_changed = function(data) { - console.log('Chat state changed to: ' + data.state); if (data.state == 'offline') { $('.wrapper').css('padding-bottom', 10); } else { diff --git a/airtime_mvc/public/js/airtime/library/_library.js b/airtime_mvc/public/js/airtime/library/_library.js index 86b5515f9..b0a85163f 100644 --- a/airtime_mvc/public/js/airtime/library/_library.js +++ b/airtime_mvc/public/js/airtime/library/_library.js @@ -842,8 +842,8 @@ var AIRTIME = (function(AIRTIME) { AIRTIME.library.dblClickAdd(data, data.ftype); }); - $libTable.find("tbody").on("mousedown", "tr", function(ev) { - var $tr = $(this), + $libTable.find("tbody").on("mousedown", "tr > td.library_checkbox", function(ev) { + var $tr = $(this).parent(), // Get the ID of the selected row $rowId = $tr.attr("id"); @@ -877,19 +877,53 @@ var AIRTIME = (function(AIRTIME) { $previouslySelected = $tr; }); - $libTable.find("tbody").on("click", "tr", function(ev) { - //ev.preventDefault(); + $libTable.find("tbody").on("mousedown", "tr > td:not(.library_checkbox)", function(ev) { + var $tr = $(this).parent(), + // Get the ID of the selected row + $rowId = $tr.attr("id"); + + if (ev.shiftKey && $previouslySelected !== undefined) { + if ($previouslySelected.attr("id") == $rowId) { + return; + } + + // If the selected row comes before the previously selected row, + // we want to select previous rows, otherwise we select next + if ($previouslySelected.prevAll("#" + $rowId).length !== 0) { + $previouslySelected.prevUntil($tr).each(function (i, el) { + mod.selectItem($(el)); + mod.checkItem($(el)); + }); + } else { + $previouslySelected.nextUntil($tr).each(function (i, el) { + mod.selectItem($(el)); + mod.checkItem($(el)); + }); + } + } else if (!ev.ctrlKey) { + AIRTIME.library.selectNone(); + } + + mod.selectItem($tr); + mod.checkItem($tr); + + // Remember this row so we can properly multiselect + $previouslySelected = $tr; + }); + + $libTable.find("tbody").on("click", "tr", function() { + var tr = $(this); if (flagForDeselection) { flagForDeselection = false; - mod.deselectItem($(this)); - mod.uncheckItem($(this)); + mod.deselectItem(tr); + mod.uncheckItem(tr); } else { - mod.checkItem($(this)); + mod.checkItem(tr); } }); - $libTable.find("thead").on("click", "th > input[type='checkbox']", function(ev) { + $libTable.find("thead").on("click", "th > input[type='checkbox']", function() { if ($(this).is(":checked")) { AIRTIME.library.selectCurrentPage(); $(this).prop("checked", true); diff --git a/airtime_mvc/public/js/airtime/library/_spl.js b/airtime_mvc/public/js/airtime/library/_spl.js index b39bb11a5..2d3f6f729 100644 --- a/airtime_mvc/public/js/airtime/library/_spl.js +++ b/airtime_mvc/public/js/airtime/library/_spl.js @@ -436,6 +436,8 @@ var AIRTIME = (function(AIRTIME){ * Should all be moved to builder.js eventually */ function buildNewTab(json) { + AIRTIME.library.selectNone(); + var tabId = $openTabs[json.type + json.id]; if (tabId !== undefined) { AIRTIME.showbuilder.switchTab($("#pl-tab-content-" + tabId), $("#pl-tab-" + tabId)); @@ -443,7 +445,7 @@ var AIRTIME = (function(AIRTIME){ } $tabCount++; - var wrapper = "
", + var wrapper = "
", t = $("#show_builder").append(wrapper).find("#pl-tab-content-" + $tabCount), pane = $(".editor_pane_wrapper:last"), name = json.type == "md" ? // file @@ -1250,6 +1252,7 @@ var AIRTIME = (function(AIRTIME){ } mod.fnAddItems = function(aItems, iAfter, sAddType) { + AIRTIME.library.selectNone(); var sUrl = baseUrl+"new-playlist/add-items"; oData = {"aItems": aItems, "afterItem": iAfter, "type": sAddType}; playlistRequest(sUrl, oData); diff --git a/airtime_mvc/public/js/airtime/showbuilder/_builder.js b/airtime_mvc/public/js/airtime/showbuilder/_builder.js index 85109488a..e23a6c5f8 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/_builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/_builder.js @@ -322,6 +322,7 @@ var AIRTIME = (function(AIRTIME){ }; mod.fnAdd = function(aMediaIds, aSchedIds) { + AIRTIME.library.selectNone(); mod.disableUI(); $.post(baseUrl+"showbuilder/schedule-add",