0 votes
by (160 points)

In my code, I have a notification in the footer that is updated on each new passage, and I like to run information to the footer through a simple 

<div id="footer"><span id="notifications"></span></div>

Which is well and good, especially when using the <<link>> macro, as such.

<<if $storageKit isnot 1>>
<span id="medStorageSearch">There is a First Aid Kit on the wall.
<<link "Take it.">>
	<<addToInv "First Aid Kit">>
	<<set $storageKit to 1>>
	<<append "#notifications">><span style="color:lime">
	<p class="css-typing">First Aid Kit acquired. <br>
	</p></span><</append>><<replace "#medStorageSearch">>
	<</replace>><</link>></span>
<<else>>
<</if>>

However, if I omit the <<link>> and simply try to append the notification to the footer, it does not appear and I suspect that it may be that the passage is not updating. Outputs and value changes work, but the display does not update. Any suggestions?

To reiterate, I simply want to be able to use the following code in a passage without requiring a click from the user:

<<append "#notifications">><span style="color:lime">
<p class="css-typing">First Aid Kit acquired. <br>
</p></span><</append>>

 

1 Answer

+1 vote
by (62.7k points)
selected by
 
Best answer

As noted in the documentation, you can't use the DOM macros in passage code to update that passage's own elements. Link

WARNING: All DOM macros require the elements to be manipulated to be on the page. As a consequence, you cannot use them directly within a passage to modify elements within said passage, since the elements they are targeting are still rendering and not yet on the page. You must, generally, use them with a interactive macro (e.g. <<link>>) or within the PassageDone special passage. Elements which are already part of the page, on the other hand, present no issues.

PassageHeader and PassageFooter are a part of the passage element, so these rules still apply to them. You can use a <<timed>> macro and set it to 100ms or so to get around this limitation instead of using PassageDone or interaction. 

by (160 points)
Very good, thank you!
by (62.7k points)

As a side note, in my set of custom macros, there are insert macros that address this problem specifically without needing to play with timing. It's a simple solution either way, so YMMV. 

Welcome to Twine Q&A, where you can ask questions and receive answers from other members of the community.

You can also find hints and information on Twine on the official wiki and the old forums archive.

See a spam question? Flag it instead of downvoting. A question flagged enough times will automatically be hidden while moderators review it.
...