h.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var isEl = require('./isEl');
  2. var isStr = require('./isStr');
  3. var startWith = require('./startWith');
  4. var $class = require('./$class');
  5. var $css = require('./$css');
  6. var each = require('./each');
  7. var isFn = require('./isFn');
  8. exports = function(tag, attrs) {
  9. for (
  10. var _len = arguments.length,
  11. children = new Array(_len > 2 ? _len - 2 : 0),
  12. _key = 2;
  13. _key < _len;
  14. _key++
  15. ) {
  16. children[_key - 2] = arguments[_key];
  17. }
  18. if (isEl(attrs) || isStr(attrs)) {
  19. children.unshift(attrs);
  20. attrs = null;
  21. }
  22. if (!attrs) attrs = {};
  23. var _parseTag = parseTag(tag),
  24. tagName = _parseTag.tagName,
  25. id = _parseTag.id,
  26. classes = _parseTag.classes;
  27. var el = document.createElement(tagName);
  28. if (id) el.setAttribute('id', id);
  29. $class.add(el, classes);
  30. each(children, function(child) {
  31. if (isStr(child)) {
  32. el.appendChild(document.createTextNode(child));
  33. } else if (isEl(child)) {
  34. el.appendChild(child);
  35. }
  36. });
  37. each(attrs, function(val, key) {
  38. if (isStr(val)) {
  39. el.setAttribute(key, val);
  40. } else if (isFn(val) && startWith(key, 'on')) {
  41. el.addEventListener(key.slice(2), val, false);
  42. } else if (key === 'style') {
  43. $css(el, val);
  44. }
  45. });
  46. return el;
  47. };
  48. function parseTag(tag) {
  49. var tagName = 'div';
  50. var id = '';
  51. var classes = [];
  52. var words = [];
  53. var word = '';
  54. for (var i = 0, len = tag.length; i < len; i++) {
  55. var c = tag[i];
  56. if (c === '#' || c === '.') {
  57. words.push(word);
  58. word = c;
  59. } else {
  60. word += c;
  61. }
  62. }
  63. words.push(word);
  64. for (var _i = 0, _len2 = words.length; _i < _len2; _i++) {
  65. word = words[_i];
  66. if (!word) continue;
  67. if (startWith(word, '#')) {
  68. id = word.slice(1);
  69. } else if (startWith(word, '.')) {
  70. classes.push(word.slice(1));
  71. } else {
  72. tagName = word;
  73. }
  74. }
  75. return {
  76. tagName: tagName,
  77. id: id,
  78. classes: classes
  79. };
  80. }
  81. module.exports = exports;