Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"name": "poplar",
|
||||
"main": "poplar.js",
|
||||
"version": "0.0.0",
|
||||
"homepage": "https://github.com/wilsonpage/poplar",
|
||||
"authors": [
|
||||
"Wilson Page <wilsonpage@me.com>"
|
||||
],
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script src="poplar.js"></script>
|
||||
<title>poplar</title>
|
||||
</head>
|
||||
<body>
|
||||
<template>
|
||||
<a href="http://twitter.com/${meta.twitter}" data-foo="foo" data-name="${name}"/>
|
||||
<img src="http://avatars.io/twitter/${meta.twitter}?size=large" />
|
||||
<h1>hello ${name}</h1>
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
var template = document.querySelector('template');
|
||||
|
||||
var el = poplar(template.innerHTML);
|
||||
document.body.appendChild(el);
|
||||
|
||||
poplar.populate(el, {
|
||||
name: 'wilson',
|
||||
meta: { twitter: 'wilsonpage' }
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
;;;;;;;;(function(define){'use strict';define(function(require,exports,module){var debug=0?console.log.bind(console,'[poplar]'):function(){};var elements=new WeakMap();var regex={content:/>([^<]+)</g,var:/\$\{([^\}]+)\}/g,attrs:/(<[a-z\-]+ )(.+?)( ?\/>|>)/g,attr:/([a-z\-]+)="([^\"]+\$\{[^\"]+|\$[^"]+)"/g};module.exports=poplar;function poplar(html){return poplar.create(poplar.parse(html));}
|
||||
poplar.parse=function(html){debug('parse',html);var formatted=html.replace(/\s*\n\s*/g,'').replace(/ +/g,'').replace(regex.attrs,function(match,start,content,end){var dynamic=[];var simple=content.replace(regex.attr,function(match,name,prop){dynamic.push(name+'='+encodeURIComponent(prop));return'';});if(!dynamic.length)return match;var dataBindAttrs=dynamic.join(' ');var tag=start+
|
||||
simple+' data-poplar-attrs="'+dataBindAttrs+'"'+
|
||||
end;return tag.replace(/ +/g,' ');}).replace(regex.content,function(m,content){return m.replace(regex.var,function(m,group){return'<span data-poplar-text="'+group+'"></span>';});});return elementify(formatted);};poplar.create=function(parent){debug('create');var el=parent.firstElementChild;elements.set(el,{textNodes:replaceTextPlaceholders(parent),attrs:replaceAttrPlaceholders(parent)});return el;};poplar.populate=function(el,data){debug('poplate',el,data);var bindings=elements.get(el);if(!bindings){debug('unknown element');return false;}
|
||||
var textNodes=bindings.textNodes;var attrs=bindings.attrs;var i=textNodes.length;var j=attrs.length;while(i--){var node=textNodes[i].node;var newData=getProp(data,textNodes[i].key);if(node.data!==newData){node.data=newData;}}
|
||||
while(j--){var item=attrs[j];var value=item.template?interpolate(item.template,data):getProp(data,item.prop);item.el.setAttribute(item.name,value);}
|
||||
debug('populated');return true;};function interpolate(string,data){return string.replace(regex.var,function(match,group){return getProp(data,group);});}
|
||||
function replaceTextPlaceholders(el){var placeholders=el.querySelectorAll('[data-poplar-text]');var i=placeholders.length;var result=[];while(i--){var node=document.createTextNode('');placeholders[i].parentNode.replaceChild(node,placeholders[i]);result.push({key:placeholders[i].dataset.poplarText,node:node});}
|
||||
return result;}
|
||||
function replaceAttrPlaceholders(el){var placeholders=el.querySelectorAll('[data-poplar-attrs]');var i=placeholders.length;var result=[];while(i--){var attrs=placeholders[i].dataset.poplarAttrs.split(' ');var j=attrs.length;while(j--){var parts=attrs[j].split('=');var value=decodeURIComponent(parts[1]);var attr={name:parts[0],el:placeholders[i]};if(isPartial(value))attr.template=value;else attr.prop=value.replace(regex.var,'$1');result.push(attr);}
|
||||
placeholders[i].removeAttribute('data-poplar-attrs');}
|
||||
return result;}
|
||||
function isPartial(value){return!/^\$\{.+\}$/.test(value);}
|
||||
function elementify(html){var div=document.createElement('div');div.innerHTML=html;return div;}
|
||||
function getProp(object,path){if(!path)return;var parts=path.split('.');if(parts.length==1)return object[parts[0]];if(parts.length==2)return object[parts[0]][parts[1]];return(function getDeep(object,parts){var part=parts.shift();return parts.length?getDeep(object[part],parts):object[part];})(object,parts);}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('poplar',this));
|
||||
Loading…
Reference in a new issue