function Matrix (w,h,f){ this.w = w this.h = h this.f = f this.initialize() } Matrix.prototype.initialize = function(){ var w = this.w, h = this.h, f = this.f var aa = new Array (h) for (var i = 0; i < h; i++) { aa[i] = new Array (w) for (var j = 0; j < w; j++) { aa[i][j] = f(i,j) } } this.aa = aa } Matrix.prototype.rebuild = function (){ this.demolish() this.initialize() this.append() this.generate && this.generate() } Matrix.prototype.demolish = function (){ this.forEach(function(lex){ lex.demolish() }) while (this.rapper.firstChild) { this.rapper.removeChild(this.rapper.firstChild); } this.aa.forEach(function(row){ row.length = 0 }) this.aa.length = 0 } Matrix.prototype.forEach = function(f){ this.aa.forEach(function(row, y){ row.forEach(function(lex, x){ f(lex, x, y) }) }) } Matrix.prototype.focusLex = function(y,x){ this.aa[mod(x,this.h)][mod(y,this.w)].focus() } Matrix.prototype.clear = function(){ this.forEach(function(lex,x,y){ lex.clear() }) } Matrix.prototype.fill = function(fg, bg){ this.fg = fg this.bg = bg this.forEach(function(lex,x,y){ lex.fg = fg lex.bg = bg lex.build() }) } Matrix.prototype.build = function(){ this.forEach(function(lex,x,y){ lex.build() }) } Matrix.prototype.append = function(rapper){ rapper = this.rapper = rapper || this.rapper this.aa.forEach(function(row, y){ var div = document.createElement("div") row.forEach(function(lex, x) { div.appendChild(lex.span) }) rapper.appendChild( div ) }) } Matrix.prototype.ascii = function () { var lines = this.aa.map(function(row, y){ var last, line = "" row.forEach(function(lex, x) { if (lex.eq(last)) { line += lex.char } else { if (x > 0 && last && (last.bg != 1 || last.fg != 0)) line += "\\x03" line += lex.irc() last = lex } }) return line.replace(/\s+$/,"") }).filter(function(line){ return line.length > 0 }) var txt = '/exec -out printf "' + lines.join("\\n") + '"\n' return txt } Matrix.prototype.expand = function(i){ var w = this.w = clamp(this.w+i, 1, 9), h = this.h = clamp(this.h+i, 1, 9) console.log(w,h) controls.width.char = ""+w controls.width.build() controls.height.char = ""+h controls.height.build() this.rebuild() } Matrix.prototype.contract = function(i){ brush.expand(-i) }