272 lines
8.5 KiB
JavaScript
272 lines
8.5 KiB
JavaScript
/*
|
|
* Builder Index controller Version entity controller
|
|
*/
|
|
+function ($) { "use strict";
|
|
|
|
if ($.oc.builder === undefined)
|
|
$.oc.builder = {}
|
|
|
|
if ($.oc.builder.entityControllers === undefined)
|
|
$.oc.builder.entityControllers = {}
|
|
|
|
var Base = $.oc.builder.entityControllers.base,
|
|
BaseProto = Base.prototype
|
|
|
|
var Version = function(indexController) {
|
|
Base.call(this, 'version', indexController)
|
|
|
|
this.hiddenHints = {}
|
|
}
|
|
|
|
Version.prototype = Object.create(BaseProto)
|
|
Version.prototype.constructor = Version
|
|
|
|
// PUBLIC METHODS
|
|
// ============================
|
|
|
|
Version.prototype.cmdCreateVersion = function(ev) {
|
|
var $link = $(ev.currentTarget),
|
|
versionType = $link.data('versionType')
|
|
|
|
this.indexController.openOrLoadMasterTab($link, 'onVersionCreateOrOpen', this.newTabId(), {
|
|
version_type: versionType
|
|
})
|
|
}
|
|
|
|
Version.prototype.cmdSaveVersion = function(ev) {
|
|
var $target = $(ev.currentTarget),
|
|
$form = $target.closest('form')
|
|
|
|
$target.request('onVersionSave').done(
|
|
this.proxy(this.saveVersionDone)
|
|
)
|
|
}
|
|
|
|
Version.prototype.cmdOpenVersion = function(ev) {
|
|
var versionNumber = $(ev.currentTarget).data('id'),
|
|
pluginCode = $(ev.currentTarget).data('pluginCode')
|
|
|
|
this.indexController.openOrLoadMasterTab($(ev.target), 'onVersionCreateOrOpen', this.makeTabId(pluginCode+'-'+versionNumber), {
|
|
original_version: versionNumber
|
|
})
|
|
}
|
|
|
|
Version.prototype.cmdDeleteVersion = function(ev) {
|
|
var $target = $(ev.currentTarget)
|
|
$.oc.confirm($target.data('confirm'), this.proxy(this.deleteConfirmed))
|
|
}
|
|
|
|
Version.prototype.cmdApplyVersion = function(ev) {
|
|
var $target = $(ev.currentTarget),
|
|
$pane = $target.closest('div.tab-pane'),
|
|
self = this
|
|
|
|
this.showHintPopup($pane, 'builder-version-apply', function(){
|
|
$target.request('onVersionApply').done(
|
|
self.proxy(self.applyVersionDone)
|
|
)
|
|
})
|
|
}
|
|
|
|
Version.prototype.cmdRollbackVersion = function(ev) {
|
|
var $target = $(ev.currentTarget),
|
|
$pane = $target.closest('div.tab-pane'),
|
|
self = this
|
|
|
|
|
|
this.showHintPopup($pane, 'builder-version-rollback', function(){
|
|
$target.request('onVersionRollback').done(
|
|
self.proxy(self.rollbackVersionDone)
|
|
)
|
|
})
|
|
}
|
|
|
|
// INTERNAL METHODS
|
|
// ============================
|
|
|
|
Version.prototype.saveVersionDone = function(data) {
|
|
if (data['builderResponseData'] === undefined) {
|
|
throw new Error('Invalid response data')
|
|
}
|
|
|
|
var $masterTabPane = this.getMasterTabsActivePane()
|
|
this.updateUiAfterSave($masterTabPane, data)
|
|
|
|
if (!data.builderResponseData.isApplied) {
|
|
this.showSavedNotAppliedHint($masterTabPane)
|
|
}
|
|
}
|
|
|
|
Version.prototype.showSavedNotAppliedHint = function($masterTabPane) {
|
|
this.showHintPopup($masterTabPane, 'builder-version-save-unapplied')
|
|
}
|
|
|
|
Version.prototype.showHintPopup = function($masterTabPane, code, callback) {
|
|
if (this.getDontShowHintAgain(code, $masterTabPane)) {
|
|
if (callback) {
|
|
callback.apply(this)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
$masterTabPane.one('hide.oc.popup', this.proxy(this.onHintPopupHide))
|
|
|
|
if (callback) {
|
|
$masterTabPane.one('shown.oc.popup', function(ev, $element, $modal) {
|
|
$modal.find('form').one('submit', function(ev) {
|
|
callback.apply(this)
|
|
ev.preventDefault()
|
|
|
|
$(ev.target).trigger('close.oc.popup')
|
|
|
|
return false
|
|
})
|
|
})
|
|
}
|
|
|
|
$masterTabPane.popup({
|
|
content: this.getPopupContent($masterTabPane, code)
|
|
})
|
|
}
|
|
|
|
Version.prototype.onHintPopupHide = function(ev, $element, $modal) {
|
|
var cbValue = $modal.find('input[type=checkbox][name=dont_show_again]').is(':checked'),
|
|
code = $modal.find('input[type=hidden][name=hint_code]').val()
|
|
|
|
$modal.find('form').off('submit')
|
|
|
|
if (!cbValue) {
|
|
return
|
|
}
|
|
|
|
var $form = this.getMasterTabsActivePane().find('form[data-entity="versions"]')
|
|
|
|
$form.request('onHideBackendHint', {
|
|
data: {
|
|
name: code
|
|
}
|
|
})
|
|
|
|
this.setDontShowHintAgain(code)
|
|
}
|
|
|
|
Version.prototype.setDontShowHintAgain = function(code) {
|
|
this.hiddenHints[code] = true
|
|
}
|
|
|
|
Version.prototype.getDontShowHintAgain = function(code, $pane) {
|
|
if (this.hiddenHints[code] !== undefined) {
|
|
return this.hiddenHints[code]
|
|
}
|
|
|
|
return $pane.find('input[type=hidden][data-hint-hidden="'+code+'"]').val() == "true"
|
|
}
|
|
|
|
Version.prototype.getPopupContent = function($pane, code) {
|
|
var template = $pane.find('script[data-version-hint-template="'+code+'"]')
|
|
|
|
if (template.length === 0) {
|
|
throw new Error('Version popup template not found: '+code)
|
|
}
|
|
|
|
return template.html()
|
|
}
|
|
|
|
Version.prototype.updateUiAfterSave = function($masterTabPane, data) {
|
|
$masterTabPane.find('input[name=original_version]').val(data.builderResponseData.savedVersion)
|
|
this.updateMasterTabIdAndTitle($masterTabPane, data.builderResponseData)
|
|
this.unhideFormDeleteButton($masterTabPane)
|
|
|
|
this.getVersionList().fileList('markActive', data.builderResponseData.tabId)
|
|
this.getIndexController().unchangeTab($masterTabPane)
|
|
}
|
|
|
|
Version.prototype.deleteConfirmed = function() {
|
|
var $masterTabPane = this.getMasterTabsActivePane(),
|
|
$form = $masterTabPane.find('form')
|
|
|
|
$.oc.stripeLoadIndicator.show()
|
|
$form.request('onVersionDelete').always(
|
|
$.oc.builder.indexController.hideStripeIndicatorProxy
|
|
).done(
|
|
this.proxy(this.deleteDone)
|
|
)
|
|
}
|
|
|
|
Version.prototype.deleteDone = function() {
|
|
var $masterTabPane = this.getMasterTabsActivePane()
|
|
|
|
this.getIndexController().unchangeTab($masterTabPane)
|
|
this.forceCloseTab($masterTabPane)
|
|
}
|
|
|
|
Version.prototype.applyVersionDone = function(data) {
|
|
if (data['builderResponseData'] === undefined) {
|
|
throw new Error('Invalid response data')
|
|
}
|
|
|
|
var $masterTabPane = this.getMasterTabsActivePane()
|
|
|
|
this.updateUiAfterSave($masterTabPane, data)
|
|
|
|
this.updateVersionsButtons()
|
|
}
|
|
|
|
Version.prototype.rollbackVersionDone = function(data) {
|
|
if (data['builderResponseData'] === undefined) {
|
|
throw new Error('Invalid response data')
|
|
}
|
|
|
|
var $masterTabPane = this.getMasterTabsActivePane()
|
|
|
|
this.updateUiAfterSave($masterTabPane, data)
|
|
|
|
this.updateVersionsButtons()
|
|
}
|
|
|
|
Version.prototype.getVersionList = function() {
|
|
return $('#layout-side-panel form[data-content-id=version] [data-control=filelist]')
|
|
}
|
|
|
|
Version.prototype.updateVersionsButtons = function() {
|
|
var tabsObject = this.getMasterTabsObject(),
|
|
$tabs = tabsObject.$tabsContainer.find('> li'),
|
|
$versionList = this.getVersionList()
|
|
|
|
// Find all version tabs and update Apply and Rollback buttons
|
|
// basing on the version statuses in the version list.
|
|
for (var i=$tabs.length-1; i>=0; i--) {
|
|
var $tab = $($tabs[i]),
|
|
tabId = $tab.data('tabId')
|
|
|
|
if (!tabId || String(tabId).length == 0) {
|
|
continue
|
|
}
|
|
|
|
var $versionLi = $versionList.find('li[data-id="'+tabId+'"]')
|
|
if (!$versionLi.length) {
|
|
continue
|
|
}
|
|
|
|
var isApplied = $versionLi.data('applied'),
|
|
$pane = tabsObject.findPaneFromTab($tab)
|
|
|
|
if (isApplied) {
|
|
$pane.find('[data-builder-command="version:cmdApplyVersion"]').addClass('hide')
|
|
$pane.find('[data-builder-command="version:cmdRollbackVersion"]').removeClass('hide')
|
|
}
|
|
else {
|
|
$pane.find('[data-builder-command="version:cmdApplyVersion"]').removeClass('hide')
|
|
$pane.find('[data-builder-command="version:cmdRollbackVersion"]').addClass('hide')
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// REGISTRATION
|
|
// ============================
|
|
|
|
$.oc.builder.entityControllers.version = Version;
|
|
|
|
}(window.jQuery); |