コード例 #1
0
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;
});
コード例 #2
0
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;
});