diff --git a/pandora/0xdb.jsonc b/pandora/0xdb.jsonc
index 20f5107d4..4f709fe57 100644
--- a/pandora/0xdb.jsonc
+++ b/pandora/0xdb.jsonc
@@ -528,11 +528,11 @@
],
"rightsLevel": {"member": 5, "staff": 4, "admin": 3},
"rightsLevels": [
- {"name": "Public", "color": [128, 255, 128], "description": "Everyone can play and download."},
- {"name": "Relaxed", "color": [192, 255, 128], "description": "Only friends, staff and admins can download."},
- {"name": "Regular", "color": [255, 255, 128], "description": "Only friends, staff and admins can play video."},
- {"name": "Restricted", "color": [255, 192, 128], "description": "Only friends, staff and admins can play clips."},
- {"name": "Private", "color": [255, 128, 128], "description": "Only staff and admins can see."}
+ {"name": "Public", "color": [128, 255, 128]},
+ {"name": "Relaxed", "color": [192, 255, 128]},
+ {"name": "Regular", "color": [255, 255, 128]},
+ {"name": "Restricted", "color": [255, 192, 128]},
+ {"name": "Private", "color": [255, 128, 128]}
],
"sendReferrer": false,
"site": {
@@ -627,6 +627,7 @@
"username": "",
"volumes": []
},
+ // fixme: this should include colors
"userLevels": ["guest", "member", "friend", "staff", "admin"],
"video": {
"download": false,
diff --git a/static/js/pandora/infoView.js b/static/js/pandora/infoView.js
index 699b6b093..9c492ee10 100644
--- a/static/js/pandora/infoView.js
+++ b/static/js/pandora/infoView.js
@@ -351,6 +351,8 @@ pandora.ui.infoView = function(data) {
$('
').css({height: '8px'}).appendTo($text);
+ pandora.createLinks($text);
+
['hue', 'saturation', 'lightness', 'volume'].forEach(function(key) {
$('
')
.css({marginBottom: '4px'})
@@ -359,47 +361,13 @@ pandora.ui.infoView = function(data) {
.appendTo($statistics);
});
- var rightsLevelCSS = getRightsLevelCSS(data.rightsLevel),
- $rightsLevel, $rightsLevelSelect, $rightsLevelDescription;
- if (canEdit) {
- $rightsLevel = $('
');
- $rightsLevelSelect = Ox.Select({
- items: pandora.site.rightsLevels.map(function(rightsLevel, i) {
- return {id: i, title: rightsLevel.name, checked: i == data.rightsLevel};
- }),
- width: 128
- })
- .css(Ox.extend({
- marginBottom: '4px'
- }, rightsLevelCSS))
- .bindEvent({
- change: function(event) {
- var rightsLevel = event.selected[0].id;
- $rightsLevelSelect.css(getRightsLevelCSS(rightsLevel));
- $rightsLevelDescription.html(pandora.site.rightsLevels[rightsLevel].description);
- pandora.api.edit({id: data.id, rightsLevel: rightsLevel}, function(result) {
- // ...
- });
- }
- })
- .appendTo($rightsLevel);
- $rightsLevelDescription = $('
')
- .css({})
- .html(pandora.site.rightsLevels[data.rightsLevel].description)
- .appendTo($rightsLevel)
- } else {
- $rightsLevel = $('
')
- .css(Ox.extend({
- paddingLeft: '3px',
- borderRadius: '4px'
- }, rightsLevelCSS))
- .html(pandora.site.rightsLevels[data.rightsLevel].name);
- }
+ var $rightsLevel = $('
');
$('
')
.css({marginBottom: '4px'})
.append(formatKey('Rights Level', true))
.append($rightsLevel)
.appendTo($statistics);
+ renderRightsLevel();
if (canEdit) {
$icon.bindEvent({
@@ -431,17 +399,100 @@ pandora.ui.infoView = function(data) {
}).join(', ');
}
+ function getCapabilityCSS(hasCapability) {
+ var colors = [[255, 128, 128], [128, 255, 128]];
+ return {
+ background: 'rgb(' + colors[+hasCapability].map(function(value) {
+ return pandora.user.ui.theme == 'classic'
+ ? value : value - 128;
+ }).join(', ') + ')',
+ color: pandora.user.ui.theme == 'classic'
+ ? 'rgb(64, 64, 64)' : 'rgb(192, 192, 192)'
+ };
+ }
+
function getRightsLevelCSS(rightsLevel) {
rightsLevel = pandora.site.rightsLevels[rightsLevel];
return {
background: 'rgb(' + rightsLevel.color.map(function(value) {
- return value - 128;
+ return pandora.user.ui.theme == 'classic'
+ ? value : value - 128;
}).join(', ') + ')',
- color: 'rgb(' + rightsLevel.color.join(', ') + ')'
+ color: pandora.user.ui.theme == 'classic'
+ ? 'rgb(64, 64, 64)' : 'rgb(192, 192, 192)'
};
}
- pandora.createLinks($text);
+ function getUserLevelCSS(userLevel) {
+ // FIXME: colors should be part of config
+ var colors = {
+ 'guest': [255, 128, 128],
+ 'member': [255, 255, 128],
+ 'friend': [128, 255, 128],
+ 'staff': [128, 255, 255],
+ 'admin': [128, 128, 255]
+ };
+ return {
+ background: 'rgb(' + colors[userLevel].map(function(value) {
+ return pandora.user.ui.theme == 'classic'
+ ? value : value - 128;
+ }).join(', ') + ')',
+ color: pandora.user.ui.theme == 'classic'
+ ? 'rgb(64, 64, 64)' : 'rgb(192, 192, 192)'
+ }
+ }
+
+ function renderCapabilities(rightsLevel) {
+ var capabilities = Ox.merge(
+ canEdit ? [{name: 'canSeeItem', symbol: 'View'}] : [],
+ [
+ {name: 'canPlayClips', symbol: 'PlayInToOut'},
+ {name: 'canPlayVideo', symbol: 'Play'},
+ {name: 'canDownloadVideo', symbol: 'Download'}
+ ]
+ ),
+ userLevels = canEdit ? pandora.site.userLevels : [pandora.user.level];
+ $capabilities.empty();
+ userLevels.forEach(function(userLevel) {
+ var $line = $('
')
+ .css({
+ height: '16px',
+ marginBottom: '4px'
+ })
+ .appendTo($capabilities);
+ Ox.Label({
+ textAlign: 'center',
+ title: canEdit ? Ox.toTitleCase(userLevel) : pandora.site.rightsLevels[data.rightsLevel].name,
+ width: canEdit ? 48 : 68
+ })
+ .css(Ox.extend(
+ {
+ float: 'left',
+ paddingTop: '2px',
+ height: '12px',
+ fontSize: '8px'
+ },
+ canEdit ? getUserLevelCSS(userLevel) : getRightsLevelCSS(data.rightsLevel)
+ ))
+ .appendTo($line);
+ capabilities.forEach(function(capability) {
+ var hasCapability = pandora.site.capabilities[capability.name][userLevel] >= rightsLevel;
+ Ox.Button({
+ tooltip: (canEdit ? Ox.toTitleCase(userLevel) : 'You') + ' '
+ + (hasCapability ? 'can' : 'can\'t') + ' '
+ + Ox.map(Ox.toSlashes(capability.name).split('/'), function(word, i) {
+ return i == 0 ? null : word.toLowerCase();
+ }).join(' '),
+ title: capability.symbol,
+ type: 'image'
+ })
+ .css(Ox.extend({
+ marginLeft: '4px'
+ }, getCapabilityCSS(hasCapability)))
+ .appendTo($line);
+ });
+ });
+ }
function renderList() {
pandora.api.get({
@@ -545,6 +596,36 @@ pandora.ui.infoView = function(data) {
}
+ function renderRightsLevel() {
+ var $capabilites, $rightsLevelSelect,
+ rightsLevelCSS = getRightsLevelCSS(data.rightsLevel);
+ $rightsLevel.empty();
+ if (canEdit) {
+ $rightsLevelSelect = Ox.Select({
+ items: pandora.site.rightsLevels.map(function(rightsLevel, i) {
+ return {id: i, title: rightsLevel.name, checked: i == data.rightsLevel};
+ }),
+ width: 128
+ })
+ .css(Ox.extend({
+ marginBottom: '4px'
+ }, rightsLevelCSS))
+ .bindEvent({
+ change: function(event) {
+ var rightsLevel = event.selected[0].id;
+ $rightsLevelSelect.css(getRightsLevelCSS(rightsLevel));
+ renderCapabilities(rightsLevel);
+ pandora.api.edit({id: data.id, rightsLevel: rightsLevel}, function(result) {
+ // ...
+ });
+ }
+ })
+ .appendTo($rightsLevel);
+ }
+ $capabilities = $('
').appendTo($rightsLevel);
+ renderCapabilities(data.rightsLevel);
+ }
+
function toggleIconSize() {
iconSize = iconSize == 256 ? 512 : 256;
iconWidth = iconRatio > 1 ? iconSize : Math.round(iconSize * iconRatio);
@@ -592,6 +673,10 @@ pandora.ui.infoView = function(data) {
pandora.user.level == 'admin' && $list.replaceWith($list = renderList());
};
+ that.renderRightsLevel = function() {
+ renderRightsLevel();
+ };
+
that.resize = function() {
var height = pandora.$ui.contentPanel.size(1);
$list && $list.css({height: height + 'px'});
diff --git a/static/js/pandora/menu.js b/static/js/pandora/menu.js
index 3aba4591b..216aeb61f 100644
--- a/static/js/pandora/menu.js
+++ b/static/js/pandora/menu.js
@@ -174,6 +174,9 @@ pandora.ui.mainMenu = function() {
} else if (data.id == 'settheme') {
Ox.Theme(value);
pandora.UI.set('theme', value);
+ if (ui.item && ui.itemView == 'info') {
+ pandora.$ui.item.renderRightsLevel();
+ }
} else if (data.id == 'showsiteposter') {
pandora.UI.set('showSitePoster', data.checked)
} else if (Ox.startsWith(data.id, 'sortgroup')) {
diff --git a/static/js/pandora/preferencesDialog.js b/static/js/pandora/preferencesDialog.js
index 23dfcffba..e8a6217da 100644
--- a/static/js/pandora/preferencesDialog.js
+++ b/static/js/pandora/preferencesDialog.js
@@ -55,7 +55,15 @@ pandora.ui.preferencesDialog = function() {
pandora.api.editPreferences({email: data.value});
}
}
- })
+ }),
+ Ox.Input({
+ disabled: true,
+ id: 'level',
+ label: 'Level',
+ labelWidth: 120,
+ value: Ox.toTitleCase(pandora.user.level),
+ width: 320
+ })
]
})
.css({position: 'absolute', left: '96px', top: '16px'})
diff --git a/static/js/pandora/usersDialog.js b/static/js/pandora/usersDialog.js
index fcd56b119..ee8957c9a 100644
--- a/static/js/pandora/usersDialog.js
+++ b/static/js/pandora/usersDialog.js
@@ -3,12 +3,13 @@ pandora.ui.usersDialog = function() {
var height = Math.round((window.innerHeight - 48) * 0.9),
width = Math.round(window.innerWidth * 0.9),
+ // FIXME: colors should be part of config
levelColors = {
- 'guest': [64, 0, 0],
- 'member': [64, 64, 0],
- 'friend': [0, 64, 0],
- 'staff': [0, 64, 64],
- 'admin': [0, 0, 64]
+ 'guest': [255, 128, 128],
+ 'member': [255, 255, 128],
+ 'friend': [128, 255, 128],
+ 'staff': [128, 255, 255],
+ 'admin': [128, 128, 255]
},
numberOfUsers = 0,
userLevels = ['member', 'friend', 'staff', 'admin'],
@@ -116,10 +117,10 @@ pandora.ui.usersDialog = function() {
align: 'center',
format: function(value) {
var dark = 'rgb(' + levelColors[value].map(function(color) {
- return color.toString()
+ return (color - 128).toString();
}).join(', ') + ')',
light = 'rgb(' + levelColors[value].map(function(color) {
- return (color + 128).toString()
+ return color.toString()
}).join(', ') + ')';
return $('
')
.css({