Jump to content

MediaWiki:Common.js: Difference between revisions

From SOJI ELECTRONICS
Created page with "(function () { function injectSojiFooter() { var footer = document.getElementById("footer"); if (!footer || document.getElementById("soji-site-footer")) { return; } var html = [ '<section id="soji-site-footer" class="soji-site-footer">', ' <div class="soji-footer-shell">', ' <div class="soji-footer-grid">', ' <section class="soji-footer-col">', ' <..."
 
No edit summary
Line 1: Line 1:
(function () {
(function () {
     function injectSojiFooter() {
     function esc(text) {
         var footer = document.getElementById("footer");
        return String(text || "").replace(/[&<>"]/g, function (m) {
         if (!footer || document.getElementById("soji-site-footer")) {
            return { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" }[m];
             return;
        });
         }
    }
 
    function renderLink(item, extraClass) {
        var cls = extraClass ? ' class="' + extraClass + '"' : "";
         var href = item.href ? esc(item.href) : "#";
        return '<a' + cls + ' href="' + href + '">' + esc(item.label) + "</a>";
    }
 
    function buildFooter(data) {
        var columns = (data.columns || []).map(function (col) {
            var items = (col.items || []).map(function (item) {
                return "<li>" + renderLink(item, "soji-footer-link") + "</li>";
            }).join("");
 
            return [
                '<section class="soji-footer-col">',
                "<h2>" + esc(col.title) + "</h2>",
                "<ul>" + items + "</ul>",
                "</section>"
            ].join("");
        }).join("");
 
         var policies = (data.policies || []).map(function (item, i) {
            return (i ? '<span class="soji-footer-sep">|</span>' : "") +
                renderLink(item, "soji-footer-link");
        }).join("");
 
        var social = (data.social || []).map(function (item) {
            var href = item.href ? esc(item.href) : "#";
             return '<a class="soji-footer-social-item" href="' + href + '" aria-label="' + esc(item.label) + '">' +
                esc(item.short || item.label.charAt(0)) + "</a>";
         }).join("");
 
        var subscribe = data.subscribe
            ? renderLink(data.subscribe, "soji-footer-subscribe")
            : "";


         var html = [
         return [
             '<section id="soji-site-footer" class="soji-site-footer">',
             '<section id="soji-site-footer" class="soji-site-footer">',
             ' <div class="soji-footer-shell">',
             '<div class="soji-footer-shell">',
             '   <div class="soji-footer-grid">',
             '<div class="soji-footer-grid">' + columns + "</div>",
            '      <section class="soji-footer-col">',
             '<div class="soji-footer-bottom">',
            '        <h2>Use Cases</h2>',
             '<div class="soji-footer-meta">',
            '        <ul>',
             '<div class="soji-footer-policy-row">' + policies + "</div>",
            '          <li><span class="soji-footer-link">All Use Cases</span></li>',
             '<div class="soji-footer-copy">' + esc(data.copyright || "") + "</div>",
            '          <li><span class="soji-footer-link">Fleet Telematics</span></li>',
             "</div>",
            '          <li><span class="soji-footer-link">Logistics & Delivery Services</span></li>',
             '<div class="soji-footer-actions">',
            '          <li><span class="soji-footer-link">Car Sharing, Rental & Leasing</span></li>',
             subscribe,
            '          <li><span class="soji-footer-link">E-Mobility Management</span></li>',
             '<div class="soji-footer-social">',
            '          <li><span class="soji-footer-link">Utility & Emergency Transport</span></li>',
             '<span class="soji-footer-social-label">Connect</span>',
            '          <li><span class="soji-footer-link">Agriculture, Construction & Mining</span></li>',
             '<div class="soji-footer-social-list">' + social + "</div>",
            '          <li><span class="soji-footer-link">Assets & Workforce</span></li>',
             "</div>",
             '         <li><span class="soji-footer-link">Driver Safety</span></li>',
             "</div>",
            '        </ul>',
             "</div>",
            '      </section>',
             "</div>",
            '      <section class="soji-footer-col">',
             "</section>"
            '        <h2>Products</h2>',
            '        <ul>',
            '          <li><span class="soji-footer-link">Trackers</span></li>',
            '          <li><span class="soji-footer-link">Accessories</span></li>',
            '          <li><span class="soji-footer-link">Solutions</span></li>',
            '        </ul>',
            '      </section>',
            '      <section class="soji-footer-col">',
            '        <h2>Support</h2>',
            '        <ul>',
            '          <li><span class="soji-footer-link">Product Support</span></li>',
            '          <li><span class="soji-footer-link">Wiki Knowledge Base</span></li>',
            '          <li><span class="soji-footer-link">Community Forum</span></li>',
            '          <li><span class="soji-footer-link">Warranty & Repair</span></li>',
            '          <li><span class="soji-footer-link">EOL Products</span></li>',
            '        </ul>',
            '      </section>',
            '      <section class="soji-footer-col">',
            '        <h2>About Us</h2>',
            '        <ul>',
            '          <li><span class="soji-footer-link">Mission, Vision & Values</span></li>',
            '          <li><span class="soji-footer-link">Brand Guidelines</span></li>',
            '          <li><span class="soji-footer-link">Career</span></li>',
            '          <li><span class="soji-footer-link">Contacts</span></li>',
            '        </ul>',
            '      </section>',
            '    </div>',
            '',
            '    <div class="soji-footer-bottom">',
             '     <div class="soji-footer-meta">',
             '       <div class="soji-footer-policy-row">',
            '          <span class="soji-footer-link">Privacy</span>',
            '          <span class="soji-footer-sep">|</span>',
             '         <span class="soji-footer-link">Cookies</span>',
            '          <span class="soji-footer-sep">|</span>',
            '          <span class="soji-footer-link">All Policies</span>',
            '        </div>',
             '        <div class="soji-footer-copy">Copyright © 2026, SOJI Electronics</div>',
             '     </div>',
            '',
            '      <div class="soji-footer-actions">',
             '        <span class="soji-footer-subscribe">Subscribe to Newsletter</span>',
             '       <div class="soji-footer-social">',
             '         <span class="soji-footer-social-label">Connect</span>',
             '         <div class="soji-footer-social-list">',
            '            <span class="soji-footer-social-item">f</span>',
            '            <span class="soji-footer-social-item">in</span>',
             '            <span class="soji-footer-social-item">x</span>',
            '            <span class="soji-footer-social-item">yt</span>',
             '            <span class="soji-footer-social-item">ig</span>',
            '          </div>',
             '        </div>',
             '      </div>',
             '    </div>',
            '  </div>',
            '</section>'
         ].join("");
         ].join("");
    }


         footer.insertAdjacentHTML("beforebegin", html);
    function injectFooter(data) {
        var footer = document.getElementById("footer");
        if (!footer || document.getElementById("soji-site-footer")) return;
         footer.insertAdjacentHTML("beforebegin", buildFooter(data));
         document.body.classList.add("has-soji-footer");
         document.body.classList.add("has-soji-footer");
    }
    function init() {
        fetch("/index.php?title=MediaWiki:FooterData.json&action=raw")
            .then(function (r) { return r.text(); })
            .then(function (text) { return JSON.parse(text); })
            .then(injectFooter)
            .catch(function (err) { console.error("Footer load failed:", err); });
     }
     }


     if (document.readyState === "loading") {
     if (document.readyState === "loading") {
         document.addEventListener("DOMContentLoaded", injectSojiFooter);
         document.addEventListener("DOMContentLoaded", init);
     } else {
     } else {
         injectSojiFooter();
         init();
     }
     }
})();
})();

Revision as of 07:28, 11 May 2026

(function () {
    function esc(text) {
        return String(text || "").replace(/[&<>"]/g, function (m) {
            return { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" }[m];
        });
    }

    function renderLink(item, extraClass) {
        var cls = extraClass ? ' class="' + extraClass + '"' : "";
        var href = item.href ? esc(item.href) : "#";
        return '<a' + cls + ' href="' + href + '">' + esc(item.label) + "</a>";
    }

    function buildFooter(data) {
        var columns = (data.columns || []).map(function (col) {
            var items = (col.items || []).map(function (item) {
                return "<li>" + renderLink(item, "soji-footer-link") + "</li>";
            }).join("");

            return [
                '<section class="soji-footer-col">',
                "<h2>" + esc(col.title) + "</h2>",
                "<ul>" + items + "</ul>",
                "</section>"
            ].join("");
        }).join("");

        var policies = (data.policies || []).map(function (item, i) {
            return (i ? '<span class="soji-footer-sep">|</span>' : "") +
                renderLink(item, "soji-footer-link");
        }).join("");

        var social = (data.social || []).map(function (item) {
            var href = item.href ? esc(item.href) : "#";
            return '<a class="soji-footer-social-item" href="' + href + '" aria-label="' + esc(item.label) + '">' +
                esc(item.short || item.label.charAt(0)) + "</a>";
        }).join("");

        var subscribe = data.subscribe
            ? renderLink(data.subscribe, "soji-footer-subscribe")
            : "";

        return [
            '<section id="soji-site-footer" class="soji-site-footer">',
            '<div class="soji-footer-shell">',
            '<div class="soji-footer-grid">' + columns + "</div>",
            '<div class="soji-footer-bottom">',
            '<div class="soji-footer-meta">',
            '<div class="soji-footer-policy-row">' + policies + "</div>",
            '<div class="soji-footer-copy">' + esc(data.copyright || "") + "</div>",
            "</div>",
            '<div class="soji-footer-actions">',
            subscribe,
            '<div class="soji-footer-social">',
            '<span class="soji-footer-social-label">Connect</span>',
            '<div class="soji-footer-social-list">' + social + "</div>",
            "</div>",
            "</div>",
            "</div>",
            "</div>",
            "</section>"
        ].join("");
    }

    function injectFooter(data) {
        var footer = document.getElementById("footer");
        if (!footer || document.getElementById("soji-site-footer")) return;
        footer.insertAdjacentHTML("beforebegin", buildFooter(data));
        document.body.classList.add("has-soji-footer");
    }

    function init() {
        fetch("/index.php?title=MediaWiki:FooterData.json&action=raw")
            .then(function (r) { return r.text(); })
            .then(function (text) { return JSON.parse(text); })
            .then(injectFooter)
            .catch(function (err) { console.error("Footer load failed:", err); });
    }

    if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", init);
    } else {
        init();
    }
})();
SOJI Electronics