diff options
Diffstat (limited to 'pyload/web/app/scripts/views/accounts')
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 | 
