@litejs/ui
Advanced tools
Comparing version
{ | ||
"name": "@litejs/ui", | ||
"version": "24.11.0", | ||
"version": "25.1.0", | ||
"description": "UI engine for LiteJS full-stack framework", | ||
@@ -15,3 +15,2 @@ "license": "MIT", | ||
"repository": "github:litejs/ui", | ||
"bugs": "https://github.com/litejs/dev/issues", | ||
"main": "ui.js", | ||
@@ -22,13 +21,11 @@ "files": [ | ||
"css", | ||
"el", | ||
"shim" | ||
"el" | ||
], | ||
"scripts": { | ||
"lint": "jshint --config=.github/jshint.json *.js", | ||
"test": "lj test test/index.js --tz='Europe/Tallinn' --brief --sources=load.js,require.js,index.js" | ||
"test": "lj t" | ||
}, | ||
"devDependencies": { | ||
"@litejs/cli": "24.10.0", | ||
"@litejs/dom": "24.8.0" | ||
"@litejs/cli": "25.1.1", | ||
"@litejs/dom": "25.1.0" | ||
} | ||
} |
87
ui.js
@@ -14,3 +14,3 @@ | ||
var UNDEF, lastExp, parser, pushBase, styleNode | ||
var UNDEF, parser, pushBase, styleNode | ||
, NUL = null | ||
@@ -41,6 +41,4 @@ , html = document.documentElement | ||
, elCache = {} | ||
, formatRe = /{((?:("|')(?:\\.|[^\\])*?\2|.)+?)}/g | ||
, renderRe = /[;\s]*([-.\w$]+)(?:([ :!])((?:(["'\/])(?:\\.|[^\\])*?\4|[^;])*))?/g | ||
, renderRe = /[;\s]*([-.\w$]+)(?:(!?)[ :]*((?:(["'\/])(?:\\.|[^\\])*?\4|[^;])*))?/g | ||
, selectorRe = /([.#:[])([-\w]+)(?:([~^$*|]?)=(("|')(?:\\.|[^\\])*?\5|[-\w]+))?]?/g | ||
, templateRe = /([ \t]*)(%?)((?:("|')(?:\\.|[^\\])*?\4|[-\w:.#[\]~^$*|]=?)*) ?([\/>+=@^;]|)(([\])}]?).*?([[({]?))(?=\x1f|\n|$)+/g | ||
, fnCache = {} | ||
@@ -73,6 +71,4 @@ , fnRe = /('|")(?:\\.|[^\\])*?\1|\/(?:\\.|[^\\])+?\/[gim]*|\$el\b|\$[aos]\b|\b(?:false|in|if|new|null|this|true|typeof|void|function|var|else|return)\b|\.\w+|\w+:/g | ||
val: elVal, | ||
view: function(el, url) { | ||
setAttr(el, "href", (pushBase || "#") + expand(url || "")) | ||
} | ||
} | ||
, bindOnce = [] | ||
, globalScope = { | ||
@@ -158,3 +154,3 @@ El: El, | ||
if (window.SVGElement) { | ||
each("animate animateMotion animateTransform circle clipPath defs desc ellipse feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feDropShadow feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence filter foreignObject g image line linearGradient marker mask metadata mpath path pattern polygon polyline radialGradient rect script set stop svg switch symbol text textPath tspan use view", function(name) { | ||
each("animate animateMotion animateTransform circle clipPath defs ellipse feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feDropShadow feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence g image line linearGradient marker mask mpath path pattern polygon polyline radialGradient rect set stop svg text textPath tspan use", function(name) { | ||
elCache[name] = document.createElementNS("http://www.w3.org/2000/svg", name) | ||
@@ -212,2 +208,3 @@ }) | ||
var emitter = this === window ? emptyArr : this | ||
function remove() { | ||
@@ -382,3 +379,5 @@ off.call(emitter, type, fn, scope) | ||
viewEmit(view, "open", params) | ||
/*** kb ***/ | ||
addKb(view.kb) | ||
/**/ | ||
params._c = UNDEF | ||
@@ -401,3 +400,5 @@ } | ||
view.o = UNDEF | ||
/*** kb ***/ | ||
rmKb(view.kb) | ||
/**/ | ||
viewEmit(view, "close") | ||
@@ -442,2 +443,3 @@ } | ||
, parentStack = [] | ||
, templateRe = /([ \t]*)(%?)((?:("|')(?:\\.|[^\\])*?\4|[-\w:.#[\]~^$*|]=?)*) ?([\/>=@^;]|)(([\])}]?).*?([[({]?))(?=\x1f|$)/gm | ||
@@ -477,4 +479,4 @@ function work(all, indent, plugin, sel, q, op, text, mapEnd, mapStart, offset) { | ||
if (text && op != "/") { | ||
if (op === ">" || op === "+") { | ||
replace(indent + (op === "+" ? text : " " + text), templateRe, work) | ||
if (op === ">") { | ||
replace(indent + " " + text, templateRe, work) | ||
} else if (op === "=") { | ||
@@ -551,3 +553,3 @@ append(parent, text) // + "\n") | ||
if (!view.o || lastUrl !== url) { | ||
$d.url = lastExp = lastUrl = url | ||
$d.url = lastUrl = expand(url) | ||
viewPing(view, params) | ||
@@ -909,5 +911,18 @@ } | ||
function format(str, data, getter) { | ||
return replace(str, formatRe, function(all, path) { | ||
return getter(data, path, "") | ||
}) | ||
for (var char, inQuote, inExpr, depth = 0, pos = 0, len = str.length; pos < len; ) { | ||
char = str.charAt(pos++) | ||
if (char == "'" || char == "\"") { // '" | ||
inQuote = (!inExpr || char === inQuote) ? "" : char | ||
} else if (inQuote) { | ||
if (char == "\\") pos++ | ||
} else if (char == "{" && depth++ < 1) { | ||
inExpr = pos | ||
} else if (char == "}" && inExpr && --depth < 1) { | ||
char = getter(data, str.slice(inExpr, pos - 1), "") | ||
str = str.slice(0, inExpr - 1) + char + str.slice(pos) | ||
pos = inExpr + char.length - 1 | ||
len = str.length | ||
} | ||
} | ||
return str | ||
} | ||
@@ -1107,5 +1122,5 @@ function iGet(obj, path, fallback) { | ||
if (enabled) { | ||
elReplace(el._if, el) | ||
elReplace(el._r, el) | ||
} else { | ||
elReplace(el, el._if || (el._if = Comm("if", bind(render, el, el, this)))) | ||
elReplace(el, el._r || (el._r = Comm("if", bind(render, el, el, this)))) | ||
return true | ||
@@ -1120,2 +1135,5 @@ } | ||
}, | ||
name: function(el, name) { | ||
setAttr(el, "name", expand(name, 1)) | ||
}, | ||
ref: function(el, name) { | ||
@@ -1125,3 +1143,3 @@ this[name] = el | ||
$s: function(el) { | ||
var scope = elScope(el, el) | ||
var scope = this | ||
each(slice.call(arguments, 1), function(args) { | ||
@@ -1133,2 +1151,5 @@ each(args, function(arg, i) { | ||
}) | ||
}, | ||
view: function(el, url) { | ||
setAttr(el, "href", (pushBase || "#") + expand(url || "")) | ||
} | ||
@@ -1146,4 +1167,2 @@ }), | ||
nearest: nearest, | ||
next: bind(walk, El, "nextSibling"), | ||
prev: bind(walk, El, "previousSibling"), | ||
rate: rate, | ||
@@ -1296,2 +1315,3 @@ replace: elReplace, | ||
el.$s = UNDEF | ||
elKill(el._r) // Replacement element like comment from if binding | ||
elEmpty(el) | ||
@@ -1418,3 +1438,3 @@ if (el.valObject !== UNDEF) { | ||
fn = fnCache[expr] || (fnCache[expr] = makeFn(expr)) | ||
return fn(node, scope, attr, fn.o) | ||
return fn(node, scope, attr, bindOnce) | ||
} catch (e) { | ||
@@ -1424,11 +1444,7 @@ throw e + "\n" + attr + ": " + expr | ||
} | ||
function makeFn(fn, raw) { | ||
var i = 0 | ||
, bindOnce = [] | ||
function makeFn(fn, raw, i) { | ||
fn = raw || "$s&&(" + replace(fn, renderRe, function(match, name, op, args) { | ||
return ( | ||
(op === "!" && (bindOnce[i] = match)) ? | ||
"($el[$a]=$el[$a].replace($o[" + (i++)+ "],''),0)||" : | ||
"" | ||
) + "$b['" + (bindings[name] ? name + "'].call($s,$el" : "set']($el,'" + name + "'") + (args ? "," + replace(args, /^\s*(\w+) in /,"'$1',") : "") + ")||" | ||
op ? "($el[$a]=$el[$a].replace($o[" + (i = bindOnce.indexOf(match), i < 0 ? bindOnce.push(match) - 1 : i)+ "],''),0)||" : "" | ||
) + "$b['" + (bindings[name] ? name + "'].call($s" + (name == "$s" ? "=El.scope($el,$el)": "") + ",$el" : "set']($el,'" + name + "'") + (args ? "," + args : "") + ")||" | ||
}) + "$r)" | ||
@@ -1441,3 +1457,2 @@ var vars = replace(fn, fnRe, "").match(wordRe) || [] | ||
fn = Function("$el,$s,$a,$o,$r", (vars[0] ? "var " + vars : "") + ";return " + fn) | ||
fn.o = bindOnce | ||
return fn | ||
@@ -1577,4 +1592,5 @@ } | ||
// Chrome M35 and Firefox 55 followed up. | ||
// alt+wheel may be OS level zoom, use shiftKey as alternative | ||
if (!touches[0]) { | ||
var ev = e.ctrlKey ? "pinch" : e.altKey ? "rotate" : UNDEF | ||
var ev = e.ctrlKey ? "pinch" : e.altKey || e.shiftKey ? "rotate" : UNDEF | ||
if (ev && emit(e.currentTarget || e.target, ev, e, e.deltaY/20, 0)) { | ||
@@ -1647,6 +1663,2 @@ return eventStop(e) | ||
} | ||
function walk(attr, el, sel) { | ||
for (; el && !matches(el = el[attr], sel); ); | ||
return el | ||
} | ||
function acceptMany(fn, prepareVal) { | ||
@@ -1697,5 +1709,3 @@ return function f(el, name, val, selector, delay, data) { | ||
try { | ||
var el = document.activeElement | ||
, tag = el.tagName | ||
if (tag === "A" || tag === "BUTTON") el.blur() | ||
document.activeElement.blur() | ||
} catch(e) {} | ||
@@ -1713,9 +1723,10 @@ } | ||
} | ||
function expand(str) { | ||
function expand(str, ns) { | ||
var first = str.charAt(0) | ||
, rest = str.slice(1) | ||
, lastExp = expand[ns] | ||
return ( | ||
first === "+" ? lastExp + rest : | ||
first === "%" ? ((first = lastExp.lastIndexOf(rest.charAt(0))), (first > 0 ? lastExp.slice(0, first) : lastExp)) + rest : | ||
(lastExp = str) | ||
(expand[ns] = str) | ||
) | ||
@@ -1722,0 +1733,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
141037
1.41%38
2.7%3417
1.58%