Ejemplo n.º 1
0
module.exports = function () {
  return cdb.createVis(document.createElement('div'), {
    bounds: [[24.206889622398023, -84.0234375], [76.9206135182968, 169.1015625]],
    datasource: {
      maps_api_template: 'fake_maps_api_template',
      user_name: 'pepe'
    },
    options: {
      scrollwheel: false
    },
    layers: [{
      type: 'torque',
      maps_api_template: 'fake_maps_api_template',
      options: {
        cartocss: 'hello',
        source: 'a0'
      }
    }],
    analyses: [{
      id: 'a0',
      type: 'source',
      params: {
        query: 'SELECT * FROM foo;'
      }
    }]
  });
};
Ejemplo n.º 2
0
$(function() {
  cdb.init(function() {
    cdb.templates.namespace = 'cartodb/';
    var confirmation = new MainView({
      userCreationId: user_creation_id,
      username: user_name,
      customHosted: is_custom_install,
      userURL: user_url
    });
  });
});
Ejemplo n.º 3
0
 _initViews: function () {
   this._map = cdb.createVis(
     this.$('.js-map'),
     this._visModel.vizjsonURL(),
     {
       legends: false,
       vector: false,
       authToken: this._configModel.get('auth_tokens'),
       mapzenApiKey: this._configModel.get('mapzenApiKey')
     }
   );
 },
Ejemplo n.º 4
0
module.exports = function () {
  return cdb.createVis(document.createElement('div'), {
    bounds: [[24.206889622398023, -84.0234375], [76.9206135182968, 169.1015625]],
    datasource: {
      maps_api_template: 'fake_maps_api_template',
      user_name: 'pepe'
    },
    layers: [{
      type: 'torque',
      maps_api_template: 'fake_maps_api_template'
    }]
  });
};
Ejemplo n.º 5
0
$(function() {
  cdb.init(function() {
    cdb.templates.namespace = 'cartodb/';
    cdb.config.set(window.config); // import config
    if (cdb.config.isOrganizationUrl()) {
      cdb.config.set('url_prefix', cdb.config.organizationUrl());
    }

    var userUrls = new UserUrlsModel({
      upgrade_url: upgrade_url
    }, {
      config: cdb.config
    });
    var router = new Router();
    var user = new cdb.admin.User(user_data);

    // Main view
    var dashboard = new MainView({
      el:          document.body,
      user:        user,
      config:      config,
      router:      router,
      userUrls:    userUrls
    });

    window.dashboard = dashboard;

    // History
    Backbone.history.start({
      pushState:  true,
      root:       cdb.config.prefixUrl() + '/'
    });

    if (window.mixpanel && window.mixpanel_token) {
      new cdb.admin.Mixpanel({
        user: user_data,
        token: window.mixpanel_token
      });
      sendUsageToMixpanel(window.mixpanel, user, window.isFirstTimeViewingDashboard, window.isJustLoggedIn);
    };
  });

});
Ejemplo n.º 6
0
 _createVisMap: function(createVis) {
   return cdb.createVis(this.el, createVis.url, _.defaults(createVis.opts, {
     title:             false,
     header:            false,
     description:       false,
     search:            false,
     layer_selector:    false,
     text:              false,
     image:             false,
     shareable:         false,
     annotation:        false,
     zoom:              false,
     cartodb_logo:      false,
     scrollwheel:       false,
     mobile_layout:     true,
     slides_controller: false,
     legends:           false,
     time_slider:       false,
     loader:            false,
     no_cdn:            false
   }));
 },
Ejemplo n.º 7
0
module.exports = function(opts) {
  var map = cdb.createVis(opts.el, {
    'version': '0.1.0',
    'title': 'default',
    'scrollwheel': opts.scrollwheel !== undefined ? opts.scrollwheel : false,
    'zoom': 6,
    center: [40.7127837, -74.0059413], // NY
    layers: [{
      'options': _.defaults({
          urlTemplate: opts.baselayer.url
        }, opts.baselayer, {
          'order': 0,
          'visible': true,
          'read_only': true
        }),
      'order': 0,
      'tooltip': null,
      'type': 'tiled'
    }]
  });

  return map;
};
Ejemplo n.º 8
0
 createDefaultVis: function () {
   return cdb.createVis(document.createElement('div'), {
     bounds: [[24.206889622398023, -84.0234375], [76.9206135182968, 169.1015625]],
     datasource: {
       maps_api_template: 'asd',
       user_name: 'pepe'
     },
     layers: [
       {
         id: 'layer1',
         type: 'cartodb',
         name: 'Layer Name',
         options: {
           source: 'a0',
           cartocss: '#layer { polygon-fill: #CDCDCD; }'
         }
       }, {
         id: 'layer2',
         type: 'torque',
         name: 'Torque Layer',
         options: {
           source: 'a0',
           cartocss: '#layer { polygon-fill: #CDCDCD; }'
         }
       }
     ],
     analyses: [
       {
         id: 'a0',
         type: 'source',
         params: {
           query: 'SELECT * FROM akhenaton.bad_boys_de_marseille;'
         }
       }
     ]
   });
 }
