summaryrefslogtreecommitdiffstats
path: root/src/main/resources/ui/sqlfiddle/www/javascript/fiddle_backbone/views/SchemaDef.js
blob: cf3f8091f613a9c4a66e41e4296d42b005e481a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
define ([
        "jquery", 
        "Backbone", 
        "Handlebars", 
        "utils/fiddleEditor", 
        "utils/renderTerminator",
        "text!fiddle_backbone/templates/schemaOutput.html", 
        "text!fiddle_backbone/templates/schemaBrowser.html"
    ],
    function ($,Backbone,Handlebars,fiddleEditor,renderTerminator,schemaOutputTemplate,schemaBrowserTemplate) {

    var SchemaDefView = Backbone.View.extend({

        initialize: function (options) {
            this.options = options;
            this.editor = new fiddleEditor(this.id,this.handleSchemaChange, this,
                                            _.bind(function () {
                                                this.model.build();
                                            }, this));

            this.compiledOutputTemplate = Handlebars.compile(schemaOutputTemplate);

            this.compiledSchemaBrowserTemplate = Handlebars.compile(schemaBrowserTemplate);

        },
        handleSchemaChange: function () {

            if (this.model.get("ddl") != this.editor.getValue() || this.model.get("statement_separator") != $(".panel.schema .terminator").data("statement_separator"))
            {
                this.model.set({
                    "ddl":this.editor.getValue(),
                    "statement_separator":$(".panel.schema .terminator").data("statement_separator"),
                    "ready": false
                });

                $(".schema .helpTip").css("display",  this.model.get("ddl").length ? "none" : "block");
                $(".sql .helpTip").css("display",  (!this.model.get("ready") || this.model.get("loading")) ? "none" : "block");

            }

        },
        render: function () {
            this.editor.setValue(this.model.get("ddl"));
            this.updateDependents();
            renderTerminator($(".panel.schema"), this.model.get("statement_separator"));
        },
        renderOutput: function() {
            this.options.output_el.html(
                this.compiledOutputTemplate(this.model.toJSON())
            );
        },
        renderSchemaBrowser: function () {
            this.options.browser_el.html(
                this.compiledSchemaBrowserTemplate({
                    "objects": this.model.get('schema_structure')
                })
            );
        },
        refresh: function () {
            this.editor.refresh();
        },
        updateDependents: function () {

            if (this.model.get("ready"))
            {
                $(".needsReadySchema").unblock();
                $("#schemaBrowser").attr("disabled", false);
                $(".schema .helpTip").css("display",  "none");
                //$(".sql .helpTip").css("display",  (this.model.get('loading') || window.query.get("sql").length) ? "none" : "block");
            }
            else
            {
                $(".needsReadySchema").block({ message: "Please build schema." });
                $("#schemaBrowser").attr("disabled", true);
                $(".schema .helpTip").css("display",  (this.model.get('loading') || this.model.get("ddl").length) ? "none" : "block");

            }

        }

    });

    return SchemaDefView;

});