summaryrefslogtreecommitdiffstats
path: root/module/web/app/scripts/views/settings/configSectionView.js
diff options
context:
space:
mode:
authorGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2013-06-08 17:37:43 +0200
committerGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2013-06-08 17:37:44 +0200
commit2cf160d497e501bf254bd8be054c0f5880ab90ca (patch)
tree03a720b6142cc03fe7ef258fa8d17da92b30a462 /module/web/app/scripts/views/settings/configSectionView.js
parentMerge pull request #151 from vuolter/invertedconf (diff)
downloadpyload-2cf160d497e501bf254bd8be054c0f5880ab90ca.tar.xz
restructured webui to single-page-app, removed jinja
Diffstat (limited to 'module/web/app/scripts/views/settings/configSectionView.js')
-rw-r--r--module/web/app/scripts/views/settings/configSectionView.js98
1 files changed, 98 insertions, 0 deletions
diff --git a/module/web/app/scripts/views/settings/configSectionView.js b/module/web/app/scripts/views/settings/configSectionView.js
new file mode 100644
index 000000000..5bbcf1826
--- /dev/null
+++ b/module/web/app/scripts/views/settings/configSectionView.js
@@ -0,0 +1,98 @@
+define(['jquery', 'underscore', 'backbone', 'app', '../abstract/itemView', '../input/inputLoader',
+ 'hbs!tpl/settings/config', 'hbs!tpl/settings/configItem'],
+ function($, _, Backbone, App, itemView, load_input, template, templateItem) {
+
+ // Renders settings over view page
+ return itemView.extend({
+
+ tagName: 'div',
+
+ template: template,
+ templateItem: templateItem,
+
+ // Will only render one time with further attribute updates
+ rendered: false,
+
+ events: {
+ 'click .btn-primary': 'submit',
+ 'click .btn-reset': 'reset'
+ },
+
+ initialize: function() {
+ this.listenTo(this.model, 'destroy', this.destroy);
+ },
+
+ render: function() {
+ if (!this.rendered) {
+ this.$el.html(this.template(this.model.toJSON()));
+
+ // initialize the popover
+ this.$('.page-header a').popover({
+ placement: 'left',
+// trigger: 'hover'
+ });
+
+ var container = this.$('.control-content');
+ var self = this;
+ _.each(this.model.get('items'), function(item) {
+ var json = item.toJSON();
+ var el = $('<div>').html(self.templateItem(json));
+ var inputView = load_input(item.get('input'));
+ var input = new inputView(json).render();
+ item.set('inputView', input);
+
+ self.listenTo(input, 'change', _.bind(self.render, self));
+ el.find('.controls').append(input.el);
+ container.append(el);
+ });
+ this.rendered = true;
+ }
+ // Enable button if something is changed
+ if (this.model.hasChanges())
+ this.$('.btn-primary').removeClass('disabled');
+ else
+ this.$('.btn-primary').addClass('disabled');
+
+ // Mark all inputs that are modified
+ _.each(this.model.get('items'), function(item) {
+ var input = item.get('inputView');
+ var el = input.$el.parent().parent();
+ if (item.isChanged())
+ el.addClass('info');
+ else
+ el.removeClass('info');
+ });
+
+ return this;
+ },
+
+ onDestroy: function(){
+ // TODO: correct cleanup after building up so many views and models
+ },
+
+ submit: function(e) {
+ e.stopPropagation();
+ // TODO: success / failure popups
+ var self = this;
+ this.model.save({success: function(){
+ self.render();
+ App.settingsView.refresh();
+ }});
+
+ },
+
+ reset: function(e) {
+ e.stopPropagation();
+ // restore the original value
+ _.each(this.model.get('items'), function(item) {
+ if (item.has('inputView')) {
+ var input = item.get('inputView');
+ input.setVal(item.get('value'));
+ input.render();
+ }
+ });
+ this.render();
+ }
+
+ });
+ }); \ No newline at end of file