add editDialog.js
This commit is contained in:
parent
a00915a27d
commit
d3c56670be
1 changed files with 209 additions and 0 deletions
209
static/js/editDialog.js
Normal file
209
static/js/editDialog.js
Normal file
|
@ -0,0 +1,209 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
oml.ui.editDialog = function() {
|
||||||
|
|
||||||
|
var ids = oml.user.ui.listSelection,
|
||||||
|
keys = [
|
||||||
|
'title', 'author', 'place', 'publisher', 'date',
|
||||||
|
'edition', 'language', 'pages', 'description'
|
||||||
|
],
|
||||||
|
mixed = ' ',
|
||||||
|
separator = '; ',
|
||||||
|
tooltip = Ox._('Doubleclick to edit'),
|
||||||
|
|
||||||
|
$info = Ox.Element()
|
||||||
|
.addClass('OxSelectable')
|
||||||
|
.css({padding: '16px'});
|
||||||
|
|
||||||
|
var that = Ox.Dialog({
|
||||||
|
buttons: [
|
||||||
|
Ox.Button({
|
||||||
|
title: Ox._('Done')
|
||||||
|
})
|
||||||
|
.bindEvent({
|
||||||
|
click: function() {
|
||||||
|
that.close();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
],
|
||||||
|
closeButton: true,
|
||||||
|
content: Ox.LoadingScreen().start(),
|
||||||
|
height: 384,
|
||||||
|
removeOnClose: true,
|
||||||
|
title: Ox._('Edit Metadata for {0}', [
|
||||||
|
Ox.formatNumber(ids.length) + ' ' + (
|
||||||
|
ids.length == 1 ? 'Book' : 'Books'
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
width: 512
|
||||||
|
});
|
||||||
|
|
||||||
|
getMetadata(renderMetadata);
|
||||||
|
|
||||||
|
function editMetadata(key, value) {
|
||||||
|
var edit = {id: ids};
|
||||||
|
if (Ox.contains(['author', 'place'], key)) {
|
||||||
|
edit[key] = value ? value.split(separator) : [];
|
||||||
|
} else {
|
||||||
|
edit[key] = value;
|
||||||
|
}
|
||||||
|
oml.api.edit(edit, function(result) {
|
||||||
|
oml.$ui.list.reloadList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatLight(string) {
|
||||||
|
return '<span class="OxLight">' + string + '</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatKey(key) {
|
||||||
|
var item = Ox.getObjectById(oml.config.itemKeys, key);
|
||||||
|
return '<span style="font-weight: bold">'
|
||||||
|
+ Ox._(Ox.toTitleCase(key)) + ':</span> ';
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatValue(value, key) {
|
||||||
|
return value === mixed ? Ox.formatLight(Ox._(
|
||||||
|
key == 'title' ? 'Mixed Title'
|
||||||
|
: key == 'author' ? 'Mixed Author'
|
||||||
|
: 'mixed'
|
||||||
|
)) : value ? (Ox.isArray(value) ? value : [value]).map(function(value) {
|
||||||
|
return key == 'date' && value ? value.slice(0, 4) : value;
|
||||||
|
}).join(separator) : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMetadata(callback) {
|
||||||
|
oml.api.find({
|
||||||
|
keys: keys,
|
||||||
|
query: {
|
||||||
|
conditions: ids.map(function(id) {
|
||||||
|
return {
|
||||||
|
key: 'id',
|
||||||
|
operator: '==',
|
||||||
|
value: id
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
operator: '|'
|
||||||
|
}
|
||||||
|
}, function(result) {
|
||||||
|
var data = {},
|
||||||
|
items = result.data.items;
|
||||||
|
keys.forEach(function(key) {
|
||||||
|
values = items.map(function(item) {
|
||||||
|
return item[key];
|
||||||
|
});
|
||||||
|
var isArray = Ox.isArray(values[0])
|
||||||
|
if (isArray) {
|
||||||
|
values = values.map(function(value) {
|
||||||
|
return value.join(separator);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
data[key] = Ox.unique(values).length == 1
|
||||||
|
? (isArray ? values[0].split(separator) : values[0])
|
||||||
|
: mixed;
|
||||||
|
});
|
||||||
|
callback(data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderMetadata(data) {
|
||||||
|
|
||||||
|
var $div;
|
||||||
|
|
||||||
|
// Title
|
||||||
|
|
||||||
|
$('<div>')
|
||||||
|
.css({
|
||||||
|
marginTop: '-2px'
|
||||||
|
})
|
||||||
|
.append(
|
||||||
|
Ox.EditableContent({
|
||||||
|
editable: true,
|
||||||
|
format: function(value) {
|
||||||
|
return formatValue(value, 'title');
|
||||||
|
},
|
||||||
|
placeholder: formatLight(Ox._('No Title')),
|
||||||
|
tooltip: tooltip,
|
||||||
|
value: data.title || ''
|
||||||
|
})
|
||||||
|
.css({
|
||||||
|
fontWeight: 'bold',
|
||||||
|
fontSize: '13px'
|
||||||
|
})
|
||||||
|
.bindEvent({
|
||||||
|
submit: function(event) {
|
||||||
|
editMetadata('title', event.value);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.appendTo($info);
|
||||||
|
|
||||||
|
// Author
|
||||||
|
|
||||||
|
$('<div>')
|
||||||
|
.css({
|
||||||
|
marginTop: '2px'
|
||||||
|
})
|
||||||
|
.append(
|
||||||
|
Ox.EditableContent({
|
||||||
|
editable: true,
|
||||||
|
format: function(value) {
|
||||||
|
return formatValue(value.split(separator), 'author');
|
||||||
|
},
|
||||||
|
placeholder: formatLight(Ox._('Unknown Author')),
|
||||||
|
tooltip: tooltip,
|
||||||
|
value: data.author ? data.author.join(separator) : ''
|
||||||
|
})
|
||||||
|
.css({
|
||||||
|
marginBottom: '-3px',
|
||||||
|
fontWeight: 'bold',
|
||||||
|
fontSize: '13px'
|
||||||
|
})
|
||||||
|
.bindEvent({
|
||||||
|
submit: function(event) {
|
||||||
|
editMetadata('author', event.value);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.appendTo($info);
|
||||||
|
|
||||||
|
// Place, Publisher, Date
|
||||||
|
|
||||||
|
$div = $('<div')
|
||||||
|
.css({
|
||||||
|
marginTop: '4px'
|
||||||
|
})
|
||||||
|
.appendTo($info);
|
||||||
|
['place', 'publisher', 'date'].forEach(function(key, index) {
|
||||||
|
if (index) {
|
||||||
|
$('<span>').html(', ').appendTo($div);
|
||||||
|
}
|
||||||
|
$('<span>')
|
||||||
|
.html(formatKey(key))
|
||||||
|
.appendTo($div);
|
||||||
|
Ox.EditableContent({
|
||||||
|
editable: true,
|
||||||
|
format: function(value) {
|
||||||
|
return formatValue(value.split(separator), key)
|
||||||
|
},
|
||||||
|
placeholder: formatLight(Ox._('unknown')),
|
||||||
|
tooltip: tooltip,
|
||||||
|
value: key == 'place'
|
||||||
|
? (data[key] ? data[key].join(separator) : [''])
|
||||||
|
: data[key] || ''
|
||||||
|
})
|
||||||
|
.bindEvent({
|
||||||
|
submit: function(event) {
|
||||||
|
editMetadata(key, event.value);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.appendTo($div);
|
||||||
|
});
|
||||||
|
|
||||||
|
that.options({content: $info});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return that;
|
||||||
|
|
||||||
|
};
|
Loading…
Reference in a new issue