Beispiel #1
0
    _.each(this._IMPORT_OPTIONS, function(imp,i) {
      var pane = '';

      // Check if import option function exists
      var fn = self['_check' + i + 'Import'];
      var isEnabled = (fn && fn(imp, self));

      if (( isEnabled || isEnabled === undefined ) && !_.isEmpty(imp)) {
        pane = new imp.className(
          _.extend(
            ( imp.options || {} ),
            {
              user: self.user,
              title: imp.title
            }
          )
        );
      } else if (imp.fallback) {
        pane = new ImportFallback({
          template: imp.fallback
        });
      }

      if (pane) {
        pane.render();
        pane.bind('change', self._setUploadModel, self);
        self.importPanes.addTab(imp.name, pane);
        self.addView(pane);
      }
    });
  headerSteps: function() {
    var steps = [];

    var currentStep = this.get('currentStep');
    var firstStep = this.get('prevSteps')[0] || currentStep;
    var isFinished = true;
    if (firstStep) {
      var Model = firstStep.constructor;
      while (Model) {
        if (Model.header) {
          var isCurrent = Model === currentStep.constructor;
          if (isCurrent) {
            isFinished = false;
          }
          steps.push(
            _.extend({
              isFinished: isFinished,
              isCurrent: isCurrent
            }, Model.header)
          );
        }

        Model = Model === Model.nextStep ? undefined : Model.nextStep;
      }
    }

    return steps;
  },
  initialize: function (attrs, opts) {
    if (!opts.key) throw new Error('key is required');
    if (!opts.configModel) throw new Error('configModel is required');

    this._configModel = opts.configModel;
    this.attributes = _.extend({ notifications: attrs }, { key: opts.key });
  },
 _importingRemote: function(m) {
   this.model.set(
     _.extend(
       m.toJSON(),
       {
         state: 'importing'
       }
     )
   );
 },
 _onMapError: function(m) {
   this.model.set(
     _.extend(
       m.toJSON(),
       {
         state: 'error'
       }
     )
   );
 }
 _creatingMap: function(m) {
   this.model.set(
     _.extend(
       m.toJSON(),
       {
         state: 'creating'
       }
     )
   );
 },
 _onImportFailed: function(m) {
   this.model.set(
     _.extend(
       m.toJSON(),
       {
         state: 'error'
       }
     )
   );
 },
  _createVis: function () {
    var apiURLTemplate = _.template('<%= baseURL %>/api/v2/viz/<%= uuid %>/viz.json');

    var loadingTime = cdb.core.Profiler.metric('cartodb-js.embed.time_full_loaded').start();
    var visReadyTime = cdb.core.Profiler.metric('cartodb-js.embed.time_vis_loaded').start();

    var vizUrl = apiURLTemplate({
      baseURL: this.mapOwnerUser.get('base_url'),
      uuid: this.vizdata.id,
      owner: this.data.config.user_name
    });

    var mapOptions = _.extend({},
      MapOptionsHelper.getMapOptions(),
      PUBLIC_MAP_DEFAULT_OPTIONS);

    if (this.password) {
      vizUrl = vizUrl + '?password='******'fullscreen');

      visReadyTime.end();
      vis.on('load', function () {
        loadingTime.end();
      });

      if (fullscreen) {
        fullscreen.options.doc = '.cartodb-public-wrapper';
        fullscreen.model.set('allowWheelOnFullscreen', true);
      }

      self.vis = vis;
      self._sendStats();
      self.$('.js-spinner').remove();
    })
    .on('error', this._manageError);
  },
Beispiel #9
0
    cdb.god.bind('openCreateDialog', function(d) {
      var createModel;
      d = d || {};
      if (d.type === 'dataset') {
        createModel = new CreateDatasetModel({}, {
          user: currentUser
        });
      } else {
        createModel = new CreateMapModel({}, _.extend({
          user: currentUser
        }, d));
      }

      var createDialog = new CreateDialog({
        model: createModel,
        user: currentUser,
        clean_on_hide: true
      });

      createModel.bind('startTutorial', function() {
        createDialog.close();

        var dlg = new VideoTutorialView({
          clean_on_hide: true,
          enter_to_confirm: false
        })
        cdb.god.trigger("onTemplateSelected", this);
        dlg.appendToBody();
      });

      createModel.bind('datasetCreated', function(tableMetadata) {
        if (router.model.isDatasets()) {
          var vis = new cdb.admin.Visualization({ type: 'table' });
          vis.permission.owner = currentUser;
          vis.set('table', tableMetadata.toJSON());
          window.location = vis.viewUrl(currentUser).edit();
        } else {
          var vis = new cdb.admin.Visualization({ name: DEFAULT_VIS_NAME });
          vis.save({
            tables: [ tableMetadata.get('id') ]
          },{
            success: function(m) {
              window.location = vis.viewUrl(currentUser).edit();
            },
            error: function(e) {
              createDialog.close();
              collection.trigger('error');
            }
          });
        }
      }, this);

      createDialog.appendToBody();
      createModel.viewsReady();
    });
