Fixed passages with names containing quote marks being unrecognised by links.
Fixed HTML tables in passages not being constructed correctly.
Altered Sugarcane's browser state-saving to avoid a crash in Firefox caused by having lots of variables in your story.
Fixed TiddlyWiki emdashes not being rendered correctly.
Fixed the «nobr» macro inserting zero-width space characters into contained macro tags, thus breaking them.
Fixed bug preventing custom macros from being usable in StoryMenu etc.
Fixed the [img] syntax used in CSS stylesheets inserting a terminating semicolon, preventing further attributes from being used on the same line.
Added "vertical-align:bottom" to images to compensate for a line-height difference between XHTML Transitional and HTML5. Why is there a line-height difference? The person who can answer that is not on this Earth, but in Heaven.
Fixed the «nobr» macro not working if any text follows it.
Fixed «choice». Now, clicking a «choice» disables all .choice links in the passage, not just itself. This returns it to 1.3.5 behaviour.
Fixed variables used as array indexes not being parsed correctly.
Restored the left positioning of the Sugarcane sidebar.
You can now use external links in the simple link syntax, such as [[http://example.net]].
Possibly broken pretty-links (as in, links with a separate link text and destination) are now no longer assumed to be external URIs unless they contain a protocol (like "http:"), or the symbols . / \ or #. This should make link debugging a bit easier.
Fixed the shorthand «display» macro tag's title sometimes being incorrectly parsed as its first argument.
Shorthand «display»: Attempting to access a parameter() that wasn't supplied will no longer throw an error, on the newly considered basis that it would make "variadic passages" (passages that can take multiple optional variables) difficult.
Fixed a bug where backslashes would be incorrectly converted to arbitrary letters if passage obfuscation was being used.
«back» now works better when Undo is off in Sugarcane. Previously it would mess up the variable state in cases when link variables were in use.
«back» and «return» now work when restoring a Jonah state via bookmark.
«back» also now works when clicked in a past Jonah passage - previously it would act as if it was in the present passage.
«back» now works in the StoryMenu, StoryAuthor, StoryTitle and StorySubtitle passages.
«choice» now produces an error message if it's used in the StoryMenu, StoryAuthor, StoryTitle and StorySubtitle passage.
Fixed Jonah scrolling in IE 8.
Now, only the StoryTitle passage's text content will be used for the window title, instead of its raw code.
Now, if a story has no StoryTitle, or the StoryTitle has no text content, it will default to the name of the .tws file used to build it, instead of just "Untitled Story".
Fixed a bug where putting "Lookup:" in the StorySettings could potentially crash the game.
Added a sanity check in case a script overrides History.prototype.display() but doesn't pass enough arguments (since in 1.4 it takes 4 arguments instead of 3).
Fixed HTML <table> structures in passages not being rendered correctly.
The StoryMenu now auto-updates when you change passages!! The code is re-executed and re-rendered into the element. This means you could, say, «print» a variable inside it, and it would update automatically. (This change also applies to StoryAuthor, StoryTitle and StorySubtitle).
Added the tags() function, which takes one or more strings and returns an array of the tags of the given passage (or the current passage if no name is supplied).
Added passage(), which simply holds the name of the current passage (If a passage is being «display»ed by another, passage() is the name of the “topmost” passage.)
Added turns(), which provides the number of turns that have elapsed in the current game.
Added visitedTag(), which returns the number of times passages with the given tag have been visited. Provide multiple tags to only search for passages that contain both.
Added 'header' and 'footer' elements to Jonah's .passage elements, to provide a bit more symmetry with Sugarcane's DOM layout.
Added the "visitedLink" class, which is applied to passage links that link to already visited passages. “:visited” is converted to “.visitedLink” much like the above. This provides a surprising amount of power - you can give .visitedLink “display:none”, for instance, to make links to all visited passages disappear automatically.
Re-implemented «textinput». It creates an <input> text element which, when a <button> element is pressed, sets the variable to its string contents. It may also have an additional parameter, a link expressed in link syntax, which is used to create a <button> next to it. Examples: <<textinput $name>>, <<textinput $name [[Submit|Next passage]]>>.
The previous 1.3.6 «textinput» behaviour of triggering the passage change via pressing the Enter key has been removed for now.
Added «radio». Its arguments are a variable, and a number of strings for each option. When a <button> is pressed, the label of the selected radio button is put into the variable. Example: <<radio $feel "Strongly agree" "Strongly disagree">>. If you have multiple «radio» macros that refer to the same variable, they're treated as part of the same set.
Added «checkbox». It's similar to «radio», having identical syntax - but it sets the variable to an array value containing all of the checked boxes' labels as strings. Example: <<checkbox $weapons "Pistol" "Newspaper" "Letter opener">>.
Added «button», a macro that takes a link as its argument and creates a <button> element. Use it for passages which use «radio» or «checkbox», or a «textinput» set. Example: <<button [[Let's go!|armoury]]>>
StoryMenu now honours the 'nobr' passage tag.
Built HTML files are now timestamped.
Upgraded the built-in jQuery module to version 1.11.
Changed Responsive's footer to a sticky footer, like God and all His hideous bat-faced angels originally intended.
Altered Responsive's CSS to make the body background easier to change.
Altered the CSS for all targets to make StoryMenu contents display better.
Individual script or stylesheet passages may request the inclusion of jQuery or Modernizr, overriding the StorySettings options, by including in their code the case-insensitive string "requires jQuery" or "requires Modernizr". This enables jQuery-using scripts or Modernizr-using CSS to be easily pasted into stories without requiring any other modifications to the story.