diff --git a/pandora/app/config.py b/pandora/app/config.py
index 07da58495..081479c2f 100644
--- a/pandora/app/config.py
+++ b/pandora/app/config.py
@@ -79,7 +79,7 @@ def load_config():
#add missing defaults
for section in (
- 'capabilities', 'cantPlay', 'itemName', 'media', 'posters',
+ 'capabilities', 'cantPlay', 'itemName', 'itemTitleKeys', 'media', 'posters',
'site', 'tv', 'user.ui', 'user.ui.part', 'user.ui.showFolder',
'menuExtras', 'languages'
):
diff --git a/pandora/config.0xdb.jsonc b/pandora/config.0xdb.jsonc
index ed408d4f6..aef25e46d 100644
--- a/pandora/config.0xdb.jsonc
+++ b/pandora/config.0xdb.jsonc
@@ -620,6 +620,7 @@
"plural": "Movies"
},
"itemRequiresVideo": true,
+ "itemTitleKeys": ["title", "director", "year"],
"itemViews": [
{"id": "info", "title": "Info"},
{"id": "player", "title": "Player"},
diff --git a/pandora/config.indiancinema.jsonc b/pandora/config.indiancinema.jsonc
index 33dd755ae..2a846557e 100644
--- a/pandora/config.indiancinema.jsonc
+++ b/pandora/config.indiancinema.jsonc
@@ -636,6 +636,7 @@
"plural": "Movies"
},
"itemRequiresVideo": false,
+ "itemTitleKeys": ["title", "director", "year"],
"itemViews": [
{"id": "info", "title": "Info"},
{"id": "documents", "title": "Documents"},
diff --git a/pandora/config.padma.jsonc b/pandora/config.padma.jsonc
index 6062c82fb..07fbfd1cd 100644
--- a/pandora/config.padma.jsonc
+++ b/pandora/config.padma.jsonc
@@ -515,6 +515,7 @@
"plural": "Videos"
},
"itemRequiresVideo": true,
+ "itemTitleKeys": ["title", "director", "year"],
"itemViews": [
{"id": "info", "title": "Info"},
{"id": "player", "title": "Player"},
diff --git a/pandora/config.pandora.jsonc b/pandora/config.pandora.jsonc
index b45cb96e3..05b82b30f 100644
--- a/pandora/config.pandora.jsonc
+++ b/pandora/config.pandora.jsonc
@@ -435,6 +435,7 @@
"plural": "Videos"
},
"itemRequiresVideo": true,
+ "itemTitleKeys": ["title", "director", "year"],
"itemViews": [
{"id": "info", "title": "Info"},
{"id": "player", "title": "Player"},
diff --git a/static/js/browser.js b/static/js/browser.js
index d928cb5f7..6759820d5 100644
--- a/static/js/browser.js
+++ b/static/js/browser.js
@@ -105,7 +105,7 @@ pandora.ui.browser = function() {
height: ratio <= 1 ? size : size / ratio,
id: data.id,
info: info,
- title: data.title + (data.director && data.director.length ? ' (' + data.director.join(', ') + ')' : ''),
+ title: pandora.getItemTitle(data),
url: url,
width: ratio >= 1 ? size : size * ratio
};
@@ -115,7 +115,7 @@ pandora.ui.browser = function() {
query: pandora.user.ui.find
}), callback);
},
- keys: ['director', 'id', 'modified', 'posterRatio', 'title', 'year'],
+ keys: ['id', 'modified', 'posterRatio'].concat(pandora.site.itemTitleKeys),
max: 1,
min: 1,
orientation: 'horizontal',
diff --git a/static/js/editPanel.js b/static/js/editPanel.js
index db9761558..d2776bdb6 100644
--- a/static/js/editPanel.js
+++ b/static/js/editPanel.js
@@ -94,7 +94,7 @@ pandora.ui.editPanel = function(isEmbed) {
editable: edit.type == 'static' && edit.editable,
enableSubtitles: ui.videoSubtitles,
formatTitle: function() {
- return pandora.getItemTitle(Ox.last(arguments));
+ return pandora.getItemTitle(Ox.last(arguments), true);
},
fullscreen: false,
getClipImageURL: function(id, width, height) {
diff --git a/static/js/embedGrid.js b/static/js/embedGrid.js
index dc02e2124..8d4304817 100644
--- a/static/js/embedGrid.js
+++ b/static/js/embedGrid.js
@@ -40,7 +40,7 @@ pandora.ui.embedGrid = function() {
height: Math.round(ratio <= 1 ? size : size / ratio),
id: data.id,
info: info,
- title: data.title + (data.director && data.director.length ? ' (' + data.director.join(', ') + ')' : ''),
+ title: pandora.getItemTitle(data),
url: url,
width: Math.round(ratio >= 1 ? size : size * ratio)
};
@@ -51,7 +51,7 @@ pandora.ui.embedGrid = function() {
}), callback);
return Ox.clone(data, true);
},
- keys: ['director', 'id', 'modified', 'posterRatio', 'title', 'year'],
+ keys: ['id', 'modified', 'posterRatio'].concat(pandora.site.itemTitleKeys),
max: 1,
selected: ui.listSelection,
size: 128,
@@ -125,4 +125,4 @@ pandora.ui.embedGrid = function() {
return that;
-};
\ No newline at end of file
+};
diff --git a/static/js/getItemTitle.js b/static/js/getItemTitle.js
new file mode 100644
index 000000000..286036c6a
--- /dev/null
+++ b/static/js/getItemTitle.js
@@ -0,0 +1,13 @@
+'use strict';
+
+pandora.getItemTitle = function(itemData, includeYear) {
+ return (itemData.title || Ox._('Untitled')) + (
+ Ox.len(itemData.director) || (includeYear && itemData.year)
+ ? ' (' + (
+ Ox.len(itemData.director)
+ ? itemData.director
+ : [Ox._('Unknown Director')]
+ ).join(', ') + ')'
+ : ''
+ ) + (includeYear && itemData.year ? ' ' + itemData.year : '')
+};
diff --git a/static/js/info.js b/static/js/info.js
index a87e25938..27d82251a 100644
--- a/static/js/info.js
+++ b/static/js/info.js
@@ -80,7 +80,7 @@ pandora.ui.info = function() {
that.append(pandora.$ui.listInfo = pandora.ui.listInfo());
previousView == 'video' && resizeInfo();
} else if (view == 'poster') {
- pandora.api.get({id: id, keys: ['director', 'modified', 'posterRatio', 'title']}, function(result) {
+ pandora.api.get({id: id, keys: ['modified', 'posterRatio'].concat(pandora.site.itemTitleKeys)}, function(result) {
var ratio = result.data.posterRatio,
height = pandora.getInfoHeight(true);
emptyInfo();
@@ -379,11 +379,7 @@ pandora.ui.posterInfo = function(data) {
textOverflow: 'ellipsis',
overflow: 'hidden'
})
- .html(
- data.title + (
- Ox.len(data.director) ? ' (' + data.director.join(', ') + ')' : ''
- )
- ),
+ .html(pandora.getItemTitle(data)),
that = Ox.SplitPanel({
elements: [
{
diff --git a/static/js/item.js b/static/js/item.js
index a8102c324..107b84bac 100644
--- a/static/js/item.js
+++ b/static/js/item.js
@@ -14,10 +14,10 @@ pandora.ui.item = function() {
id: pandora.user.ui.item,
keys: isVideoView ? [
'audioTracks',
- 'cuts', 'director', 'duration', 'durations', 'editable', 'layers',
+ 'cuts', 'duration', 'durations', 'editable', 'layers',
'modified', 'parts', 'posterFrame', 'rendered', 'rightslevel',
- 'size', 'title', 'videoRatio', 'year'
- ] : []
+ 'size', 'videoRatio',
+ ].concat(pandora.site.itemTitleKeys) : []
}, pandora.user.ui.itemView == 'info' && pandora.site.capabilities.canEditMetadata[pandora.user.level] ? 0 : -1, function(result) {
if (pandora.user.ui.item != item) {
@@ -32,7 +32,7 @@ pandora.ui.item = function() {
}
pandora.$ui.itemTitle
- .options({title: '' + pandora.getItemTitle(result.data) + ''})
+ .options({title: '' + pandora.getItemTitle(result.data, true) + ''})
.show();
// fixme: layers have value, subtitles has text?
diff --git a/static/js/list.js b/static/js/list.js
index 456e73326..9523d77fb 100644
--- a/static/js/list.js
+++ b/static/js/list.js
@@ -152,7 +152,7 @@ pandora.ui.list = function() {
height: Math.round(ratio <= 1 ? size : size / ratio),
id: data.id,
info: info,
- title: data.title + (data.director && data.director.length ? ' (' + data.director.join(', ') + ')' : ''),
+ title: pandora.getItemTitle(data),
url: url,
width: Math.round(ratio >= 1 ? size : size * ratio)
};
@@ -163,7 +163,7 @@ pandora.ui.list = function() {
}), callback);
return Ox.clone(data, true);
},
- keys: ['director', 'id', 'modified', 'posterRatio', 'title', 'year'],
+ keys: ['id', 'modified', 'posterRatio'].concat(pandora.site.itemTitleKeys),
selected: ui.listSelection,
size: 128,
sort: ui.listSort,
@@ -209,7 +209,7 @@ pandora.ui.list = function() {
height: Math.round(ratio <= 1 ? size : size / ratio),
id: data.id,
info: info,
- title: data.title + (data.director.length ? ' (' + data.director.join(', ') + ')' : ''),
+ title: pandora.getItemTitle(data),
url: url,
width: Math.round(ratio >= 1 ? size : size * ratio)
},
@@ -239,7 +239,7 @@ pandora.ui.list = function() {
});
return Ox.clone(data, true);
},
- keys: ['clips', 'director', 'duration', 'id', 'modified', 'posterRatio', 'title', 'videoRatio', 'year'],
+ keys: ['clips', 'duration', 'id', 'modified', 'posterRatio', 'videoRatio'].concat(pandora.site.itemTitleKeys),
selected: ui.listSelection,
size: 192,
sort: ui.listSort,
@@ -296,7 +296,7 @@ pandora.ui.list = function() {
height: Math.round(ratio <= 1 ? size : size / ratio),
id: data.id,
info: info,
- title: data.title + (data.director.length ? ' (' + data.director.join(', ') + ')' : ''),
+ title: pandora.getItemTitle(data),
url: url,
width: Math.round(ratio >= 1 ? size : size * ratio)
},
@@ -356,7 +356,7 @@ pandora.ui.list = function() {
}} : {})), callback);
return Ox.clone(data, true);
},
- keys: ['clips', 'director', 'duration', 'id', 'modified', 'posterRatio', 'rendered', 'title', 'year'],
+ keys: ['clips', 'duration', 'id', 'modified', 'posterRatio', 'rendered'].concat(pandora.site.itemTitleKeys),
selected: ui.listSelection,
size: 192,
sort: ui.listSort,
diff --git a/static/js/listDialog.js b/static/js/listDialog.js
index 5a8a76650..3083f0f20 100644
--- a/static/js/listDialog.js
+++ b/static/js/listDialog.js
@@ -437,7 +437,7 @@ pandora.ui.listIconPanel = function(listData) {
height: size,
id: data.id,
info: data[['title', 'director'].indexOf(sort[0].key) > -1 ? 'year' : sort[0].key],
- title: data.title + (data.director.length ? ' (' + data.director.join(', ') + ')' : ''),
+ title: pandora.getItemTitle(data),
url: pandora.getMediaURL('/' + data.id + '/icon' + size + '.jpg?' + data.modified),
width: size
};
@@ -453,7 +453,7 @@ pandora.ui.listIconPanel = function(listData) {
}
}), callback);
},
- keys: ['director', 'duration', 'id', 'modified', 'posterFrame', 'title', 'videoRatio', 'year'],
+ keys: ['duration', 'id', 'modified', 'posterFrame', 'videoRatio'].concat(pandora.site.itemTitleKeys),
max: 1,
min: 1,
//orientation: 'vertical',
diff --git a/static/js/previewDialog.js b/static/js/previewDialog.js
index fce4f46df..c0681c426 100644
--- a/static/js/previewDialog.js
+++ b/static/js/previewDialog.js
@@ -58,7 +58,7 @@ pandora.ui.previewDialog = function() {
that.update = function() {
pandora.requests.preview && pandora.api.cancel(pandora.requests.preview);
pandora.requests.preview = pandora.api.find({
- keys: ['director', 'id', 'modified', 'posterRatio', 'title', 'year'],
+ keys: ['id', 'modified', 'posterRatio'].concat(pandora.site.itemTitleKeys),
query: {
conditions: [{
key: 'id',
@@ -73,11 +73,7 @@ pandora.ui.previewDialog = function() {
? pandora.site.posters.ratio
: item.posterRatio,
size = getSize(posterRatio),
- title = item.title + (
- item.director.length ? ' (' + item.director.join(', ') + ')' : ''
- ) + (
- item.year ? ' ' + item.year : ''
- );
+ title = pandora.getItemTitle(item, true);
$image = $('')
.attr({src: pandora.getMediaURL('/' + item.id + '/' + (
pandora.user.ui.showSitePosters ? 'siteposter' : 'poster'
diff --git a/static/js/tv.js b/static/js/tv.js
index dbbf8dff1..03a9a392d 100644
--- a/static/js/tv.js
+++ b/static/js/tv.js
@@ -98,12 +98,7 @@ pandora.ui.tv = function() {
title: pandora.site.site.name + ' — ' + (
list || Ox._('All {0}', [Ox._(pandora.site.itemName.plural)])
) + ' — '
- + result.data.title
- + (
- result.data.director
- ? ' (' + result.data.director.join(', ') + ') '
- : ''
- ) + result.data.year,
+ + pandora.getItemTitle(result.data, true),
video: videoOptions.video,
volume: pandora.user.ui.videoVolume
})
diff --git a/static/js/utils.js b/static/js/utils.js
index 710a0bd8c..293092414 100644
--- a/static/js/utils.js
+++ b/static/js/utils.js
@@ -1281,18 +1281,6 @@ pandora.getItemIdAndPosition = function() {
return ret;
}
-pandora.getItemTitle = function(itemData) {
- return (itemData.title || Ox._('Untitled')) + (
- Ox.len(itemData.director) || itemData.year
- ? ' (' + (
- Ox.len(itemData.director)
- ? itemData.director
- : [Ox._('Unknown Director')]
- ).join(', ') + ')'
- : ''
- ) + (itemData.year ? ' ' + itemData.year : '')
-};
-
pandora.getLargeClipTimelineURL = function(item, inPoint, outPoint, type, callback) {
var fps = 25,
width = Math.ceil((outPoint - inPoint) * fps),