251 lines
8.5 KiB
JavaScript
Executable File
251 lines
8.5 KiB
JavaScript
Executable File
var app = {
|
|
baseURL: util.getBaseURL(document.location.pathname),
|
|
container: 'main_content'
|
|
};
|
|
|
|
app.handler = function(route) {
|
|
if (route.params && route.params.route) {
|
|
var path = route.params.route;
|
|
app.routes[path](route.params.id);
|
|
} else {
|
|
app.routes['home']();
|
|
}
|
|
};
|
|
|
|
app.routes = {
|
|
home: function() {
|
|
recline.bootstrap();
|
|
}
|
|
}
|
|
|
|
app.after = {
|
|
tableContainer: function() {
|
|
recline.activateControls();
|
|
},
|
|
dataTable: function() {
|
|
$('.column-header-menu').click(function(e) {
|
|
app.currentColumn = $(e.target).siblings().text();
|
|
util.position('menu', e);
|
|
util.render('columnActions', 'menu');
|
|
});
|
|
|
|
$('.row-header-menu').click(function(e) {
|
|
app.currentRow = $(e.target).parents('tr:first').attr('data-id');
|
|
util.position('menu', e);
|
|
util.render('rowActions', 'menu');
|
|
});
|
|
|
|
$('.data-table-cell-edit').click(function(e) {
|
|
var editing = $('.data-table-cell-editor-editor');
|
|
if (editing.length > 0) {
|
|
editing.parents('.data-table-cell-value').html(editing.text()).siblings('.data-table-cell-edit').removeClass("hidden");
|
|
}
|
|
$(e.target).addClass("hidden");
|
|
var cell = $(e.target).siblings('.data-table-cell-value');
|
|
cell.data("previousContents", cell.text());
|
|
util.render('cellEditor', cell, {value: cell.text()});
|
|
})
|
|
},
|
|
columnActions: function() { recline.handleMenuClick() },
|
|
rowActions: function() { recline.handleMenuClick() },
|
|
cellEditor: function() {
|
|
$('.data-table-cell-editor .okButton').click(function(e) {
|
|
var cell = $(e.target);
|
|
var rowId = cell.parents('tr').attr('data-id');
|
|
var header = cell.parents('td').attr('data-header');
|
|
var doc = _.find(app.cache, function(cacheDoc) {
|
|
return cacheDoc._id === rowId;
|
|
});
|
|
doc[header] = cell.parents('.data-table-cell-editor').find('.data-table-cell-editor-editor').val();
|
|
util.notify("Updating row...", {persist: true, loader: true});
|
|
couch.request({type: "PUT", url: app.baseURL + "api/" + doc._id, data: JSON.stringify(doc)}).then(function(response) {
|
|
util.notify("Row updated successfully");
|
|
recline.initializeTable();
|
|
})
|
|
})
|
|
$('.data-table-cell-editor .cancelButton').click(function(e) {
|
|
var cell = $(e.target).parents('.data-table-cell-value');
|
|
cell.html(cell.data('previousContents')).siblings('.data-table-cell-edit').removeClass("hidden");
|
|
})
|
|
},
|
|
actions: function() {
|
|
$('.button').click(function(e) {
|
|
var action = $(e.target).attr('data-action');
|
|
util.position('menu', e, {left: -60, top: 5});
|
|
util.render(action + 'Actions', 'menu');
|
|
recline.handleMenuClick();
|
|
});
|
|
},
|
|
controls: function() {
|
|
$('#logged-in-status').click(function(e) {
|
|
if ($(e.target).text() === "Sign in") {
|
|
recline.showDialog("signIn");
|
|
} else if ($(e.target).text() === "Sign out") {
|
|
util.notify("Signing you out...", {persist: true, loader: true});
|
|
couch.logout().then(function(response) {
|
|
util.notify("Signed out");
|
|
util.render('controls', 'project-controls', {text: "Sign in"});
|
|
})
|
|
}
|
|
});
|
|
},
|
|
signIn: function() {
|
|
|
|
$('.dialog-content #username-input').focus();
|
|
|
|
$('.dialog-content').find('#sign-in-form').submit(function(e) {
|
|
$('.dialog-content .okButton').click();
|
|
return false;
|
|
})
|
|
|
|
$('.dialog-content .okButton').click(function(e) {
|
|
util.hide('dialog');
|
|
util.notify("Signing you in...", {persist: true, loader: true});
|
|
var form = $(e.target).parents('.dialog-content').find('#sign-in-form');
|
|
var credentials = {
|
|
username: form.find('#username-input').val(),
|
|
password: form.find('#password-input').val()
|
|
}
|
|
couch.login(credentials).then(function(response) {
|
|
util.notify("Signed in");
|
|
util.render('controls', 'project-controls', {text: "Sign out"});
|
|
}, function(error) {
|
|
if (error.statusText === "error") util.notify(JSON.parse(error.responseText).reason);
|
|
})
|
|
})
|
|
|
|
},
|
|
bulkEdit: function() {
|
|
$('.dialog-content .okButton').click(function(e) {
|
|
var funcText = $('.expression-preview-code').val();
|
|
var editFunc = costco.evalFunction(funcText);
|
|
;
|
|
if (editFunc.errorMessage) {
|
|
util.notify("Error with function! " + editFunc.errorMessage);
|
|
return;
|
|
}
|
|
util.hide('dialog');
|
|
costco.updateDocs(editFunc);
|
|
})
|
|
|
|
var editor = $('.expression-preview-code');
|
|
editor.val("function(doc) {\n doc['"+ app.currentColumn+"'] = doc['"+ app.currentColumn+"'];\n return doc;\n}");
|
|
editor.focus().get(0).setSelectionRange(18, 18);
|
|
editor.keydown(function(e) {
|
|
// if you don't setTimeout it won't grab the latest character if you call e.target.value
|
|
window.setTimeout( function() {
|
|
var errors = $('.expression-preview-parsing-status');
|
|
var editFunc = costco.evalFunction(e.target.value);
|
|
if (!editFunc.errorMessage) {
|
|
errors.text('No syntax error.');
|
|
costco.previewTransform(app.cache, editFunc, app.currentColumn);
|
|
} else {
|
|
errors.text(editFunc.errorMessage);
|
|
}
|
|
}, 1, true);
|
|
});
|
|
editor.keydown();
|
|
},
|
|
transform: function() {
|
|
$('.dialog-content .okButton').click(function(e) {
|
|
util.notify("Not implemented yet, sorry! :D");
|
|
util.hide('dialog');
|
|
})
|
|
|
|
var editor = $('.expression-preview-code');
|
|
editor.val("function(val) {\n if(_.isString(val)) this.update(\"pizza\")\n}");
|
|
editor.focus().get(0).setSelectionRange(62,62);
|
|
editor.keydown(function(e) {
|
|
// if you don't setTimeout it won't grab the latest character if you call e.target.value
|
|
window.setTimeout( function() {
|
|
var errors = $('.expression-preview-parsing-status');
|
|
var editFunc = costco.evalFunction(e.target.value);
|
|
if (!editFunc.errorMessage) {
|
|
errors.text('No syntax error.');
|
|
var traverseFunc = function(doc) {
|
|
util.traverse(doc).forEach(editFunc);
|
|
return doc;
|
|
}
|
|
costco.previewTransform(app.cache, traverseFunc);
|
|
} else {
|
|
errors.text(editFunc.errorMessage);
|
|
}
|
|
}, 1, true);
|
|
});
|
|
editor.keydown();
|
|
},
|
|
urlImport: function() {
|
|
$('.dialog-content .okButton').click(function(e) {
|
|
app.apiURL = $('#url-input').val().trim();
|
|
util.notify("Fetching data...", {persist: true, loader: true});
|
|
$.getJSON(app.apiURL + "?callback=?").then(
|
|
function(docs) {
|
|
app.apiDocs = docs;
|
|
util.notify("Data fetched successfully!");
|
|
recline.showDialog('jsonTree');
|
|
},
|
|
function (err) {
|
|
util.hide('dialog');
|
|
util.notify("Data fetch error: " + err.responseText);
|
|
}
|
|
);
|
|
})
|
|
},
|
|
uploadImport: function() {
|
|
$('.dialog-content .okButton').click(function(e) {
|
|
util.hide('dialog');
|
|
util.notify("Saving documents...", {persist: true, loader: true});
|
|
costco.uploadCSV();
|
|
})
|
|
},
|
|
jsonTree: function() {
|
|
util.renderTree(app.apiDocs);
|
|
$('.dialog-content .okButton').click(function(e) {
|
|
util.hide('dialog');
|
|
util.notify("Saving documents...", {persist: true, loader: true});
|
|
costco.uploadDocs(util.lookupPath(util.selectedTreePath())).then(function(msg) {
|
|
util.notify("Docs saved successfully!");
|
|
recline.initializeTable(app.offset);
|
|
});
|
|
})
|
|
},
|
|
pasteImport: function() {
|
|
$('.dialog-content .okButton').click(function(e) {
|
|
util.notify("Uploading documents...", {persist: true, loader: true});
|
|
try {
|
|
var docs = JSON.parse($('.data-table-cell-copypaste-editor').val());
|
|
} catch(e) {
|
|
util.notify("JSON parse error: " + e);
|
|
}
|
|
if (docs) {
|
|
if(_.isArray(docs)) {
|
|
costco.uploadDocs(docs).then(
|
|
function(docs) {
|
|
util.notify("Data uploaded successfully!");
|
|
recline.initializeTable(app.offset);
|
|
util.hide('dialog');
|
|
},
|
|
function (err) {
|
|
util.hide('dialog');
|
|
util.notify("Error uploading: " + err.responseText);
|
|
}
|
|
);
|
|
} else {
|
|
util.notify("Error: JSON must be an array of objects");
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
app.sammy = $.sammy(function () {
|
|
this.get('', app.handler);
|
|
this.get("#/", app.handler);
|
|
this.get("#:route", app.handler);
|
|
this.get("#:route/:id", app.handler);
|
|
});
|
|
|
|
$(function() {
|
|
util.traverse = require('traverse');
|
|
app.sammy.run();
|
|
}) |