view static/add.js @ 19:9fc1f5c8aa4e

working on the 'share' selectbox ui Ignore-this: 5e6f80568920eb3aab9e56bdfb509d19
author Drew Perttula <drewp@bigasterisk.com>
date Sun, 17 Mar 2013 00:49:27 -0700
parents e054949143e9
children 8008ec2fd763
line wrap: on
line source

var model = {
    linkRecord: {
        href: ko.observable(""),
        description: ko.observable(""),
        tag: ko.observable(""),
        extended: ko.observable(""),
        private: ko.observable(false),
        shareWith: ko.observableArray([]), // foaf uris
    },
    submitLabel: ko.observable("Add"),
};

ko.computed(function() {
    if (model.linkRecord.href() == "") {
        return;
    }

    $.getJSON("addLink/proposedUri", {uri: model.linkRecord.href()}, function (data) {
        // these could arrive after the user has started typing in the fields!
        
        model.linkRecord.description(data.description);
        model.linkRecord.tag(data.tag);
        model.linkRecord.extended(data.extended);
        model.linkRecord.shareWith(data.shareWith);
        model.submitLabel(data.existed ? "Update existing" : "Add");
        
    });
    
});

ko.applyBindings(model);

(function (inputElem, model) {
    inputElem.select2({
        tokenSeparators: [",", " "],
        ajax: {
            url: "/foaf/findPerson",
            data: function (term, page) {
                return {q: term};
            },
            results: function (data, page) {
                var ret = {
                    results: data.people.map(
                        function (row) {
                            return {id: row.uri,
                                    text: row.label + " ("+row.uri+")"};
                        }),
                    more: false,
                    context: {}
                };
                //ret.results.push({id: "new1", text: this.context});
                return ret;
            }
        },
        tags: [],
    });
    inputElem.on('change', function (e) {
        console.log("onchange", inputElem.select2('val'));
        setModelFromShares(inputElem.select2('val'));
    });

    var enableModel = true;

    var setSharesFromModel = ko.computed(
        function () {
            var uris = ko.utils.arrayGetDistinctValues(model.linkRecord.shareWith());
            if (!enableModel) {
                return;
            }
            console.log("from model", uris)

            inputElem.select2("data", uris.map(
                function (uri) {
                    return {id: uri, text: "("+uri+")"};
                }));
        });

    function setModelFromShares(n) {
        console.log("from val", inputElem.select2("val"), "new", n)
        enableModel = false;
        model.linkRecord.shareWith(inputElem.select2("val"));
        enableModel = true;
    }
    
    //  setSharesFromModel();
})($("#shareWith"), model);