diff -r 4196849b15d3 -r 00c9bb0f6f37 server/src/assets/js/mtdc-save.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/src/assets/js/mtdc-save.js Mon Jul 25 12:13:09 2016 +0200 @@ -0,0 +1,116 @@ +/* globals Rkns */ +/* Saves the Full JSON at each modification */ + +Rkns.mtdcJsonIO = function(_renkan, _opts) { + var _proj = _renkan.project; + if (typeof _opts.http_method === 'undefined') { + _opts.http_method = 'PUT'; + } + var _load = function() { + _proj.set({ + loadingStatus : true + }); + Rkns.$.getJSON(_opts.url, function(_data) { + _renkan.dataloader.load(_data); + _renkan.setCurrentUser(_opts.user_id, _opts.user_name); + _proj.set({ + loadingStatus : false + }); + _proj.set({ + saveStatus : 0 + }); + _proj.on('add:nodes add:edges add:users add:views', function(_model) { + _model.on('change remove', function() { + _thrSave(); + }); + _thrSave(); + }); + _proj.on('change', function() { + if (!(_proj.changedAttributes.length === 1 && _proj + .hasChanged('saveStatus'))) { + _thrSave(); + } + }); + _proj.get('nodes').each(function(_node) { + _node.on('change remove', function() { + _thrSave(); + }); + }); + _proj.get('edges').each(function(_edge) { + _edge.on('change remove', function() { + _thrSave(); + }); + }); + _proj.get('users').each(function(_user) { + _user.on('change remove', function() { + _thrSave(); + }); + }); + + }).fail(function(jqXHR, textStatus) { + _showErrorModal(jqXHR, textStatus); + }); + }; + var _save = function() { + _proj.set({ + saveStatus : 2 + }); + var _data = _proj.toJSON(); + if (!_renkan.read_only) { + Rkns.$.ajax({ + type : _opts.http_method, + url : _opts.url, + contentType : 'application/json', + data : JSON.stringify(_data), + success : function(data) { + _proj.set({ + saveStatus : 0, + updated : data.updated + }); + }, + error: function (jqXHR, textStatus, errorThrown) { + _showErrorModal(jqXHR, textStatus, errorThrown); + } + }); + } + + }; + var _thrSave = Rkns._.debounce(_save, 1000); + + + Rkns.$('#renkanErrorReload').on('click', function(){ + location.reload(); + }); + + var errorModal = document.getElementById('renkanErrorModal'); + var _showErrorModal = function(jqXHR) { + errorModal.style.display = 'block'; + switch(jqXHR.status){ + case 400: + var jsonResp = JSON.parse(jqXHR.responseText); + if(jsonResp.hasOwnProperty('validation_timestamp')){ + document.getElementById('400Error_timestamp').style.display = 'block'; + } + else { + Rkns.$('#400Error_other').append(jqXHR.responseText); + document.getElementById('400Error_other').style.display = 'block'; + } + break; + case 403: + document.getElementById('403Error').style.display = 'block'; + break; + case 404: + document.getElementById('404Error').style.display = 'block'; + break; + case 500: + Rkns.$('#500Error').append(jqXHR.responseText); + document.getElementById('500Error').style.display = 'block'; + break; + case 503: + document.getElementById('503Error').style.display = 'block'; + break; + } + }; + + _load(); +};