diff --git a/static/js/pandora/clipList.js b/static/js/pandora/clipList.js index ffda5010..113f7016 100644 --- a/static/js/pandora/clipList.js +++ b/static/js/pandora/clipList.js @@ -215,9 +215,11 @@ pandora.ui.clipList = function(videoRatio) { //*/ } !ui.item && pandora.UI.set('listSelection', [item]); + pandora.$ui.mainMenu.enableItem('findsimilar'); } else { $('.OxSelectedVideo').removeClass('OxSelectedVideo'); !ui.item && pandora.UI.set('listSelection', []); + pandora.$ui.mainMenu.disableItem('findsimilar'); } }, pandora_itemsort: function(data) { diff --git a/static/js/pandora/list.js b/static/js/pandora/list.js index c3b64e0d..518a8b67 100644 --- a/static/js/pandora/list.js +++ b/static/js/pandora/list.js @@ -359,7 +359,7 @@ pandora.ui.list = function() { } else if (view == 'calendars') { that = Ox.Element().css({margin: '16px'}).html(view + ' results view still missing.'); } else if (view == 'clip') { - that = pandora.ui.clipList(); + that = pandora.$ui.clipList = pandora.ui.clipList(); } else if (view == 'video') { that = pandora.ui.clipPlayer(); } else if (['map', 'calendar'].indexOf(view) > -1) { diff --git a/static/js/pandora/menu.js b/static/js/pandora/menu.js index 2e65f6e2..5892bf9d 100644 --- a/static/js/pandora/menu.js +++ b/static/js/pandora/menu.js @@ -130,7 +130,7 @@ pandora.ui.mainMenu = function() { ] }, { id: 'advancedfind', title: 'Advanced Find...', keyboard: 'shift control f' }, {}, - { id: 'findsimilar', title: 'Find Similar Clips...', disabled: true, keyboard: 'alt control f'} + { id: 'findsimilar', title: 'Find Similar Clips...', keyboard: 'alt control f', disabled: !pandora.getItemIdAndPosition() } ] }, { id: 'dataMenu', title: 'Data', items: [ { id: 'titles', title: 'Manage Titles...', disabled: !pandora.site.capabilities.canManageTitlesAndNames[pandora.user.level] }, @@ -257,12 +257,13 @@ pandora.ui.mainMenu = function() { } }, click: function(data) { - if ([].concat( - ['home', 'software'], + if ([ + 'home', 'software', 'signup', 'signin', 'signout', + 'preferences', 'tv', 'help' + ].concat( pandora.site.sitePages.map(function(page) { return page.id; - }), - ['signup', 'signin', 'signout', 'preferences', 'tv', 'help'] + }) ).indexOf(data.id) > -1) { pandora.UI.set({page: data.id}); } else if (data.id == 'upload') { @@ -292,9 +293,9 @@ pandora.ui.mainMenu = function() { } else if (data.id == 'fullscreen') { pandora.$ui.player.options({fullscreen: true}); } else if (data.id == 'advancedfind') { - if (!pandora.hasDialogOrScreen()) { - pandora.$ui.filterDialog = pandora.ui.filterDialog().open(); - } + pandora.$ui.filterDialog = pandora.ui.filterDialog().open(); + } else if (data.id == 'findsimilar') { + pandora.$ui.sequencesDialog = pandora.ui.sequencesDialog().open(); } else if (data.id == 'titles') { (pandora.$ui.titlesDialog || ( pandora.$ui.titlesDialog = pandora.ui.titlesDialog() @@ -345,7 +346,9 @@ pandora.ui.mainMenu = function() { } }, key_alt_control_f: function() { - // ... + if (!pandora.hasDialogOrScreen() && pandora.getItemIdAndPosition()) { + pandora.$ui.sequencesDialog = pandora.ui.sequencesDialog().open(); + } }, key_backtick: function() { changeFocus(1); @@ -470,9 +473,17 @@ pandora.ui.mainMenu = function() { that[action]('showtimeline'); that[action]('fullscreen'); } + that[ + pandora.getItemIdAndPosition() ? 'enableItem' : 'disableItem' + ]('findsimilar'); }, pandora_listselection: function(data) { - that[data.value.length ? 'enableItem' : 'disableItem']('newlistfromselection'); + that[ + data.value.length ? 'enableItem' : 'disableItem' + ]('newlistfromselection'); + that[ + pandora.getItemIdAndPosition() ? 'enableItem' : 'disableItem' + ]('findsimilar'); }, pandora_listsort: function(data) { that.checkItem('sortMenu_sortitems_' + data.value[0].key); @@ -485,6 +496,9 @@ pandora.ui.mainMenu = function() { if (pandora.isClipView() != pandora.isClipView(data.previousValue)) { that.replaceMenu('sortMenu', getSortMenu()); } + that[ + pandora.getItemIdAndPosition() ? 'enableItem' : 'disableItem' + ]('findsimilar'); }, pandora_showannotations: function(data) { that.setItemTitle('showannotations', (data.value ? 'Hide' : 'Show') + ' Annotations'); diff --git a/static/js/pandora/navigationView.js b/static/js/pandora/navigationView.js index 6171c615..cb129711 100644 --- a/static/js/pandora/navigationView.js +++ b/static/js/pandora/navigationView.js @@ -227,7 +227,6 @@ pandora.ui.navigationView = function(type, videoRatio) { }); type == 'map' && pandora.UI.set({mapSelection: id ? $element.options('find') : ''}); } - Ox.Log('', 'MAP SELECTION', id, data) } function updateStatusbar(items) { diff --git a/static/js/pandora/sequencesDialog.js b/static/js/pandora/sequencesDialog.js index 2e398ed3..71469bda 100644 --- a/static/js/pandora/sequencesDialog.js +++ b/static/js/pandora/sequencesDialog.js @@ -2,9 +2,10 @@ 'use strict'; -pandora.ui.sequencesDialog = function(id, position) { +pandora.ui.sequencesDialog = function() { - var dialogHeight = Math.round((window.innerHeight - 48) * 0.9), + var data = pandora.getItemIdAndPosition(), + dialogHeight = Math.round((window.innerHeight - 48) * 0.9), dialogWidth = Math.round(window.innerWidth * 0.9), mode = pandora.user.ui.sequenceMode, sidebarWidth = 144, @@ -22,7 +23,7 @@ pandora.ui.sequencesDialog = function(id, position) { ], orientation: 'horizontal' }); - pandora.api.getSequence({id: id, mode: mode, position: position}, function(result) { + pandora.api.getSequence({id: data.id, mode: mode, position: data.position}, function(result) { // result.data: {hash, in, out} var fixedRatio = 16/9, hash = result.data.hash, diff --git a/static/js/pandora/utils.js b/static/js/pandora/utils.js index 3f743f81..7549fed6 100644 --- a/static/js/pandora/utils.js +++ b/static/js/pandora/utils.js @@ -631,6 +631,48 @@ pandora.getItemFind = function(find) { return itemFind; }; +pandora.getItemIdAndPosition = function() { + var selected, ret, ui = pandora.user.ui; + function getIdAndPositionByClipId(clipId) { + var fps = 25, split = clipId.replace('-', '/').split('/'); + return { + id: split[0], + position: Math.ceil(parseFloat(split[1]) * fps) / fps + }; + } + function getIdAndPositionByItemId(itemId) { + return { + id: itemId, + position: ui.videoPoints[itemId] ? ui.videoPoints[itemId].position : 0 + }; + } + if (!ui.item) { + if ( + ui.listView == 'timelines' + && (selected = ui.listSelection).length == 1 + ) { + ret = getIdAndPositionByItemId(selected[0]); + } else if ( + ['clip', 'map', 'calendar'].indexOf(ui.listView) > -1 + && pandora.$ui.clipList + && (selected = pandora.$ui.clipList.options('selected')).length == 1 + ) { + ret = getIdAndPositionByClipId(selected[0]); + } + } else { + if (['player', 'editor', 'timeline'].indexOf(ui.itemView) > -1) { + ret = getIdAndPositionByItemId(ui.item); + } else if ( + ['clips', 'map', 'calendar'].indexOf(ui.itemView) > -1 + && pandora.$ui.clipList + && (selected = pandora.$ui.clipList.options('selected')).length == 1 + ) { + ret = getIdAndPositionByClipId(selected[0]); + } + } + return ret; +} + pandora.getListData = function(list) { var data = {}, folder; list = Ox.isUndefined(list) ? pandora.user.ui._list : list;