@themarioga/grid-editor 8.0.0 → 8.2.0

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.
@@ -326,7 +326,9 @@
326
326
  addAccordionItem: { value: true },
327
327
  setLocale: {},
328
328
  getUtility: { value: true },
329
- setUtility: { value: true }
329
+ setUtility: { value: true },
330
+ getActiveTarget: { value: true },
331
+ setActiveTarget: {}
330
332
  };
331
333
  var PLACEMENTS = ["appendTo", "prependTo", "insertAfter", "insertBefore"];
332
334
  var BREAKPOINTS = [
@@ -396,11 +398,18 @@
396
398
  },
397
399
  resize: {
398
400
  enabled: true,
401
+ // The handle on the column's edge
402
+ tools: true,
403
+ // The narrower and wider tools in the column's drawer
399
404
  handles: "e",
400
405
  // Which edges carry a handle: 'e', 'w', or 'e, w'
401
406
  balance: "next"
402
407
  // 'next' takes the units out of the following column
403
408
  },
409
+ indent: {
410
+ tools: true
411
+ // The indent tools in the column's drawer
412
+ },
404
413
  drag: {
405
414
  delay: 0,
406
415
  // Milliseconds to hold before a drag starts
@@ -562,6 +571,8 @@
562
571
  // 'tool' for the move tool, 'drawer' for the whole drawer
563
572
  "toolbar_drag": "auto",
564
573
  // Drag the toolbar's buttons onto the canvas. 'auto' follows drag_handle
574
+ "active_target": false,
575
+ // A click in a column makes it where the toolbar's buttons add
565
576
  "element_tools": [],
566
577
  // Host tools on element drawers, same shape as row_tools
567
578
  "element_classes": [],
@@ -596,6 +607,8 @@
596
607
  "default_view": ALL_VIEW,
597
608
  "resize": NESTED_SETTINGS.resize,
598
609
  // Resizing a column by dragging its edge
610
+ "indent": NESTED_SETTINGS.indent,
611
+ // Indenting a column, offset-*
599
612
  "source_textarea": "",
600
613
  "edit_source": true,
601
614
  // The toolbar's button to edit the canvas as html
@@ -621,6 +634,7 @@
621
634
  var sizePicker = null;
622
635
  var sourceOpen = false;
623
636
  var dropMarker = null;
637
+ var activeTarget = null;
624
638
  var warnedHere = {};
625
639
  var sortables = [];
626
640
  var instanceId = ++editorCounter;
@@ -1025,6 +1039,34 @@
1025
1039
  e.preventDefault();
1026
1040
  }
1027
1041
  }, signal);
1042
+ if (settings.active_target) {
1043
+ var pressed = null;
1044
+ canvas.addEventListener("pointerdown", function(e) {
1045
+ pressed = { x: e.clientX, y: e.clientY };
1046
+ }, signal);
1047
+ canvas.addEventListener("click", function(e) {
1048
+ var from = pressed;
1049
+ pressed = null;
1050
+ if (!hasClass(canvas, "ge-editing")) {
1051
+ return;
1052
+ }
1053
+ if (from && Math.abs(e.clientX - from.x) + Math.abs(e.clientY - from.y) > settings.drag.threshold) {
1054
+ return;
1055
+ }
1056
+ var region = closest(e.target, targetSelector());
1057
+ changeTarget(region && region !== canvas && canvas.contains(region) ? region : null);
1058
+ }, signal);
1059
+ document.addEventListener("keydown", function(e) {
1060
+ if (e.key !== "Escape" || !activeTarget || openSettingsState || dialogState) {
1061
+ return;
1062
+ }
1063
+ var focus = document.activeElement;
1064
+ if (focus && (is(focus, "input, textarea, select") || focus.isContentEditable)) {
1065
+ return;
1066
+ }
1067
+ changeTarget(null);
1068
+ }, signal);
1069
+ }
1028
1070
  }
