本帖最后由 Zapic 于 2020-9-26 15:50 编辑 
在MCBBS Extender 2.0中,我一直致力于让更多人参与到MCBBS Extender的开发中.或者说,我一直致力于让超过700人的用户群里的论坛体验变得更好.
如果你不知道这是什么,请前往此处了解详情:https://www.mcbbs.net/thread-952104-1-1.html
为了让更多人的诉求得以实现,让更多人的强迫症得到安慰,我为开发者们提供了一个"简单易用的"开发MCBBS Extender的方案:模块式的添加功能
直到后来才发现,这一套方案会对MCBBS Extender的环境有强依赖,让开发者们的想法被强行绑定在MCBBS Extender中.
我认为论坛的二次开发应该是自由分散的,而不是封闭集中的.所以,我将晚上拿来逛bika的时间,花在了重新构建开发者体验上.
之后,在接下来的更新中,变得更加自由了.
你可以开发一个
脱离MCBBS Extender运行
但可以为MCBBS Extender用户 提供一个集中化管理界面
的MCBBS用户脚本程序,
或者一个
强依赖于MCBBS Extender
并使用预先封装好的论坛常用操作函数
以及拥有更优雅实现方法的用户操作事件API
的MCBBS Extender模块.
从现在开始,MCBBS Extender更像一个工具库,而不是一个核心.
开发者开发的脚本可以脱离MCBBS Extender以便让更多人体验到二次开发对体验的提升 .
用户也可使用不带任何功能的MCBBS Extender Core,然后从MCBBS Extender插件市场添加功能,获得更加客制化的体验.
请给我一些星星:
MCBBS Extender Project 开源地址:https://github.com/Proj-MExt
MCBBS Extender 插件市场: https://github.com/Proj-MExt/Modules-Repo
MCBBS Extender 开发指南: https://github.com/Proj-MExt/Modules-Repo/wiki
欢迎提交Pull Request,协助我修复错误,以及优化我并不是很好的代码质量.
以下是一些开发者比较用例:
在现有的MCBBS Extender中,所有模块强依赖MCBBS Extender,模块的入口必须位于模块体内部,由MCBBS Extender Core调用:
复制代码
在即将发布的更新中,你可以继续选择强依赖于MCBBS Extender:
异步方式:
复制代码
同步Promise方式:
复制代码
同步回调方式:
复制代码
或者开发可以脱离MCBBS Extender运行的用户脚本,并动态的接入MCBBS Extender:
复制代码
MCBBS提供了一些简单易用的事件,可以让开发者更方便的实现想要的功能,而不需要边骂"Discuz搞什么幺蛾子"边翻Discuz源码然后吐血.
你要吐的血我先吐了
比如添加自定义评分理由:
复制代码
在MCBBS Extender 2.0中,我一直致力于让更多人参与到MCBBS Extender的开发中.或者说,我一直致力于让超过700人的用户群里的论坛体验变得更好.
如果你不知道这是什么,请前往此处了解详情:https://www.mcbbs.net/thread-952104-1-1.html
为了让更多人的诉求得以实现,
直到后来才发现,这一套方案会对MCBBS Extender的环境有强依赖,让开发者们的想法被强行绑定在MCBBS Extender中.
我认为论坛的二次开发应该是自由分散的,而不是封闭集中的.所以,我将晚上拿来逛bika的时间,花在了重新构建开发者体验上.
之后,在接下来的更新中,变得更加自由了.
你可以开发一个
脱离MCBBS Extender运行
但可以为MCBBS Extender用户 提供一个集中化管理界面
的MCBBS用户脚本程序,
或者一个
强依赖于MCBBS Extender
并使用预先封装好的论坛常用操作函数
以及拥有更优雅实现方法的用户操作事件API
的MCBBS Extender模块.
从现在开始,MCBBS Extender更像一个工具库,而不是一个核心.
开发者开发的脚本可以脱离MCBBS Extender以便让更多人体验到二次开发
用户也可使用不带任何功能的MCBBS Extender Core,然后从MCBBS Extender插件市场添加功能,获得更加客制化的体验.
请给我一些星星:
MCBBS Extender Project 开源地址:https://github.com/Proj-MExt
MCBBS Extender 插件市场: https://github.com/Proj-MExt/Modules-Repo
MCBBS Extender 开发指南: https://github.com/Proj-MExt/Modules-Repo/wiki
欢迎提交Pull Request,协助我修复错误,以及优化我并不是很好的代码质量.
以下是一些开发者比较用例:
在现有的MCBBS Extender中,所有模块强依赖MCBBS Extender,模块的入口必须位于模块体内部,由MCBBS Extender Core调用:
 
