I'm beta testing a new feature on OP right now called Custom JavaScript. If you're interested in testing this feature out in your Campaigns, comment here or message me, and I'll add you to the beta.
The gist is that you can add any JavaScript you want to your Campaign. The only catch is that visitors have to explicitly agree to allow that JavaScript to run on their computers. But they only have to agree once for a given computer. (If there's no Custom JavaScript on the Campaign, then they won't be prompted to allow it to run.)
There are often features requested that are important to one OP member, but not important to most other OP members, and so the feature likely won't get dev time any time soon. Or the feature would be so little used by other members that it would effectively be clutter to add it to the UI for all members. But now, many of those features can be implemented for/by that member on their own Campaign using Custom JavaScript. (If you have questions on how to implement a particular feature in JavaScript, feel free to ask here in the Community Forums and we can help you figure it out.)
Here's the help page for the Custom JavaScript feature:
https://help.obsidianportal.com/article/190-custom-javascript-basics
Along with this feature, I also added a couple new utility pages to the Campaigns to make it easier to view/share Custom CSS and Custom JavaScript. (These are not beta ... they will work on all Campaigns right now.)
If you want to see the Custom CSS for a given Campaign, go to that Campaign, and then append "/custom_css" at the end, like so:
https://tobuyafatpig.obsidianportal.com/custom_css
Similarly, if you want to see the Custom JavaScript for a given Campaign, append "/custom_js", like so:
https://tobuyafatpig.obsidianportal.com/custom_js
(Fat Pig doesn't have any Custom CSS or Custom JavaScript, and those pages will tell you that.)
I'm very much looking forward to what y'all build with these new tools.
Obsidian Portal Developer
It looks like you're new here. If you want to get involved, click one of these buttons!
Comments
Nice! Sign me up please.
GM of Rise of the Durnskald: Wrath of the Fallen Goddess - February 2016 CotM
GM of Core: The Ashes of Alcarna - April 2020 CotM
GM of Stream of Kairos
Need CSS Help? It may be covered here: Abersade's CSS Hub
@Abersade, done! Let me know if you have any questions or come across any issues.
Obsidian Portal Developer
How will this affect sites that already use javascript?
@Keryth987, no effect on the existing in page JavaScript ... of which you are the only one that has that ability. : ) No one else ever asked to be included in that.
This new Custom JavaScript is a completely separate feature, and the JavaScript from it affects the entire Campaign ... not just one page. (Though you can make the "entire Campaign JavaScript" only affect specific pages by referencing classes or url slugs.)
Obsidian Portal Developer
Sure. I'd love to test it out
They are among us!
XCom: Defiance - Campaign of the Month November 2016
Please sign me up for this as well.
@cgregory, @nuadaria, you should both now have access to the Custom JavaScript window in your Campaign Settings Advanced tab. Let me know if you have any questions or come across any issues!
Obsidian Portal Developer
Thanks, will do.
Thanks
They are among us!
XCom: Defiance - Campaign of the Month November 2016
There was a small bug where the popup (saying Custom JavaScript is being used on the Campaign) was showing up on the next page the visitor went to. This is fixed now.
Obsidian Portal Developer
This feature is now out of beta and available to all Ascendant members!
Obsidian Portal Developer
So, what exactly doe this feature do/allow?
@Keryth987, there's a new text box on the Campaign Settings Advanced tab. Any JavaScript that you want to run on your Campaign, you can put there. This is fairly similar to the way Custom CSS works. But JavaScript can do pretty much anything, like totally rearranging the layout of the page, or bringing in data that doesn't exist yet on the page.
For example, the new feature that enables choosing filters on the Characters page, and then having those be automatically applied by the url. I built that feature completely in Custom JavaScript first ... and then after I had it fully working there, I added it to the code base. So, a member could have created that feature just for themselves ... and then shared the JavaScript code here in the Community Forums if they wanted to ... or used the new "/custom_js" page that each Campaign now has to share it.
Obsidian Portal Developer
@Keryth987, I think I thought of another example that might resonate with you. A bit back you said you said you wanted every Wiki Page in your Campaign to have an "Edit This Page" button like the Front Page does, but other members didn't want that. This feature enables a way for you to have that button on all of your Wiki Pages (without having to include it manually at the bottom of each page).
Obsidian Portal Developer
Thanks for the clarification
Seeing i don't KNOW Java...I dont suppose anyone could actually make up the Javascript for my Edit Button at the bottom of the page? @Nuadaria perhaps?
Oh and you should probably add a Forum topic for Java discussions
Here's a pretty down and dirty raw JS selection and insert that should do the trick. My results say that you will need some custom CSS, specifically to center the button as that seems to be styled to this button only when in the full div on the home page but that shouldn't be too hard to achieve.
After posting that...it seems that the snippet tool URL encodes part of that, if you can't sort that bit out, ping me on discord and I can either paste it there or worst case, drop it in a small txt file for you or something.
Now does that just go on the page or in that new Javascript box or what? I am TOTALLY clueless. Took me long enough to get qa rough idea of CSS :)
@nuadaria ... the HTML encoding should be fixed now ... across the entire Community Forums!! (That has bothered me for SO long, but it only just occurred to me how to fix it after you commented on it. Thank you! And I actually used the Custom JavaScript to create the script that fixes it, and then copied the JavaScript over here to the Community Forums. : )
@Keryth987, nuadaria's code (which you can now just copy exactly), goes in the Campaign Settings -> Advanced -> Custom JavaScript box. Then click Save. Then go to any Wiki Page in the Campaign, and you'll see the button at the bottom.
Obsidian Portal Developer
Done!
Obsidian Portal Developer
And there is a comparable one on the Discord
@Thaen The whole favoriting and such procedure to allow Javascript is kinda clunky to be honest. Perhaps it should simply be a checkbox on the profile, like the whole newsletter and email notifications thing?
"Perhaps it should simply be a checkbox on the profile, like the whole newsletter and email notifications thing?"
I appreciate that feedback! I don't think it can be made that simple without opening too much risk of members getting hacked.
For example, let's say a member checked the single checkbox to allow JavaScript on all Campaigns. And then later they're in the Community Forums and a malicious person (MP) posts a link to "checkout my cool campaign!", and the member does.
Then, the MP has a little JavaScript in the Campaign that makes it look like OP is asking the member to login again. If the member enters their login and password ... then the MP now has those. Or what if the MP added some JavaScript code that made it look like OP was asking the member to update their credit card info ... then the MP now has those. Or what if the MP makes the screen look like a gmail login and the member happens to have a gmail account and enters their info ... then the MP now has access to their email account.
So, we don't want to allow the JavaScript to run for just any Campaign ... it needs to be Campaigns where the member has explicitly verified that they trust that specific GM. At least that's my current thinking, unless someone sees something I'm missing?
Obsidian Portal Developer
How about a checkbox to "Allow Custom JavaScript on all Favorites"? Or possibly "... on Favorites run by Friends"?
@ragnarhawk, those are interesting ideas ... but I'm wary of opening a way for members to forget that they are allowing the JavaScript to run when they are later "just" Friending or Favoriting. So, I'd still want members to explicitly choose to allow Custom JavaScript per Campaign.
We can probably make the "allowing" per Campaign easier, though.
Here's what I'm thinking ...
If a visitor (wouldn't have to be an OP member ... or they wouldn't have to be logged in ... unlike now) visits a Campaign that is using Custom JavaScript, then they are redirected to a page that is a standard OP page, and not part of the Campaign. (This is so that the Campaign's Custom CSS can't affect this page, and make the page look like something it's not.)
On that page would be a message about the Campaign using Custom JavaScript, and what Custom JavaScript is, and the visitor would be able to choose to Allow or Deny the Custom JavaScript on the current computer/device (or if they are logged in, or later login on that device, then it would allow Custom JavaScript on that Campaign any time they are logged in on any device), and either choice (allow/deny) would then forward the visitor on to the Campaign ... with Custom JavaScript working or not, depending.
OP Members would then also have a link in their Profile to a screen similar to the Manage Favorites one that lists all the Campaigns they have Allowed or Denied Custom JavaScript on.
For OP Members, we could remember their preference ("allow" or "deny") for a given Campaign on any device they were logged in on. Currently, the preference is only stored on the device with a cookie, so it will ask again on a different device (computer vs phone for example) ... which I think will be confusing for some.
So, this solution wouldn't require any Favoriting, and it would be a single click right when they visit the Campaign for the first time.
Thoughts?
Obsidian Portal Developer
You need to make it simpler than it is now. My current group, many of who are in IT to begin with, found it clunky and honestly, annoying, all because I added the edit button to my pages. And I only see it getting worse for a campaign that uses Java a lot in the future.
Ragnarhawk's suggestions are probably the best. Personally I think rather than being so crazy about JavaScript there should be more security on the forums. Least based on the example you gave thaen
@Keryth987, noted on the "make it simpler". Thanks for the feedback!
The danger is at the Campaign level, so putting more security on the forums would just shunt the attacks to some other vector, so I don't think that really solves the problem.
I'll work on making the changes I outlined above, and we can see if those feel simpler.
Just to clarify, adding more JavaScript won't make your Players have to redo the "allow" process. Once the OP member "allows" the JavaScript for that Campaign, it will just continue to allow the JavaScript even as you add more and more code to customize your Campaign.
Obsidian Portal Developer
I understand that. But consider this. There are many here trying to help OP grow, and the best selling point is the CAMPAIGNS themselves. OP's main competition is, ironically, Microsoft OneNote. I know many GM's who use it for exactly the same thing that one would use OP for. However, OneNote does not allow quite the customization that OP does, particularly in appearance and such. That is OP's selling point vs OneNote, and the existing campaigns are the best marketing for that capability.
However, if someone creates this beautiful site full of information and such, but anyone viewing it, whether they are in the campaign or not, has to go through an involved process of favoriting a campaign they want to see, then editing their profile, THEN allowing javascript...well, they're gonna decide OneNote is simply the easier choice.
I understand the need to prevent hacking and the ened for security. I am happy to see that is a priority. But please dont let that hinder the creativity and usefulness of OP either.