MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

微件:SaltSkinPreviewer:修订间差异

来自MCBBS Wiki
跳到导航 跳到搜索
(创建页面,内容为“<noinclude><pre><span class="skinview3d salt">文件:1.8皮肤模板 第二层镂空.png</span> <span class="skinview3d salt">https://attachment.mcbbs.net/forum/202004/26/203149z2t4el4ctdh4t1dt.png</span> {{#Widget:SaltSkinPreviewer}}</pre> <span class="skinview3d salt">文件:1.8皮肤模板 第二层镂空.png</span> <span class="skinview3d salt">https://attachment.mcbbs.net/forum/202004/26/203149z2t4el4ctdh4t1dt.png</span> {{#Widget:SaltSkinPrev…”)
标签2017年版源代码编辑
 
(// Edit via Wikiplus)
 
(未显示1个用户的2个中间版本)
第1行: 第1行:
<noinclude><pre><span class="skinview3d salt">[[文件:1.8皮肤模板 第二层镂空.png]]</span>
<noinclude>已弃用,请使用 <code>skinview</code> 和 <code>skinview-lite</code> 标签代替。<pre><div class="salt salt-skin-view-3d" style="width: 250px; height: 350px;">[[文件:1.8皮肤模板 第二层镂空.png]]</div>


<span class="skinview3d salt">https://attachment.mcbbs.net/forum/202004/26/203149z2t4el4ctdh4t1dt.png</span>
<div class="salt salt-skin-view-3d" style="width: 400px; height: 400px;">https://minotar.net/skin/MHF_Steve</div>


{{#Widget:SaltSkinPreviewer}}</pre>
{{#Widget:SaltSkinPreviewer}}</pre>


<span class="skinview3d salt">[[文件:1.8皮肤模板 第二层镂空.png]]</span>
<div class="salt salt-skin-view-3d" style="width: 250px; height: 350px;">[[文件:1.8皮肤模板 第二层镂空.png]]</div>


<span class="skinview3d salt">https://attachment.mcbbs.net/forum/202004/26/203149z2t4el4ctdh4t1dt.png</span>
<div class="salt salt-skin-view-3d" style="width: 400px; height: 400px;">https://minotar.net/skin/MHF_Steve</div>


{{#Widget:SaltSkinPreviewer}}
{{#Widget:SaltSkinPreviewer}}


这个预览功能使用了[https://github.com/bs-community/skinview3d bs-community的skinview3d开源库]于2020-12-31的版本,采用'''MIT许可证'''
这个预览功能使用了[https://github.com/bs-community/skinview3d bs-community的skinview3d开源库]于2020-12-31的版本,采用'''MIT许可证''',Salt_lovely[https://github.com/Salt-lovely/skinview3d 编译上传于Github的版本]遵从原许可证。


Salt_lovely[https://github.com/Salt-lovely/skinview3d 编译上传于Github的版本]遵从原许可证。
主体功能实现于2022年8月20日重写,新版源代码详见[https://github.com/mcbbs-wiki/mcbbs-wiki-widget-repo Github仓库],旧版源代码已经随着盐酱的旧电脑一起随风飘散。
</noinclude><includeonly><script async>
"use strict";
(() => {
  // src/utils/utils.ts
  function docReady(fn) {
    if (document.readyState === "loading") {
      window.addEventListener("DOMContentLoaded", fn);
    } else {
      fn();
    }
  }
  function sleep(time = 500) {
    return new Promise((res) => {
      setTimeout(() => res(), time);
    });
  }
  async function waitTill(what, interval = 500, safeTime = 12e4) {
    const startTime = Date.now();
    while (!what()) {
      await sleep(interval);
      if (Date.now() - startTime > safeTime && !what())
        throw new Error("Out Of Time");
    }
  }


代码中<code>__awaiter</code>部分由Microsoft开发,释入公共领域,可随意使用;其余部分由Salt_lovely开发,使用'''AGPL v3许可证'''。
  // src/utils/resource.ts
  function addScript(url, asynchronous = false, key) {
    if (key && document.getElementById(key))
      return;
    const scr = document.createElement("script");
    scr.src = url;
    scr.async = asynchronous;
    if (key)
      scr.id = key;
    document.head.appendChild(scr);
  }


(这么屑的代码应该没有人偷)
  // widget/SaltSkinPreviewer/widget.ts
</noinclude><includeonly><script async>
  var filterWebsite = [
'use strict';
     "https://mcbbs.wiki/",
(function () {
    "https://attachment.mcbbs.net/",
     let __awaiter = (this && this.__awaiter) || function (saltArg, _arguments, P, generator) {
     "https://minotar.net/"
        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  ];
        return new (P || (P = Promise))(function (resolve, reject) {
  //! addScript('https://cdn.jsdelivr.net/gh/Salt-lovely/[email protected].2/bundles/skinview3d.bundle.js', true, 'SaltSkinPreviewer')
            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  addScript("https://mcbbs.wiki/salt/skinview.js", true, "SaltSkinPreviewer");
            function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  docReady(async () => {
            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
    await waitTill(() => {
            step((generator = generator.apply(saltArg, _arguments || [])).next());
      var _a;
        });
      return (_a = window.skinview3d) == null ? void 0 : _a.SkinViewer;
     };
    });
    if (!document.querySelector('script[src^="https://cdn.jsdelivr.net/gh/Salt-lovely/skinview3d"]')) {
    const skinList = Array.from(document.querySelectorAll(".salt.salt-skin-view-3d"));
        let s = document.createElement('script')
    skinList.forEach((skin) => {
        s.src = 'https://cdn.jsdelivr.net/gh/Salt-lovely/[email protected].1/bundles/skinview3d.bundle.js'
      var _a;
        document.head.appendChild(s)
      skin.classList.remove("salt");
    }
      let src;
    let allowList = ['https://attachment.mcbbs.net/']
      if (skin.querySelector("img")) {
    __awaiter(this, void 0, void 0, function* () {
        src = (_a = skin.querySelector("img")) == null ? void 0 : _a.src;
        // 主要过程
      } else
        let safe = 0
        src = skin.textContent;
        while (typeof skinview3d == 'undefined' && safe < 100) {
      if (!src || src.length < 10)
            yield new Promise((resolve) => setTimeout(resolve, 1000));
        return;
            // console.log(safe++)
      if (!filterWebsite.some((site) => src.startsWith(site)))
        }
        return;
        if (typeof skinview3d == 'undefined') {
      skin.innerHTML = "";
            throw new Error('没有成功下载skinview3d')
      const canvas = document.createElement("canvas");
        }
      const option = {
        for (let s of Array.from(document.querySelectorAll('.skinview3d.salt'))) {
        canvas,
            s.classList.remove('salt') // 防止复读
        width: skin.offsetWidth,
            if (!(s instanceof HTMLElement)) { continue } // 略过非HTML元素
        height: skin.offsetHeight,
            let temp, src = ''
        skin: src,
            temp = s.querySelector('img') // 从img获取
        fov: 50,
            if (temp) {
        zoom: 0.9
                src = temp.src || ''
      };
            }
      const viewer = new window.skinview3d.SkinViewer(option);
            if (src.length < 1) {
      viewer.globalLight.intensity = 0.5;
                // 没有获取到链接地址或者不存在img
      viewer.cameraLight.intensity = 0.5;
                temp = s.querySelector('a')
      skin.appendChild(canvas);
                if (temp) {
      const animation = {
                    src = temp.href || ''
        idle: new window.skinview3d.IdleAnimation(),
                }
        walk: new window.skinview3d.WalkingAnimation()
            }
      };
            if (src.indexOf('https://game.bilibili.com/linkfilter/?url=') == 0
      const action = (() => {
                || src.indexOf('http://game.bilibili.com/linkfilter/?url=') == 0) {
        let curr = 0;
                src = src.replace(/https?\:\/\/game\.bilibili\.com\/linkfilter\/\?url\=/, '')
        const actions = [
                let allow = false
          (v) => {
                for (let al of allowList) {
            v.animation = animation.walk;
                    if (src.indexOf(al) == 0) {
            v.animation.speed = 0.5;
                        allow = true
          },
                        break
          (v) => {
                    }
            v.animation = animation.walk;
                }
            v.animation.speed = 1;
                if (!allow) { continue }
          },
                src = 'https://saltproxy.saltlovely.workers.dev/' + src
          (v) => {
            }
            v.animation = animation.idle;
            if (src.length < 1) { continue } // 没救了
            v.animation.speed = 1;
            // console.log(src)
          }
            // 添加皮肤
        ];
             s.innerHTML = '' // 清空
        return (v) => {
            let canvas = document.createElement('canvas')
          actions[curr++](v);
            s.appendChild(canvas)
          if (curr >= actions.length)
            let sv = new skinview3d.SkinViewer({
             curr = 0;
                canvas: canvas,
        };
                width: 250,
      })();
                height: 350,
      let pos = { x: 0, y: 0 };
                skin: src
      skin.addEventListener("mousedown", (ev) => {
            })
        const { x, y } = ev;
            sv.renderer.setClearColor(0xf6f9fe) // 背景色
        pos = { x, y };
            let walk = sv.animations.add(skinview3d.WalkingAnimation)
        ev.preventDefault();
            walk.speed = 0.4
      });
        }
      skin.addEventListener("mouseup", (ev) => {
     })
        const { x, y } = ev;
})()
        if (Math.abs(pos.x - x) > 2 || Math.abs(pos.y - y) > 2)
          return;
        if (ev.button === 0)
          action(viewer);
        else if (ev.button === 2)
          viewer.resetCameraPose();
        ev.preventDefault();
      });
      action(viewer);
      skin.addEventListener("dblclick", () => {
        viewer.resetCameraPose();
      });
     });
  });
})();
</script></includeonly>
</script></includeonly>

2023年4月29日 (六) 01:33的最新版本

已弃用,请使用 skinviewskinview-lite 标签代替。

<div class="salt salt-skin-view-3d" style="width: 250px; height: 350px;">[[文件:1.8皮肤模板 第二层镂空.png]]</div>

<div class="salt salt-skin-view-3d" style="width: 400px; height: 400px;">https://minotar.net/skin/MHF_Steve</div>

{{#Widget:SaltSkinPreviewer}}

这个预览功能使用了bs-community的skinview3d开源库于2020-12-31的版本,采用MIT许可证,Salt_lovely编译上传于Github的版本遵从原许可证。

主体功能实现于2022年8月20日重写,新版源代码详见Github仓库,旧版源代码已经随着盐酱的旧电脑一起随风飘散。