@innovastudio/contentbuilder 1.5.19 → 1.5.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbuilder",
3
3
  "type": "module",
4
- "version": "1.5.19",
4
+ "version": "1.5.21",
5
5
  "description": "",
6
6
  "main": "public/contentbuilder/contentbuilder.esm.js",
7
7
  "files": [
@@ -52757,26 +52757,37 @@ class RowTool {
52757
52757
  if (btnCellAdd) dom.addEventListener(btnCellAdd, 'click', () => {
52758
52758
  let cell = util.cellSelected();
52759
52759
  if (!cell) return;
52760
+ const viewportHeight = window.innerHeight;
52761
+ const newPos = util.getElementPosition(btnCellAdd);
52762
+ let top = newPos.top;
52763
+ let left = newPos.left;
52760
52764
  renderQuickAdd(this.builder);
52761
52765
  let quickadd = this.builder.builderStuff.querySelector('.is-pop.quickadd');
52762
52766
  let tabs = quickadd.querySelector('.is-pop-tabs');
52763
52767
  tabs.style.display = 'flex';
52764
- const newPos = util.getElementPosition(btnCellAdd);
52765
- let top = newPos.top + window.pageYOffset;
52766
- let left = newPos.left + window.pageXOffset;
52767
- if (this.builder.iframe) {
52768
- left = left + 3;
52769
- }
52770
52768
  util.showPop(quickadd, false, btnCellAdd);
52771
- quickadd.style.top = top + 35 + 'px';
52772
- quickadd.style.left = left + 'px';
52773
- dom.removeClass(quickadd, 'arrow-bottom');
52774
- dom.removeClass(quickadd, 'arrow-left');
52775
- dom.removeClass(quickadd, 'arrow-right');
52776
- dom.removeClass(quickadd, 'center');
52777
- dom.removeClass(quickadd, 'right');
52778
- dom.addClass(quickadd, 'arrow-top');
52779
- dom.addClass(quickadd, 'left');
52769
+ const h = quickadd.offsetHeight;
52770
+ if (viewportHeight - top > h) {
52771
+ // pop bottom
52772
+ quickadd.style.top = top + window.pageYOffset + 35 + 'px';
52773
+ quickadd.style.left = left + 'px';
52774
+ dom.removeClass(quickadd, 'arrow-bottom');
52775
+ dom.removeClass(quickadd, 'arrow-right');
52776
+ dom.removeClass(quickadd, 'arrow-left');
52777
+ dom.removeClass(quickadd, 'center');
52778
+ dom.addClass(quickadd, 'arrow-top');
52779
+ dom.addClass(quickadd, 'left');
52780
+ } else {
52781
+ // pop top
52782
+ quickadd.style.top = top + window.pageYOffset - h - 8 + 'px';
52783
+ quickadd.style.left = left + 'px';
52784
+ dom.removeClass(quickadd, 'arrow-top');
52785
+ dom.removeClass(quickadd, 'arrow-right');
52786
+ dom.removeClass(quickadd, 'arrow-left');
52787
+ dom.removeClass(quickadd, 'center');
52788
+ dom.addClass(quickadd, 'arrow-bottom');
52789
+ dom.addClass(quickadd, 'left');
52790
+ }
52780
52791
  let val = quickadd.querySelector('.active').getAttribute('data-value');
52781
52792
  if (val === 'left') {
52782
52793
  quickadd.setAttribute('data-mode', 'cell-left');
@@ -52816,21 +52827,38 @@ class RowTool {
52816
52827
  if (btnCellMore) dom.addEventListener(btnCellMore, 'click', () => {
52817
52828
  let cell = util.cellSelected();
52818
52829
  if (!cell) return;
52830
+ const viewportHeight = window.innerHeight;
52819
52831
  const newPos = util.getElementPosition(btnCellMore);
52820
- let top = newPos.top + window.pageYOffset;
52821
- let left = newPos.left + window.pageXOffset;
52832
+ let top = newPos.top;
52833
+ let left = newPos.left;
52822
52834
  this.builder.colTool.renderColMore();
52823
52835
  const columnMore = builderStuff.querySelector('.columnmore');
52824
- util.showPop(columnMore, false, btnCellMore);
52825
- columnMore.style.top = top + 35 + 'px';
52826
- columnMore.style.left = left - 7 + 'px';
52827
- dom.removeClass(columnMore, 'arrow-bottom');
52828
- dom.removeClass(columnMore, 'arrow-left');
52829
- dom.removeClass(columnMore, 'arrow-right');
52830
- dom.removeClass(columnMore, 'center');
52831
- dom.removeClass(columnMore, 'right');
52832
- dom.addClass(columnMore, 'arrow-top');
52833
- dom.addClass(columnMore, 'left');
52836
+ setTimeout(() => {
52837
+ // give delay after renderColMore()
52838
+ util.showPop(columnMore, false, btnCellMore);
52839
+ const h = columnMore.offsetHeight;
52840
+ if (viewportHeight - top > h) {
52841
+ columnMore.style.top = top + window.pageYOffset + 35 + 'px';
52842
+ columnMore.style.left = left - 7 + 'px';
52843
+ dom.removeClass(columnMore, 'arrow-bottom');
52844
+ dom.removeClass(columnMore, 'arrow-right');
52845
+ dom.removeClass(columnMore, 'arrow-left');
52846
+ dom.removeClass(columnMore, 'center');
52847
+ dom.removeClass(columnMore, 'right');
52848
+ dom.addClass(columnMore, 'arrow-top');
52849
+ dom.addClass(columnMore, 'left');
52850
+ } else {
52851
+ columnMore.style.top = top + window.pageYOffset - h - 8 + 'px';
52852
+ columnMore.style.left = left - 7 + 'px';
52853
+ dom.removeClass(columnMore, 'arrow-top');
52854
+ dom.removeClass(columnMore, 'arrow-right');
52855
+ dom.removeClass(columnMore, 'arrow-left');
52856
+ dom.removeClass(columnMore, 'center');
52857
+ dom.removeClass(columnMore, 'right');
52858
+ dom.addClass(columnMore, 'arrow-bottom');
52859
+ dom.addClass(columnMore, 'left');
52860
+ }
52861
+ }, 0);
52834
52862
  const btnCellLocking = columnMore.querySelector('.cell-locking');
52835
52863
  if (cell.hasAttribute('data-noedit')) {
52836
52864
  dom.addClass(btnCellLocking, 'on');
@@ -52984,32 +53012,67 @@ class RowTool {
52984
53012
 
52985
53013
  //Hide Column tool (new!)
52986
53014
  util.hideColumnTool();
53015
+
53016
+ /*
52987
53017
  const newPos = util.getElementPosition(btnMore);
52988
53018
  let top = newPos.top + window.pageYOffset;
52989
53019
  let left = newPos.left + window.pageXOffset;
52990
- this.renderRowMore();
53020
+ this.renderRowMore();
52991
53021
  const rowMore = this.rowMore;
52992
-
52993
- // rowMore.style.display = 'flex';
53022
+ // rowMore.style.display = 'flex';
52994
53023
  util.showPop(rowMore, false, btnMore);
52995
53024
  //const w = rowMore.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
52996
53025
  //const h = rowMore.offsetHeight;
52997
- rowMore.style.top = top - 8 + 'px';
52998
- dom.removeClass(rowMore, 'arrow-bottom');
52999
- dom.removeClass(rowMore, 'arrow-left');
53000
- dom.removeClass(rowMore, 'arrow-right');
53001
- dom.removeClass(rowMore, 'center');
53002
- dom.removeClass(rowMore, 'right');
53003
- dom.removeClass(rowMore, 'left');
53004
- if (this.builder.opts.rowTool === 'right') {
53005
- rowMore.style.left = left - rowMore.offsetWidth - 10 + 'px';
53006
- dom.addClass(rowMore, 'arrow-right');
53007
- dom.addClass(rowMore, 'left');
53008
- } else {
53009
- rowMore.style.left = left + 35 + 'px';
53010
- dom.addClass(rowMore, 'arrow-left');
53011
- dom.addClass(rowMore, 'left');
53012
- }
53026
+ rowMore.style.top = (top - 8) + 'px';
53027
+ dom.removeClass(rowMore,'arrow-bottom');
53028
+ dom.removeClass(rowMore,'arrow-left');
53029
+ dom.removeClass(rowMore,'arrow-right');
53030
+ dom.removeClass(rowMore,'center');
53031
+ dom.removeClass(rowMore,'right');
53032
+ dom.removeClass(rowMore,'left');
53033
+ if(this.builder.opts.rowTool === 'right') {
53034
+
53035
+ rowMore.style.left = (left - rowMore.offsetWidth - 10) + 'px';
53036
+ dom.addClass(rowMore,'arrow-right');
53037
+ dom.addClass(rowMore,'left');
53038
+ } else {
53039
+ rowMore.style.left = (left + 35) + 'px';
53040
+ dom.addClass(rowMore,'arrow-left');
53041
+ dom.addClass(rowMore,'left');
53042
+ }
53043
+ */
53044
+
53045
+ const viewportHeight = window.innerHeight;
53046
+ const newPos = util.getElementPosition(btnMore);
53047
+ let top = newPos.top;
53048
+ let left = newPos.left;
53049
+ this.renderRowMore();
53050
+ const rowMore = this.rowMore;
53051
+ setTimeout(() => {
53052
+ // give delay after renderRowMore()
53053
+ util.showPop(rowMore, false, btnMore);
53054
+ const h = rowMore.offsetHeight;
53055
+ dom.removeClass(rowMore, 'arrow-bottom');
53056
+ dom.removeClass(rowMore, 'arrow-left');
53057
+ dom.removeClass(rowMore, 'arrow-right');
53058
+ dom.removeClass(rowMore, 'center');
53059
+ dom.removeClass(rowMore, 'right');
53060
+ dom.removeClass(rowMore, 'left');
53061
+ if (this.builder.opts.rowTool === 'right') {
53062
+ rowMore.style.left = left - rowMore.offsetWidth - 10 + 'px';
53063
+ dom.addClass(rowMore, 'arrow-right');
53064
+ dom.addClass(rowMore, 'left');
53065
+ } else {
53066
+ rowMore.style.left = left + 35 + 'px';
53067
+ dom.addClass(rowMore, 'arrow-left');
53068
+ dom.addClass(rowMore, 'left');
53069
+ }
53070
+ if (viewportHeight - top > h) {
53071
+ rowMore.style.top = top + window.pageYOffset - 8 + 'px';
53072
+ } else {
53073
+ rowMore.style.top = top + window.pageYOffset - h + btnMore.offsetHeight + 'px';
53074
+ }
53075
+ }, 0);
53013
53076
  let btnRowHtml = rowMore.querySelector('.row-html');
53014
53077
  let btnRowDuplicate = rowMore.querySelector('.row-duplicate');
53015
53078
  if (row.querySelector('[data-html]')) {
@@ -81896,7 +81959,7 @@ class Common {
81896
81959
 
81897
81960
  if (topTouched && bottomTouched) {
81898
81961
  block.style.top = 0;
81899
- block.style.bottom = 0;
81962
+ if (!block.classList.contains('height-auto')) block.style.bottom = 0; // height-auto should not have bottom=0
81900
81963
  block.style.height = '';
81901
81964
  }
81902
81965
  if (leftTouched && rightTouched) {
@@ -81905,13 +81968,21 @@ class Common {
81905
81968
  block.style.width = '';
81906
81969
  }
81907
81970
  if (bottomTouched && !topTouched) {
81908
- block.style.bottom = 0;
81971
+ if (!block.classList.contains('height-auto')) block.style.bottom = 0; // height-auto should not have bottom=0
81909
81972
  block.style.height = '';
81910
81973
  }
81911
81974
  if (rightTouched && !leftTouched) {
81912
81975
  block.style.right = 0;
81913
81976
  block.style.width = '';
81914
81977
  }
81978
+
81979
+ // reset
81980
+ setTimeout(() => {
81981
+ this.horizontalRulerTop.removeAttribute('data-topTouched');
81982
+ this.horizontalRulerBottom.removeAttribute('data-bottomTouched');
81983
+ this.verticalRulerLeft.removeAttribute('data-leftTouched');
81984
+ this.verticalRulerRight.removeAttribute('data-rightTouched');
81985
+ }, 10);
81915
81986
  }
81916
81987
  applyPixels(block) {
81917
81988
  const zoom = this.zoom;
@@ -83613,8 +83684,12 @@ class Draggable {
83613
83684
  target.setAttribute('data-starty', y);
83614
83685
 
83615
83686
  // reset (from applyPercentage bottomTouched)
83616
- target.style.height = target.offsetHeight + 'px';
83617
- target.style.bottom = '';
83687
+ if (target.style.bottom) {
83688
+ if (!target.classList.contains('height-auto')) {
83689
+ target.style.height = target.offsetHeight + 'px';
83690
+ }
83691
+ target.style.bottom = '';
83692
+ }
83618
83693
  this.common.applyPixels(target);
83619
83694
  });
83620
83695
  this.clickedBlock = this.common.getSelectedBlock();
@@ -83737,6 +83812,15 @@ class Draggable {
83737
83812
  if (this.onChange) this.onChange();
83738
83813
  }
83739
83814
  handleSelect(event) {
83815
+ if (!this.doc.querySelector(this.selector + '.active')) {
83816
+ // Make the current scrollbar state (visible or not) to stay during the block select (drag or resize)
83817
+ let scrollbar = this.doc.documentElement.scrollHeight > this.doc.documentElement.clientHeight;
83818
+ if (!scrollbar) {
83819
+ this.doc.body.style.overflowY = 'hidden';
83820
+ } else {
83821
+ this.doc.body.style.overflowY = 'scroll';
83822
+ }
83823
+ }
83740
83824
  const element = event.target;
83741
83825
  if (element.classList.contains('rotate-handle')) return;
83742
83826
  const block = element.closest(this.selector);
@@ -83786,6 +83870,9 @@ class Draggable {
83786
83870
  this.doc.querySelectorAll(this.selector + '.active').forEach(elm => elm.classList.remove('active'));
83787
83871
  this.doc.querySelectorAll('.block-active').forEach(elm => elm.classList.remove('block-active'));
83788
83872
  if (this.onSelectClear) this.onSelectClear();
83873
+
83874
+ // Return back the scrollbar state when clicking on page (not block)
83875
+ this.doc.body.style.overflowY = ''; // see handleSelect()
83789
83876
  }
83790
83877
 
83791
83878
  // Check if multiple selection occurs. If so, add 'multi' class to hide all the handles