tvguide
Version:
Node module that auto-gets current (Dutch) tv show information
181 lines (165 loc) • 4.75 kB
JavaScript
/*
* HTML generator
*
* Dynamically generates HTML elements
*
*/
/*
* Implemented tags
* id: #
* cls: .
* style: ~
* type: ^
* name: &
* value: %
* href: @
* src: >
* text: *
*/
var Html = {
indent: 0,
addIndent: function () {
str = '';
for (var i = 0; i < this.indent; i++) {
str += '\t';
}
return str;
},
addTags: function (args, isVoid) {
var attributes = '';
var nested = false;
var closed = false;
for (var i = 0, len = args.length; i < len; i++) {
var attrId = args[i].substr(0, 1);
var attr = args[i].substr(1);
switch (attrId) {
case '#':
attributes += ' id="' + attr + '"';
break;
case '.':
attributes += ' class="' + attr + '"';
break;
case '~':
attributes += ' style="' + attr + '"';
break;
case '^':
attributes += ' type="' + attr + '"';
break;
case '&':
attributes += ' name="' + attr + '"';
break;
case '%':
attributes += ' value="' + attr + '"';
break;
case '@':
attributes += ' href="' + attr + '"';
break;
case '>':
attributes += ' src="' + attr + '"';
break;
case '+':
attributes += ' onclick="' + attr + '"';
break;
case '*':
closed = true;
attributes += '>' + attr;
break;
case '<':
closed = true;
if (!nested) {
nested = true;
this.indent++;
attributes += '>\n' + this.addIndent() + args[i];
}
else {
attributes += this.addIndent() + args[i];
}
break;
}
}
if (!closed) {
if (isVoid) {
attributes += ' />';
}
else {
attributes += '>';
}
}
return attributes;
},
/*
* Implemented elements
*/
div: function () {
var closed = false;
var str = '<div';
str += this.addTags(arguments);
str += '</div>\n';
if (this.indent > 0) { this.indent-- }
return str;
},
h1: function () {
var closed = false;
var str = '<h1';
str += this.addTags(arguments);
str += '</h1>\n';
if (this.indent > 0) { this.indent-- }
return str;
},
p: function () {
var closed = false;
var str = '<p';
str += this.addTags(arguments);
str += '</p>\n';
if (this.indent > 0) { this.indent-- }
return str;
},
span: function () {
var closed = false;
var str = '<span';
str += this.addTags(arguments);
str += '</span>\n';
if (this.indent > 0) { this.indent-- }
return str;
},
a: function () {
var closed = false;
var str = '<a';
str += this.addTags(arguments);
str += '</a>\n';
if (this.indent > 0) { this.indent-- }
return str;
},
select: function () {
var closed = false;
var str = '<select';
str += this.addTags(arguments);
str += '</select>\n';
if (this.indent > 0) { this.indent-- }
return str;
},
option: function () {
var closed = false;
var str = '<option';
str += this.addTags(arguments);
str += '</option>\n';
if (this.indent > 0) { this.indent-- }
return str;
},
input: function () {
var closed = false;
var str = '<input';
str += this.addTags(arguments, true);
str += ' \n';
if (this.indent > 0) { this.indent-- }
return str;
},
img: function () {
var closed = false;
var str = '<img';
str += this.addTags(arguments, true);
str += ' \n';
if (this.indent > 0) { this.indent-- }
return str;
},
}