1029
1071
  function textReady(block) {
1030
1072
  if (!is(block, ".ge-content") || !canvas.contains(block)) {
@@ -1050,6 +1092,10 @@
1050
1092
  "data-ge-layout": grouped ? JSON.stringify(layout) : layout.join(",")
1051
1093
  });
1052
1094
  btn.addEventListener("click", function() {
1095
+ if (activeTarget) {
1096
+ addToTarget(btn, "tool");
1097
+ return;
1098
+ }
1053
1099
  var row = rowFromLayoutValue(layout);
1054
1100
  var added = addNode("row", row, function() {
1055
1101
  canvas.appendChild(row);
@@ -1078,6 +1124,10 @@
1078
1124
  );
1079
1125
  attr(button, { "data-ge-toolbar": "container", "data-ge-container-type": type });
1080
1126
  button.addEventListener("click", function() {
1127
+ if (activeTarget) {
1128
+ addToTarget(button, "tool");
1129
+ return;
1130
+ }
1081
1131
  var row = createRow();
1082
1132
  var column = row.appendChild(createColumn(MAX_COL_SIZE));
1083
1133
  var container = column.appendChild(definition.create({}));
@@ -1171,6 +1221,10 @@
1171
1221
  "data-ge-item": index
1172
1222
  });
1173
1223
  button.addEventListener("click", function() {
1224
+ if (activeTarget) {
1225
+ addToTarget(button, item.source || "tool");
1226
+ return;
1227
+ }
1174
1228
  var made = item.create();
1175
1229
  var placed = item.inColumn ? inRowOfItsOwn(made) : made;
1176
1230
  var added = addNode(item.kind, made, function() {
@@ -1276,7 +1330,7 @@
1276
1330
  });
1277
1331
  return { region, before };
1278
1332
  }
1279
- function insertFeatureFromToolbar(button, where) {
1333
+ function insertFeatureFromToolbar(button, where, source) {
1280
1334
  var item = FEATURES[button.getAttribute("data-ge-feature")].toolbar[parseInt(button.getAttribute("data-ge-item"), 10)];
1281
1335
  var made = item.create();
1282
1336
  var placed = made;
@@ -1295,7 +1349,7 @@
1295
1349
  } else {
1296
1350
  where.region.appendChild(placed);
1297
1351
  }
1298
- }, { parent: where.region, source: item.source || "dragdrop" });
1352
+ }, { parent: where.region, source: item.source || source || "dragdrop" });
1299
1353
  }
1300
1354
  function inRowOfItsOwn(node) {
1301
1355
  var row = createRow();
@@ -1322,9 +1376,9 @@
1322
1376
  dropMarker.remove();
1323
1377
  }
1324
1378
  }
1325
- function insertFromToolbar(button, where) {
1379
+ function insertFromToolbar(button, where, source) {
1326
1380
  if (button.getAttribute("data-ge-toolbar") === "feature") {
1327
- return insertFeatureFromToolbar(button, where);
1381
+ return insertFeatureFromToolbar(button, where, source);
1328
1382
  }
1329
1383
  var container = button.getAttribute("data-ge-toolbar") === "container";
1330
1384
  var type = button.getAttribute("data-ge-container-type");
@@ -1339,7 +1393,7 @@
1339
1393
  } else {
1340
1394
  where.region.appendChild(placed);
1341
1395
  }
1342
- }, { parent: where.region, source: "dragdrop" });
1396
+ }, { parent: where.region, source: source || "dragdrop" });
1343
1397
  }
1344
1398
  function widthFamily() {
1345
1399
  var values = [];
@@ -1579,6 +1633,7 @@
1579
1633
  }
1580
1634
  function openSource() {
1581
1635
  deinit();
1636
+ changeTarget(null);
1582
1637
  htmlTextArea.style.height = 0.8 * document.documentElement.clientHeight + "px";
1583
1638
  htmlTextArea.value = canvas.innerHTML;
1584
1639
  show(htmlTextArea);
@@ -1594,6 +1649,32 @@
1594
1649
  init();
1595
1650
  hide(htmlTextArea);
1596
1651
  }
