diff --git a/_includes/recline-deps.html b/_includes/recline-deps.html index d58ce6d0..6bdfeea9 100644 --- a/_includes/recline-deps.html +++ b/_includes/recline-deps.html @@ -14,7 +14,6 @@ - @@ -61,8 +60,6 @@ - - diff --git a/css/transform.css b/css/transform.css deleted file mode 100644 index 9d404877..00000000 --- a/css/transform.css +++ /dev/null @@ -1,37 +0,0 @@ -.recline-transform { - overflow: hidden; -} - -.recline-transform .script textarea { - width: 100%; - height: 100px; - font-family: monospace; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.recline-transform h2 { - margin-bottom: 10px; -} - -.recline-transform h2 .okButton { - margin-left: 10px; - margin-top: -2px; -} - -.expression-preview-parsing-status { - color: #999; -} - -.expression-preview-parsing-status.error { - color: red; -} - -.recline-transform .before-after .after { - font-style: italic; -} - -.recline-transform .before-after .after.different { - font-weight: bold; -} diff --git a/demos/multiview/app.js b/demos/multiview/app.js index 6ea80a4b..06e3dc61 100755 --- a/demos/multiview/app.js +++ b/demos/multiview/app.js @@ -89,13 +89,6 @@ var createExplorer = function(dataset, state) { view: new recline.View.Map({ model: dataset }) - }, - { - id: 'transform', - label: 'Transform', - view: new recline.View.Transform({ - model: dataset - }) } ]; diff --git a/docs/src/data.transform.html b/docs/src/data.transform.html deleted file mode 100644 index ec2a4784..00000000 --- a/docs/src/data.transform.html +++ /dev/null @@ -1,66 +0,0 @@ -
data.transform.js | |
|---|---|
this.recline = this.recline || {};
-this.recline.Data = this.recline.Data || {};
-
-(function(my) { | |
| adapted from https://github.com/harthur/costco. heather rules | my.Transform = {};
-
-my.Transform.evalFunction = function(funcString) {
- try {
- eval("var editFunc = " + funcString);
- } catch(e) {
- return {errorMessage: e+""};
- }
- return editFunc;
-};
-
-my.Transform.previewTransform = function(docs, editFunc, currentColumn) {
- var preview = [];
- var updated = my.Transform.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;
-};
-
-my.Transform.mapDocs = function(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
- };
-};
-
-}(this.recline.Data))
-
- |
view.transform.js | |
|---|---|
/*jshint multistr:true */
-
-this.recline = this.recline || {};
-this.recline.View = this.recline.View || {}; | |
| Views module following classic module pattern | (function($, my) { |
ColumnTransform- -View (Dialog) for doing data transformations | my.Transform = Backbone.View.extend({
- template: ' \
- <div class="recline-transform"> \
- <div class="script"> \
- <h2> \
- Transform Script \
- <button class="okButton btn btn-primary">Run on all records</button> \
- </h2> \
- <textarea class="expression-preview-code"></textarea> \
- </div> \
- <div class="expression-preview-parsing-status"> \
- No syntax error. \
- </div> \
- <div class="preview"> \
- <h3>Preview</h3> \
- <div class="expression-preview-container"></div> \
- </div> \
- </div> \
- ',
-
- events: {
- 'click .okButton': 'onSubmit',
- 'keydown .expression-preview-code': 'onEditorKeydown'
- },
-
- initialize: function(options) {
- this.el = $(this.el);
- },
-
- render: function() {
- var htmls = Mustache.render(this.template);
- this.el.html(htmls); |
| Put in the basic (identity) transform script -TODO: put this into the template? | var editor = this.el.find('.expression-preview-code');
- if (this.model.fields.length > 0) {
- var col = this.model.fields.models[0].id;
- } else {
- var col = 'unknown';
- }
- editor.val("function(doc) {\n doc['"+ col +"'] = doc['"+ col +"'];\n return doc;\n}");
- editor.keydown();
- },
-
- onSubmit: function(e) {
- var self = this;
- var funcText = this.el.find('.expression-preview-code').val();
- var editFunc = recline.Data.Transform.evalFunction(funcText);
- if (editFunc.errorMessage) {
- this.trigger('recline:flash', {message: "Error with function! " + editFunc.errorMessage});
- return;
- }
- this.model.transform(editFunc);
- },
-
- editPreviewTemplate: ' \
- <table class="table table-condensed table-bordered before-after"> \
- <thead> \
- <tr> \
- <th>Field</th> \
- <th>Before</th> \
- <th>After</th> \
- </tr> \
- </thead> \
- <tbody> \
- {{#row}} \
- <tr> \
- <td> \
- {{field}} \
- </td> \
- <td class="before {{#different}}different{{/different}}"> \
- {{before}} \
- </td> \
- <td class="after {{#different}}different{{/different}}"> \
- {{after}} \
- </td> \
- </tr> \
- {{/row}} \
- </tbody> \
- </table> \
- ',
-
- onEditorKeydown: function(e) {
- var self = this; |
| if you don't setTimeout it won't grab the latest character if you call e.target.value | window.setTimeout( function() {
- var errors = self.el.find('.expression-preview-parsing-status');
- var editFunc = recline.Data.Transform.evalFunction(e.target.value);
- if (!editFunc.errorMessage) {
- errors.text('No syntax error.');
- var docs = self.model.records.map(function(doc) {
- return doc.toJSON();
- });
- var previewData = recline.Data.Transform.previewTransform(docs, editFunc);
- var $el = self.el.find('.expression-preview-container');
- var fields = self.model.fields.toJSON();
- var rows = _.map(previewData.slice(0,4), function(row) {
- return _.map(fields, function(field) {
- return {
- field: field.id,
- before: row.before[field.id],
- after: row.after[field.id],
- different: !_.isEqual(row.before[field.id], row.after[field.id])
- }
- });
- });
- $el.html('');
- _.each(rows, function(row) {
- var templated = Mustache.render(self.editPreviewTemplate, {
- row: row
- });
- $el.append(templated);
- });
- } else {
- errors.text(editFunc.errorMessage);
- }
- }, 1, true);
- }
-});
-
-})(jQuery, recline.View);
-
- |
| Field | \ -Before | \ -After | \ -
|---|---|---|
| \ - {{field}} \ - | \ -\ - {{before}} \ - | \ -\ - {{after}} \ - | \ -