You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/js/bootstrap-form-builder/js/views/snippet.js

79 lines
2.5 KiB
JavaScript

define([
"jquery", "mustache", "underscore", "class",
"text!templates/popover/popover-main.html",
"text!templates/popover/popover-input.html",
"text!templates/popover/popover-select.html",
"text!templates/popover/popover-textarea.html",
"text!templates/popover/popover-textarea-split.html",
"text!templates/popover/popover-checkbox.html",
"templates/snippet/snippet-templates",
"bootstrap"
], function(
$, Mustache, _, Class,
_PopoverMain,
_PopoverInput,
_PopoverSelect,
_PopoverTextArea,
_PopoverTextAreaSplit,
_PopoverCheckbox,
_snippetTemplates
){
return Class.extend({
init: function(options){
this.clsname = "SnippetView";
this.options = options;
if("model" in options){
this.model = options.model;
}
this.$el = $('<div/>').addClass("component");
if(this.events != null)
_.each(this.events, $.proxy(function(val, key) {
//console.log($.proxy(this[this.events[key]],this));
this.$el.bind(key, $.proxy(this[this.events[key]],this));
}, this)
);
this.template = _.partial(Mustache.to_html,
_snippetTemplates[this.model.idFriendlyTitle()]);
this.popoverTemplates = {
"input" : _.partial(Mustache.to_html,_PopoverInput),
"select" : _.partial(Mustache.to_html,_PopoverSelect),
"textarea" : _.partial(Mustache.to_html,_PopoverTextArea),
"textarea-split" : _.partial(Mustache.to_html,_PopoverTextAreaSplit),
"checkbox" : _.partial(Mustache.to_html,_PopoverCheckbox)
}
},
render: function(withAttributes){
var that = this;
var popover_form_text = _.reduce(this.model.get("fields"), function(str, v, k){
v["name"] = k;
return str + that.popoverTemplates[v["type"]](v);
}, "");
var content = Mustache.to_html(_PopoverMain , {
"title": that.model.get("title"),
"items" : that.model.get("fields"),
"popoverTemplates": that.popoverTemplates,
"compiled" : popover_form_text
});
//console.log(content);
if (withAttributes) {
return this.$el.html(
that.template(that.model.getValues())
).attr({
"data-content" : content,
"data-title" : that.model.get("title"),
"data-trigger" : "manual",
"data-html" : true
});
} else {
return this.$el.html(
that.template(that.model.getValues())
);
}
}
});
});