server/src/assets/js/mtdc-save.js
changeset 90 00c9bb0f6f37
--- /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();
+};