blockly-fluid 1.2.18 → 1.3.1

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/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ const escapeXml = require("./utils/escapeXml.js");
2
+
1
3
  module.exports = (Blockly, { generator: languageGeneratorFallback, generators: languageGenerators = {}, translate = (text) => text } = {}) => {
2
4
  const Blocks = new Proxy({}, {
3
5
  set(_, name, configuration = {}) {
@@ -59,10 +61,10 @@ module.exports = (Blockly, { generator: languageGeneratorFallback, generators: l
59
61
  if (typeof input.default === "function") (input.default = input.default());
60
62
  if (typeof input.options === "function") (input.options = input.options());
61
63
 
62
- const dropdownId = encodeURIComponent(JSON.stringify([color, input.default, ...((Array.isArray(input.options)) ? input.options.map((option) => [option, option]) : Object.entries(input.options)).map(([name, text]) => [translate((typeof text === "function") ? text() : text), (typeof name === "function") ? name() : name])]));
64
+ const shadowDropdownName = `shadow_dropdown_${name.length}_${name}_${token.length}_${token}`;
63
65
 
64
- if (!Blocks[`shadow_dropdown_${dropdownId}`]) {
65
- Blocks[`shadow_dropdown_${dropdownId}`] = {
66
+ if (!Blocks[shadowDropdownName]) {
67
+ Blocks[shadowDropdownName] = {
66
68
  layout: "DROPDOWN",
67
69
  fields: {
68
70
  DROPDOWN: {
@@ -81,14 +83,16 @@ module.exports = (Blockly, { generator: languageGeneratorFallback, generators: l
81
83
  };
82
84
  };
83
85
 
84
- valueInput.connection.setShadowDom(new DOMParser().parseFromString(`<shadow type="shadow_dropdown_${dropdownId}"></shadow>`, "text/xml").firstChild);
86
+ valueInput.connection.setShadowDom(new DOMParser().parseFromString(`<shadow type="${escapeXml(shadowDropdownName)}}"></shadow>`, "text/xml").firstChild);
85
87
  };
86
88
 
87
89
  if (input.variable) {
88
90
  if (typeof input.variable === "function") (input.variable = input.variable());
89
91
 
90
- if (!Blocks[`shadow_variable_${encodeURIComponent(color)}`]) {
91
- Blocks[`shadow_variable_${encodeURIComponent(color)}`] = {
92
+ const shadowVariableName = `shadow_variable_${name.length}_${name}_${token.length}_${token}`;
93
+
94
+ if (!Blocks[shadowVariableName]) {
95
+ Blocks[shadowVariableName] = {
92
96
  layout: "VARIABLE",
93
97
  fields: {
94
98
  VARIABLE: {
@@ -105,13 +109,13 @@ module.exports = (Blockly, { generator: languageGeneratorFallback, generators: l
105
109
  };
106
110
  };
107
111
 
108
- valueInput.connection.setShadowDom(new DOMParser().parseFromString(`<shadow type="shadow_variable_${encodeURIComponent(color)}"><field name="VARIABLE">${input.variable}</field></shadow>`, "text/xml").firstChild);
112
+ valueInput.connection.setShadowDom(new DOMParser().parseFromString(`<shadow type="${escapeXml(shadowVariableName)}"><field name="VARIABLE">${input.variable}</field></shadow>`, "text/xml").firstChild);
109
113
  };
110
114
 
111
115
  if (input.shadow) {
112
116
  if (typeof input.shadow === "function") (input.shadow = input.shadow());
113
117
 
114
- valueInput.connection.setShadowDom(new DOMParser().parseFromString(`<shadow type="shadow_${((typeof input.shadow.type === "function") ? input.shadow.type() : (input.shadow.type || "text")).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;")}">${(typeof input.shadow.content === "function") ? input.shadow.content() : (input.shadow.content || "")}</shadow>`, "text/xml").firstChild);
118
+ valueInput.connection.setShadowDom(new DOMParser().parseFromString(`<shadow type="shadow_${escapeXml((typeof input.shadow.type === "function") ? input.shadow.type() : (input.shadow.type || "text"))}">${(typeof input.shadow.content === "function") ? input.shadow.content() : (input.shadow.content || "")}</shadow>`, "text/xml").firstChild);
115
119
  };
116
120
  } else if (field) {
117
121
  const dummy = this.appendDummyInput();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blockly-fluid",
3
- "version": "1.2.18",
3
+ "version": "1.3.1",
4
4
  "description": "A flexible proxy wrapper for Blockly blocks.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -0,0 +1,8 @@
1
+ module.exports = (string) => {
2
+ return string
3
+ .replace(/&/g, "&amp;")
4
+ .replace(/</g, "&lt;")
5
+ .replace(/>/g, "&gt;")
6
+ .replace(/"/g, "&quot;")
7
+ .replace(/'/g, "&apos;");
8
+ };