/*
*/
// ==UserScript==
// @name New script
// @namespace Violentmonkey Scripts
// @match *://*/*
// @grant none
// @version 1.0
// @author -
// @description 2025/6/30 13:45:42
// ==/UserScript==
(() => {
'use strict';
const createWindow = (elem, param) => {
const div = document.createElement("div");
// 使用对象字面量
const oWin = {
callback: (panel) => panel.content.appendChild(div),
opacity: .9,
theme: "primary",
};
switch (param) {
case undefined: // 最好使用一个明确的默认值,而不是 undefined
case null: // 也可以处理 null
oWin.contentSize = "400 250";
const identify = Date.now().toString(36);
oWin.headerTitle = identify;
oWin.id = identify;
oWin.position = "right-top -10 125";
break;
case "dashBoard":
oWin.contentSize = "450 250";
oWin.headerTitle = param;
oWin.id = param;
oWin.position = "right-bottom -10 -10";
break;
}
// 如果elem存在,在appendChild之前将它添加到div中
if (elem) {
div.appendChild(elem);
}
window.jsPanel.create(oWin);
}
const createMmenu = () => {
new Mmenu(
document.querySelector("#menu"),
{
theme: "white",
setSelected: {
hover: true,
parent: true,
},
counters: {
add: true,
},
searchfield: {
add: true,
placeholder: "Search menu items",
splash: "<p>What are you looking for?</p>",
title: "Search",
},
iconbar: {
use: "(min-width: 450px)",
top: [
'<a href="#/"><span class="fa fa-home"></span></a>',
],
bottom: [
'<a href="#/"><span class="fa fa-twitter"></span></a>',
'<a href="#/"><span class="fa fa-facebook"></span></a>',
'<a href="#/"><span class="fa fa-youtube"></span></a>',
],
},
iconPanels: {
add: true,
visible: 1,
},
sidebar: {
collapsed: {
use: "(min-width: 768px)",
},
expanded: {
use: "(min-width: 1024px)",
initial: "closed",
},
},
navbars: [
{
content: ["searchfield"],
},
{
type: "tabs",
content: [
'<a href="#panel-menu"><i class="fa fa-bars"></i> <span>Menu</span></a>',
'<a href="#panel-account"><i class="fa fa-user"></i> <span>Account</span></a>',
'<a href="#panel-cart"><i class="fa fa-shopping-cart"></i> <span>Cart</span></a>',
],
},
{
content: ["prev", "breadcrumbs", "close"],
},
{
position: "bottom",
content: [
'<a href="https://mmenujs.com/wordpress-plugin" target="_blank">WordPress plugin</a>',
],
},
],
},
{
searchfield: {
cancel: true,
clear: true,
},
}
);
const menuTrigger = document.querySelector("a[href='#menu']");
menuTrigger.click();
}
// 1. 库的配置对象
// 存储所有需要动态加载的库的信息
const libraryConfig = {
jsPanel: {
urls: [
"https://jspanel.de/jspanel/dist/jspanel.min.css",
"https://jspanel.de/jspanel/dist/jspanel.min.js",
],
globalVar: 'jsPanel', // 库加载后,全局变量的名称
method: createWindow, // 库加载成功后执行的回调函数
},
Mmenu: {
urls: [
"https://fastly.jsdelivr.net/gh/FrDH/mmenu-js/demo/css/demo.css",
"https://cdnjs.cloudflare.com/ajax/libs/mmenu-js/9.3.0/mmenu.min.css",
"https://cdnjs.cloudflare.com/ajax/libs/mmenu-js/9.3.0/mmenu.min.js",
"https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css",
],
globalVar: 'Mmenu',
method: createMmenu, // 加载成功后执行的函数
},
};
// 2. 通用的动态加载函数
const loadResource = (url) => {
return new Promise((resolve, reject) => {
const tag = document.createElement(url.endsWith('.css') ? 'link' : 'script');
if (url.endsWith('.css')) {
tag.rel = 'stylesheet';
tag.href = url;
} else {
tag.src = url;
}
tag.onload = () => resolve(tag);
tag.onerror = () => reject(new Error(`Failed to load resource: ${url}`));
document.body.appendChild(tag);
});
};
// 3. 通用的库加载和初始化函数
const loadLibrary = async (libraryName, ...args) => {
const config = libraryConfig[libraryName];
if (!config) {
console.error(`Library configuration for '${libraryName}' not found.`);
return;
}
// 检查全局变量是否存在
if (window[config.globalVar]) {
config.method(...args);
return;
}
try {
await Promise.all(config.urls.map(url => loadResource(url)));
if (window[config.globalVar]) {
config.method(...args);
} else {
console.error(`Global variable '${config.globalVar}' not found after loading scripts.`);
}
} catch (error) {
console.error(`Failed to load library '${libraryName}':`, error);
}
};
const createNav = () => {
const page = document.createElement("div");
page.id = "page";
const header = document.createElement("div");
header.id = "header";
const aTag = document.createElement("a");
aTag.href = "#menu";
header.appendChild(aTag);
page.appendChild(header);
const nav = document.createElement("nav");
nav.id = "menu";
document.body.appendChild(page);
document.body.appendChild( nav );
}
createNav ();
// 4. 调用示例
// 当你需要创建 jsPanel 窗口时,调用此函数
loadLibrary( "Mmenu" );
// 如果有另一个库
// loadLibrary('chartjs', chartData, chartOptions);
document.addEventListener("click", function (evnt) {
const anchor = evnt.target.closest('a[href="#/"]');
if (anchor) {
alert("Thank you for clicking, but that's a demo link.");
evnt.preventDefault();
}
});
// Your code here...
})();
/*
*/