Your comments

Ahhh, the joys of sharring! I see the problem.

I did not trap for multiple comic/book/magazine/document file bases. I keep all mine under 1 folder so...

I'll take a look and see what I can come up with to address that issue.

Just for you Dennis (since you asked so nicely).

Renegade Reader v1.04

The docs are included along with a nifty little themescript editor for Linux that I'll port to Windows when I get the chance.

Have fun and let me know what you think! ;)

I can confirm this.  Epubs will not close in any browser.

Was looking through my logs today and I found this:

0822 23:56:45 [qtp1943408246-64] ERROR com.ubooquity.d.b - Request not handled (should never happen, this is a bug !): /ubooquity/theme/common/latestcomics.png

20250822 23:56:45 [qtp1943408246-67] WARN o.e.jetty.io.AbstractConnection - Failed callback

java.io.IOException: Close SendCallback@f79f443[PENDING][i=null,cb=null] in state PENDING

at org.eclipse.jetty.util.IteratingCallback.close(IteratingCallback.java:458)

at org.eclipse.jetty.server.HttpConnection.onClose(HttpConnection.java:551)

at org.eclipse.jetty.io.SelectorManager.connectionClosed(SelectorManager.java:330)

at org.eclipse.jetty.io.ManagedSelector$DestroyEndPoint.run(ManagedSelector.java:1113)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)

at java.base/java.lang.Thread.run(Unknown Source)

The file is there and displays correctly in my theme.  <shrugs>

No.  You answered my question. :)

Mustache has a "content delivery network" (CDN) that, basically, allowed me to use mustache.render("template id") to create my own mustache tags as well as port some of Ubooquity's mustache variables.

Like this:

This is my breadcrumb rendering: 

function renderBreadcrumbs() { 

  const breadcrumbs = JSON.parse(sessionStorage.getItem('breadcrumbs')) || [];

  const breadcrumbNav = document.querySelector('.breadcrumb'); 

  if (!breadcrumbNav) { console.error("Breadcrumb navigation container not found."); 

    return; 

  } 

  breadcrumbNav.innerHTML = ''; 

  const template = document.getElementById('breadcrumb-template').innerHTML;   

  breadcrumbNav.innerHTML = breadcrumbs.map(breadcrumb => { return Mustache.render(template, { breadcrumbUrl: breadcrumb.url, breadcrumbTitle: formatAuthorName(breadcrumb.title) }); }).join('');

  }

This where I loaded the mustache CDN so that the above mustache.render() works:

function loadMustache(callback) { 

  if (typeof Mustache === 'undefined') { 

    const script = document.createElement("script"); 

    script.src = "https://cdn.jsdelivr.net/npm/mustache@4.2.0/mustache.min.js"; 

    script.onload = callback;

    script.onerror = () => console.error("Failed to load Mustache.js.");

    document.head.appendChild(script);

    } else {

        callback(); } 

    }

What I was wondering is, if Ubooquity contained a JMustache CDN so theme creators could easily create their own mustache variables or pass Ubooquity's mustache variables where they aren't normally available (like I did with the RAW files section to create an audio book section)?  In other words, I wanted to know if I could actually use mustache.compile() and mustache.render() in my themescript as well as the predefined variables?  And I beleive the answer was "no".


If I am correct and the answer is "no".   Would you consider looking into adding a mustache CDN internally to Ubooquity in the future or do you think it would cause more headaches than it's worth?




Another question:  I've been trying to get a reverse proxy to work with Ubooquity.  However, it seems that no matter what I do with the NAS reverse proxy service or Nginx, itself.  Weirdly, it can't find tools.js, themescript.js, or sha-256.min (which is preventing java from executing). 

Course, this could just be that I'm missing something obvious...  Any help anyone?


Mustache.compiler().compile("{{this}}").execute("hello"); // returns: hello
Mustache.compiler().compile("{{#names}}{{this}}{{/names}}").execute(new Object() {
    List<String> names () { return Arrays.asList("Tom", "Dick", "Harry"); }
});


I actually used a mustache CDN to just render my theme's audio book section - as none of the new variable tags are available in the RAW files section of Ubooquity.  But I got {{itemFolderUrl}}, {{itemCoverUrl}}, {{itemTitle}}, & {{itemTitle}} to interpret along with 2 I created {{breadcrumbUrl}} & {{breadcrumbTitle}} for navigation purposes.

However, I would be interested in knowing if Ubooquity includes an internal mustache or Jmustache CDN type package that will compile and render tags or were you just referring to using the "this", "-first", "-last", and "-index" variables with Ubooquity's mustache variables?


TIA!
G

Yep.  That's what I meant.  I was asking to create a thread to troubleshoot and update the theme as Ubooquity updates.

Since I'm semi-retired and I had time last night, I made an outline for documentation already.  Went quicker than I thought.  So, I should have this setup by the end of the week.

Okay. 

I call it the "Renegade Reader" theme (as Renegade was the name of the BBS software I helped develop back in the day).  And I will be re-writing it to make it more legible so other theme developers can see how I did what I did and (hopefully) it will help others develop nice Ubooquity themes.  But for now, what I have should suffice.

Documentation?  What's that?  You mean the comments throughout my code?  LOL!

Seriously though, like I said, I wasn't planning on releasing it publicly. So, no, I haven't made any documentation for it - yet.  Gimme a couple of weeks to write something legible and I'll send the whole theme with documentation for to you to host. 

Also, if it's not too much trouble, would you mind if I used a group in your forum here.  It would help immensely with troubleshooting bug reports and to distribute updates to the theme as Ubooquity changes.