kliffy/iffy.js

145 lines
4.1 KiB
JavaScript
Raw Normal View History

2010-10-03 22:54:15 +00:00
(function() {
var ActorPlayer, Gst, Nev, Story, Wst;
/*
Iffy - parserless interactive fiction for the web
(c)2010 Jeremy Penner
*/
Wst = function(obj, _arg) {
this.gst = _arg;
this.prototype = obj;
return this;
};
Wst.prototype.WstNext = function(nev) {
var wstNext;
wstNext = new Object();
wstNext.prototype = this;
wstNext.nev = nev;
return wstNext;
};
Wst.prototype.WstPrev = function() {
var _ref;
return (typeof (_ref = this.prototype.nev) !== "undefined" && _ref !== null) ? this.prototype : null;
};
Gst = function(_arg, _arg2) {
this.jDiv = _arg2;
this.story = _arg;
this.wstInit = this.story.WstInit(this);
return this;
};
Gst.prototype.Display = function() {
var _i, _len, _ref, _result, nev;
this.jDiv.append("<div class='title'>\
<h1>" + (this.story.jStory.attr('title')) + "</h1>\
<h2>" + (this.story.jStory.attr('author')) + "</h2>\
</div>");
_result = []; _ref = this.RgnevRun();
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
nev = _ref[_i];
_result.push((function() {
this.jDiv.append($("<div class='nev'/>").append(nev.StHtmlDisplay(this)));
return this.jDiv.append($("<div class='nev'/>").append(nev.StHtmlDisplay(this)));
}).call(this));
}
return _result;
};
Gst.prototype.RgnevRun = function() {
var _i, _len, _ref, inev, nevResponse, rgnev, wst;
rgnev = [this.story.NevByName("start")];
wst = this.wstInit;
inev = 0;
while (inev < rgnev.length) {
_ref = this.story.RgnevResponse(rgnev[inev], wst);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
nevResponse = _ref[_i];
if (nev.FCanRun(this, wst)) {
wst = wst.WstNext(nevResponse);
nevReponse.RunAction(gst, wst);
rgnev.push(nevResponse);
}
}
inev++;
}
return rgnev;
};
Gst.prototype.FilterStHtml = function(stHtml) {
var _i, _len, _ref, _result, actor;
_result = []; _ref = this.story.rgactor;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
actor = _ref[_i];
_result.push(stHtml = actor.FilterStHtml(stHtml));
}
return _result;
};
Nev = function(_arg) {
this.jnev = _arg;
return this;
};
Nev.prototype.ID = function() {
return this.jnev;
};
Nev.prototype.FCanRun = function() {
return true;
};
Nev.prototype.RunAction = function(gst, wst) {};
Nev.prototype.StHtmlDisplay = function(gst) {
var _i, _len, _ref, dHTML, jdivTmp, stHtml;
jdivTmp = $("<div/>");
_ref = $(this.jnev).children();
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
dHTML = _ref[_i];
jdivTmp.append(document.importNode(dHTML, true));
}
stHtml = jdivTmp[0].innerHTML;
gst.FilterStHtml(stHtml);
return stHtml;
};
ActorPlayer = function(_arg) {
this.story = _arg;
this.mpnevID_rgaction = {};
return this;
};
ActorPlayer.prototype.RgnevResponse = function(nev, wst) {
var rgaction;
rgaction = this.mpnevID_rgaction[nev.ID()];
return [];
};
ActorPlayer.prototype.FilterStHtml = function(stHtml) {
return stHtml;
};
Story = function(_arg) {
this.jStory = _arg;
this.rgactor = [new ActorPlayer(this)];
return this;
};
Story.prototype.NevByName = function(stName) {
var jNev;
jNev = this.jStory.find("[name=" + (stName) + "]");
return jNev.length > 0 ? new Nev(jNev[0]) : null;
};
Story.prototype.RgnevResponse = function(nev, wst) {
var _i, _j, _len, _len2, _ref, _ref2, actor, rgnev;
rgnev = [];
_ref = this.rgactor;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
actor = _ref[_i];
_ref2 = actor.RgnevResponse(nev, wst);
for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {
nev = _ref2[_j];
rgnev.push(nev);
}
}
return rgnev;
};
Story.prototype.WstInit = function(gst) {
return new Wst({}, gst);
};
window.PlayStory = function(url, jDiv) {
return $.get(url, function(domXml) {
var gst, story;
story = new Story($("story", domXml));
gst = new Gst(story, jDiv);
return gst.Display();
}, "xml");
};
}).call(this);