BxDolPage.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /**
  2. * Copyright (c) UNA, Inc - https://una.io
  3. * MIT License - https://opensource.org/licenses/MIT
  4. *
  5. * @defgroup UnaCore UNA Core
  6. * @{
  7. */
  8. function BxDolPage(oOptions) {
  9. this._sObjName = oOptions.sObjName == undefined ? 'oBxDolPage' : oOptions.sObjName;
  10. this._sObject = oOptions.sObject; // page object
  11. this._sActionsUri = 'page.php';
  12. this._sActionsUrl = oOptions.sRootUrl; // actions url address
  13. this._aHtmlIds = oOptions.aHtmlIds;
  14. this._isStickyColumns = oOptions.isStickyColumns == undefined ? false : oOptions.isStickyColumns;
  15. this._iLastSc = 0;
  16. this._oCreativeEditor = null;
  17. this._oCreativeStorage = null;
  18. this._sCreativeStorageData = 'bx-cs-data';
  19. this._sCreativeStorageHtml = 'bx-cs-html';
  20. var $this = this;
  21. $(document).ready(function() {
  22. $this.init();
  23. });
  24. }
  25. BxDolPage.prototype.init = function() {
  26. var $this = this;
  27. if ($this._isStickyColumns && !$('html').hasClass('bx-media-phone')) {
  28. window.glTheiaStickySidebar = new TheiaStickySidebar.TheiaStickySidebar($.extend({}, {
  29. elements: '.bx-layout-col',
  30. additionalMarginTop:70
  31. }, typeof(window.glTheiaStickySidebarSettings) !== 'undefined' ? window.glTheiaStickySidebarSettings : {}));
  32. }
  33. // process embeds
  34. $(document).bxConvertEmbeds();
  35. // process links
  36. bx_process_links();
  37. };
  38. BxDolPage.prototype.share = function(oLink, sUrl)
  39. {
  40. var oData = this._getDefaultParams();
  41. oData['a'] = 'get_share';
  42. oData['url'] = sUrl;
  43. $(".bx-popup-applied:visible").dolPopupHide();
  44. $(window).dolPopupAjax({
  45. url: bx_append_url_params(this._sActionsUri, oData),
  46. displayMode: 'box',
  47. closeOnOuterClick: false,
  48. id: {value: 'sys_share_popup', force: true}
  49. });
  50. }
  51. BxDolPage.prototype.showHelp = function(oLink, iBlockId)
  52. {
  53. var oData = this._getDefaultParams();
  54. oData['a'] = 'get_help';
  55. oData['block_id'] = iBlockId;
  56. $(oLink).dolPopupAjax({
  57. id: {value:this._aHtmlIds['help_popup'] + iBlockId, force:1},
  58. url: bx_append_url_params(this._sActionsUri, oData),
  59. closeOnOuterClick: true,
  60. removeOnClose: true,
  61. onBeforeShow: function(oPopup) {
  62. oPopup.addClass('bx-popup-help');
  63. }
  64. });
  65. };
  66. //TODO: Continue from here.
  67. BxDolPage.prototype.creativeEdit = function(oLink, iBlockId)
  68. {
  69. if(this._oCreativeEditor)
  70. return;
  71. var $this = this;
  72. $(oLink).toggleClass('hidden').siblings('.bx-cc-save').toggleClass('hidden');
  73. //--- Holdres
  74. if(!$('#' + this._sCreativeStorageData).length)
  75. $('body').prepend('<textarea id="' + this._sCreativeStorageData + '" class="hidden"></textarea>');
  76. else
  77. $('#' + this._sCreativeStorageData).val('');
  78. if(!$('#' + this._sCreativeStorageHtml).length)
  79. $('body').prepend('<textarea id="' + this._sCreativeStorageHtml + '" class="hidden"></textarea>');
  80. else
  81. $('#' + this._sCreativeStorageHtml).val('');
  82. /*
  83. //--- Panels
  84. $('body').prepend('<div class="bx-cp-top"><div class="bx-cp bx-cp-devices"></div><div class="bx-cp bx-cp-options"></div><div class="bx-cp bx-cp-views"></div><div class="bx-cp bx-cp-views-container"><div class="bx-c-blocks"></div><div class="bx-c-styles"></div></div></div>');
  85. */
  86. //Load data to local storage
  87. var oContent = $(oLink).parents('.bx-creative-controls:first').siblings('.bx-creative-content');
  88. if(oContent.length) {
  89. $('#' + this._sCreativeStorageData).val(JSON.stringify({pages: [{component: oContent.html()}]}));
  90. $('#' + this._sCreativeStorageHtml).val(oContent.html());
  91. }
  92. const oStorage = (editor) => {
  93. const oStorageData = document.getElementById($this._sCreativeStorageData);
  94. const oStorageHtml = document.getElementById($this._sCreativeStorageHtml);
  95. editor.Storage.add('inline', {
  96. load() {
  97. return JSON.parse(oStorageData.value || '{}');
  98. },
  99. store(data) {
  100. const component = editor.Pages.getSelected().getMainComponent();
  101. oStorageData.value = JSON.stringify(data);
  102. oStorageHtml.value = `<style>${editor.getCss({ component })}</style>${editor.getHtml({ component })}`;
  103. }
  104. });
  105. };
  106. var sContainer = 'bx-cc-' + iBlockId;
  107. var iContainerHeight = $('#' + sContainer).height();
  108. this._oCreativeEditor = grapesjs.init({
  109. // Indicate where to init the editor. You can also pass an HTMLElement
  110. container: '#' + sContainer,
  111. plugins: [oStorage, 'gjs-blocks-basic', 'grapesjs-style-bg', 'grapesjs-preset-webpage'],
  112. pluginsOpts: {
  113. 'gjs-blocks-basic': { flexGrid: true },
  114. 'grapesjs-preset-webpage': {}
  115. },
  116. height: iContainerHeight > 800 ? iContainerHeight : 800,
  117. /*
  118. blockManager: {
  119. appendTo: '.bx-c-blocks',
  120. },
  121. styleManager: {
  122. appendTo: '.bx-c-styles',
  123. },
  124. */
  125. storageManager: {
  126. type: 'inline',
  127. autosave: true,
  128. autoload: true
  129. }
  130. });
  131. /*
  132. const pm = this._oCreativeEditor.Panels;
  133. pm.addPanel({id: 'panel-top', el: '.bx-cp-top'});
  134. pm.addPanel({id: 'panel-devices', el: '.bx-cp-devices', buttons: pm.getPanel('devices-c').buttons.models});
  135. pm.addPanel({id: 'panel-options', el: '.bx-cp-options', buttons: pm.getPanel('options').buttons.models});
  136. pm.addPanel({id: 'panel-views', el: '.bx-cp-views', buttons: pm.getPanel('views').buttons.models});
  137. pm.addPanel({id: 'panel-views', el: '.bx-cp-views-container'});
  138. */
  139. };
  140. BxDolPage.prototype.creativeSave = function(oLink, iBlockId)
  141. {
  142. if(!this._oCreativeEditor)
  143. return;
  144. this._loadingInButton($(oLink), true);
  145. var $this = this;
  146. var sContent = $('#' + this._sCreativeStorageHtml).val();
  147. var oParams = $.extend({}, this._getDefaultParams(), {
  148. a: 'creative_save',
  149. b: iBlockId,
  150. c: sContent
  151. });
  152. $.post (
  153. this._sActionsUri,
  154. oParams,
  155. function() {
  156. $this._loadingInButton($(oLink), false);
  157. $(oLink).toggleClass('hidden').siblings('.bx-cc-edit').toggleClass('hidden');
  158. $('.bx-cp-top').remove();
  159. $this._oCreativeEditor.destroy();
  160. $this._oCreativeEditor = null;
  161. var oContent = $(oLink).parents('.bx-creative-controls:first').siblings('.bx-creative-content');
  162. if(oContent.length)
  163. oContent.attr('style', '').html(sContent);
  164. },
  165. 'json'
  166. );
  167. };
  168. BxDolPage.prototype._loadingInButton = function(e, bShow)
  169. {
  170. if($(e).length)
  171. bx_loading_btn($(e), bShow);
  172. else
  173. bx_loading($('body'), bShow);
  174. };
  175. BxDolPage.prototype._getDefaultParams = function()
  176. {
  177. var oDate = new Date();
  178. return {
  179. o: this._sObject,
  180. _t: oDate.getTime()
  181. };
  182. };
  183. /** @} */