* view.transform.js: major refactor * general record transform rather than column transform * Normal dataset view rather than modal * Reworked UI * split out css from grid.css and simplify * model.js + backend.memory.js: transform implemented on Dataset and Memory (Dataset passes off to _store). * multiview: use new transform view * _includes/recline-deps - rework to use source files rather than built ones
69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
// adapted from https://github.com/harthur/costco. heather rules
|
|
|
|
var costco = function() {
|
|
|
|
function evalFunction(funcString) {
|
|
try {
|
|
eval("var editFunc = " + funcString);
|
|
} catch(e) {
|
|
return {errorMessage: e+""};
|
|
}
|
|
return editFunc;
|
|
}
|
|
|
|
function previewTransform(docs, editFunc, currentColumn) {
|
|
var preview = [];
|
|
var updated = mapDocs($.extend(true, {}, docs), editFunc);
|
|
for (var i = 0; i < updated.docs.length; i++) {
|
|
var before = docs[i]
|
|
, after = updated.docs[i]
|
|
;
|
|
if (!after) after = {};
|
|
if (currentColumn) {
|
|
preview.push({before: before[currentColumn], after: after[currentColumn]});
|
|
} else {
|
|
preview.push({before: before, after: after});
|
|
}
|
|
}
|
|
return preview;
|
|
}
|
|
|
|
function mapDocs(docs, editFunc) {
|
|
var edited = []
|
|
, deleted = []
|
|
, failed = []
|
|
;
|
|
|
|
var updatedDocs = _.map(docs, function(doc) {
|
|
try {
|
|
var updated = editFunc(_.clone(doc));
|
|
} catch(e) {
|
|
failed.push(doc);
|
|
return;
|
|
}
|
|
if(updated === null) {
|
|
updated = {_deleted: true};
|
|
edited.push(updated);
|
|
deleted.push(doc);
|
|
}
|
|
else if(updated && !_.isEqual(updated, doc)) {
|
|
edited.push(updated);
|
|
}
|
|
return updated;
|
|
});
|
|
|
|
return {
|
|
updates: edited,
|
|
docs: updatedDocs,
|
|
deletes: deleted,
|
|
failed: failed
|
|
};
|
|
}
|
|
|
|
return {
|
|
evalFunction: evalFunction,
|
|
previewTransform: previewTransform,
|
|
mapDocs: mapDocs
|
|
};
|
|
}();
|