define(function(require) { var AbstractEditStream = require('views/content/AbstractEditStream'); var api = require('util/api'); var l10nBrowser = require('l10n-browser'); var template = require('text!templates/content/editChannel.html'); var localTemplate; var EditChannelStream = AbstractEditStream.extend({ events: { 'click .save': 'save', 'click .discard': 'render', 'click .twoStepConfirmation .stepOne': '_renderConfirmButton', 'click .twoStepConfirmation .stepTwo': '_delete' }, initialize: function() { if (!localTemplate) localTemplate = l10nBrowser.localiseHTML(template, {}); this._initialize(); this.model.bind('change', this.render, this); this.model.bind('sync', this.render, this); }, render: function() { this.$el.html(_.template(localTemplate, { metadata: this.model })); this._fillCheckbox(); this._selectDefaultRole(); }, save: function() { this._save(this.model, this._enableSaveButton); this._disableSaveButton(); }, _enableSaveButton: function() { this.$('.save').removeClass('disabled').text('Save'); }, _disableSaveButton: function() { this.$('.save').addClass('disabled').text('Saving...'); }, _fillCheckbox: function() { this._check(this.$('#channel_public_access'), this._hasPublicAccess()); }, _hasPublicAccess: function() { return this.model.accessModel() === 'open'; }, _selectDefaultRole: function() { if (this.model.defaultAffiliation() === 'publisher') { this.$('#channel_default_role').val('followerPlus'); } }, _renderConfirmButton: function() { this.$('.twoStepConfirmation').toggleClass('confirmed'); }, _delete: function() { var self = this; var options = { type: 'DELETE', url: api.url(this.model.channel), crossDomain: true, xhrFields: {withCredentials: true}, contentType: false, processData: false, beforeSend: function(xhr) { xhr.setRequestHeader('Authorization', self.options.user.credentials.authorizationHeader()); }, statusCode: { 200: function() { Events.trigger('navigate', '/'); } } }; $.ajax(options); } }); return EditChannelStream; });
define(function(require) { var $ = require('jquery'); var AbstractEditStream = require('views/content/AbstractEditStream'); var api = require('util/api'); var Backbone = require('backbone'); var ChannelMetadata = require('models/ChannelMetadata'); var config = require('config'); var l10nBrowser = require('l10n-browser'); var Events = Backbone.Events; var template = require('text!templates/content/createChannel.html'); var localTemplate; var CreateChannelStream = AbstractEditStream.extend({ events: { 'click .save': 'create', 'click .discard': 'render' }, initialize: function() { if (!localTemplate) localTemplate = l10nBrowser.localiseHTML(template, {}); this._initialize(); this.render(); }, render: function() { this.$el.html(_.template(localTemplate, { domain: this._topicsDomain() })); }, _topicsDomain: function() { return '@topics.' + config.homeDomain; }, create: function() { var channel = this._getChannel(); var self = this; if (channel) { channel += this._topicsDomain(); this.model = new ChannelMetadata(channel); var options = { type: 'POST', url: api.url(this.model.channel), crossDomain: true, xhrFields: {withCredentials: true}, contentType: false, processData: false, beforeSend: function(xhr) { xhr.setRequestHeader('Authorization', self.options.user.credentials.authorizationHeader()); }, statusCode: { 200: function() { self.saveMetadata(); } } }; $.ajax(options); this._disableCreateButton(); } }, saveMetadata: function() { this._save(this.model, this.redirectToChannel()); }, redirectToChannel: function() { var self = this; return function() { Events.trigger('navigate', self.model.channel); Events.trigger('metadataChanged', self.model.channel); } }, _disableCreateButton: function() { this.$('.save').addClass('disabled').text('Creating...'); }, _getChannel: function() { return this.$('#channel_jid').val(); }, _check: function(element, value) { if (element) { element.attr('checked', value); } } }); return CreateChannelStream; });