1652
+ function targetSelector() {
1653
+ return [".column"].concat(pluginHooks("regions")).join(", ");
1654
+ }
1655
+ function isTarget(node) {
1656
+ return !!node && node !== canvas && canvas.contains(node) && is(node, targetSelector());
1657
+ }
1658
+ function changeTarget(node) {
1659
+ if (node === activeTarget) {
1660
+ return;
1661
+ }
1662
+ var from = activeTarget;
1663
+ if (from) {
1664
+ removeClass(from, "ge-active-target");
1665
+ }
1666
+ activeTarget = node;
1667
+ if (node && hasClass(canvas, "ge-editing")) {
1668
+ addClass(node, "ge-active-target");
1669
+ }
1670
+ emit("target-change", { canvas, target: node, from });
1671
+ }
1672
+ function addToTarget(button, source) {
1673
+ var made = insertFromToolbar(button, { region: activeTarget, before: null }, source);
1674
+ if (made && made.scrollIntoView) {
1675
+ made.scrollIntoView({ behavior: "smooth" });
1676
+ }
1677
+ }
1597
1678
  function init() {
1598
1679
  if (openSettingsState && !attached(openSettingsState.node)) {
1599
1680
  closeSettings();
@@ -1617,10 +1698,18 @@
1617
1698
  makeResizable();
1618
1699
  switchLayout(curView);
1619
1700
  refreshPreviews(canvas);
1701
+ if (activeTarget && !canvas.contains(activeTarget)) {
1702
+ changeTarget(null);
1703
+ } else if (activeTarget) {
1704
+ addClass(activeTarget, "ge-active-target");
1705
+ }
1620
1706
  }
1621
1707
  function deinit() {
1622
1708
  closeSettings();
1623
1709
  removeClass(canvas, "ge-editing ge-drag-drawer ge-dropping");
1710
+ if (activeTarget) {
1711
+ removeClass(activeTarget, "ge-active-target");
1712
+ }
1624
1713
  plugins("onBeforeDeinit");
1625
1714
  closeSizePicker();
1626
1715
  hideDropMarker();
@@ -1662,6 +1751,7 @@
1662
1751
  closeSource();
1663
1752
  }
1664
1753
  deinit();
1754
+ activeTarget = null;
1665
1755
  removeConfirmModal();
1666
1756
  removeSettingsPanels();
1667
1757
  removeDialog();
@@ -2530,30 +2620,34 @@
2530
2620
  }
2531
2621
  var drawer = prependDrawer(col, "ge-tools-drawer");
2532
2622
  createMoveTool(drawer);
