From 96047d150d065e2b3815d7959dc3d574103b9633 Mon Sep 17 00:00:00 2001 From: zqbright Date: Fri, 16 Jun 2017 15:44:10 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ast/index.js | 9 -- src/ast/parse-tag.js | 61 ---------- src/ast/parse.js | 83 ------------- src/ast/stringify.js | 80 ------------- src/core/compiler-v2.js | 103 ---------------- src/dsl/for.js | 17 --- src/dsl/index.js | 26 ----- src/js/index.js | 252 ---------------------------------------- 8 files changed, 631 deletions(-) delete mode 100644 src/ast/index.js delete mode 100644 src/ast/parse-tag.js delete mode 100644 src/ast/parse.js delete mode 100644 src/ast/stringify.js delete mode 100644 src/core/compiler-v2.js delete mode 100644 src/dsl/for.js delete mode 100644 src/dsl/index.js delete mode 100644 src/js/index.js diff --git a/src/ast/index.js b/src/ast/index.js deleted file mode 100644 index 2ffe9ba..0000000 --- a/src/ast/index.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Created by zhengqiguang on 2017/6/15. - * 修改 by https://github.com/HenrikJoreteg/html-parse-stringify/ - */ -import parse from "./parse"; -import stringify from "./stringify"; - -export {parse, stringify}; - diff --git a/src/ast/parse-tag.js b/src/ast/parse-tag.js deleted file mode 100644 index 35ce577..0000000 --- a/src/ast/parse-tag.js +++ /dev/null @@ -1,61 +0,0 @@ -var attrRE = /([:\w-]+)|['"]{1}([^'"]*)['"]{1}/g; - -// create optimized lookup object for -// void elements as listed here: -// http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements - -import dsl from "../dsl/index"; - -var lookup = (Object.create) ? Object.create(null) : {}; -lookup.area = true; -lookup.base = true; -lookup.br = true; -lookup.col = true; -lookup.embed = true; -lookup.hr = true; -lookup.img = true; -lookup.input = true; -lookup.keygen = true; -lookup.link = true; -lookup.menuitem = true; -lookup.meta = true; -lookup.param = true; -lookup.source = true; -lookup.track = true; -lookup.wbr = true; - -export default function (tag) { - var i = 0; - var key; - var res = { - type: 'tag', - name: '', - voidElement: false, - attrs: {}, - children: [], - dsl: [] - }; - - tag.replace(attrRE, function (match) { - - if (dsl.dslMap[match]) { - res.dsl.push(match); - } - - if (i % 2) { - key = match; - } else { - if (i === 0) { - if (lookup[match] || tag.charAt(tag.length - 2) === '/') { - res.voidElement = true; - } - res.name = match; - } else { - res.attrs[key] = match.replace(/['"]/g, ''); - } - } - i++; - }); - - return res; -}; \ No newline at end of file diff --git a/src/ast/parse.js b/src/ast/parse.js deleted file mode 100644 index ced0d06..0000000 --- a/src/ast/parse.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Created by zhengqiguang on 2017/6/15. - */ -var tagRE = /<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g; - -import parseTag from "./parse-tag"; - -var empty = Object.create ? Object.create(null) : {}; - -export default function (html, options) { - options || (options = {}); - options.components || (options.components = empty); - var result = []; - var current; - var level = -1; - var arr = []; - var byTag = {}; - var inComponent = false; - - html.replace(tagRE, function (tag, index) { - if (inComponent) { - if (tag !== ('')) { - return; - } else { - inComponent = false; - } - } - var isOpen = tag.charAt(1) !== '/'; - var start = index + tag.length; - var nextChar = html.charAt(start); - var parent; - - if (isOpen) { - level++; - - current = parseTag(tag); - if (current.type === 'tag' && options.components[current.name]) { - current.type = 'component'; - inComponent = true; - } - - if (!current.voidElement && !inComponent && nextChar && nextChar !== '<') { - current.children.push({ - type: 'text', - content: html.slice(start, html.indexOf('<', start)), - parent: current - }); - } - - byTag[current.tagName] = current; - - // if we're at root, push new base node - if (level === 0) { - result.push(current); - } - - parent = arr[level - 1]; - - if (parent) { - current.prev = parent.children[parent.children.length - 1] - parent.children[parent.children.length - 1].next = current; - parent.children.push(current); - current.parent = parent; - } - - arr[level] = current; - } - - if (!isOpen || current.voidElement) { - level--; - if (!inComponent && nextChar !== '<' && nextChar) { - // trailing text node - arr[level].children.push({ - type: 'text', - content: html.slice(start, html.indexOf('<', start)), - parent: arr[level] - }); - } - } - }); - - return result; -}; \ No newline at end of file diff --git a/src/ast/stringify.js b/src/ast/stringify.js deleted file mode 100644 index 6d3ecf7..0000000 --- a/src/ast/stringify.js +++ /dev/null @@ -1,80 +0,0 @@ -function attrString(attrs) { - var buff = []; - for (var key in attrs) { - buff.push(key + '="' + attrs[key] + '"'); - } - if (!buff.length) { - return ''; - } - return ' ' + buff.join(' '); -} - -function getTextFn(text) { - var regExp = /{{[ \t]*([\w\W]*?)[ \t]*}}/g; - // console.log(3, text); - var result = ""; - var cursor = 0; - - var $temp = ""; - while ((result = regExp.exec(text)) !== null) { - let $temp1 = text.slice(cursor, result.index); - - $temp += wrapStaticBlock($temp1); - - $temp += wrapDynamicBlock(result); - cursor += ($temp1.length + result[0].length); - - // console.log(result); - } - - $temp = $temp.replace(/\+ \'$/gm, ''); - - - return $temp; - // return text; -} -function getTagFn(doc) { - console.log(doc); - - let startTag = '<' + doc.name + (doc.attrs ? attrString(doc.attrs) : '') + (doc.voidElement ? '/>' : '>'), - endTag = ' '; - - - return { - startTag, - endTag - } - -} - -function wrapStaticBlock(str) { - return " + \'" + str + "\'"; -} - -function wrapDynamicBlock(result) { - return " + od." + result[1] + " + '" -} - - -function stringify(buff, doc) { - - switch (doc.type) { - case 'text': - return buff + getTextFn(doc.content); - case 'tag': - let $t = getTagFn(doc); - - buff += $t.startTag; - if (doc.voidElement) { - return buff; - } - return buff + doc.children.reduce(stringify, '') + $t.endTag; - } -} - -export default function (doc) { - console.log(doc); - return doc.reduce(function (token, rootEl) { - return token + stringify('', rootEl); - }, ''); -}; diff --git a/src/core/compiler-v2.js b/src/core/compiler-v2.js deleted file mode 100644 index 46cce46..0000000 --- a/src/core/compiler-v2.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Created by zhengqiguang on 2017/6/15. - */ - - -import {parse as htmlParse, stringify as htmlStringify} from "../ast/index"; - -import Render from "./render"; - -const compiler_helper = { - generaltplFn(tpl){ - - - //匹配头尾可能存在制表符,空格, 使用 {{}}括起来的字符串 - let patt = /{{[ \t]*([\w\W]*?)[ \t]*}}/g, - result; - - let tempStrFn = "", - fnArgs = [], - cursor = 0; - - // console.log(patt.exec(tpl)); - - while ((result = patt.exec(tpl)) !== null) { - - // console.log(result); - var $temp1 = tpl.slice(cursor, result.index); - cursor += $temp1.length; - - tempStrFn += this.wrapStaticBlock($temp1); - - // let $temp2 = tpl.slice(cursor, cursor + result[0].length); - - fnArgs.push(result[1]); - tempStrFn += this.wrapDynamicBlock(result); - cursor += result[0].length; - } - - let tempLast = tpl.slice(cursor, tpl.length); - - - tempStrFn += this.wrapStaticBlock(tempLast); - - let tplFn = this.gTplFn(tempStrFn); - - return { - tplFn: tplFn, - linkArgs: fnArgs - } - }, - wrapStaticBlock: function (str) { - - return "\'" + str + "\'"; - - }, - wrapDynamicBlock: function (result) { - - return " + od." + result[1] + " + " - }, - gTplFn: function (str) { - - let $t = "return " + str; - - $t = $t.replace(/\n/g, ""); - - let $tempFn = new Function("od", $t); - - return $tempFn; - - } - - -} - - -class Compiler { - - - constructor(tpl) { - this.$tpl = Render.generalDom(tpl); - this.tpl = this.$tpl.outerHTML; - this.$ast = htmlParse(tpl); - - - console.log(htmlStringify(this.$ast)); - - this.init(compiler_helper.generaltplFn(this.tpl)); - } - - init({tplFn, linkArgs}) { - this.tplFn = tplFn; - this.linkArgs = linkArgs; - } - - rebuild() { - - - } - -} - - -export default Compiler; diff --git a/src/dsl/for.js b/src/dsl/for.js deleted file mode 100644 index 87492d7..0000000 --- a/src/dsl/for.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Created by zhengqiguang on 2017/6/15. - */ - - - -const For = { - name: "for", - general(el){ - - - } -}; - -export default For; - - diff --git a/src/dsl/index.js b/src/dsl/index.js deleted file mode 100644 index 9f5e6e8..0000000 --- a/src/dsl/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Created by zhengqiguang on 2017/6/15. - */ - -import _for from "./for"; - -var dsl_prefix = "dsl-"; - -const dslMap = {}; - -class DSL { - constructor() { - this.initAll(); - } - - initAll() { - dslMap[`${dsl_prefix}${_for.name}`] = _for; - } - - get dslMap() { - return dslMap; - } -} - - -export default new DSL(); diff --git a/src/js/index.js b/src/js/index.js deleted file mode 100644 index 9df021a..0000000 --- a/src/js/index.js +++ /dev/null @@ -1,252 +0,0 @@ -/** - * Created by zhengqiguang on 2017/6/13. - */ - - -(function (window) { - - - /** - * QV - * @param option - * @constructor - */ - var QV = function (option) { - this.init(option); - } - - - initMinix(QV); - - - function initMinix(QV) { - - QV.prototype.init = function (opt) { - - this.el = opt.el; - - this.template = this.template; - - this.$data = opt.data || {}; - - this.$data["_od_"] = insertOD(this.$data["_od_"], this.$data); - - this.mountWatcher(); - - this.vnode = new QNODE(opt, this.$data); - - this.mount(this.vnode); - - } - - QV.prototype.mount = function (vnode) { - vnode.$el.parentNode.replaceChild(vnode.$dom, vnode.$el); - } - - QV.prototype.mountWatcher = function () { - - for (var key in this.$data) { - - if (key !== "_od_") { - (function (key) { - Object.defineProperty(this.$data, key, { - get: function () { - return this.$data["_od_"][key].value; - }.bind(this), - set: function (value) { - if (value !== this.$data["_od_"][key].value) { - console.log(123); - - var $n = this.$data["_od_"][key].linkNodes; - - this.$data["_od_"][key].value = value; - - for (var i = 0, n; n = $n[i]; i++) { - n.update(); - } - - - } - }.bind(this) - }); - - }.bind(this))(key); - - } - - - } - - - } - - } - - function insertOD($targetData, $data) { - - !$targetData && ($targetData = {}); - - for (var key in $data) { - $targetData[key] = { - value: $data[key], - linkNodes: [] - } - } - - return $targetData; - } - - - /** - * QNODE - * @param opt - * @constructor - */ - function QNODE(opt, $data) { - this.el = opt.el; - this.template = opt.template; - this.opt = opt; - - this.$data = $data; - - this.$el = document.querySelector(this.el); - - this.$template = document.querySelector(this.template).innerHTML; - - this.$html = this.$template; - - this.init(); - - } - - initQNODE(QNODE); - - function initQNODE(QNODE) { - QNODE.prototype.init = function () { - this.generalTplFn(); //生成模板函数 - - this.linkWatcher(); - - this.renderNode();//数据和模板结合生成 html - - this.generalDom(); - } - - - QNODE.prototype.generalTplFn = function () { - var $t = template.generalTemplateFn(this.$template); - - this.renderFn = $t.tplFn; - this.linkArgs = $t.linkArgs; - - } - - QNODE.prototype.linkWatcher = function () { - - for (var i = 0, t; t = this.linkArgs[i]; i++) { - this.$data["_od_"][t].linkNodes.push(this); - } - } - - QNODE.prototype.generalDom = function (isReturn) { - - var $dom = tplToDom(this.$html); //这里只能使用有唯一父节点的模板 - if ($dom.length !== 1) { - throw new Error("只能存在唯一的父亲节点"); - } else { - if (isReturn) { - return $dom[0]; - } else { - this.$dom = $dom[0]; - } - } - } - - QNODE.prototype.renderNode = function () { - // console.log(this.$data); - this.$html = this.renderFn(this.$data); - - // console.log(this.renderFn); - console.log(this.$html); - } - - QNODE.prototype.update = function () { - this.renderNode(); - var $oldDom = this.$dom; - var $newDom = this.generalDom(true); - $oldDom.parentNode.replaceChild($newDom, $oldDom); - this.$dom = $newDom; - } - } - - function tplToDom(tpl) { - var $temp = document.createElement("div"); - $temp.innerHTML = tpl.trim(); //不然会有多余的空格等东西 - return $temp.childNodes; - - } - - var template = { - generalTemplateFn: function (tpl) { - var patt = new RegExp("\{\{\[ \\t\]\*\(\[\@\#\]\?\)\(\\\/\?\)\(\[\\w\\W\]\*\?\)\[ \\t\]\*\}\}", "g"); - var result; - - - // console.log(patt, tpl); - // console.log(patt.exec(tpl)); - var $tempStrFn = ""; - var fnArgs = []; - var cursor = 0; - while ((result = patt.exec(tpl)) != null) { - var $temp1 = tpl.slice(cursor, result.index); //标志符之前的静态 - - cursor += $temp1.length; - - $tempStrFn += this.wrapStaticBlock($temp1); - - var $temp2 = tpl.slice(cursor, cursor + result[0].length); //获取标志 - - fnArgs.push(result[3]); - $tempStrFn += this.wrapDynamicBlock(result); - - cursor = cursor + result[0].length; - } - - var $tempLast = tpl.slice(cursor, tpl.length); //获取闭合的元素 - - $tempStrFn += this.wrapStaticBlock($tempLast); - - var tplFn = this.gTplFn($tempStrFn); - - return {tplFn: tplFn, linkArgs: fnArgs}; - - }, - - wrapStaticBlock: function (str) { - - return "\'" + str + "\'"; - - }, - wrapDynamicBlock: function (result) { - - return " + od." + result[3] + " + " - }, - gTplFn: function (str) { - - var $t = "console.log(od); return " + str; - - $t = $t.replace(/\n/g, ""); - - var $tempFn = new Function("od", $t); - - return $tempFn; - - } - - - } - - - window.QV = QV; - -})(window); From 22ad44900bf6db2f1361cb3f95e14c3ce7d72f3d Mon Sep 17 00:00:00 2001 From: zqbright Date: Fri, 16 Jun 2017 15:48:44 +0800 Subject: [PATCH 2/5] commit readme.md --- README.MD | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 README.MD diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..ab8c1ce --- /dev/null +++ b/README.MD @@ -0,0 +1,5 @@ +### simlpe demo front-end framework QV like the VUE + +* install: yarn install +* dev : yarn run dev +* pub : yarn run pub \ No newline at end of file From d6b9624d4dbed9cf096d7c4d2a39eed5a6a95e2e Mon Sep 17 00:00:00 2001 From: zqbright Date: Sat, 17 Jun 2017 17:04:45 +0800 Subject: [PATCH 3/5] 1 --- dist/dev/bundle.js | 1 + dist/dev/bundle.js.map | 2 +- src/core/compiler.js | 1 + test/index.html | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dist/dev/bundle.js b/dist/dev/bundle.js index 355f311..2f0021e 100644 --- a/dist/dev/bundle.js +++ b/dist/dev/bundle.js @@ -56,6 +56,7 @@ var createClass = function () { var compiler_helper = { generaltplFn: function generaltplFn(tpl) { + console.log(tpl); var patt = new RegExp("\{\{\[ \\t\]\*\(\[\@\#\]\?\)\(\\\/\?\)\(\[\\w\\W\]\*\?\)\[ \\t\]\*\}\}", "g"), result = void 0; diff --git a/dist/dev/bundle.js.map b/dist/dev/bundle.js.map index 6d9182d..29b3a80 100644 --- a/dist/dev/bundle.js.map +++ b/dist/dev/bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"bundle.js.map","sources":["../Users/zhengqiguang/Work/github/QV/src/common/selector.js","../Users/zhengqiguang/Work/github/QV/src/core/compiler.js","../Users/zhengqiguang/Work/github/QV/src/core/render.js","../Users/zhengqiguang/Work/github/QV/src/core/event-loop.js","../Users/zhengqiguang/Work/github/QV/src/core/node.js","../Users/zhengqiguang/Work/github/QV/src/core/watcher.js","../Users/zhengqiguang/Work/github/QV/src/core/data.js","../Users/zhengqiguang/Work/github/QV/src/core/core.js","../Users/zhengqiguang/Work/github/QV/src/index.js"],"sourcesContent":["/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nexport default {\n s(selector = \"\"){ //单个\n return document.querySelector(selector);\n },\n m(selector = \"\"){// 集合\n return document.querySelectorAll(selector);\n },\n id(id = \"\"){\n return document.getElementById(id);\n }\n\n}\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nconst compiler_helper = {\n generaltplFn(tpl){\n let patt = new RegExp(\"\\{\\{\\[ \\\\t\\]\\*\\(\\[\\@\\#\\]\\?\\)\\(\\\\\\/\\?\\)\\(\\[\\\\w\\\\W\\]\\*\\?\\)\\[ \\\\t\\]\\*\\}\\}\", \"g\"),\n result;\n\n let tempStrFn = \"\",\n fnArgs = [],\n cursor = 0;\n\n\n while ((result = patt.exec(tpl)) !== null) {\n var $temp1 = tpl.slice(cursor, result.index);\n cursor += $temp1.length;\n\n tempStrFn += this.wrapStaticBlock($temp1);\n\n // let $temp2 = tpl.slice(cursor, cursor + result[0].length);\n\n fnArgs.push(result[3]);\n tempStrFn += this.wrapDynamicBlock(result);\n cursor += result[0].length;\n }\n\n let tempLast = tpl.slice(cursor, tpl.length);\n\n\n tempStrFn += this.wrapStaticBlock(tempLast);\n\n let tplFn = this.gTplFn(tempStrFn);\n\n return {\n tplFn: tplFn,\n linkArgs: fnArgs\n }\n },\n wrapStaticBlock: function (str) {\n\n return \"\\'\" + str + \"\\'\";\n\n },\n wrapDynamicBlock: function (result) {\n\n return \" + od.\" + result[3] + \" + \"\n },\n gTplFn: function (str) {\n\n let $t = \"console.log(od); return \" + str;\n\n $t = $t.replace(/\\n/g, \"\");\n\n let $tempFn = new Function(\"od\", $t);\n\n return $tempFn;\n\n }\n\n\n}\n\n\nclass Compiler {\n\n\n constructor(tpl) {\n this.tpl = tpl;\n this.init(compiler_helper.generaltplFn(this.tpl));\n }\n\n init({tplFn, linkArgs}) {\n this.tplFn = tplFn;\n this.linkArgs = linkArgs;\n }\n\n}\n\n\nexport default Compiler;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\n\n\nconst render = {\n\n mount($node, $data){\n\n let $newDom = this.generalDom($node.$tplfn($data));\n\n this.replaceNode($newDom, $node);\n\n },\n\n generalDom(domStr){\n var $temp = document.createElement(\"div\");\n $temp.innerHTML = domStr.trim(); //不然会有多余的空格等东西\n return $temp.childNodes[0];\n },\n\n replaceNode(newDom, node){\n let $el = node.$el;\n\n $el.parentNode.replaceChild(newDom, $el);\n\n node.$el = newDom;\n }\n\n\n}\n\n\nexport default render;","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\n\nlet EventLoop = {\n d_o(fn){\n let p = Promise.resolve();\n p.then(fn).catch((e) => {\n console.log(e);\n });\n }\n\n}\n\nexport default EventLoop;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nimport selector from \"../common/selector\";\n\nimport Compiler from \"./compiler\";\n\nimport Render from \"./render\";\n\nimport EventLoop from \"./event-loop\";\n\nclass Node {\n\n constructor({el, template, data}) {\n this.$data = data;\n this.el = el;\n this.template = template;\n this.$el = selector.s(this.el);\n\n let $t = selector.s(this.template);\n if ($t) {\n this.$template = $t.innerHTML.trim();\n } else {\n //error\n }\n this.$compiler = new Compiler(this.$template);\n\n this.$args = this.$compiler.linkArgs;\n this.$tplfn = this.$compiler.tplFn;\n }\n\n update() {\n EventLoop.d_o(Render.mount.bind(Render, this, this.$data));\n }\n\n}\n\nexport default Node;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nclass Watcher {\n constructor(data) {\n this.$data = data;\n this.mountWatcher();\n\n }\n\n mountWatcher() {\n\n let od = this.$data[\"_od_\"];\n\n for (let key in this.$data) {\n\n (function (key) {\n\n let timeoutHandler = null;\n\n if (key !== \"_od_\" && !od[key].mounted) {\n if (!od[key]) {\n throw new Error(`data:${key} is init `);\n }\n Object.defineProperty(this.$data, key, {\n get () {\n return od[key].value;\n },\n set(value) {\n clearTimeout(timeoutHandler);\n setTimeout(() => {\n if (value !== od[key].value) {\n var $n = od[key].linkNodes;\n od[key].value = value;\n for (var i = 0, n; n = $n[i]; i++) {\n n.update();\n }\n }\n }, 1000 / 60);//一帧节流\n\n }\n });\n od[key].mounted = true;\n }\n }.bind(this))(key);\n\n }\n }\n\n linkNode($node) {\n\n for (let i = 0, n; n = $node.$args[i]; i++) {\n if (this.$data[n] &&\n this.$data[\"_od_\"][n] &&\n this.$data[\"_od_\"][n].linkNodes.indexOf($node) === -1) {\n this.$data[\"_od_\"][n].linkNodes.push($node);\n }\n }\n }\n\n\n updateData() {\n\n\n }\n\n\n}\n\n\nexport default Watcher;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nconst helper = {\n insertOD($targetData, $data){\n\n !$targetData && ($targetData = {});\n\n for (var key in $data) {\n $targetData[key] = {\n value: $data[key],\n linkNodes: [],\n mounted: false\n }\n }\n\n return $targetData;\n\n }\n\n\n}\n\nclass Data {\n\n static formatData(data = {}) {\n data[\"_od_\"] = helper.insertOD(data[\"_od_\"], data);\n return data;\n }\n\n\n}\n\nexport default Data;\n","/**\n * Created by zhengqiguang on 2017/6/14.\n */\n\nimport Node from \"./node\";\nimport Watcher from \"./watcher\";\nimport Data from \"./data\";\nimport render from \"./render\";\n\nclass QV {\n constructor(opt = {}) {\n this._$opt = opt;\n\n this.formatOption(opt);\n\n this.mountRoot();\n\n }\n\n formatOption(opt) {\n\n this.$data = Data.formatData(opt.data);\n\n this.$root = new Node(opt);\n\n this.$watcher = new Watcher(this.$data);\n\n this.$watcher.linkNode(this.$root);\n\n }\n\n mountRoot() {\n render.mount(this.$root, this.$data);\n }\n\n\n}\n\n\nexport default QV;\n","/**\n * Created by zhengqiguang on 2017/6/14.\n */\n\n\nimport Core from \"./core/core\";\n\n\n\nexport default Core;\n"],"names":["selector","document","querySelector","querySelectorAll","id","getElementById","compiler_helper","tpl","patt","RegExp","result","tempStrFn","fnArgs","cursor","exec","$temp1","slice","index","length","wrapStaticBlock","push","wrapDynamicBlock","tempLast","tplFn","gTplFn","str","$t","replace","$tempFn","Function","Compiler","init","generaltplFn","linkArgs","render","$node","$data","$newDom","generalDom","$tplfn","replaceNode","domStr","$temp","createElement","innerHTML","trim","childNodes","newDom","node","$el","parentNode","replaceChild","EventLoop","fn","p","Promise","resolve","then","catch","e","log","Node","el","template","data","s","$template","$compiler","$args","d_o","Render","mount","bind","Watcher","mountWatcher","od","key","timeoutHandler","mounted","Error","defineProperty","value","$n","linkNodes","i","n","update","indexOf","helper","$targetData","Data","insertOD","QV","opt","_$opt","formatOption","mountRoot","formatData","$root","$watcher","linkNode"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bundle.js.map","sources":["../Users/zhengqiguang/Work/github/QV/src/common/selector.js","../Users/zhengqiguang/Work/github/QV/src/core/compiler.js","../Users/zhengqiguang/Work/github/QV/src/core/render.js","../Users/zhengqiguang/Work/github/QV/src/core/event-loop.js","../Users/zhengqiguang/Work/github/QV/src/core/node.js","../Users/zhengqiguang/Work/github/QV/src/core/watcher.js","../Users/zhengqiguang/Work/github/QV/src/core/data.js","../Users/zhengqiguang/Work/github/QV/src/core/core.js","../Users/zhengqiguang/Work/github/QV/src/index.js"],"sourcesContent":["/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nexport default {\n s(selector = \"\"){ //单个\n return document.querySelector(selector);\n },\n m(selector = \"\"){// 集合\n return document.querySelectorAll(selector);\n },\n id(id = \"\"){\n return document.getElementById(id);\n }\n\n}\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nconst compiler_helper = {\n generaltplFn(tpl){\n console.log(tpl);\n let patt = new RegExp(\"\\{\\{\\[ \\\\t\\]\\*\\(\\[\\@\\#\\]\\?\\)\\(\\\\\\/\\?\\)\\(\\[\\\\w\\\\W\\]\\*\\?\\)\\[ \\\\t\\]\\*\\}\\}\", \"g\"),\n result;\n\n let tempStrFn = \"\",\n fnArgs = [],\n cursor = 0;\n\n\n while ((result = patt.exec(tpl)) !== null) {\n var $temp1 = tpl.slice(cursor, result.index);\n cursor += $temp1.length;\n\n tempStrFn += this.wrapStaticBlock($temp1);\n\n // let $temp2 = tpl.slice(cursor, cursor + result[0].length);\n\n fnArgs.push(result[3]);\n tempStrFn += this.wrapDynamicBlock(result);\n cursor += result[0].length;\n }\n\n let tempLast = tpl.slice(cursor, tpl.length);\n\n\n tempStrFn += this.wrapStaticBlock(tempLast);\n\n let tplFn = this.gTplFn(tempStrFn);\n\n return {\n tplFn: tplFn,\n linkArgs: fnArgs\n }\n },\n wrapStaticBlock: function (str) {\n\n return \"\\'\" + str + \"\\'\";\n\n },\n wrapDynamicBlock: function (result) {\n\n return \" + od.\" + result[3] + \" + \"\n },\n gTplFn: function (str) {\n\n let $t = \"console.log(od); return \" + str;\n\n $t = $t.replace(/\\n/g, \"\");\n\n let $tempFn = new Function(\"od\", $t);\n\n return $tempFn;\n\n }\n\n\n}\n\n\nclass Compiler {\n\n\n constructor(tpl) {\n this.tpl = tpl;\n this.init(compiler_helper.generaltplFn(this.tpl));\n }\n\n init({tplFn, linkArgs}) {\n this.tplFn = tplFn;\n this.linkArgs = linkArgs;\n }\n\n}\n\n\nexport default Compiler;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\n\n\nconst render = {\n\n mount($node, $data){\n\n let $newDom = this.generalDom($node.$tplfn($data));\n\n this.replaceNode($newDom, $node);\n\n },\n\n generalDom(domStr){\n var $temp = document.createElement(\"div\");\n $temp.innerHTML = domStr.trim(); //不然会有多余的空格等东西\n return $temp.childNodes[0];\n },\n\n replaceNode(newDom, node){\n let $el = node.$el;\n\n $el.parentNode.replaceChild(newDom, $el);\n\n node.$el = newDom;\n }\n\n\n}\n\n\nexport default render;","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\n\nlet EventLoop = {\n d_o(fn){\n let p = Promise.resolve();\n p.then(fn).catch((e) => {\n console.log(e);\n });\n }\n\n}\n\nexport default EventLoop;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nimport selector from \"../common/selector\";\n\nimport Compiler from \"./compiler\";\n\nimport Render from \"./render\";\n\nimport EventLoop from \"./event-loop\";\n\nclass Node {\n\n constructor({el, template, data}) {\n this.$data = data;\n this.el = el;\n this.template = template;\n this.$el = selector.s(this.el);\n\n let $t = selector.s(this.template);\n if ($t) {\n this.$template = $t.innerHTML.trim();\n } else {\n //error\n }\n this.$compiler = new Compiler(this.$template);\n\n this.$args = this.$compiler.linkArgs;\n this.$tplfn = this.$compiler.tplFn;\n }\n\n update() {\n EventLoop.d_o(Render.mount.bind(Render, this, this.$data));\n }\n\n}\n\nexport default Node;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nclass Watcher {\n constructor(data) {\n this.$data = data;\n this.mountWatcher();\n\n }\n\n mountWatcher() {\n\n let od = this.$data[\"_od_\"];\n\n for (let key in this.$data) {\n\n (function (key) {\n\n let timeoutHandler = null;\n\n if (key !== \"_od_\" && !od[key].mounted) {\n if (!od[key]) {\n throw new Error(`data:${key} is init `);\n }\n Object.defineProperty(this.$data, key, {\n get () {\n return od[key].value;\n },\n set(value) {\n clearTimeout(timeoutHandler);\n setTimeout(() => {\n if (value !== od[key].value) {\n var $n = od[key].linkNodes;\n od[key].value = value;\n for (var i = 0, n; n = $n[i]; i++) {\n n.update();\n }\n }\n }, 1000 / 60);//一帧节流\n\n }\n });\n od[key].mounted = true;\n }\n }.bind(this))(key);\n\n }\n }\n\n linkNode($node) {\n\n for (let i = 0, n; n = $node.$args[i]; i++) {\n if (this.$data[n] &&\n this.$data[\"_od_\"][n] &&\n this.$data[\"_od_\"][n].linkNodes.indexOf($node) === -1) {\n this.$data[\"_od_\"][n].linkNodes.push($node);\n }\n }\n }\n\n\n updateData() {\n\n\n }\n\n\n}\n\n\nexport default Watcher;\n","/**\n * Created by zhengqiguang on 2017/6/15.\n */\n\nconst helper = {\n insertOD($targetData, $data){\n\n !$targetData && ($targetData = {});\n\n for (var key in $data) {\n $targetData[key] = {\n value: $data[key],\n linkNodes: [],\n mounted: false\n }\n }\n\n return $targetData;\n\n }\n\n\n}\n\nclass Data {\n\n static formatData(data = {}) {\n data[\"_od_\"] = helper.insertOD(data[\"_od_\"], data);\n return data;\n }\n\n\n}\n\nexport default Data;\n","/**\n * Created by zhengqiguang on 2017/6/14.\n */\n\nimport Node from \"./node\";\nimport Watcher from \"./watcher\";\nimport Data from \"./data\";\nimport render from \"./render\";\n\nclass QV {\n constructor(opt = {}) {\n this._$opt = opt;\n\n this.formatOption(opt);\n\n this.mountRoot();\n\n }\n\n formatOption(opt) {\n\n this.$data = Data.formatData(opt.data);\n\n this.$root = new Node(opt);\n\n this.$watcher = new Watcher(this.$data);\n\n this.$watcher.linkNode(this.$root);\n\n }\n\n mountRoot() {\n render.mount(this.$root, this.$data);\n }\n\n\n}\n\n\nexport default QV;\n","/**\n * Created by zhengqiguang on 2017/6/14.\n */\n\n\nimport Core from \"./core/core\";\n\n\n\nexport default Core;\n"],"names":["selector","document","querySelector","querySelectorAll","id","getElementById","compiler_helper","tpl","log","patt","RegExp","result","tempStrFn","fnArgs","cursor","exec","$temp1","slice","index","length","wrapStaticBlock","push","wrapDynamicBlock","tempLast","tplFn","gTplFn","str","$t","replace","$tempFn","Function","Compiler","init","generaltplFn","linkArgs","render","$node","$data","$newDom","generalDom","$tplfn","replaceNode","domStr","$temp","createElement","innerHTML","trim","childNodes","newDom","node","$el","parentNode","replaceChild","EventLoop","fn","p","Promise","resolve","then","catch","e","Node","el","template","data","s","$template","$compiler","$args","d_o","Render","mount","bind","Watcher","mountWatcher","od","key","timeoutHandler","mounted","Error","defineProperty","value","$n","linkNodes","i","n","update","indexOf","helper","$targetData","Data","insertOD","QV","opt","_$opt","formatOption","mountRoot","formatData","$root","$watcher","linkNode"],"mappings":"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"} \ No newline at end of file diff --git a/src/core/compiler.js b/src/core/compiler.js index dc104df..3a03fd9 100644 --- a/src/core/compiler.js +++ b/src/core/compiler.js @@ -4,6 +4,7 @@ const compiler_helper = { generaltplFn(tpl){ + console.log(tpl); let patt = new RegExp("\{\{\[ \\t\]\*\(\[\@\#\]\?\)\(\\\/\?\)\(\[\\w\\W\]\*\?\)\[ \\t\]\*\}\}", "g"), result; diff --git a/test/index.html b/test/index.html index e892c9c..04ebe76 100644 --- a/test/index.html +++ b/test/index.html @@ -9,7 +9,7 @@