import { WebApp } from 'meteor/webapp'; import { WebAppInternals } from 'meteor/webapp'; import Settings from '/models/settings'; Meteor.startup(() => { // Use Meteor's official API to modify the HTML boilerplate WebAppInternals.registerBoilerplateDataCallback('wekan-custom-head', (request, data) => { try { const setting = Settings.findOne(); // Initialize head array if it doesn't exist if (!data.head) { data.head = ''; } // Always set title tag based on productName const productName = (setting && setting.productName) ? setting.productName : 'Wekan'; data.head += `\n ${productName}\n`; // Only add custom head tags if enabled if (!setting || !setting.customHeadEnabled) { return data; } let injection = ''; // Add custom link tags (except manifest if custom manifest is enabled) if (setting.customHeadLinkTags && setting.customHeadLinkTags.trim()) { let linkTags = setting.customHeadLinkTags; if (setting.customManifestEnabled) { // Remove any manifest links from custom link tags to avoid duplicates linkTags = linkTags.replace(/]*rel=["\']?manifest["\']?[^>]*>/gi, ''); } if (linkTags.trim()) { injection += linkTags + '\n'; } } // Add manifest link if custom manifest is enabled if (setting.customManifestEnabled) { injection += ' \n'; } if (injection.trim()) { // Append custom head content to the existing head data.head += injection; } return data; } catch (e) { console.error('[Custom Head] Error in boilerplate callback:', e.message, e.stack); return data; } }); });