After some more code digging and experiments I can answer my own question. A theme is a normal plugin and as such does not inherit any behavior from other plugins.
So you need to copy everything you need from the base theme library.js to your child theme. And of course, you need to declare client scripts explicitly.
Loading of missing templates from base theme is the only link between the base and the child theme.
Benchpress is undefined clien side
-
Re: help with using helpers inside my theme
So I found this topic that helped someone getting helpers to the client. Unfortunately I'm getting
TypeError: Benchpress is undefined
client side. I followed the instructions in the topic and have installed benchpressjs in my packages (for the theme), but no cigar.Anyone know what I'm doing wrong?
-
What exactly did you try?
-
So I had similar issues as the original post. The helpers run fine server side. but not on the client. If I have a helper on the profile page it works fine if I type the address and browse to it, but if I navigate to the profile the helper does not run.
What I tried is what was written in the forked post.
-
It's essentially the same code we use in core: https://github.com/NodeBB/NodeBB/blob/master/public/src/modules/helpers.js#L9
So I don't know why you'd encounter this undefined issue. I assume you've tried rebuilding and restarting. Maybe try wrapping all of that in
$(document).ready(function () { ... });
? Try$(window).load
too -
Thank you @PitaJ for pointing me in the right direction. I adapted my code to the link you sent me.
(function (factory) { if (typeof module === 'object' && module.exports) { factory(require.main.require('benchpressjs')); } else { require(['benchpress'], factory); } }(function (Benchpress) { const logger = (data) => { console.log('Logger helper', data); return ''; }; const customHelpers = { register, logger, }; function register() { Object.keys(customHelpers).forEach(function (helperName) { Benchpress.registerHelper(helperName, customHelpers[helperName]); }); } register(); if (typeof module === 'object' && module.exports) { module.exports = customHelpers; } }));
Just by doing this made it work client side. But then it stopped working server side. That was easily fixed though by running helpers.register in my library file.
const helpers = require('./lib/helpers'); helpers.register();
Hope this helpes someone!