diff --git a/pandora/0xdb.jsonc b/pandora/0xdb.jsonc index 10543cff7..40d1961a9 100644 --- a/pandora/0xdb.jsonc +++ b/pandora/0xdb.jsonc @@ -18,6 +18,7 @@ "canPlayClips": {"guest": 1, "member": 2, "friend": 3, "staff": 4, "admin": 4}, "canPlayVideo": {"guest": 0, "member": 1, "friend": 3, "staff": 4, "admin": 4}, "canReloadMetadata": {"staff": true, "admin": true}, + "canSeeDebugMenu": {"admin": true}, "canSeeFiles": {"staff": true, "admin": true}, "canSeeItem": {"guest": 2, "member": 2, "friend": 3, "staff": 4, "admin": 4}, "canSeeExtraItemViews": {"friend": true, "staff": true, "admin": true} diff --git a/static/js/pandora/ui/infoView.js b/static/js/pandora/ui/infoView.js index cb1b3b718..387099611 100644 --- a/static/js/pandora/ui/infoView.js +++ b/static/js/pandora/ui/infoView.js @@ -355,7 +355,7 @@ pandora.ui.infoView = function(data) { $('
') .css({marginBottom: '4px'}) .append(formatKey(key, true)) - .append(Ox.formatColor(data[key], key)) + .append(Ox.formatColor(data[key] || 0, key)) .appendTo($statistics); }); diff --git a/static/js/pandora/ui/menu.js b/static/js/pandora/ui/menu.js index 6cc05d861..53fdfc19a 100644 --- a/static/js/pandora/ui/menu.js +++ b/static/js/pandora/ui/menu.js @@ -12,136 +12,142 @@ pandora.ui.mainMenu = function() { }) ], id: 'mainMenu', - menus: [ - { id: pandora.site.site.id + 'Menu', title: pandora.site.site.name, items: [ - { id: 'home', title: 'Home' }, - {}, - { id: 'about', title: 'About ' + pandora.site.site.name }, - { id: 'news', title: pandora.site.site.name + ' News' }, - { id: 'tour', title: 'Take a Tour' }, - { id: 'faq', title: 'Frequently Asked Questions' }, - { id: 'terms', title: 'Terms of Service' }, - { id: 'contact', title: 'Contact ' + pandora.site.site.name }, - {}, - { id: 'software', title: 'Software' } - ] }, - { id: 'userMenu', title: 'User', items: [ - { id: 'username', title: 'User: ' + (isGuest ? 'not logged in' : pandora.user.username), disabled: true }, - {}, - { id: 'preferences', title: 'Preferences...', disabled: isGuest, keyboard: 'control ,' }, - { id: 'archives', title: 'Archives...', disabled: isGuest }, - {}, - { id: 'signup', title: 'Sign Up...', disabled: !isGuest }, - isGuest ? { id: 'signin', title: 'Sign In...' } - : { id: 'signout', title: 'Sign Out...'} - ] }, - getListMenu(), - { id: 'editMenu', title: 'Edit', items: [ - { id: 'undo', title: 'Undo', disabled: true, keyboard: 'control z' }, - { id: 'redo', title: 'Redo', disabled: true, keyboard: 'shift control z' }, - {}, - { id: 'cut', title: 'Cut', disabled: true, keyboard: 'control x' }, - { id: 'copy', title: 'Copy', disabled: true, keyboard: 'control c' }, - { id: 'paste', title: 'Paste', disabled: true, keyboard: 'control v' }, - { id: 'delete', title: 'Delete', disabled: true, keyboard: 'delete' }, - {}, - { id: 'selectall', title: 'Select All', disabled: true, keyboard: 'control a' }, - { id: 'selectnone', title: 'Select None', disabled: true, keyboard: 'shift control a' }, - { id: 'invertselection', title: 'Invert Selection', disabled: true, keyboard: 'alt control a' } - ] }, - { id: 'viewMenu', title: 'View', items: [ - { id: 'movies', title: 'View ' + pandora.site.itemName.plural, items: [ - { group: 'viewmovies', min: 1, max: 1, items: pandora.site.listViews.map(function(view) { - return Ox.extend({ - checked: ui.listView == view.id, - }, view); - }) }, - ]}, - { id: 'icons', title: 'Icons', items: [ - { group: 'viewicons', min: 1, max: 1, items: ['posters', 'frames'].map(function(icons) { - return {id: icons, title: Ox.toTitleCase(icons), checked: ui.icons == icons}; - }) }, + menus: Ox.merge( + [ + { id: pandora.site.site.id + 'Menu', title: pandora.site.site.name, items: [ + { id: 'home', title: 'Home' }, {}, - { id: 'showsiteposter', title: 'Always Show ' + pandora.site.site.name + ' Poster', checked: ui.showSitePoster } - ] }, - { id: 'columns', title: 'Columns', items: [ - { id: 'loadcolumns', title: 'Load Layout...' }, - { id: 'savecolumns', title: 'Save Layout...' }, + { id: 'about', title: 'About ' + pandora.site.site.name }, + { id: 'news', title: pandora.site.site.name + ' News' }, + { id: 'tour', title: 'Take a Tour' }, + { id: 'faq', title: 'Frequently Asked Questions' }, + { id: 'terms', title: 'Terms of Service' }, + { id: 'contact', title: 'Contact ' + pandora.site.site.name }, {}, - { id: 'resetcolumns', title: 'Reset Layout' } - ]}, - {}, - { id: 'openmovie', title: ['Open ' + pandora.site.itemName.singular, 'Open ' + pandora.site.itemName.plural], items: [ - { group: 'itemview', min: 1, max: 1, items: pandora.site.itemViews.map(function(view) { - return Ox.extend({ - checked: ui.itemView == view.id, - }, view); - }) }, - ]}, - { id: 'openvideo', title: 'Open Video Links', items: [ - { group: 'videoview', min: 1, max: 1, items: ['player', 'editor'].map(function(view) { - return {id: view, title: Ox.toTitleCase(view), checked: ui.videoView == view}; - }) } + { id: 'software', title: 'Software' } ] }, - {}, - { id: 'groups', title: 'Groups', items: [ - { group: 'groups', min: 5, max: 5, items: pandora.site.groups.map(function(group) { - return Ox.extend({ - checked: Ox.getPositionById(ui.groups, group.id) > -1 - }, group); - }) }, + { id: 'userMenu', title: 'User', items: [ + { id: 'username', title: 'User: ' + (isGuest ? 'not logged in' : pandora.user.username), disabled: true }, {}, - { id: 'resetgroups', title: 'Reset Groups' } + { id: 'preferences', title: 'Preferences...', disabled: isGuest, keyboard: 'control ,' }, + { id: 'archives', title: 'Archives...', disabled: isGuest }, + {}, + { id: 'signup', title: 'Sign Up...', disabled: !isGuest }, + isGuest ? { id: 'signin', title: 'Sign In...' } + : { id: 'signout', title: 'Sign Out...'} ] }, - {}, - { id: 'showsidebar', title: (ui.showSidebar ? 'Hide' : 'Show') + ' Sidebar', keyboard: 'shift s' }, - { id: 'showinfo', title: (ui.showInfo ? 'Hide' : 'Show') + ' Info', keyboard: 'shift i' }, - { id: 'showgroups', title: (ui.showGroups ? 'Hide' : 'Show') + ' Groups', disabled: !!ui.item, keyboard: 'shift g' }, - { id: 'showbrowser', title: (ui.showBrowser ? 'Hide' : 'Show') + ' ' + pandora.site.itemName.singular + ' Browser', disabled: !ui.item, keyboard: 'shift b' }, - { id: 'showannotations', title: (ui.showAnnotations ? 'Hide' : 'Show') + ' Annotations', disabled: !ui.item || ['timeline', 'video'].indexOf(ui.itemView) == -1, keyboard: 'shift a' }, - {}, - { id: 'theme', title: 'Theme', items: [ - { group: 'settheme', min: 1, max: 1, items: [ - { id: 'classic', title: 'Classic', checked: ui.theme == 'classic'}, - { id: 'modern', title: 'Modern', checked: ui.theme == 'modern' } - ]} + getListMenu(), + { id: 'editMenu', title: 'Edit', items: [ + { id: 'undo', title: 'Undo', disabled: true, keyboard: 'control z' }, + { id: 'redo', title: 'Redo', disabled: true, keyboard: 'shift control z' }, + {}, + { id: 'cut', title: 'Cut', disabled: true, keyboard: 'control x' }, + { id: 'copy', title: 'Copy', disabled: true, keyboard: 'control c' }, + { id: 'paste', title: 'Paste', disabled: true, keyboard: 'control v' }, + { id: 'delete', title: 'Delete', disabled: true, keyboard: 'delete' }, + {}, + { id: 'selectall', title: 'Select All', disabled: true, keyboard: 'control a' }, + { id: 'selectnone', title: 'Select None', disabled: true, keyboard: 'shift control a' }, + { id: 'invertselection', title: 'Invert Selection', disabled: true, keyboard: 'alt control a' } + ] }, + { id: 'viewMenu', title: 'View', items: [ + { id: 'movies', title: 'View ' + pandora.site.itemName.plural, items: [ + { group: 'viewmovies', min: 1, max: 1, items: pandora.site.listViews.map(function(view) { + return Ox.extend({ + checked: ui.listView == view.id, + }, view); + }) }, + ]}, + { id: 'icons', title: 'Icons', items: [ + { group: 'viewicons', min: 1, max: 1, items: ['posters', 'frames'].map(function(icons) { + return {id: icons, title: Ox.toTitleCase(icons), checked: ui.icons == icons}; + }) }, + {}, + { id: 'showsiteposter', title: 'Always Show ' + pandora.site.site.name + ' Poster', checked: ui.showSitePoster } + ] }, + { id: 'columns', title: 'Columns', items: [ + { id: 'loadcolumns', title: 'Load Layout...' }, + { id: 'savecolumns', title: 'Save Layout...' }, + {}, + { id: 'resetcolumns', title: 'Reset Layout' } + ]}, + {}, + { id: 'openmovie', title: ['Open ' + pandora.site.itemName.singular, 'Open ' + pandora.site.itemName.plural], items: [ + { group: 'itemview', min: 1, max: 1, items: pandora.site.itemViews.map(function(view) { + return Ox.extend({ + checked: ui.itemView == view.id, + }, view); + }) }, + ]}, + { id: 'openvideo', title: 'Open Video Links', items: [ + { group: 'videoview', min: 1, max: 1, items: ['player', 'editor'].map(function(view) { + return {id: view, title: Ox.toTitleCase(view), checked: ui.videoView == view}; + }) } + ] }, + {}, + { id: 'groups', title: 'Groups', items: [ + { group: 'groups', min: 5, max: 5, items: pandora.site.groups.map(function(group) { + return Ox.extend({ + checked: Ox.getPositionById(ui.groups, group.id) > -1 + }, group); + }) }, + {}, + { id: 'resetgroups', title: 'Reset Groups' } + ] }, + {}, + { id: 'showsidebar', title: (ui.showSidebar ? 'Hide' : 'Show') + ' Sidebar', keyboard: 'shift s' }, + { id: 'showinfo', title: (ui.showInfo ? 'Hide' : 'Show') + ' Info', keyboard: 'shift i' }, + { id: 'showgroups', title: (ui.showGroups ? 'Hide' : 'Show') + ' Groups', disabled: !!ui.item, keyboard: 'shift g' }, + { id: 'showbrowser', title: (ui.showBrowser ? 'Hide' : 'Show') + ' ' + pandora.site.itemName.singular + ' Browser', disabled: !ui.item, keyboard: 'shift b' }, + { id: 'showannotations', title: (ui.showAnnotations ? 'Hide' : 'Show') + ' Annotations', disabled: !ui.item || ['timeline', 'video'].indexOf(ui.itemView) == -1, keyboard: 'shift a' }, + {}, + { id: 'theme', title: 'Theme', items: [ + { group: 'settheme', min: 1, max: 1, items: [ + { id: 'classic', title: 'Classic', checked: ui.theme == 'classic'}, + { id: 'modern', title: 'Modern', checked: ui.theme == 'modern' } + ]} + ] } + ]}, + getSortMenu(), + { id: 'findMenu', title: 'Find', items: [ + { id: 'find', title: 'Find', items: [ + { group: 'find', min: 1, max: 1, items: pandora.site.findKeys.map(function(key, i) { + var index = ui._findState.index; + return Ox.extend({ + checked: index > -1 && ui.find.conditions[index].key + ? ui.find.conditions[index].key == key.id + : key.id == 'all' + }, key); + }) } + ] }, + { id: 'advancedfind', title: 'Advanced Find...', keyboard: 'shift control f' } + ] }, + { id: 'dataMenu', title: 'Data', items: [ + { id: 'titles', title: 'Manage Titles...', disabled: !isAdmin }, + { id: 'names', title: 'Manage Names...', disabled: !isAdmin }, + {}, + { id: 'places', title: 'Manage Places...', disabled: isGuest }, + { id: 'events', title: 'Manage Events...', disabled: isGuest }, + {}, + { id: 'users', title: 'Manage Users...', disabled: !isAdmin }/*, + { id: 'lists', title: 'Manage Lists...', disabled: !isAdmin }, + {}, + { id: 'news', title: 'Manage News...', disabled: !isAdmin }, + { id: 'tour', title: 'Manage Tour...', disabled: !isAdmin }*/ + ] }, + { id: 'helpMenu', title: 'Help', items: [ + { id: 'help', title: pandora.site.site.name + ' Help', keyboard: 'shift ?' } ] } - ]}, - getSortMenu(), - { id: 'findMenu', title: 'Find', items: [ - { id: 'find', title: 'Find', items: [ - { group: 'find', min: 1, max: 1, items: pandora.site.findKeys.map(function(key, i) { - var index = ui._findState.index; - return Ox.extend({ - checked: index > -1 && ui.find.conditions[index].key - ? ui.find.conditions[index].key == key.id - : key.id == 'all' - }, key); - }) } - ] }, - { id: 'advancedfind', title: 'Advanced Find...', keyboard: 'shift control f' } - ] }, - { id: 'dataMenu', title: 'Data', items: [ - { id: 'titles', title: 'Manage Titles...', disabled: !isAdmin }, - { id: 'names', title: 'Manage Names...', disabled: !isAdmin }, - {}, - { id: 'places', title: 'Manage Places...', disabled: isGuest }, - { id: 'events', title: 'Manage Events...', disabled: isGuest }, - {}, - { id: 'users', title: 'Manage Users...', disabled: !isAdmin }/*, - { id: 'lists', title: 'Manage Lists...', disabled: !isAdmin }, - {}, - { id: 'news', title: 'Manage News...', disabled: !isAdmin }, - { id: 'tour', title: 'Manage Tour...', disabled: !isAdmin }*/ - ] }, - { id: 'helpMenu', title: 'Help', items: [ - { id: 'help', title: pandora.site.site.name + ' Help', keyboard: 'shift ?' } - ] }, - { id: 'debugMenu', title: 'Debug', items: [ - { id: 'clearcache', title: 'Clear cache'}, - { id: 'resetui', title: 'Reset UI Settings'} - ] } - ] + ], + pandora.site.capabilities.canSeeDebugMenu[pandora.user.level] + ? [ + { id: 'debugMenu', title: 'Debug', items: [ + { id: 'clearcache', title: 'Clear cache'}, + { id: 'resetui', title: 'Reset UI Settings'} + ] } + ] + : [] + ) }) .bindEvent({ change: function(data) {