I’m trying to create a macro that inserts a premade js/css element into the passage, but when I call it, it is appending that element to the end of the page, after the .passage tag. Is there another way I should be appending this so that it gets appended in the place it was called?
Originally I was using this: document.body.appendChild(ContainerDiv);
Then I was able to get it to work properly by using an empty “anchor” div and appending it like so: document.getElementById('anchor').append(ContainerDiv)
Is there a more straightforward way to get the object to just be displayed in place, in the location that is was called? I can’t find any info on this anywhere.
Pretty much, I made a macro that creates a cellphone from pure CSS (so I can change the info on the screen without having to make a new image every time) and I’m currently using it to show that the player is getting a phone call. I’m generating the HTML for it via javascript, but I’m unsure how to get it to display in place. What I’d like to happen is that I can just call <<phone 'Name' 'image.jpg'>> and it would just pop up the phone in the location I called it inline, similar to the twinelab speech macro but I couldn’t figure out what part of that script was placing the created div inside the passage.
Sheesh I finally figured it out. I needed to use the .wiki() function to append it to the current output buffer. For anyone that stumbles upon this later, this is what my macro looks like:
Macro.add("phone", {
handler: function () {
// generate the HTML for the phone
var phone = createPhone(this.args[0], this.args[1], this.args[2]);
$(this.output).wiki(phone.innerHTML);
},
});
Takeaways: (for anyone that stumbles here in the future)
.wiki() appends it to the current inline buffer during runtime
Must use .innerHTML on phone since it apparently returns an object. Otherwise it’ll just show up inline as [object HTMLDivElement]