Skip to content
main.js 4.65 KiB
Newer Older
var TSM = {
    setChanged: function (id, isChanged) {
        console.log(id, isChanged);
        if (isChanged) {
            $('#' + id).addClass('changed');
        } else {
            $('#' + id).removeClass('changed');
        }
    },
    openModal: function (id) {
        $('#' + id).modal('show');
    },
    closeModal: function (id) {
        $('#' + id).modal('hide');
    },
    fakeSumbit: function (event, id) {
        if (event.keyCode === 13) {
            $('#' + id).click();
        }
    },
    sendCommand: function (target, command, params) {
        $('#_target').val(target);
        $('#_command').val(command);
        $('#_params').val(params);
        $('#_form').submit();
    }
};

function onChangeTextFieldFactory(element) {
    return function () {
        $field = $(element);
        $.post('index.jsp', {
            container: $field.attr('data-container'),
            key: $field.attr('data-key'),
            value: $field.val()
        }, function (result) {
            if (result) {
                $field.addClass('changed');
            } else {
                $field.removeClass('changed');
            }
        });
    };
}

var modelNames = ['schemas', 'schemaValues', 'tables', 'tableValues', 'columns', 'columnValues', 'selectorModal'];

var models = {};

function compileModels() {
    for (var i = 0; i < modelNames.length; i++) {
        var name = modelNames[i];
        var directive;
        switch (name) {
            case 'schemas':
            case 'tables':
                directive = {
                    'li.removable-tab': {
                        'tab<-': {
                            '.tabTitle': 'tab.title',
                            '@class': function (ctx) {
                                var attrValues = ['removable-tab'];
                                if (ctx.item.toRemove) {
                                    attrValues.push('strikeout');
                                }
                                if (ctx.item.active) {
                                    attrValues.push('active');
                                }
                                return attrValues.join(' ');
                            }
                        }
                    }
                };
                break;
            case 'columns':
                directive = {
                    'li': {
                        'column<-': {
                            '.columnName': 'column.title'
                        }
                    }
                }
                break;
            case 'schemaValues':
            case 'tableValues':
                directive = {
                    '[data-edit="description"]@value': 'description.value',
                    '[data-edit="utype"]@value': 'utype.value',
                }
                break;
            case 'columnValues':
                directive = {
                    '[data-edit="description"]@value': 'description.value',
                    '[data-edit="ucd"]@value': 'ucd.value',
                    '[data-edit="unit"]@value': 'unit.value',
                    '[data-edit="utype"]@value': 'utype.value',
                }
                break;
            case 'selectorModal':
                directive = {
                }
                break;
        }

        models[name] = {
            name: name,
            value: null,
            compiled: $p('#' + name).compile(directive)
        };
    }
}

function renderModels(result) {
    for (var key in result) {
        var model = models[key];
        model.value = result[key];
        $p('#' + model.name).render(model.value, model.compiled);
    }
}

function updateModels(selectedModels) {
    $.ajax({
        type: "post",
        url: 'webresources/tapschema/models',
        dataType: 'json',
        contentType: 'application/json',
        data: JSON.stringify(selectedModels),
        success: renderModels
    });
}

$(document).ready(function () {
    $('.editable').each(function (index, element) {
        $(element).on('keyup', onChangeTextFieldFactory(element));
    });

    $('body').on('click', 'a[data-selector]', function (event) {
        $a = $(event.target).closest('a');
        $a.closest('ul').find('li.active').removeClass('active');
        $a.closest('li').addClass('active');
        $.ajax({
            type: "post",
            url: 'webresources/tapschema/select',
            data: {
                containerName: $a.attr('data-selector'),
                entityName: $.trim($a.text())
            },
            dataType: 'json',
            success: renderModels
        });
    });

    compileModels();
    updateModels(['schemas', 'tables', 'columns', 'schemaValues', 'tableValues']);
});