← Changing Your Story's Appearance
Just as you can tag a passage stylesheet
to have its contents treated as CSS style rules, you can use the script
tag to include custom Javascript in your story. All passages with this tag are executed when the game first loads, which you can use as an opportunity to do two things:
The execution order of passages tagged script
is based on the alphabetical order of the script passages' names.
Remember: script passages must only contain Javascript.
You may wish to use jQuery in your scripts to manipulate the page's structure, use AJAX, or just make general coding easier. But, you may also want other people to be able to use your script without having to set the StorySettings jQuery value themselves. There is another way for a story to request jQuery: simply put the case-insensitive words “requires jQuery” in a comment or a string inside your code:
//requires jquery
You can also request the Modernizr library with the words “requires Modernizr”.
A reminder: you do not need to call $.noConflict()
when you first invoke jQuery in Twine 1.4 or higher.
Two objects exist in the Twine engine that are designed for custom script writers: prerender
and postrender
. If you add Javascript function properties to these objects, those function properties will be run every time a passage is rendered.
A postrender
function looks something like this:
postrender.hello = function(a) { ... a.className += "hello"; // An example of 'a' console.log(this.title); // An example of 'this' ... };
When postrender.hello
is called, this
is the Passage object which is currently being rendered, and the first argument a
is the <div class=“body content”>
element into which the passage's code has been rendered. You can thus transform or modify the div's contents in interesting ways.
postrender
functions are called just after the passage's code is rendered into the div. prerender
functions are called just before then.
Passage objects have the following structure (plus some other less useful properties):
If you use a lot of scripts from many people, note that as of 1.4.1, naming collisions in the macros
, postrender
and prerender
objects (such as, adding macros which have the same name) are not alerted to the author. Take care that each addition to these objects has a unique name.