view editor.js @ 110:d715fb3c39ab

Implemented clicking on symbols inside inscope box to replace function name in funcall.
author Mike Pavone <pavone@retrodev.com>
date Sat, 13 Apr 2013 23:37:54 -0700
parents 35006a6e1c47
children c0bfff39abe3
line wrap: on
line source



object.prototype.toHTML = function(node) {
	var el = newEl('div', {
		className: 'object'
	});
	node.appendChild(el);
	for (var i in this.messages) {
		this.messages[i].toHTML(el);
	}
};

lambda.prototype.toHTML = function(node) {
	var astNode = this;
	var el = newEl('div', {
		className: 'lambda',
		onclick: function(event) {
			main_module.lambdaClick(this, astNode, event);
		}
	});
	var args = newEl('div', {
		className: 'args'
	});
	for (var i in this.args) {
		this.args[i].toHTML(args);
	}
	var body = newEl('div', {
		className: 'lambdabody'
	});
	for (var i in this.expressions) {
		this.expressions[i].toHTML(body);
	}
	el.appendChild(args);
	el.appendChild(body);
	node.appendChild(el);
};

assignment.prototype.toHTML = function(node) {
	var base = newEl('div', {
		className: 'assignment'
	});
	var varName = newEl('span', {
		textContent: this.symbol.name + ' <-'
	});
	base.appendChild(varName);
	node.appendChild(base);
	this.expression.toHTML(base);
};

op.prototype.toHTML = function(node) {
	var base = newEl('span', {
		className: 'op'
	});
	this.left.toHTML(base);
	base.appendChild(newEl('span', {
		textContent: this.op,
		className: 'opname'
	}));
	this.right.toHTML(base);
	node.appendChild(base);
};

intlit.prototype.toHTML = function(node) {
	node.appendChild(newEl('span', {
		className: 'integer',
		textContent: this.val
	}));
};

floatlit.prototype.toHTML = function(node) {
	node.appendChild(newEl('span', {
		className: 'float',
		textContent: this.val
	}));
};

strlit.prototype.toHTML = function(node) {
	node.appendChild(newEl('span', {
		className: 'string',
		contentEditable: 'true',
		textContent: this.val
	}));
};

funcall.prototype.toHTML = function(node) {
	var astNode = this;
	var base = newEl('div', {
		className: 'funcall'
	});
	if (this.receiver) {
		this.receiver.toHTML(base);
	}
	var parts = this.name.split(':');
	for (var i in parts ) {
		if(parts[i]) {
			base.appendChild(newEl('span', {
				textContent: parts[i] + (this.receiver && parts.length == 1 ? '' : ':'),
				className: 'funpart',
				onclick: function(event) {
					main_module.funClick(this, astNode, event);
				}}));
			if (this.args[i]) {
				this.args[i].toHTML(base);
			}
		}
	}
	for (; i < this.args.length; i++) {
		this.args[i].toHTML(base);
	}
	node.appendChild(base);
};

symbol.prototype.toHTML = function(node) {
	var astNode = this;
	node.appendChild(newEl('span', {
		className: 'symbol',
		textContent: this.name,
		onclick: function(event) {
			main_module.symbolClick(this, astNode, event);
		}
	}));
}

function getEl(from, idx)
{
	return from[idx];
}

function setEl(to, idx, val)
{
	to[idx] = val;
	return to;
}