batch item/documents edit
This commit is contained in:
parent
38315e0c60
commit
0a4c507346
12 changed files with 879 additions and 510 deletions
124
static/js/editDialog.js
Normal file
124
static/js/editDialog.js
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
'use strict';
|
||||
|
||||
pandora.ui.editDialog = function() {
|
||||
|
||||
var ui = pandora.user.ui,
|
||||
hasChanged = false,
|
||||
ids = ui.listSelection.filter(function(id) {
|
||||
return pandora.$ui.list.value(id, 'editable');
|
||||
}),
|
||||
keys = pandora.site.itemKeys.filter(function(key) {
|
||||
return key.id != '*'
|
||||
}).map(function(key) {
|
||||
return key.id
|
||||
}),
|
||||
listKeys = pandora.site.itemKeys.filter(function(key) {
|
||||
return Ox.isArray(key.type);
|
||||
}).map(function(key){
|
||||
return key.id;
|
||||
}),
|
||||
mixed = ' ',
|
||||
separator = '; ',
|
||||
tooltip = Ox._('Doubleclick to edit'),
|
||||
|
||||
$info = Ox.Element()
|
||||
.addClass('OxSelectable')
|
||||
.css({padding: '16px'});
|
||||
|
||||
var that = Ox.Dialog({
|
||||
buttons: [
|
||||
Ox.Button({
|
||||
style: 'squared',
|
||||
title: Ox._('Done')
|
||||
})
|
||||
.bindEvent({
|
||||
click: function() {
|
||||
if (!ui.updateResults && hasChanged) {
|
||||
pandora.$ui.list.reloadList()
|
||||
}
|
||||
that.close();
|
||||
}
|
||||
})
|
||||
],
|
||||
closeButton: true,
|
||||
content: Ox.LoadingScreen().start(),
|
||||
height: 576,
|
||||
removeOnClose: true,
|
||||
title: Ox._('Edit Metadata for {0}', [
|
||||
Ox.formatNumber(ids.length) + ' ' + Ox._(
|
||||
ids.length == 1 ? pandora.site.itemName.singular : pandora.site.itemName.plural
|
||||
)
|
||||
]),
|
||||
width: 768
|
||||
}),
|
||||
|
||||
$updateCheckbox = Ox.Checkbox({
|
||||
style: 'squared',
|
||||
title: Ox._('Update Results in the Background'),
|
||||
value: ui.updateResults
|
||||
})
|
||||
.css({
|
||||
float: 'left',
|
||||
margin: '4px'
|
||||
})
|
||||
.bindEvent({
|
||||
change: function(data) {
|
||||
pandora.UI.set({updateResults: data.value});
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
$($updateCheckbox.find('.OxButton')[0]).css({margin: 0});
|
||||
$(that.find('.OxBar')[1]).append($updateCheckbox);
|
||||
*/
|
||||
|
||||
getMetadata();
|
||||
|
||||
function getMetadata(callback) {
|
||||
pandora.api.find({
|
||||
keys: keys,
|
||||
query: {
|
||||
conditions: ids.map(function(id) {
|
||||
return {
|
||||
key: 'id',
|
||||
operator: '==',
|
||||
value: id
|
||||
};
|
||||
}),
|
||||
operator: '|'
|
||||
}
|
||||
}, function(result) {
|
||||
var data = {},
|
||||
isMixed = {},
|
||||
items = result.data.items;
|
||||
keys.forEach(function(key) {
|
||||
var isArray = Ox.contains(listKeys, key),
|
||||
values = items.map(function(item) {
|
||||
return item[key];
|
||||
});
|
||||
if (isArray) {
|
||||
values = values.map(function(value) {
|
||||
return (value || []).join(separator);
|
||||
});
|
||||
}
|
||||
if (Ox.unique(values).length > 1) {
|
||||
isMixed[key] = true;
|
||||
}
|
||||
data[key] = isMixed[key] ? null
|
||||
: isArray ? values[0].split(separator)
|
||||
: values[0];
|
||||
});
|
||||
that.options({
|
||||
content: pandora.ui.infoView(data, isMixed).bindEvent({
|
||||
change: function() {
|
||||
hasChanged = true;
|
||||
Ox.Request.clearCache();
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return that;
|
||||
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue