FlowViz

_

declaration
_

var _ = require('lodash');

var fv = null;

module.exports = DataEditor;

function DataEditor(flowviz) {
    fv = flowviz;
}

DataEditor.prototype.Create = function(selector) {
    d3.select(selector)
        .append('div')
        .attr('class', 'data-editor')
        .append('h1')
        .text("Data Editor");
};

DataEditor.prototype.Show = function(edge) {
    d3.select('.data-editor')
        .selectAll('.data-item')
        .remove();

    var items = [];
    if(edge === undefined) {
        _.forEach(fv.Selection.Current.DataItems, function(item, key) {
            items.push({
                "key": key,
                "value": item
            });
        });
    } else {
        _.forEach(edge.DataItems, function(item, key) {
            items.push({
                "key": key,
                "value": item
            });
        });
    }

    if(items.length > 0) {
        var items = d3.select('.data-editor')
            .selectAll('.data-item')
            .data(items)
            .enter()
            .append('div')
            .attr('class', 'data-item')
            .each(function (d, i) {
                if (d.value.type === "string") {
                    var item = d3.select(this);
                    item.append('span')
                        .attr('class', 'data-label')
                        .text(d.value.desc);

                    item.append('input')
                        .attr('class', 'data-str-input')
                        .attr('id', 'data-str-input-' + i)
                        .call(function () {
                            $('#data-str-input-' + i).val(d.value.value);
                            $('#data-str-input-' + i).on('change keyup paste input', function () {
                                console.log($(this).val());
                                if(!fv.Selection.Current.SetDataItem(d.key,$(this).val())) {
                                    $(this).addClass('data-item-error');
                                } else {
                                    $(this).removeClass('data-item-error');
                                }
                            });
                        });
                } else {
                    var item = d3.select(this);
                    item.append('span')
                        .attr('class', 'data-label')
                        .text(d.value.desc);

                    item.append('input')
                        .attr('class', 'data-num-input')
                        .attr('id', 'data-num-input-' + i)
                        .call(function () {
                            $('#data-num-input-' + i).val(d.value.value);
                            $('#data-num-input-' + i).on('change keyup paste input', function () {
                                var selected = (edge === undefined) ? fv.Selection.Current : edge;
                                if(!selected.SetDataItem(d.key,+$(this).val())) {
                                    $(this).addClass('data-item-error');
                                } else {
                                    $(this).removeClass('data-item-error');
                                }
                            });
                        });
                }
            });

        d3.select('.data-editor').classed('node-selected', true);

    } else {
        this.Hide();
    }
};

DataEditor.prototype.Hide = function() {
    d3.select('.data-editor')
        .classed('node-selected', false);

    d3.select('.data-editor')
        .selectAll('.data-item')
        .remove();
};