You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

82 lines
2.2 KiB

var isEl = require('./isEl');
var isStr = require('./isStr');
var startWith = require('./startWith');
var $class = require('./$class');
var $css = require('./$css');
var each = require('./each');
var isFn = require('./isFn');
exports = function(tag, attrs) {
for (
var _len = arguments.length,
children = new Array(_len > 2 ? _len - 2 : 0),
_key = 2;
_key < _len;
_key++
) {
children[_key - 2] = arguments[_key];
}
if (isEl(attrs) || isStr(attrs)) {
children.unshift(attrs);
attrs = null;
}
if (!attrs) attrs = {};
var _parseTag = parseTag(tag),
tagName = _parseTag.tagName,
id = _parseTag.id,
classes = _parseTag.classes;
var el = document.createElement(tagName);
if (id) el.setAttribute('id', id);
$class.add(el, classes);
each(children, function(child) {
if (isStr(child)) {
el.appendChild(document.createTextNode(child));
} else if (isEl(child)) {
el.appendChild(child);
}
});
each(attrs, function(val, key) {
if (isStr(val)) {
el.setAttribute(key, val);
} else if (isFn(val) && startWith(key, 'on')) {
el.addEventListener(key.slice(2), val, false);
} else if (key === 'style') {
$css(el, val);
}
});
return el;
};
function parseTag(tag) {
var tagName = 'div';
var id = '';
var classes = [];
var words = [];
var word = '';
for (var i = 0, len = tag.length; i < len; i++) {
var c = tag[i];
if (c === '#' || c === '.') {
words.push(word);
word = c;
} else {
word += c;
}
}
words.push(word);
for (var _i = 0, _len2 = words.length; _i < _len2; _i++) {
word = words[_i];
if (!word) continue;
if (startWith(word, '#')) {
id = word.slice(1);
} else if (startWith(word, '.')) {
classes.push(word.slice(1));
} else {
tagName = word;
}
}
return {
tagName: tagName,
id: id,
classes: classes
};
}
module.exports = exports;