var _addDatasetData = function (dataset, mapOwnerUser) {
  return _.extend(dataset, {
    avatar_url: mapOwnerUser.get('avatar_url'),
    username: mapOwnerUser.get('username'),
    nameOrUsername: mapOwnerUser.nameOrUsername(),
    publicTableUrl: mapOwnerUser.get('base_url') + '/tables/' + dataset.name + '/public',
    addLikeUrl: mapOwnerUser.get('base_url') + '/viz/' + dataset.id + '/like',
    updatedAt: moment(dataset.updated_at).fromNow(),
    parsedDescription: _parsedDescription(dataset.description)
  });
};
 _initCalendar: function() {
   var self = this;
   this._$calendar().DatePicker(
     _.extend(this.options, this.model.attributes, {
       onChange: function(formatted, date) {
         self.trigger('onDateSelected', date, this);
         self.hide();
       }
     })
   );
 },
 _initCalendar: function() {
   var self = this;
   this._$calendar().DatePicker(
     _.extend(this.options, this.model.attributes, {
       onChange: function(formatted) {
         self.model.set('date', formatted);
         self.$('.js-date-str').text(formatted);
         self.hide();
       }
     })
   );
 },
  forCurrentState: function(override) {
    // Since JS is an object we can add the options directly on the start value and let each compose method attach its
    // path based on given options.
    var array = _.extend([ this.forCurrentContentType() ], override);

    var baseUrl = _.compose(
      this._appendPage,
      this._appendSearch,
      this._appendLocked,
      this._appendLibrary,
      this._appendSharedOrLiked
    )(array)
      .join('/');

    return new cdb.common.Url({
      base_url: baseUrl
    });
  },
  render: function() {
    var self = this;

    this.clearSubViews();

    this.$el.append(
      this.template(
        _.extend(
          this.model.attributes,
          { max_days: this._MAX_RANGE }
        )
      )
    );

    setTimeout(function() {
      self._initCalendar();
      self._hideCalendar();
      self._initTimers();
    }, 100);

    return this;
  },
Beispiel #15
0
  getError: function() {
    if (this.hasFailed()) {
      var step = this.get('step');
      return _.extend(
        {
          error_code: this[step === "upload" ? 'upl' : 'imp'].get('error_code'),
          item_queue_id: step === "import" ? this.imp.get('id') : '',
          original_url: step === "import" ? this.imp.get('original_url') : '',
          data_type: step === "import" ? this.imp.get('data_type') : '',
          http_response_code: step === "import" ? this.imp.get('http_response_code') : '',
          http_response_code_message: step === "import" ? this.imp.get('http_response_code_message') : ''
        }
        ,
        this[step === "upload" ? 'upl' : 'imp'].get('get_error_text')
      )
    }

    return {
      title: '',
      what_about: '',
      error_code: ''
    }
  },
  _initCalendar: function() {
    var selector = '.DatePicker-calendar';

    // Can't initialize calendar if not already present in document... avoid errors being thrown
    if (!document.body.contains(this.$(selector)[0])) return;

    this.calendar = this.$(selector).DatePicker(
      _.extend(this.options, {
        onChange: this._onDatesChange,
        onRender: function(d) { // Disable future dates and dates < 30 days ago

          var date = d.valueOf();
          var now = new Date();

          var thirtyDaysAgo = new Date();
          thirtyDaysAgo.setDate(now.getDate() - 30);

          return (date < thirtyDaysAgo) || (date > now) ? { disabled: true } : ''

        }
      })
    );
  },
 events: function () {
   return _.extend({}, BaseDialog.prototype.events, {
     'click .js-ok': '_continue'
   });
 },
