UNPKG

babelute-html-string-pragmatics

Version:

String output engine for babelute-html-lexicon

1 lines 14.2 kB
{"version":3,"file":"index.mjs","sources":["../../node_modules/to-no-case/index.js","../../node_modules/to-space-case/index.js","../../node_modules/to-slug-case/index.js","../../../nomocas-utils/lib/string/html-special-chars.js","../../src/index.js"],"sourcesContent":["\n/**\n * Export.\n */\n\nmodule.exports = toNoCase\n\n/**\n * Test whether a string is camel-case.\n */\n\nvar hasSpace = /\\s/\nvar hasSeparator = /(_|-|\\.|:)/\nvar hasCamel = /([a-z][A-Z]|[A-Z][a-z])/\n\n/**\n * Remove any starting case from a `string`, like camel or snake, but keep\n * spaces and punctuation that may be important otherwise.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toNoCase(string) {\n if (hasSpace.test(string)) return string.toLowerCase()\n if (hasSeparator.test(string)) return (unseparate(string) || string).toLowerCase()\n if (hasCamel.test(string)) return uncamelize(string).toLowerCase()\n return string.toLowerCase()\n}\n\n/**\n * Separator splitter.\n */\n\nvar separatorSplitter = /[\\W_]+(.|$)/g\n\n/**\n * Un-separate a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction unseparate(string) {\n return string.replace(separatorSplitter, function (m, next) {\n return next ? ' ' + next : ''\n })\n}\n\n/**\n * Camelcase splitter.\n */\n\nvar camelSplitter = /(.)([A-Z]+)/g\n\n/**\n * Un-camelcase a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction uncamelize(string) {\n return string.replace(camelSplitter, function (m, previous, uppers) {\n return previous + ' ' + uppers.toLowerCase().split('').join(' ')\n })\n}\n","\nvar clean = require('to-no-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toSpaceCase\n\n/**\n * Convert a `string` to space case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toSpaceCase(string) {\n return clean(string).replace(/[\\W_]+(.|$)/g, function (matches, match) {\n return match ? ' ' + match : ''\n }).trim()\n}\n","\nvar toSpace = require('to-space-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toSlugCase\n\n/**\n * Convert a `string` to slug case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toSlugCase(string) {\n return toSpace(string).replace(/\\s/g, '-')\n}\n","/**\n * Encode and decode html special chars : aka (&,<,>,\\\",') from/to (&amp;,&lt;,...)\n *\n * Useful for html string output.\n */\n\nvar mapEncode = {\n\t\t\"&\": \"&amp;\",\n\t\t\"<\": \"&lt;\",\n\t\t\">\": \"&gt;\",\n\t\t\"\\\"\": \"&quot;\",\n\t\t\"'\": \"&#39;\" // ' -> &apos; for XML only\n\t},\n\tmapDecode = {\n\t\t\"&amp;\": \"&\",\n\t\t\"&lt;\": \"<\",\n\t\t\"&gt;\": \">\",\n\t\t\"&quot;\": \"\\\"\",\n\t\t\"&#39;\": \"'\"\n\t};\n\nmodule.exports = {\n\tencode: function(str) {\n\t\treturn str.replace(/[&<>\"']/g, function(m) {\n\t\t\treturn mapEncode[m];\n\t\t});\n\t},\n\tdecode: function(str) {\n\t\treturn str.replace(/(&amp;|&lt;|&gt;|&quot;|&#39;)/g, function(m) {\n\t\t\treturn mapDecode[m];\n\t\t});\n\t}\n}","/**\n ************* HTML-to-String Actions ***********\n *\n * @author Gilles Coomans\n * @licence MIT\n * @copyright 2016-2017 Gilles Coomans\n */\n\nimport babelute from 'babelute';\nimport htmlLexicon from 'babelute-html-lexicon'; // external\nimport toSlugCase from 'to-slug-case'; // for data-* attributes\nimport htmlSpecialChars from 'nomocas-utils/lib/string/html-special-chars'; // for safe string output\n\nconst $baseOutput = babelute.FacadePragmatics.prototype.$output;\n\n/**\n * html-to-string pragmatics\n * @type {FacadePragmatics}\n * @public\n * @example\n * import stringPragmas from 'babelute-html/src/html-to-string.js';\n * import htmlLexicon from 'babelute-html/src/html-lexicon.js';\n *\n * const h = htmlLexicon.initializer;\n * const sentence = h.div(state.intro).section(h.class('my-section').h1(state.title));\n * \n * var stringOutput = stringPragmas.$output(null, sentence);\n */\nconst stringPragmas = babelute.createFacadePragmatics({\n\thtml: true\n}, {\n\t// we only need logical atoms definitions. (without user interactions. aka click etc.)\n\ttag(tag, args /* tagName, babelutes */ , component) {\n\t\tconst child = new TagDescriptor(),\n\t\t\tbabelutes = args[1];\n\t\tlet templ;\n\t\tif (babelutes)\n\t\t\tfor (let i = 0, len = babelutes.length; i < len; ++i) {\n\t\t\t\ttempl = babelutes[i];\n\t\t\t\tif (typeof templ === 'undefined')\n\t\t\t\t\tcontinue;\n\t\t\t\tif (templ && templ.__babelute__)\n\t\t\t\t\tthis.$output(child, templ, component);\n\t\t\t\telse if (typeof templ === 'string')\n\t\t\t\t\tchild.children += htmlSpecialChars.encode(templ); //.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\t\t\t\telse\n\t\t\t\t\tchild.children += templ;\n\t\t\t}\n\t\ttagOutput(tag, child, args[0]);\n\t},\n\n\ttext(tag, args /* value */ ) {\n\t\ttag.children += htmlSpecialChars.encode(args[0]);\n\t},\n\n\tclass(tag, args /* className */ ) {\n\t\tif (args[0] && (args.length === 1 || args[1]))\n\t\t\ttag.classes += (tag.classes ? ' ' : '') + args[0];\n\t},\n\n\tclasses(tag, args /* className */ ) {\n\t\ttag.classes += (tag.classes ? ' ' : '') + args[0];\n\t},\n\n\tstyle(tag, args /* name, value */ ) {\n\t\ttag.style += args[0] + ':' + args[1] + ';';\n\t},\n\n\tprop(tag, args) {\n\t\tif (args[1])\n\t\t\ttag.attributes += ' ' + args[0];\n\t},\n\n\tdata(tag, args) {\n\t\tconst name = 'data-' + toSlugCase(args[0]),\n\t\t\tvalue = args[1],\n\t\t\thasValue = typeof value !== 'undefined';\n\t\ttag.attributes += ' ' + name + (hasValue ? ('=\"' + value + '\"') : '');\n\t},\n\n\tattr(tag, args /* name, value */ ) {\n\t\tconst value = args[1];\n\t\t// tag.attributes += ' ' + args[0] + '=\"' + (typeof value === 'string' ? encodeHtmlSpecialChars(value) : value) + '\"';\n\t\ttag.attributes += ' ' + args[0] + '=\"' + (typeof value === 'string' ? value.replace(/\"/g, '\\\\\"')\n\t\t\t.replace(/</g, '&lt;')\n\t\t\t.replace(/>/g, '&gt;') : value) + '\"';\n\t},\n\n\tid(tag, args /* value */ ) {\n\t\ttag.attributes = ' id=\"' + args[0] + '\"' + tag.attributes;\n\t},\n\n\thtml(tag, args) {\n\t\ttag.children += args[0]; // TODO : should be sanitize\n\t},\n\n\tonString(tag, args /* render */ , component) {\n\t\tconst onRender = args[0];\n\t\tif (onRender)\n\t\t\tonRender(tag, component);\n\t},\n\n\tref(tag, args, component) {\n\t\tcomponent[args[0]] = tag;\n\t},\n\n\tcomponent(descriptor, args, parent) {\n\t\tconst Class = args[0],\n\t\t\tprops = args[1],\n\t\t\tinstance = new Class(props, parent);\n\t\tthis.$output(descriptor, instance.render(false), instance);\n\t},\n\n\tpostalComponent() {\n\t\t// nothing to do\n\t},\n\n\tcontainer(descriptor, args, parent) {\n\t\tthis.$output(descriptor, args[0]({ unmount() {} }), parent);\n\t},\n\tswitchUse(descriptor, args, parent) {\n\t\tconst b = new babelute.Babelute()._use(args[0], ...(args[1]));\n\t\tthis.$output(descriptor, b, parent);\n\t},\n\n\t$output(tag, babelute, component) {\n\t\treturn $baseOutput.call(this, tag || new TagDescriptor(), babelute, component).children;\n\t}\n});\n\n// for tags string construction\nclass TagDescriptor {\n\tconstructor() {\n\t\tthis.children = '';\n\t\tthis.classes = '';\n\t\tthis.style = '';\n\t\tthis.attributes = '';\n\t}\n}\n\nconst selfClosingTags = /area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr/;\n\n// TagDescriptor-to-string output\nfunction tagOutput(parent, tag, name) {\n\tlet out = '<' + name + tag.attributes;\n\tif (tag.style)\n\t\tout += ' style=\"' + tag.style + '\"';\n\tif (tag.classes)\n\t\tout += ' class=\"' + tag.classes + '\"';\n\tif (tag.children)\n\t\tparent.children += out + '>' + tag.children + '</' + name + '>';\n\telse if (selfClosingTags.test(name))\n\t\tparent.children += out + '/>';\n\telse\n\t\tparent.children += out + '></' + name + '>';\n}\n\nhtmlLexicon.addAliases({\n\t$toHTMLString(domElement) {\n\t\treturn stringPragmas.$output(domElement, this);\n\t}\n});\n\nexport default stringPragmas;\n\n"],"names":["module","toNoCase","hasSpace","hasSeparator","hasCamel","string","test","toLowerCase","unseparate","uncamelize","separatorSplitter","replace","m","next","camelSplitter","previous","uppers","split","join","toSpaceCase","clean","matches","match","trim","toSlugCase","toSpace","mapEncode","mapDecode","str","$baseOutput","babelute","FacadePragmatics","prototype","$output","stringPragmas","createFacadePragmatics","tag","args","component","child","TagDescriptor","babelutes","templ","i","len","length","__babelute__","children","htmlSpecialChars","encode","classes","style","attributes","name","value","hasValue","onRender","descriptor","parent","Class","props","instance","render","b","Babelute","_use","call","selfClosingTags","tagOutput","out","htmlLexicon","addAliases","domElement"],"mappings":"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"}