Ejemplo n.º 9
0
$(function() {
  cdb.init(function() {
    cdb.templates.namespace = 'cartodb/';
    cdb.config.set('url_prefix', user_data.base_url);
    cdb.config.set('default_fallback_basemap', window.default_fallback_basemap);

    // TODO: This is still necessary implicitly, for the Backbone.sync method to work (set in app.js)
    //       once that case is removed we could skip cdb.config completely.
    cdb.config.set(window.config); // import config

    var currentUser = new cdb.admin.User(window.user_data);

    if (currentUser.featureEnabled('active_record_vis_endpoint')) {
      applyPatchNewVisualizationUrl();
    }
    if (currentUser.featureEnabled('active_record_geocoding_endpoint')) {
      applyPatchNewGeocodingUrls();
    }
    if (currentUser.featureEnabled('active_record_table_vis_endpoint')) {
      applyPatchNewTableUrls();
    }
    if (currentUser.featureEnabled('active_record_layers_endpoint')) {
      applyPatchNewLayerUrls();
    }
    if (currentUser.featureEnabled('active_record_synchronization_endpoint')) {
      applyPatchNewSynchronizationUrls();
    }
    if (currentUser.featureEnabled('active_record_import_endpoint')) {
      applyPatchNewImportUrl();
    }
    if (currentUser.featureEnabled('active_record_asset_endpoint')) {
      applyPatchNewAssetUrl();
    }
    if (currentUser.featureEnabled('active_record_imports_service_endpoint')) {
      applyPatchNewImportsServiceUrl();
    }

    cdb.config.set('user', currentUser);
    var router = new Router({
      dashboardUrl: currentUser.viewUrl().dashboard()
    });

    // Why not have only one collection?
    var collection =  new cdb.admin.Visualizations();

    var dashboard = new MainView({
      el: document.body,
      collection: collection,
      user: currentUser,
      config: window.config,
      router: router
    });
    window.dashboard = dashboard;

    router.enableAfterMainView();

    // TODO: remove mixpanel
    if (window.mixpanel && window.mixpanel_token) {
      new cdb.admin.Mixpanel({
        user: window.user_data,
        token: window.mixpanel_token
      });
      sendUsageToMixpanel(window.mixpanel, currentUser, window.isFirstTimeViewingDashboard, window.isJustLoggedIn);
    }

    var metrics = new cdb.admin.Metrics();

    // Event tracking "Visited Dashboard"
    cdb.god.trigger('metrics', 'visited_dashboard', {
      email: window.user_data.email,
      data: null
    });

    if (window.isJustLoggedIn) {
      // Event tracking "Logged in"
      cdb.god.trigger('metrics', 'logged_in', {
        email: window.user_data.email,
        data: null
      });
    }

    if (window.isFirstTimeViewingDashboard) {
      // Event tracking "Visited Dashboard for the first time"
      cdb.god.trigger('metrics', 'visited_dashboard_first_time', {
        email: window.user_data.email,
        data: null
      });
    }

    cdb.god.bind('openPrivacyDialog', function(vis) {
      if (vis.isOwnedByUser(currentUser)) {
        var dialog = new ChangePrivacyDialog({
          vis: vis,
          user: currentUser,
          enter_to_confirm: true,
          clean_on_hide: true
        });
        dialog.appendToBody();
      }
    });

    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('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().edit();
            },
            error: function(e) {
              createDialog.close();
              collection.trigger('error');
            }
          });
        }
      }, this);

      createDialog.appendToBody();
      createModel.viewsReady();
    });
  });

  // In the merge modal in the editor the user is given an option to watch the create-map-tutorials, so if the URL
  // contains the expected querystring open it
  if (/open-create-map-tutorials/.test(window.location.search)) {
    cdb.god.trigger('openCreateDialog');
  }

});
Ejemplo n.º 10
0
$(function() {

  // No attributions and no links in this map (at least from cartodb)
  cartodb.config.set({
    cartodb_attributions: "",
    cartodb_logo_link: ""
  });

  $.extend( $.easing, {
    easeInQuad: function (x, t, b, c, d) {
      return c*(t/=d)*t + b;
    }
  });

  cdb.init(function() {
    cdb.templates.namespace = 'cartodb/';

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

    var authenticatedUser = new cdb.open.AuthenticatedUser();
    authenticatedUser.bind('change', function() {
      if (authenticatedUser.get('username')) {
        var user = new cdb.admin.User(authenticatedUser.attributes);
        var userSettingsView = new UserSettingsView({
          el: $('.js-user-settings'),
          model: user
        });
        userSettingsView.render();

        if (user.get('username') === window.owner_username) {
          // Show "Edit in CartoDB" button if logged user
          // is the map owner ;)
          $('.js-editMap').addClass('is-visible');
        }

        $('.js-login').hide();
        $('.js-learn').hide();
      }
    });

    // Vis likes
    $('.js-likes').each(function() {
      var likeModel = cdb.admin.Like.newByVisData({
        likeable: false,
        vis_id: $(this).data('vis-id'),
        likes: $(this).data('likes-count')
      });
      authenticatedUser.bind('change', function() {
        if (authenticatedUser.get('username')) {
          likeModel.bind('loadModelCompleted', function() {
            likeModel.set('likeable', true);
          });
          likeModel.fetch();
        }
      });
      var likeView = new LikeView({
        el: this,
        model: likeModel
      });
      likeView.render();
    });

    // More user vis cards
    $('.MapCard').each(function() {

      var vizjson = $(this).data('vizjson-url');
      var zoom    = $(this).data('zoom');

      if (vizjson) {
        var mapCardPreview = new MapCardPreview({
          el: $(this).find('.js-header'),
          zoom: zoom,
          vizjson: vizjson
        });
        mapCardPreview.load();
      }
    });

    // Check if device is a mobile
    var mobileDevice = /Android|webOS|iPad|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);

    // Window view
    var public_window = new PublicMapWindow({
      el:                   window,
      user_name:            user_name,
      owner_username:       owner_username,
      vis_id:               vis_id,
      vis_name:             vis_name,
      vizdata:              vizdata,
      config:               config,
      map_options:          map_options,
      isMobileDevice:       mobileDevice,
      belong_organization:  belong_organization
    });
    
    authenticatedUser.fetch();
  });
});
Ejemplo n.º 11
0
$(function() {
  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 = new cdb.admin.User(window.user_data);

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

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

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

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

    $('.js-regenerateApiKey').bind('click', function(ev) {
      if (ev) ev.preventDefault();
      var username = user_data.username;
      var action = (user_data.organization ? '/u/' + username : '') + '/your_apps/api_key/regenerate';
      var authenticity_token = $('[name=authenticity_token][value]').get(0).value;
      var dlg = new RegenerateKeysDialog({
        type: 'api',
        scope: 'user',
        form_action: action,
        authenticity_token: authenticity_token
      });

      dlg.appendToBody();
    });

    $('.js-regenerateOauth').bind('click', function(ev) {
      if (ev) ev.preventDefault();
      var username = user_data.username;
      var action = (user_data.organization ? '/u/' + username : '') + '/your_apps/oauth/regenerate';
      var authenticity_token = $('[name=authenticity_token][value]').get(0).value;
      var dlg = new RegenerateKeysDialog({
        type: 'oauth',
        scope: 'user',
        form_action: action,
        authenticity_token: authenticity_token,
        method: 'delete'
      });

      dlg.appendToBody();
    });

    $('.js-copy-value').each(function() {
      // Copy
      if (!$.browser.mozilla && !($.browser.msie && $.browser.version<9)) {
        $(this).zclip({
          path: cdb.config.get('assets_url') + "/flash/ZeroClipboard.swf",
          copy: function(){
            return $(this).parent().find(".js-input").val();
          }
        });
      }

      // Tooltip
      var tooltip = new cdb.common.TipsyTooltip({
        el: $(this),
        title: function() {
          return $(this).data('title');
        }
      });
    });
  });

});
Ejemplo n.º 12
0
$(function() {
  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({
          name: currentUser.get('name') || currentUser.get('username'),
          avatar_url: currentUser.get('avatar_url'),
          id: currentUser.get('id')
        })
      });

      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
        }).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.$('.Form-footer').before(googlePlus.render().el);
    }
  });

});
Ejemplo n.º 13
0
$(function() {
  cdb.init(function() {
    cdb.templates.namespace = 'cartodb/';
    cdb.config.set(window.config);
    cdb.config.set('url_prefix', window.base_url);

    var scrollableHeader = new ScrollableHeader({
      el: $('.js-Navmenu'),
      anchorPoint: 350
    });

    var userTourView = new UserTourView({
      el: $('.js-user-tour'),
    });

    var userIndustriesView = new UserIndustriesView({
      el: $('.js-user-industries'),
    });

    var userResourcesView = new UserResourcesView({
      el: $('.js-user-resources'),
    });

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

    var authenticatedUser = new cdb.open.AuthenticatedUser();
    authenticatedUser.bind('change', function() {
      if (authenticatedUser.get('username')) {
        var user = new cdb.admin.User(authenticatedUser.attributes);
        var userSettingsView = new UserSettingsView({
          el: $('.js-user-settings'),
          model: user
        });
        userSettingsView.render();

        $('.js-login').hide();
        $('.js-learn').show();
      }
    });

    var favMapView = new FavMapView(window.favMapViewAttrs);
    favMapView.render();

    var userInfoView = new UserInfoView({
      el: $('.js-user-info')
    });
    userInfoView.render();

    var paginationView = new PaginationView({
      el: '.js-content-footer',
      model: new PaginationModel(window.paginationModelAttrs)
    });
    paginationView.render();

    $('.MapCard').each(function() {
      var visId = $(this).data('visId');
      if (visId) {
        var mapCardPreview = new MapCardPreview({
          el: $(this).find('.js-header'),
          height: 220,
          visId: $(this).data('visId'),
          username: $(this).data('visOwnerName'),
          mapsApiHost: cdb.config.getMapsApiHost()
        });
        mapCardPreview.load();
      }
    });

    $('.js-likes').each(function() {
      var likeModel = cdb.admin.Like.newByVisData({
        url: !cdb.config.get('url_prefix') ? $(this).attr('href') : '' ,
        likeable: false,
        show_count: $(this).data('show-count') || false,
        show_label: $(this).data('show-label') || false,
        vis_id: $(this).data('vis-id'),
        likes: $(this).data('likes-count')
      });
      authenticatedUser.bind('change', function() {
        if (authenticatedUser.get('username')) {
          likeModel.bind('loadModelCompleted', function() {
            likeModel.set('likeable', true);
          });
          likeModel.fetch();
        }
      });
      var likeView = new LikeView({
        el: this,
        model: likeModel
      });
      likeView.render();
    });

    authenticatedUser.fetch();
  });
});
Ejemplo n.º 14
0
$(function() {
  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 = new cdb.admin.User(window.user_data);

    if (window.organization_user_data) {
      var organizationUser = new cdb.admin.User(window.organization_user_data);
    }

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

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

    // File input style
    if (this.$(':file').length > 0) {
      var self = this;
      this.$(":file").filestyle({
        buttonText: "Choose avatar"
      });
      this.$(":file").bind('change', function() {
        self.$('.form-control').show();
        self.$('.btn').hide();
      });
    }

    // Tooltips
    $('[data-title]').each(function(i,el) {
      new cdb.common.TipsyTooltip({
        el: el,
        title: function() {
          return $(this).attr('data-title');
        }
      })
    });

    // Progress quota bar?
    if (this.$('.js-quota').length > 0 && organization_data && this.$('#user_quota').length > 0) {
      new QuotaProgressBar(
        _.extend(
          organization_data,
          {
            el: this.$('.js-quota'),
            userQuota: assigned_user_quota,
            userUsedQuota: used_user_quota,
            userName: currentUser.get('username'),
            input: this.$('#user_quota')
          }
        )
      )
    }

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

  });

});
var createDashboard = function (selector, vizJSON, opts, callback) {
  var dashboardEl = document.querySelector(selector);
  if (!dashboardEl) throw new Error('no element found with selector ' + selector);

  // Default options
  opts = opts || {};
  opts.renderMenu = _.isBoolean(opts.renderMenu)
    ? opts.renderMenu
    : true;

  var widgets = new WidgetsCollection();
  var coords = JSON.parse(vizJSON.center);

  var model = new cdb.core.Model({
    title: vizJSON.title,
    description: vizJSON.description,
    updatedAt: vizJSON.updated_at,
    userName: vizJSON.user.fullname,
    userProfileURL: vizJSON.user.profile_url,
    userAvatarURL: vizJSON.user.avatar_url,
    renderMenu: opts.renderMenu,
    initialPosition: {
      center: coords,
      zoom: vizJSON.zoom
    }
  });
  var dashboardView = new DashboardView({
    el: dashboardEl,
    widgets: widgets,
    model: model
  });
  var stateFromURL = opts.state || URLHelper.getStateFromCurrentURL();
  if (!_.isEmpty(stateFromURL.map)) {
    vizJSON.center = stateFromURL.map.center;
    vizJSON.bounds = null;
    vizJSON.zoom = stateFromURL.map.zoom;
  }

  var vis = cdb.createVis(dashboardView.$('#map'), vizJSON, _.extend(opts, {
    skipMapInstantiation: true
  }));

  vis.once('load', function (vis) {
    if (!_.isEmpty(stateFromURL.map)) {
      vis.map.setView(stateFromURL.map.center, stateFromURL.map.zoom);
    }

    var widgetsState = stateFromURL.widgets || {};

    // Create widgets
    var widgetsService = new WidgetsService(widgets, vis.dataviews);
    var widgetModelsMap = {
      list: widgetsService.createListModel.bind(widgetsService),
      formula: widgetsService.createFormulaModel.bind(widgetsService),
      histogram: widgetsService.createHistogramModel.bind(widgetsService),
      'time-series': widgetsService.createTimeSeriesModel.bind(widgetsService),
      category: widgetsService.createCategoryModel.bind(widgetsService)
    };
    vizJSON.widgets.forEach(function (d) {
      // Flatten the data structure given in vizJSON, the widgetsService will use whatever it needs and ignore the rest
      var attrs = _.extend({}, d, d.options);
      var newWidgetModel = widgetModelsMap[d.type];
      var state = widgetsState[d.id];

      if (_.isFunction(newWidgetModel)) {
        // Find the Layer that the Widget should be created for.
        var layer;
        if (d.layer_id) {
          layer = vis.map.layers.get(d.layer_id);
        } else if (Number.isInteger(d.layerIndex)) {
          // TODO Since namedmap doesn't have ids we need to map in another way, here using index
          //   should we solve this in another way?
          layer = vis.map.layers.at(d.layerIndex);
        }

        newWidgetModel(attrs, layer, state);
      } else {
        cdb.log.error('No widget found for type ' + d.type);
      }
    });

    dashboardView.render();

    if (widgets.size() > 0) {
      vis.centerMapToOrigin();
    }

    vis.instantiateMap({
      success: function () {
        callback && callback(null, {
          dashboardView: dashboardView,
          widgets: widgetsService,
          vis: vis
        });
      },
      error: function () {
        var error = new Error('Map instantiation failed');
        console.log(error);
        callback && callback(error, {
          dashboardView: dashboardView,
          widgets: widgetsService,
          vis: vis
        });
      }
    });
  });
};
Ejemplo n.º 16
0
$(function() {
  cdb.init(function() {
    cdb.templates.namespace = 'cartodb/';

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

    var authenticatedUser = new cdb.open.AuthenticatedUser();
    authenticatedUser.bind('change', function() {
      if (authenticatedUser.get('username')) {
        var user = new cdb.admin.User(authenticatedUser.attributes);
        var userSettingsView = new UserSettingsView({
          el: $('.js-user-settings'),
          model: user
        });
        userSettingsView.render();

        var userDashboardUrl = user.viewUrl().dashboard();
        $('.UserAvatar-img').wrap($('<a>',{
           href: userDashboardUrl
        }));

        $('.js-login').hide();
        $('.js-learn').show();
      }
    });

    var favMapView = new FavMapView(window.favMapViewAttrs);
    favMapView.render();

    var userInfoView = new UserInfoView({
      el: $('.js-user-info')
    });
    userInfoView.render();

    var paginationView = new PaginationView({
      el: '.js-content-footer',
      model: new PaginationModel(window.paginationModelAttrs)
    });
    paginationView.render();

    $('.MapCard').each(function() {

      var vizjson = $(this).data('vizjson-url');
      var zoom    = $(this).data('zoom');

      if (vizjson) {
        var mapCardPreview = new MapCardPreview({
          el: $(this).find('.js-header'),
          zoom: zoom,
          vizjson: vizjson
        });
        mapCardPreview.load();
      }
    });

    $('.js-likes').each(function() {
      var likeModel = cdb.admin.Like.newByVisData({
        likeable: false,
        vis_id: $(this).data('vis-id'),
        likes: $(this).data('likes-count')
      });
      authenticatedUser.bind('change', function() {
        if (authenticatedUser.get('username')) {
          likeModel.bind('loadModelCompleted', function() {
            likeModel.set('likeable', true);
          });
          likeModel.fetch();
        }
      });
      var likeView = new LikeView({
        el: this,
        model: likeModel
      });
      likeView.render();
    });

    authenticatedUser.fetch();
  });
});