Beispiel #18
0
  cdb.init(function() {
    cdb.templates.namespace = 'cartodb/';

    cdb.config.set('url_prefix', user_data.base_url);
    cdb.config.set(window.config); // import config

    $(document.body).bind('click', function () {
      cdb.god.trigger('closeDialogs');
    });

    var currentUser = window.currentUser = new cdb.admin.User(
      _.extend(
        window.user_data,
        {
          can_change_email: can_change_email,
          logged_with_google: false,
          google_enabled: false
        }
      )
    );

    var headerView = new HeaderView({
      el:             $('#header'), //pre-rendered in DOM by Rails app
      model:          currentUser,
      viewModel:      new HeaderViewModel(),
      localStorage:   new LocalStorage()
    });
    headerView.render();

    var supportView = new SupportView({
      el: $('#support-banner'),
      user: currentUser
    });
    supportView.render();

    var upgradeMessage = new UpgradeMessage({
      model: currentUser
    });

    $('.Header').after(upgradeMessage.render().el);

    // Avatar
    if (this.$('.js-avatarSelector').length > 0) {
      var avatarSelector = new AvatarSelector({
        el: this.$('.js-avatarSelector'),
        renderModel: new cdb.core.Model({
          inputName: this.$('.js-fileAvatar').attr('name'),
          name: currentUser.get('name') || currentUser.get('username'),
          avatar_url: currentUser.get('avatar_url'),
          id: currentUser.get('id')
        }),
        avatarAcceptedExtensions: window.avatar_valid_extensions
      });

      avatarSelector.render();
    }

    // User deletion
    if (this.$('.js-deleteAccount').length > 0 && window.authenticity_token) {
      this.$('.js-deleteAccount').click(function(ev) {
        if (ev) {
          ev.preventDefault();
        }
        new DeleteAccount({
          authenticityToken: window.authenticity_token,
          clean_on_hide: true,
          user: currentUser
        }).appendToBody();
      })
    }

    // Google + behaviour!
    // If iframe is not present, we can't do anything
    if (window.iframe_src) {
      var googlePlus = new GooglePlus({
        model: currentUser,
        iframeSrc: iframe_src
      });

      googlePlus.hide();
      this.$('.js-confirmPassword').parent().after(googlePlus.render().el);
    }

    // Services items
    if (window.services_list && window.services_list.length > 0) {
      _.each(window.services_list, function(d, i) {
        var serviceItem = new ServiceItem({
          model: new cdb.core.Model(_.extend({ state: 'idle' }, d))
        });
        $('.js-datasourcesContent').after(serviceItem.render().el);
      });
    }
  });
Beispiel #19
0
 _.each(window.services_list, function(d, i) {
   var serviceItem = new ServiceItem({
     model: new cdb.core.Model(_.extend({ state: 'idle' }, d))
   });
   $('.js-datasourcesContent').after(serviceItem.render().el);
 });
Beispiel #20
0
    var dataLoaded = function () {
      var data = window.CartoConfig.data;
      var userData = data.user_data;
      var config = data.config;
      var dashboard_notifications = data.dashboard_notifications;

      cdb.templates.namespace = 'cartodb/';

      if (userData) {
        cdb.config.set('url_prefix', userData.base_url);
        cdb.config.set(config);
      } else {
        userData = {};
      }

      var currentUser = new cdb.admin.User(
        _.extend(userData, {
          auth_username_password_enabled: data.auth_username_password_enabled,
          can_be_deleted: data.can_be_deleted,
          can_change_email: data.can_change_email,
          can_change_password: data.can_change_password,
          cant_be_deleted_reason: data.cant_be_deleted_reason,
          logged_with_google: data.google_sign_in,
          plan_name: data.plan_name,
          plan_url: data.plan_url,
          services: data.services,
          should_display_old_password: data.should_display_old_password
        })
      );

      document.title = _t('account.title');

      cdb.config.set('user', currentUser);

      if (!cdb.config.get('cartodb_com_hosted')) {
        if (currentUser.get('actions').builder_enabled && currentUser.get('show_builder_activated_message') &&
            _.isEmpty(dashboard_notifications)) {
          var userNotificationModel = new UserNotificationModel(dashboard_notifications, {
            key: 'dashboard',
            configModel: cdb.config
          });

          var dashboardNotification = new UserNotificationView({
            notification: userNotificationModel
          });

          window.dashboardNotification = dashboardNotification;
        }
      }

      var accountMainView = new AccountMainView({
        el: document.body,
        user: currentUser,
        config: config,
        client: client
      });

      $(document.body).bind('click', function () {
        cdb.god.trigger('closeDialogs');
      });
    }
 _createItemView: function(d) {
   return new GeometryItemView(_.extend({
     model: this.model,
     availableGeometries: this.availableGeometries
   }, d));
 },
Beispiel #22
0
LocalStorageWrapper.prototype.set = function(data) {
  if (!this.isEnabled()) return null;
  var d = _.extend(this.get(), data);
  return localStorage.setItem(this.name, JSON.stringify(d));
}