this post was submitted on 14 Aug 2024
4 points (100.0% liked)

Perchance - Create a Random Text Generator

448 readers
14 users here now

⚄︎ Perchance

This is a Lemmy Community for perchance.org, a platform for sharing and creating random text generators.

Feel free to ask for help, share your generators, and start friendly discussions at your leisure :)

This community is mainly for discussions between those who are building generators. For discussions about using generators, especially the popular AI ones, the community-led Casual Perchance forum is likely a more appropriate venue.

See this post for the Complete Guide to Posting Here on the Community!

Rules

1. Please follow the Lemmy.World instance rules.

2. Be kind and friendly.

  • Please be kind to others on this community (and also in general), and remember that for many people Perchance is their first experience with coding. We have members for whom English is not their first language, so please be take that into account too :)

3. Be thankful to those who try to help you.

  • If you ask a question and someone has made a effort to help you out, please remember to be thankful! Even if they don't manage to help you solve your problem - remember that they're spending time out of their day to try to help a stranger :)

4. Only post about stuff related to perchance.

  • Please only post about perchance related stuff like generators on it, bugs, and the site.

5. Refrain from requesting Prompts for the AI Tools.

  • We would like to ask to refrain from posting here needing help specifically with prompting/achieving certain results with the AI plugins (text-to-image-plugin and ai-text-plugin) e.g. "What is the good prompt for X?", "How to achieve X with Y generator?"
  • See Perchance AI FAQ for FAQ about the AI tools.
  • You can ask for help with prompting at the 'sister' community Casual Perchance, which is for more casual discussions.
  • We will still be helping/answering questions about the plugins as long as it is related to building generators with them.

6. Search through the Community Before Posting.

  • Please Search through the Community Posts here (and on Reddit) before posting to see if what you will post has similar post/already been posted.

founded 1 year ago
MODERATORS
4
[Request] (self.perchance)
submitted 3 months ago* (last edited 3 months ago) by wthit56 to c/perchance
 

It seems there is no way to have scripts run after everything else. Normally I'd use window.onload or similar things, but all that's been and gone by the time any script is run anyway. So I tried defer. Normally defer means that script will run after non-defer scripts. That would be useful, but the defer attribute isn't heeded by the engine, currently.

https://perchance.org/085unhhfqe#edit

For now I'm going to try using a [code block] just to have it run later. But obviously that won't be sufficient for all situations. So it still would be useful to have some callback or addEventListener thingy to use to run code after perchance has done everything it does.

top 12 comments
sorted by: hot top controversial new old
[–] perchance 1 points 3 months ago* (last edited 3 months ago) (1 children)

Thanks! Fixed. Note though RE your example generator, the defer attribute is not valid for 'inline' scripts - it's only valid for URL/remote scripts (i.e. using src attribute instead of writing text between the opening and closing script tags). Here are some options for running code after everything else has executed:

  • document.addEventListener("DOMContentLoaded", function() { yourCodeHere }) - this is usually your best option (and by coincidence was already supported, since Cocell reported a similar issue a week or so ago)
  • window.addEventListener("load", function() { yourCodeHere }) - same as window.onload = function() { yourCodeHere } but addEventListener a much better approach because it doesn't overwrite the onload function that might have been set by some other code (e.g. if you're writing a plugin, you might overwrite the importer's onload function that they set). With the addEventListener approach you can add as many as you want. But in general using window's load event isn't desirable because it also waits for stuff like images to finish loading before triggering. But if that's what you want, then use this.
  • As you mentioned, you can put a square block at the end of the HTML panel like [ yourCodeHere ], but note that this will run again after every update(). If you only want it to run once, you'd have to write something like [doneStuffAlready ? "" : doStuff(), doneStuffAlready=true]
[–] wthit56 1 points 3 months ago (1 children)

Oooooh, okay. Honestly, while I've been in web dev a while, I've never really needed or used defer, so never really looked into it properly; I just know it exists. That's an annoying caveat isn't it? 😅

I thought I'd tried onload--that was the first thing I tried--but it didn't work. I'll try these things again and nail down exactly what does and doesn't work for myself.

[–] perchance 1 points 3 months ago* (last edited 3 months ago) (3 children)

I thought I’d tried onload

Yep you're not imagining it - by "Thanks! Fixed" I meant that I fixed both defer and the window load event. DOMContentLoaded was the only thing that was working properly before this bug report.

[–] wthit56 1 points 2 months ago

Ah okay great 👍

[–] wthit56 1 points 2 months ago

Can confirm, the load even works for me now 👍

[–] wthit56 1 points 2 months ago (1 children)

By the way it's not fully working. Works in edit mode with the preview, doesn't work on the actual page! 😬

Here's a test: https://perchance.org/67nt9sbun6#edit

[–] perchance 1 points 2 months ago* (last edited 2 months ago) (1 children)

Seems to be working fine for me in both cases - i.e. I see "loaded" alert when I load the page with and without #edit at the end of the URL. Can you give more details? I've tested in Chrome and Firefox.

[–] wthit56 1 points 2 months ago (1 children)

I'm on Chrome. 126.0.6478.214 (Official Build) (64-bit)

For me, it only alerts when I click Reload or click Auto. Doesn't alert when I open the editing page. Doesn't alert when I go to the main page. https://imgur.com/a/jEv8ZS5

[–] perchance 1 points 2 months ago* (last edited 2 months ago) (1 children)

Hmm, I'm not sure what's going on there. Can't seem to replicate. Which OS? I tested on Ubuntu, Windows, and an old Chromebook.

Can you try swapping it for a console.log instead of alert? I figure there's a small chance that it's a 'user agent intervention' where it hides the alert due to it seeming like a spammy thing.

[–] wthit56 1 points 2 months ago (1 children)

Chromebook. Same issue for console.log(). And debugger.

I guess you're manually running it somehow?

[–] perchance 1 points 2 months ago (1 children)

Same issue for console.log(). And debugger.

Hmm, okay, thanks for bearing with me on this - can you try again now? I think I may have fixed it. If not, can you try logging document.readyState == 'complete' above your addEventListener call and tell me what it says?

[–] wthit56 2 points 2 months ago

Okay it all seems to work now. Maybe the change didn't make it to my browser or something but it's all good now 👍