support itemKey list of dates(type: ['date'])

This commit is contained in:
j 2019-04-28 08:01:04 +02:00
parent 3465d3ee9f
commit c3a3d1df1c
4 changed files with 87 additions and 15 deletions

View file

@ -713,7 +713,8 @@
{ {
"id": "dateofcensorcertificate", "id": "dateofcensorcertificate",
"title": "Date of Censor Certificate", "title": "Date of Censor Certificate",
"type": "date" "find": true,
"type": ["date"]
}, },
{ {
"id": "certificationcentre", "id": "certificationcentre",

View file

@ -49,6 +49,9 @@ def parseCondition(condition, user, owner=None):
key_type = (utils.get_by_id(settings.CONFIG['itemKeys'], k) or {'type': 'string'}).get('type') key_type = (utils.get_by_id(settings.CONFIG['itemKeys'], k) or {'type': 'string'}).get('type')
if isinstance(key_type, list): if isinstance(key_type, list):
key_type = key_type[0] key_type = key_type[0]
type_is_list = True
else:
type_is_list = False
key_type = { key_type = {
'title': 'string', 'title': 'string',
'person': 'string', 'person': 'string',
@ -114,7 +117,7 @@ def parseCondition(condition, user, owner=None):
if exclude: if exclude:
q = ~Q(id__in=models.Item.objects.filter(q)) q = ~Q(id__in=models.Item.objects.filter(q))
return q return q
elif key_type == "string": elif key_type == "string" or (key_type == 'date' and type_is_list):
in_find = not k.startswith('public_id') in_find = not k.startswith('public_id')
if in_find: if in_find:
value_key = 'find__value' value_key = 'find__value'
@ -166,7 +169,7 @@ def parseCondition(condition, user, owner=None):
else: else:
q = Q(id=0) q = Q(id=0)
return q return q
elif key_type == 'date': elif key_type == 'date' and not type_is_list:
def parse_date(d): def parse_date(d):
while len(d) < 3: while len(d) < 3:
d.append(1) d.append(1)

View file

@ -24,7 +24,13 @@ pandora.ui.infoView = function(data, isMixed) {
listWidth = 0, listWidth = 0,
margin = 16, margin = 16,
// these may contain commas, and are thus separated by semicolons // these may contain commas, and are thus separated by semicolons
specialListKeys = ['alternativeTitles', 'productionCompany'], specialListKeys = ['alternativeTitles', 'productionCompany'].concat(
pandora.site.itemKeys.filter(function(key) {
return key.type[0] == 'date'
}).map(function(key) {
return key.id;
})
),
nameKeys = pandora.site.itemKeys.filter(function(key) { nameKeys = pandora.site.itemKeys.filter(function(key) {
return key.sortType == 'person'; return key.sortType == 'person';
}).map(function(key) { }).map(function(key) {
@ -625,6 +631,7 @@ pandora.ui.infoView = function(data, isMixed) {
function editMetadata(key, value) { function editMetadata(key, value) {
if (value != data[key]) { if (value != data[key]) {
var itemKey = Ox.getObjectById(pandora.site.itemKeys, key);
var edit = {id: isMultiple ? ui.listSelection : data.id}; var edit = {id: isMultiple ? ui.listSelection : data.id};
if (key == 'alternativeTitles') { if (key == 'alternativeTitles') {
edit[key] = value ? Ox.decodeHTMLEntities(value).split('; ').map(function(value) { edit[key] = value ? Ox.decodeHTMLEntities(value).split('; ').map(function(value) {
@ -645,12 +652,12 @@ pandora.ui.infoView = function(data, isMixed) {
: []; : [];
} else if (key == 'imdbId') { } else if (key == 'imdbId') {
edit[key] = value.match(/\d{7}/)[0]; edit[key] = value.match(/\d{7}/)[0];
} else if (key == 'dateofcensorcertificate') {
value = cleanupDate(value);
edit[key] = value;
} else { } else {
edit[key] = value; edit[key] = value;
} }
if (itemKey && itemKey.type && itemKey.type[0] == 'date') {
edit[key] = edit[key].map(cleanupDate);
}
pandora.api.edit(edit, function(result) { pandora.api.edit(edit, function(result) {
if (!isMultiple) { if (!isMultiple) {
var src; var src;
@ -717,12 +724,14 @@ pandora.ui.infoView = function(data, isMixed) {
return '<span class="OxLight">' + str + '</span>'; return '<span class="OxLight">' + str + '</span>';
} }
function formatLink(value, key) { function formatLink(value, key, linkValue) {
return (Ox.isArray(value) ? value : [value]).map(function(value) { linkValue = linkValue || value
linkValue = Ox.isArray(linkValue) ? linkValue: [linkValue]
return (Ox.isArray(value) ? value : [value]).map(function(value, idx) {
return key return key
? '<a href="/' + ( ? '<a href="/' + (
key == 'alternativeTitles' ? 'title' : key key == 'alternativeTitles' ? 'title' : key
) + '=' + pandora.escapeQueryValue(value) + '">' + value + '</a>' ) + '=' + pandora.escapeQueryValue(linkValue[idx]) + '">' + value + '</a>'
: value; : value;
}).join(Ox.contains(specialListKeys, key) ? '; ' : ', '); }).join(Ox.contains(specialListKeys, key) ? '; ' : ', ');
} }
@ -744,7 +753,17 @@ pandora.ui.infoView = function(data, isMixed) {
var ret; var ret;
if (key == 'year') { if (key == 'year') {
ret = formatLink(value, 'year'); ret = formatLink(value, 'year');
} else if (['releasedate', 'dateofcensorcertificate'].indexOf(key) > -1) { } else if (
listKeys.indexOf(key) > -1 && Ox.getObjectById(pandora.site.itemKeys, key).type[0] == 'date'
) {
ret = value.split('; ').map(function(date) {
date = cleanupDate(date)
return date ? formatLink(Ox.formatDate(date,
['', '%Y', '%B %Y', '%B %e, %Y'][date.split('-').length],
true
), key, date) : '';
}).join('; ');
} else if (['releasedate'].indexOf(key) > -1) {
value = cleanupDate(value); value = cleanupDate(value);
ret = value ? Ox.formatDate(value, ret = value ? Ox.formatDate(value,
['', '%Y', '%B %Y', '%B %e, %Y'][value.split('-').length], ['', '%Y', '%B %Y', '%B %e, %Y'][value.split('-').length],

View file

@ -30,6 +30,13 @@ pandora.ui.infoView = function(data, isMixed) {
}).map(function(key){ }).map(function(key){
return key.id; return key.id;
}), }),
specialListKeys = [].concat(
pandora.site.itemKeys.filter(function(key) {
return key.type[0] == 'date'
}).map(function(key) {
return key.id;
})
),
posterKeys = nameKeys.concat(['title', 'year']), posterKeys = nameKeys.concat(['title', 'year']),
statisticsWidth = 128, statisticsWidth = 128,
@ -364,16 +371,37 @@ pandora.ui.infoView = function(data, isMixed) {
$('<div>').css({height: '16px'}).appendTo($statistics); $('<div>').css({height: '16px'}).appendTo($statistics);
function cleanupDate(value) {
if (/\d{2}-\d{2}-\d{4}/.test(value)) {
value = Ox.reverse(value.split('-')).join('-')
}
if (/\d{4}i\/\d{2}\/\d{d}/.test(value)) {
value = value.split('/').join('-')
}
if (/\d{2}\/\d{2}\/\d{4}/.test(value)) {
value = Ox.reverse(value.split('/')).join('-')
}
return value
}
function editMetadata(key, value) { function editMetadata(key, value) {
if (value != data[key]) { if (value != data[key]) {
var itemKey = Ox.getObjectById(pandora.site.itemKeys, key);
var edit = {id: isMultiple ? ui.listSelection : data.id}; var edit = {id: isMultiple ? ui.listSelection : data.id};
if (key == 'title') { if (key == 'title') {
edit[key] = value; edit[key] = value;
} else if (listKeys.indexOf(key) >= 0) { } else if (listKeys.indexOf(key) >= 0) {
edit[key] = value ? value.split(', ') : []; edit[key] = value ? value.split(', ') : [];
} else if (specialListKeys.indexOf(key) > -1) {
edit[key] = value
? Ox.decodeHTMLEntities(value).split('; ').map(Ox.encodeHTMLEntities)
: [];
} else { } else {
edit[key] = value ? value : null; edit[key] = value ? value : null;
} }
if (itemKey && itemKey.type && itemKey.type[0] == 'date') {
edit[key] = edit[key].map(cleanupDate);
}
pandora.api.edit(edit, function(result) { pandora.api.edit(edit, function(result) {
if (!isMultiple) { if (!isMultiple) {
var src; var src;
@ -425,20 +453,40 @@ pandora.ui.infoView = function(data, isMixed) {
return '<span class="OxLight">' + str + '</span>'; return '<span class="OxLight">' + str + '</span>';
} }
function formatLink(value, key) {
return (Ox.isArray(value) ? value : [value]).map(function(value) { function formatLink(value, key, linkValue) {
linkValue = linkValue || value
linkValue = Ox.isArray(linkValue) ? linkValue: [linkValue]
return (Ox.isArray(value) ? value : [value]).map(function(value, idx) {
return key return key
? '<a href="/' + key + '=' + value + '">' + value + '</a>' ? '<a href="/' + (
key == 'alternativeTitles' ? 'title' : key
) + '=' + pandora.escapeQueryValue(linkValue[idx]) + '">' + value + '</a>'
: value; : value;
}).join(', '); }).join(Ox.contains(specialListKeys, key) ? '; ' : ', ');
} }
function formatValue(key, value) { function formatValue(key, value) {
var ret; var ret;
if (nameKeys.indexOf(key) > -1) { if (nameKeys.indexOf(key) > -1) {
ret = formatLink(value.split(', '), 'name'); ret = formatLink(value.split(', '), 'name');
} else if (
listKeys.indexOf(key) > -1 && Ox.getObjectById(pandora.site.itemKeys, key).type[0] == 'date'
) {
ret = value.split('; ').map(function(date) {
date = cleanupDate(date)
return date ? formatLink(Ox.formatDate(date,
['', '%Y', '%B %Y', '%B %e, %Y'][date.split('-').length],
true
), key, date) : '';
}).join('; ');
} else if (listKeys.indexOf(key) > -1) { } else if (listKeys.indexOf(key) > -1) {
ret = formatLink(value.split(', '), key); ret = formatLink(value.split(', '), key);
} else if (specialListKeys.indexOf(key) > -1) {
ret = formatLink(
Ox.decodeHTMLEntities(value).split('; ').map(Ox.encodeHTMLEntities),
key
);
} else if (['year', 'country'].indexOf(key) > -1) { } else if (['year', 'country'].indexOf(key) > -1) {
ret = formatLink(value, key); ret = formatLink(value, key);
} else { } else {
@ -458,6 +506,7 @@ pandora.ui.infoView = function(data, isMixed) {
function getValue(key, value) { function getValue(key, value) {
return !value ? '' return !value ? ''
: Ox.contains(specialListKeys, key) ? value.join('; ')
: Ox.contains(listKeys, key) ? value.join(', ') : Ox.contains(listKeys, key) ? value.join(', ')
: value; : value;
} }