client/js/save-once.js
author veltr
Wed, 13 Mar 2013 10:24:23 +0100
changeset 74 c059efca2d7a
parent 67 d341117f9370
child 105 810a1c1015df
permissions -rw-r--r--
URL-only list possible
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     1
/* Saves the Full JSON once */
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     2
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     3
Rkns.jsonIO = function(_renkan, _opts) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     4
    var _proj = _renkan.project,
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     5
        _saveWarn = false,
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     6
        _onLeave = function() {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     7
            return "Project not saved";
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     8
        };
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
     9
    if (typeof _opts.http_method == "undefined") {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    10
        _opts.http_method = 'POST';
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    11
    }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    12
    var _load = function() {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    13
        var getdata = {},
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    14
            rx = /id=([^&#?=]+)/,
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    15
            matches = document.location.hash.match(rx);
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    16
        if (matches) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    17
            getdata.id = matches[1];
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    18
        }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    19
        Rkns.$.ajax({
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    20
            url: _opts.url,
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    21
            data: getdata,
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    22
            success: function(_data) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    23
                _proj.set(_data);
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    24
            }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    25
        });
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    26
    }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    27
    var _save = function() {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    28
        _proj.set("saved_at", new Date());
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    29
        var _data = _proj.toJSON();
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    30
        Rkns.$.ajax({
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    31
            type: _opts.http_method,
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    32
            url: _opts.url,
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    33
            contentType: "application/json",
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    34
            data: JSON.stringify(_data),
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    35
            success: function(data, textStatus, jqXHR) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    36
                $(window).off("beforeunload", _onLeave);
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    37
                _saveWarn = false;
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    38
                document.location.hash = "#id=" + data.id;
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    39
                $(".Rk-Notifications").text("Saved as "+document.location.href).fadeIn().delay(2000).fadeOut();
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    40
            }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    41
        });
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    42
    }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    43
    var _checkLeave = function() {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    44
        var title = _proj.get("title");
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    45
        if (title && _proj.get("nodes").length) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    46
            $(".Rk-Save-Button").removeClass("disabled");
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    47
        } else {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    48
            $(".Rk-Save-Button").addClass("disabled");
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    49
        }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    50
        if (title) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    51
            $(".Rk-PadTitle").css("border-color","#333333");
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    52
        }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    53
        if (!_saveWarn) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    54
            _saveWarn = true;
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    55
            $(window).on("beforeunload", _onLeave);
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    56
        }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    57
    }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    58
    _load();
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    59
    _proj.on("add:nodes add:edges add:users change", function(_model) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    60
        _model.on("change remove", function(_model) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    61
            _checkLeave();
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    62
        });
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    63
        _checkLeave();
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    64
    });
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    65
    $(".Rk-Save-Button").click(function() {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    66
        if ($(this).hasClass("disabled")) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    67
            if (!_proj.get("title")) {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    68
                $(".Rk-PadTitle").css("border-color","#ff0000");
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    69
            }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    70
        } else {
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    71
            _save();
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    72
        }
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    73
    });
e0f6f3c31150 Added colors !
veltr
parents:
diff changeset
    74
}