forked from 0x2620/pandora
support itemKey list of dates(type: ['date'])
This commit is contained in:
parent
3465d3ee9f
commit
c3a3d1df1c
4 changed files with 87 additions and 15 deletions
|
@ -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",
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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],
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue