Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var className;
- function capitaliseFirstLetter(string)
- {
- return string.charAt(0).toUpperCase() + string.slice(1);
- }
- function generateClass() {
- className = document.getElementById("base-class").value;
- var fields = document.getElementById("fields").value;
- var fieldTypePair = fields.split(",");
- var fieldNames = [];
- var fieldTypes = [];
- for (var i = 0; i < fieldTypePair.length; i++) {
- var splittedFieldType = fieldTypePair[i].split(":");
- fieldNames.push(splittedFieldType[0].trim());
- fieldTypes.push(splittedFieldType[1].trim());
- }
- var constructorSettersString = '';
- for (var j = 0; j < fieldNames.length; j++) {
- constructorSettersString += "\t\tthis.set" + capitaliseFirstLetter(fieldNames[j]) +
- "(" + fieldNames[j] + ");\n";
- }
- var abstractConstructor = '';
- if (document.getElementById("abstract").checked == true) {
- abstractConstructor += "\t\tif (this.constructor === " + className + ") {\n\t\t\t" +
- "throw new Error('Cannot instantiate abstract class " + className + ".');\n\t\t" +
- "}\n";
- }
- var classCode = "var " + className + " = (function () {\n" +
- "\tfunction " + className + "(" + fieldNames.join(", ") + ") {\n" + abstractConstructor +
- constructorSettersString + "\t}\n";
- for (var k = 0; k < fieldNames.length; k++) {
- classCode += "\n";
- classCode += generateGetter(fieldNames[k]);
- classCode += "\n";
- classCode += generateSetter(fieldNames[k], fieldTypes[k]);
- }
- classCode += "\n\n\t" + className + ".prototype.toString = function () {\n\t\treturn ";
- var toStringOutput = "'" + capitaliseFirstLetter(fieldNames[0]) + ": ' + this.get" +
- capitaliseFirstLetter(fieldNames[0]) + "()";
- for (var l = 1; l < fieldNames.length; l++) {
- toStringOutput += " + '" + capitaliseFirstLetter(fieldNames[l]) + ": ' + " +
- "this.get" + capitaliseFirstLetter(fieldNames[l]) + "()";
- }
- toStringOutput += ";\n\t};";
- classCode += toStringOutput;
- classCode += "\n\n\treturn " + className + ";\n}());";
- document.getElementById("output").value = classCode;
- }
- function generateGetter(fieldName) {
- return "\t" + className + ".prototype.get" + capitaliseFirstLetter(fieldName) +
- " = function() {\n\t\treturn this._" + fieldName + ";\n\t};\n";
- }
- function generateSetter(fieldName, fieldType) {
- var fieldValidator;
- if (fieldType == 'string') {
- fieldValidator = '\tString.prototype.validateNonEmptyString(' + fieldName + ');\n';
- } else if (fieldType == 'number') {
- fieldValidator = '\tNumber.prototype.validateIsNumber(' + fieldName + ');\n';
- } else if (fieldType == 'boolean') {
- fieldValidator = '\tBoolean.prototype.validateBoolean(' + fieldName + ');\n';
- }
- return "\t" + className + ".prototype.set" + capitaliseFirstLetter(fieldName) + " = function(" +
- fieldName + ") {\n\t" + fieldValidator +
- "\t\tthis._" + fieldName + " = " + fieldName + ";\n\t};\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment