90 lines
2.2 KiB
JavaScript
Executable File
90 lines
2.2 KiB
JavaScript
Executable File
var CoreView = require('backbone/core-view');
|
|
var $ = require('jquery');
|
|
var template = require('./privacy-toggler.tpl');
|
|
var TipsyTooltipView = require('builder/components/tipsy-tooltip-view');
|
|
var checkAndBuildOpts = require('builder/helpers/required-opts');
|
|
|
|
var publicPrivacy = 'PUBLIC';
|
|
var privatePrivacy = 'PRIVATE';
|
|
|
|
var REQUIRED_OPTS = [
|
|
'createModel',
|
|
'privacyModel',
|
|
'configModel',
|
|
'userModel'
|
|
];
|
|
|
|
/**
|
|
* Change the privacy of the new dataset.
|
|
* - If the user can't change the privacy, it will refer to the upgrade page
|
|
* unless app is the "open source" version
|
|
*
|
|
*/
|
|
|
|
module.exports = CoreView.extend({
|
|
events: {
|
|
'click': '_onClick'
|
|
},
|
|
|
|
initialize: function (opts) {
|
|
checkAndBuildOpts(opts, REQUIRED_OPTS, this);
|
|
|
|
this._initBinds();
|
|
},
|
|
|
|
render: function () {
|
|
this.clearSubViews();
|
|
this.$el.empty();
|
|
|
|
if (this._createModel.showPrivacyToggler()) {
|
|
var canChangePrivacy = this._userModel.canCreatePrivateDatasets();
|
|
var privacy = this._privacyModel.get('privacy');
|
|
var isPublic = privacy === publicPrivacy;
|
|
var nextPrivacy = isPublic ? privatePrivacy : publicPrivacy;
|
|
var icon = isPublic ? 'unlock' : 'lock';
|
|
var upgradeUrl = this._configModel.get('upgrade_url') || window.upgrade_url;
|
|
var canUpgrade = !this._configModel.get('cartodb_com_hosted') && !canChangePrivacy && upgradeUrl;
|
|
|
|
this.$el.html(
|
|
template({
|
|
privacy: privacy,
|
|
isDisabled: !canChangePrivacy,
|
|
canUpgrade: canUpgrade,
|
|
nextPrivacy: nextPrivacy,
|
|
upgradeUrl: upgradeUrl,
|
|
icon: icon
|
|
})
|
|
);
|
|
|
|
this._initViews();
|
|
}
|
|
|
|
return this;
|
|
},
|
|
|
|
_initBinds: function () {
|
|
this._privacyModel.bind('change:privacy', this.render, this);
|
|
},
|
|
|
|
_initViews: function () {
|
|
// Tooltip
|
|
this.addView(
|
|
new TipsyTooltipView({
|
|
el: this.$('.js-toggler'),
|
|
html: true,
|
|
title: function () {
|
|
return $(this).attr('data-title');
|
|
}
|
|
})
|
|
);
|
|
},
|
|
|
|
_onClick: function () {
|
|
if (this._userModel.canCreatePrivateDatasets()) {
|
|
var privacy = this._privacyModel.get('privacy');
|
|
this._privacyModel.set('privacy', privacy === publicPrivacy ? privatePrivacy : publicPrivacy);
|
|
}
|
|
}
|
|
|
|
});
|