2533
- createTool(drawer, t("tool.column_narrower"), "ge-decrease-col-width", "bi bi-dash-lg", function(e) {
2534
- resizeColumn(
2535
- col,
2536
- e.shiftKey ? smallest(settings.valid_col_sizes) : stepThrough(settings.valid_col_sizes.filter(isUnits), currentUnits(col), -1),
2537
- "tool"
2538
- );
2539
- });
2540
- createTool(drawer, t("tool.column_wider"), "ge-increase-col-width", "bi bi-plus-lg", function(e) {
2541
- resizeColumn(
2542
- col,
2543
- e.shiftKey ? widestFor(col) : stepThrough(settings.valid_col_sizes.filter(isUnits), currentUnits(col), 1),
2544
- "tool"
2545
- );
2546
- });
2547
- createTool(drawer, t("tool.indent_decrease"), "ge-decrease-col-offset", "bi bi-text-indent-right", function(e) {
2548
- indentColumn(
2549
- col,
2550
- e.shiftKey ? smallest(settings.valid_col_offsets) : stepThrough(settings.valid_col_offsets, currentOffset(col), -1),
2551
- "tool"
2552
- );
2553
- });
2554
- createTool(drawer, t("tool.indent_increase"), "ge-increase-col-offset", "bi bi-text-indent-left", function(e) {
2555
- indentColumn(col, e.shiftKey ? deepestFor(col) : stepThrough(settings.valid_col_offsets, currentOffset(col), 1), "tool");
2556
- });
2623
+ if (settings.resize.tools !== false) {
2624
+ createTool(drawer, t("tool.column_narrower"), "ge-decrease-col-width", "bi bi-dash-lg", function(e) {
2625
+ resizeColumn(
2626
+ col,
2627
+ e.shiftKey ? smallest(settings.valid_col_sizes) : stepThrough(settings.valid_col_sizes.filter(isUnits), currentUnits(col), -1),
2628
+ "tool"
2629
+ );
2630
+ });
2631
+ createTool(drawer, t("tool.column_wider"), "ge-increase-col-width", "bi bi-plus-lg", function(e) {
2632
+ resizeColumn(
2633
+ col,
2634
+ e.shiftKey ? widestFor(col) : stepThrough(settings.valid_col_sizes.filter(isUnits), currentUnits(col), 1),
2635
+ "tool"
2636
+ );
2637
+ });
2638
+ }
2639
+ if (settings.indent.tools !== false) {
2640
+ createTool(drawer, t("tool.indent_decrease"), "ge-decrease-col-offset", "bi bi-text-indent-right", function(e) {
2641
+ indentColumn(
2642
+ col,
2643
+ e.shiftKey ? smallest(settings.valid_col_offsets) : stepThrough(settings.valid_col_offsets, currentOffset(col), -1),
2644
+ "tool"
2645
+ );
2646
+ });
2647
+ createTool(drawer, t("tool.indent_increase"), "ge-increase-col-offset", "bi bi-text-indent-left", function(e) {
2648
+ indentColumn(col, e.shiftKey ? deepestFor(col) : stepThrough(settings.valid_col_offsets, currentOffset(col), 1), "tool");
2649
+ });
2650
+ }
2557
2651
  addSettingsTool(drawer, col, settings.col_classes);
2558
2652
  hostTools(drawer, settings.col_tools);
2559
2653
  createTool(drawer, t("tool.delete_column"), "ge-delete-column", "bi bi-trash", function() {
@@ -4034,6 +4128,23 @@
4034
4128
  return featureMethods[name].apply(null, arguments);
4035
4129
  };
4036
4130
  }
4131
+ function apiSetActiveTarget(value) {
4132
+ if (!settings.active_target) {
4133
+ warnOnceHere("active_target", "setActiveTarget needs the active_target setting: without it, it does nothing");
4134
+ return;
4135
+ }
4136
+ if (value === null || value === void 0) {
4137
+ changeTarget(null);
4138
+ return;
4139
+ }
4140
+ var node = nodeFrom(value);
4141
+ if (!isTarget(node)) {
4142
+ var named = typeof value === "string" ? value : node ? "<" + node.tagName.toLowerCase() + ">" : String(value);
4143
+ warn("setActiveTarget: " + named + " is not a column or a region of the canvas");
4144
+ return;
4145
+ }
4146
+ changeTarget(node);
4147
+ }
4037
4148
  var own = {
4038
4149
  getHtml,
4039
4150
  getPlainHtml,
@@ -4067,7 +4178,11 @@
4067
4178
  },
4068
4179
  setLocale,
4069
4180
  getUtility,
4070
- setUtility
4181
+ setUtility,
4182
+ getActiveTarget: function() {
4183
+ return settings.active_target ? activeTarget : null;
4184
+ },
4185
+ setActiveTarget: apiSetActiveTarget
4071
4186
  };
4072
4187
  Object.keys(own).forEach(function(name) {
4073
4188
  var value = !!(METHODS[name] && METHODS[name].value);
@@ -4106,7 +4221,7 @@
4106
4221
  GridEditor._plainHtml = plainHtml;
4107
4222
  GridEditor.Sortable = null;
4108
4223
  GridEditor.bootstrap = null;
4109
- GridEditor.version = false ? "dev" : "8.0.0";
4224
+ GridEditor.version = false ? "dev" : "8.2.0";
4110
4225
  GridEditor.locales = {
4111
4226
  en: {
4112
4227
  "tool.move": "Move",