- (async () => {
 
-      await unsafeWindow.MExt;
 
-      let MExt = unsafeWindow.MExt;
 
-      MExt.exportModule({
 
-          "core": (()=>{/* Core code */})
 
-     });
 
- })();
 
 
在即将发布的更新中,你可以继续选择强依赖于MCBBS Extender:
异步方式:
 
- (async () => {
 
-     const MExt = await new Promise(_ => { !unsafeWindow.MExt ? unsafeWindow.addEventListener("MExtLoaded", __ => { _(unsafeWindow.MExt) }) : _(unsafeWindow.MExt)});
 
-     // Your Core code ...
 
 
-     // ...
 
-     // ...
 
-     const Module = {
 
-         "meta": {
 
-              "id": "md_example",
 
-              "name": "Example Module",
 
 
-              "author": "Zapic",
 
 
-              "version": "1.0.0",
 
 
-              "updateInfo": []
 
 
-         },
 
-         "style": `/*Style*/`
 
-     }
 
-     MExt.exportModule(Module);
 
- })();
 
同步Promise方式:
 
- (() => {
 
-     new Promise(_ => { !unsafeWindow.MExt ? unsafeWindow.addEventListener("MExtLoaded", __ => { _(unsafeWindow.MExt) }) : _(unsafeWindow.MExt)})
 
-     .then((MExt) => {
 
-          // Your Core code ...
 
-         // ...
 
-         // ...
 
-         const Module = {
 
-             "meta": {
 
-                  "id": "md_example",
 
-                  "name": "Example Module",
 
-                  "author": "Zapic",
 
-                  "version": "1.0.0",
 
-                  "updateInfo": []
 
-             },
 
-             "style": `/*Style*/`
 
-         }
 
-         MExt.exportModule(Module);
 
 
-     });
 
-     // Core code
 
 
-     const Module = {
 
-         "meta": {
 
-              "id": "md_example",
 
-              "name": "Example Module",
 
 
-              "author": "Zapic",
 
 
-              "version": "1.0.0",
 
 
-              "updateInfo": []
 
 
-         },
 
-         "style": `/*Style*/`
 
-     }
 
-     MExt.exportModule(Module);
 
- })();
 
同步回调方式:
 
- const MyCore = (MExt) => {
 
-     // Your Core code ...
 
 
-     // ...
 
-     // ...
 
-     const Module = {
 
-         "meta": {
 
-              "id": "md_example",
 
-              "name": "Example Module",
 
 
-              "author": "Zapic",
 
 
-              "version": "1.0.0",
 
 
-              "updateInfo": []
 
 
-         },
 
-         "style": `/*Style*/`
 
-     }
 
-     MExt.exportModule(Module);
 
- }
 
- if(!unsafeWindow.MExt){
 
-      unsafeWindow.addEventListener("MExtLoaded",() => {
 
-         MyCore(unsafeWindow.MExt);     });
 
- } else {
 
-     MyCore(unsafeWindow.MExt);
 
- }
 
或者开发可以脱离MCBBS Extender运行的用户脚本,并动态的接入MCBBS Extender:
 
- (() => {
 
-     let SelfConfig = {
 
-          "enable": true
 
-     }
 
-     new Promise(_ => { !unsafeWindow.MExt ? unsafeWindow.addEventListener("MExtLoaded", __ => { _(unsafeWindow.MExt) }) : _(unsafeWindow.MExt)})
 
-     .then((MExt)=>{
 
-         SelfConfig.enable = MExt.Storage.get("example_enable");
 
-         MExt.exportModule({
 
-              "meta": { /*...*/},
 
-              "config": [{
 
-                    "id": "example_enable",
 
-                    "name": "启用Example",
 
-                    "type": "check",
 
-                    "default": true
 
-              }],
 
-              "core": () => {
 
-                   // Code to run if MCBBS Extender exists...
 
-                   // ...
 
-              }
 
-         });
 
-     });
 
-      // Your Core code ...
 
-      // ...
 
-      // ... 
 
- })();
 
MCBBS提供了一些简单易用的事件,可以让开发者更方便的实现想要的功能,而不需要边骂"Discuz搞什么幺蛾子"边翻Discuz源码然后吐血.
比如添加自定义评分理由:
 
- document.addEventListener("RateWindowOpened",(e) => {
 
-      let myreason = document.createElement("li");
 
-      myreason.innerHTML = "不愧是你";
 
-      document.getElementById("reasonselect").appendChild(myreason);
 
- })
 
好!
(第一时间收到了新帖提醒
(第一时间收到了新帖提醒