diff --git a/src/core/mockup-parser.js b/src/core/mockup-parser.js index 3566144e4..02266f92a 100644 --- a/src/core/mockup-parser.js +++ b/src/core/mockup-parser.js @@ -27,7 +27,10 @@ const parser = { el_options = el.getAttribute(`data-pat-${pattern_name}`); if (el_options) { // parse options if string - if (typeof el_options === "string") { + try { + el_options = JSON.parse(el_options); + } catch { + // not JSON, try to parse it as semi-colon/colon list const tmp_options = {}; el_options.split(";").forEach((item) => { item = item.split(":"); diff --git a/src/core/mockup-parser.test.js b/src/core/mockup-parser.test.js index ca23c216c..4e2cd4a18 100644 --- a/src/core/mockup-parser.test.js +++ b/src/core/mockup-parser.test.js @@ -44,4 +44,16 @@ describe("The mockup-parser", function () { expect(options.option2).toBe("value2"); expect(options.injectedOption).toBe("injectedValue"); }); + it("parses JSON data attribute of a single node", function () { + const el = document.createElement("div"); + el.setAttribute( + "data-pat-testpattern", + '{"option1": "value1", "option2": "value2"}' + ); + + const options = mockupParser.getOptions(el, "testpattern"); + + expect(options.option1).toBe("value1"); + expect(options.option2).toBe("value2"); + }); });