summaryrefslogtreecommitdiffstats
path: root/pyload/web/app/scripts/views/accounts
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/web/app/scripts/views/accounts')
-rw-r--r--pyload/web/app/scripts/views/accounts/accountEdit.js41
-rw-r--r--pyload/web/app/scripts/views/accounts/accountListView.js52
-rw-r--r--pyload/web/app/scripts/views/accounts/accountModal.js72
-rw-r--r--pyload/web/app/scripts/views/accounts/accountView.js48
4 files changed, 213 insertions, 0 deletions
diff --git a/pyload/web/app/scripts/views/accounts/accountEdit.js b/pyload/web/app/scripts/views/accounts/accountEdit.js
new file mode 100644
index 000000000..503860a5e
--- /dev/null
+++ b/pyload/web/app/scripts/views/accounts/accountEdit.js
@@ -0,0 +1,41 @@
+define(['jquery', 'underscore', 'app', 'views/abstract/modalView', 'views/input/inputRenderer', 'hbs!tpl/accounts/editAccount', 'hbs!tpl/settings/configItem'],
+ function($, _, App, modalView, renderForm, template, templateItem) {
+ 'use strict';
+ return modalView.extend({
+
+ events: {
+ 'click .btn-save': 'save',
+ 'submit form': 'save'
+ },
+
+ template: template,
+
+ initialize: function() {
+ // Inherit parent events
+ this.events = _.extend({}, modalView.prototype.events, this.events);
+ },
+
+ onRender: function() {
+ renderForm(this.$('.account-config'),
+ this.model.get('config'),
+ templateItem
+ );
+ },
+
+ save: function() {
+ var password = this.$('#password').val();
+ if (password !== '') {
+ this.model.setPassword(password);
+ }
+ this.model.save();
+ this.hide();
+ return false;
+ },
+
+ onShow: function() {
+ },
+
+ onHide: function() {
+ }
+ });
+ }); \ No newline at end of file
diff --git a/pyload/web/app/scripts/views/accounts/accountListView.js b/pyload/web/app/scripts/views/accounts/accountListView.js
new file mode 100644
index 000000000..37bfba964
--- /dev/null
+++ b/pyload/web/app/scripts/views/accounts/accountListView.js
@@ -0,0 +1,52 @@
+define(['jquery', 'underscore', 'backbone', 'app', 'collections/AccountList', './accountView',
+ 'hbs!tpl/accounts/layout', 'hbs!tpl/accounts/actionbar'],
+ function($, _, Backbone, App, AccountList, accountView, template, templateBar) {
+ 'use strict';
+
+ // Renders settings over view page
+ return Backbone.Marionette.CollectionView.extend({
+
+ itemView: accountView,
+ template: template,
+
+ collection: null,
+ modal: null,
+
+ initialize: function() {
+ this.actionbar = Backbone.Marionette.ItemView.extend({
+ template: templateBar,
+ events: {
+ 'click .btn': 'addAccount'
+ },
+ addAccount: _.bind(this.addAccount, this)
+ });
+
+ this.collection = new AccountList();
+ this.update();
+
+ this.listenTo(App.vent, 'account:updated', this.update);
+ },
+
+ update: function() {
+ this.collection.fetch();
+ },
+
+ onBeforeRender: function() {
+ this.$el.html(template());
+ },
+
+ appendHtml: function(collectionView, itemView, index) {
+ this.$('.account-list').append(itemView.el);
+ },
+
+ addAccount: function() {
+ var self = this;
+ _.requireOnce(['views/accounts/accountModal'], function(Modal) {
+ if (self.modal === null)
+ self.modal = new Modal();
+
+ self.modal.show();
+ });
+ }
+ });
+ }); \ No newline at end of file
diff --git a/pyload/web/app/scripts/views/accounts/accountModal.js b/pyload/web/app/scripts/views/accounts/accountModal.js
new file mode 100644
index 000000000..31e05dff6
--- /dev/null
+++ b/pyload/web/app/scripts/views/accounts/accountModal.js
@@ -0,0 +1,72 @@
+define(['jquery', 'underscore', 'app', 'views/abstract/modalView', 'hbs!tpl/dialogs/addAccount', 'helpers/pluginIcon', 'select2'],
+ function($, _, App, modalView, template, pluginIcon) {
+ 'use strict';
+ return modalView.extend({
+
+ events: {
+ 'submit form': 'add',
+ 'click .btn-add': 'add'
+ },
+ template: template,
+ plugins: null,
+ select: null,
+
+ initialize: function() {
+ // Inherit parent events
+ this.events = _.extend({}, modalView.prototype.events, this.events);
+ var self = this;
+ $.ajax(App.apiRequest('getAccountTypes', null, {success: function(data) {
+ self.plugins = _.sortBy(data, function(item) {
+ return item;
+ });
+ self.render();
+ }}));
+ },
+
+ onRender: function() {
+ // TODO: could be a separate input type if needed on multiple pages
+ if (this.plugins)
+ this.select = this.$('#pluginSelect').select2({
+ escapeMarkup: function(m) {
+ return m;
+ },
+ formatResult: this.format,
+ formatSelection: this.format,
+ data: {results: this.plugins, text: function(item) {
+ return item;
+ }},
+ id: function(item) {
+ return item;
+ }
+ });
+ },
+
+ onShow: function() {
+ },
+
+ onHide: function() {
+ },
+
+ format: function(data) {
+ return '<img class="logo-select" src="' + pluginIcon(data) + '"> ' + data;
+ },
+
+ add: function(e) {
+ e.stopPropagation();
+ if (this.select) {
+ var plugin = this.select.val(),
+ login = this.$('#login').val(),
+ password = this.$('#password').val(),
+ self = this;
+
+ $.ajax(App.apiRequest('updateAccount', {
+ plugin: plugin, loginname: login, password: password
+ }, { success: function(data) {
+ App.vent.trigger('account:updated', data);
+ self.hide();
+ }}));
+ }
+ return false;
+ }
+ });
+ }); \ No newline at end of file
diff --git a/pyload/web/app/scripts/views/accounts/accountView.js b/pyload/web/app/scripts/views/accounts/accountView.js
new file mode 100644
index 000000000..f49deb0a6
--- /dev/null
+++ b/pyload/web/app/scripts/views/accounts/accountView.js
@@ -0,0 +1,48 @@
+define(['jquery', 'underscore', 'backbone', 'app', 'hbs!tpl/accounts/account'],
+ function($, _, Backbone, App, template) {
+ 'use strict';
+
+ return Backbone.Marionette.ItemView.extend({
+
+ tagName: 'div',
+ className: 'row-fluid',
+ template: template,
+
+ events: {
+ 'click .btn-success': 'toggle',
+ 'click .btn-blue': 'edit',
+ 'click .btn-yellow': 'refresh',
+ 'click .btn-danger': 'deleteAccount'
+ },
+
+ modelEvents: {
+ 'change': 'render'
+ },
+
+ modal: null,
+
+ toggle: function() {
+ this.model.set('activated', !this.model.get('activated'));
+ this.model.save();
+ },
+
+ edit: function() {
+ // TODO: clean the modal on view close
+ var self = this;
+ _.requireOnce(['views/accounts/accountEdit'], function(Modal) {
+ if (self.modal === null)
+ self.modal = new Modal({model: self.model});
+
+ self.modal.show();
+ });
+ },
+
+ refresh: function() {
+ this.model.fetch({refresh: true});
+ },
+
+ deleteAccount: function() {
+ this.model.destroy();
+ }
+ });
+ }); \ No newline at end of file