Greasy Fork

Greasy Fork is available in English.

动漫花园下载助手

一个为动漫花园(share.dmhy.org)提供增强功能的用户脚本

目前为 2019-06-01 提交的版本,查看 最新版本

// ==UserScript==
// @name               DMHY download helper
// @name:zh-CN         动漫花园下载助手
// @description        A userscript for share.dmhy.org.
// @description:zh-CN  一个为动漫花园(share.dmhy.org)提供增强功能的用户脚本
// @author             Xingwang Liao
// @namespace          https://github.com/kuoruan
// @homepage           https://github.com/kuoruan/dmhy-download-helper#readme
// @supportURL         https://github.com/kuoruan/dmhy-download-helper/issues
// @match              *://share.dmhy.org/
// @match              *://share.dmhy.org/topics/list/*
// @match              *://share.dmhy.org/topics/list?*
// @match              *://share.dmhy.org/topics/view/*
// @require            https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js
// @grant              GM_setClipboard
// @source             https://github.com/kuoruan/dmhy-download-helper.git
// @license            MIT
// @run-at             document-end
// @version            1.2.0
// @icon               https://www.google.cn/s2/favicons?domain=share.dmhy.org
// ==/UserScript==
!function(Vue) {
  "use strict";
  Vue = Vue && Vue.hasOwnProperty("default") ? Vue.default : Vue;
  function styleInject(css, ref) {
    void 0 === ref && (ref = {});
    var insertAt = ref.insertAt;
    if (css && "undefined" != typeof document) {
      var head = document.head || document.getElementsByTagName("head")[0], style = document.createElement("style");
      style.type = "text/css";
      "top" === insertAt && head.firstChild ? head.insertBefore(style, head.firstChild) : head.appendChild(style);
      style.styleSheet ? style.styleSheet.cssText = css : style.appendChild(document.createTextNode(css));
    }
  }
  styleInject("body{position:relative}#topic_list .even:hover,#topic_list .even:hover td,#topic_list .odd:hover,#topic_list .odd:hover td{background-color:#0eb9e7}");
  var script = {
    name: "Toast",
    data: function data() {
      return {
        text: "",
        show: !1,
        timer: 0
      };
    },
    methods: {
      display: function display(text) {
        if (this.timer) {
          window.clearTimeout(this.timer);
          this.timer = 0;
        }
        this.text = text;
        this.show = !0;
        var _self = this;
        this.timer = window.setTimeout(function() {
          _self.show = !1;
          _self.text = "";
          _self.timer = 0;
        }, 3e3);
      }
    }
  };
  function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
    if ("boolean" != typeof shadowMode) {
      createInjectorSSR = createInjector;
      createInjector = shadowMode;
      shadowMode = !1;
    }
    var hook, options = "function" == typeof script ? script.options : script;
    if (template && template.render) {
      options.render = template.render;
      options.staticRenderFns = template.staticRenderFns;
      options._compiled = !0;
      isFunctionalTemplate && (options.functional = !0);
    }
    scopeId && (options._scopeId = scopeId);
    if (moduleIdentifier) {
      hook = function hook(context) {
        (context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) || "undefined" == typeof __VUE_SSR_CONTEXT__ || (context = __VUE_SSR_CONTEXT__);
        style && style.call(this, createInjectorSSR(context));
        context && context._registeredComponents && context._registeredComponents.add(moduleIdentifier);
      };
      options._ssrRegister = hook;
    } else {
      style && (hook = shadowMode ? function() {
        style.call(this, createInjectorShadow(this.$root.$options.shadowRoot));
      } : function(context) {
        style.call(this, createInjector(context));
      });
    }
    if (hook) {
      if (options.functional) {
        var originalRender = options.render;
        options.render = function renderWithStyleInjection(h, context) {
          hook.call(context);
          return originalRender(h, context);
        };
      } else {
        var existing = options.beforeCreate;
        options.beforeCreate = existing ? [].concat(existing, hook) : [ hook ];
      }
    }
    return script;
  }
  var normalizeComponent_1 = normalizeComponent, isOldIE = "undefined" != typeof navigator && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());
  function createInjector(context) {
    return function(id, style) {
      return addStyle(id, style);
    };
  }
  var HEAD = document.head || document.getElementsByTagName("head")[0], styles = {};
  function addStyle(id, css) {
    var group = isOldIE ? css.media || "default" : id, style = styles[group] || (styles[group] = {
      ids: new Set(),
      styles: []
    });
    if (!style.ids.has(id)) {
      style.ids.add(id);
      var code = css.source;
      if (css.map) {
        code += "\n/*# sourceURL=" + css.map.sources[0] + " */";
        code += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) + " */";
      }
      if (!style.element) {
        style.element = document.createElement("style");
        style.element.type = "text/css";
        css.media && style.element.setAttribute("media", css.media);
        HEAD.appendChild(style.element);
      }
      if ("styleSheet" in style.element) {
        style.styles.push(code);
        style.element.styleSheet.cssText = style.styles.filter(Boolean).join("\n");
      } else {
        var index = style.ids.size - 1, textNode = document.createTextNode(code), nodes = style.element.childNodes;
        nodes[index] && style.element.removeChild(nodes[index]);
        nodes.length ? style.element.insertBefore(textNode, nodes[index]) : style.element.appendChild(textNode);
      }
    }
  }
  var browser = createInjector;
  var Toast = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("div", {
        staticClass: "toast",
        class: {
          show: _vm.show
        }
      }, [ _c("span", {
        staticClass: "text"
      }, [ _vm._v(_vm._s(_vm.text)) ]) ]);
    },
    staticRenderFns: []
  }, function(inject) {
    inject && inject("data-v-161e41de_0", {
      source: ".toast[data-v-161e41de]{display:none;padding:10px 20px;position:fixed;left:50%;bottom:30px;z-index:99;border-radius:2px;background-color:#333;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.toast.show[data-v-161e41de]{display:block;-webkit-animation:fadein-data-v-161e41de .5s,fadeout-data-v-161e41de .5s 2.5s;animation:fadein-data-v-161e41de .5s,fadeout-data-v-161e41de .5s 2.5s}.toast .text[data-v-161e41de]{color:#fff;font-size:14px;line-height:1.5}@-webkit-keyframes fadein-data-v-161e41de{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein-data-v-161e41de{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout-data-v-161e41de{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout-data-v-161e41de{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}",
      map: void 0,
      media: void 0
    });
  }, script, "data-v-161e41de", !1, void 0, browser, void 0);
  function _toConsumableArray(arr) {
    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
  }
  function _arrayWithoutHoles(arr) {
    if (Array.isArray(arr)) {
      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
        arr2[i] = arr[i];
      }
      return arr2;
    }
  }
  function _iterableToArray(iter) {
    if (Symbol.iterator in Object(iter) || "[object Arguments]" === Object.prototype.toString.call(iter)) {
      return Array.from(iter);
    }
  }
  function _nonIterableSpread() {
    throw new TypeError("Invalid attempt to spread non-iterable instance");
  }
  function magnetLinksWithOptions(magnetLinks, opts) {
    return !magnetLinks || magnetLinks.length <= 0 ? [] : opts.clean ? magnetLinks.map(function(l) {
      return l.substring(0, l.indexOf("&"));
    }) : _toConsumableArray(magnetLinks);
  }
  function getDefaultLinebreak() {
    var linebreak = "\n";
    navigator.userAgent.indexOf("Windows") > -1 && (linebreak = "\r\n");
    return linebreak;
  }
  function hashCode(str) {
    var hash = 0;
    if (!str || str.length <= 0) {
      return hash;
    }
    for (var i = 0, len = str.length; i < len; i++) {
      hash = (hash << 5) - hash + str.charCodeAt(i);
      hash |= 0;
    }
    return hash;
  }
  var ToolBar = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("div", {
        staticClass: "tool-bar",
        class: [ _vm.position, {
          visible: _vm.visible
        } ]
      }, [ _c("div", {
        staticClass: "wrapper"
      }, [ _c("span", {
        staticClass: "title"
      }, [ _vm._v("下载助手") ]), _c("label", {
        attrs: {
          for: "clean-" + _vm.position
        }
      }, [ _vm._v("清理链接:") ]), _c("input", {
        directives: [ {
          name: "model",
          rawName: "v-model",
          value: _vm.opts.clean,
          expression: "opts.clean"
        } ],
        staticClass: "checkbox",
        attrs: {
          id: "clean-" + _vm.position,
          type: "checkbox"
        },
        domProps: {
          checked: Array.isArray(_vm.opts.clean) ? _vm._i(_vm.opts.clean, null) > -1 : _vm.opts.clean
        },
        on: {
          change: function($event) {
            var $$a = _vm.opts.clean, $$el = $event.target, $$c = !!$$el.checked;
            if (Array.isArray($$a)) {
              var $$v = null, $$i = _vm._i($$a, $$v);
              $$el.checked ? $$i < 0 && _vm.$set(_vm.opts, "clean", $$a.concat([ $$v ])) : $$i > -1 && _vm.$set(_vm.opts, "clean", $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
            } else {
              _vm.$set(_vm.opts, "clean", $$c);
            }
          }
        }
      }), _c("label", {
        attrs: {
          for: "separator-" + _vm.position
        }
      }, [ _vm._v("分隔符:") ]), _c("select", {
        directives: [ {
          name: "model",
          rawName: "v-model",
          value: _vm.opts.separator,
          expression: "opts.separator"
        } ],
        attrs: {
          id: "separator-" + _vm.position
        },
        on: {
          change: function($event) {
            var $$selectedVal = Array.prototype.filter.call($event.target.options, function(o) {
              return o.selected;
            }).map(function(o) {
              return "_value" in o ? o._value : o.value;
            });
            _vm.$set(_vm.opts, "separator", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
          }
        }
      }, [ _c("option", {
        attrs: {
          value: "\n"
        }
      }, [ _vm._v("\\n") ]), _c("option", {
        attrs: {
          value: "\r\n"
        }
      }, [ _vm._v("\\r\\n") ]), _c("option", {
        attrs: {
          value: "\t"
        }
      }, [ _vm._v("\\t") ]), _c("option", {
        attrs: {
          value: " "
        }
      }, [ _vm._v("空格") ]), _c("option", {
        attrs: {
          value: ","
        }
      }, [ _vm._v(",") ]) ]), _c("div", {
        staticClass: "btn-wrapper"
      }, [ _c("button", {
        staticClass: "btn",
        on: {
          click: function($event) {
            return _vm.$emit("copy", _vm.opts);
          }
        }
      }, [ _vm._v("复制") ]), _c("button", {
        staticClass: "btn",
        on: {
          click: function($event) {
            return _vm.$emit("show", _vm.opts);
          }
        }
      }, [ _vm._v("显示") ]) ]) ]) ]);
    },
    staticRenderFns: []
  }, function(inject) {
    inject && inject("data-v-4d8ed982_0", {
      source: ".tool-bar[data-v-4d8ed982]{background-color:#247;color:#fff;display:none}.tool-bar.top[data-v-4d8ed982]{border-bottom:1px solid #fff}.tool-bar.bottom[data-v-4d8ed982]{border-top:1px solid #fff}.tool-bar.visible[data-v-4d8ed982]{display:block}.wrapper[data-v-4d8ed982]{display:-ms-flexbox;display:flex;height:auto;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.wrapper label[data-v-4d8ed982]{margin-left:10px}.wrapper .title[data-v-4d8ed982]{padding:8px 15px;border-right:2px solid #fff}.wrapper .checkbox[data-v-4d8ed982]{width:14px;height:14px;vertical-align:middle}.wrapper .btn-wrapper[data-v-4d8ed982]{margin-left:10px}.wrapper .btn-wrapper .btn[data-v-4d8ed982]{padding:2px 5px;color:#247;background-color:#fff;border:1px solid #247;margin:0 5px;outline:0}",
      map: void 0,
      media: void 0
    });
  }, {
    name: "ToolBar",
    props: {
      position: {
        type: String,
        default: "top"
      }
    },
    data: function data() {
      return {
        visible: !1,
        opts: {
          clean: !0,
          separator: getDefaultLinebreak()
        }
      };
    }
  }, "data-v-4d8ed982", !1, void 0, browser, void 0);
  var CheckboxHeader = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("th", {
        staticClass: "header",
        attrs: {
          width: "40"
        }
      }, [ _c("input", {
        directives: [ {
          name: "model",
          rawName: "v-model",
          value: _vm.checked,
          expression: "checked"
        } ],
        staticClass: "select-all",
        attrs: {
          type: "checkbox"
        },
        domProps: {
          checked: Array.isArray(_vm.checked) ? _vm._i(_vm.checked, null) > -1 : _vm.checked
        },
        on: {
          change: [ function($event) {
            var $$a = _vm.checked, $$el = $event.target, $$c = !!$$el.checked;
            if (Array.isArray($$a)) {
              var $$v = null, $$i = _vm._i($$a, $$v);
              $$el.checked ? $$i < 0 && (_vm.checked = $$a.concat([ $$v ])) : $$i > -1 && (_vm.checked = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
            } else {
              _vm.checked = $$c;
            }
          }, function($event) {
            return _vm.$emit("change", $event.target.checked);
          } ]
        }
      }) ]);
    },
    staticRenderFns: []
  }, function(inject) {
    inject && inject("data-v-7bc073df_0", {
      source: ".header[data-v-7bc073df]{cursor:default}.header .select-all[data-v-7bc073df]{width:14px;height:14px}.header .title[data-v-7bc073df]{margin-left:5px}",
      map: void 0,
      media: void 0
    });
  }, {
    name: "CheckboxHeader",
    data: function data() {
      return {
        checked: !1
      };
    }
  }, "data-v-7bc073df", !1, void 0, browser, void 0);
  var CheckboxItem = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("td", {
        attrs: {
          width: "40"
        }
      }, [ _c("input", {
        directives: [ {
          name: "model",
          rawName: "v-model",
          value: _vm.checked,
          expression: "checked"
        } ],
        staticClass: "select",
        attrs: {
          type: "checkbox",
          "data-index": _vm.index
        },
        domProps: {
          checked: Array.isArray(_vm.checked) ? _vm._i(_vm.checked, null) > -1 : _vm.checked
        },
        on: {
          change: [ function($event) {
            var $$a = _vm.checked, $$el = $event.target, $$c = !!$$el.checked;
            if (Array.isArray($$a)) {
              var $$v = null, $$i = _vm._i($$a, $$v);
              $$el.checked ? $$i < 0 && (_vm.checked = $$a.concat([ $$v ])) : $$i > -1 && (_vm.checked = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
            } else {
              _vm.checked = $$c;
            }
          }, function($event) {
            return _vm.$emit("change", $event.target.checked);
          } ]
        }
      }) ]);
    },
    staticRenderFns: []
  }, function(inject) {
    inject && inject("data-v-614ed75f_0", {
      source: ".select[data-v-614ed75f]{width:14px;height:14px}",
      map: void 0,
      media: void 0
    });
  }, {
    name: "CheckboxItem",
    props: {
      index: {
        type: Number,
        default: 0
      },
      magnet: {
        type: String,
        default: ""
      }
    },
    data: function data() {
      return {
        checked: !1
      };
    }
  }, "data-v-614ed75f", !1, void 0, browser, void 0);
  var Popup = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("div", {
        staticClass: "overlay",
        style: {
          "z-index": _vm.zIndex
        },
        on: {
          click: function($event) {
            return $event.target !== $event.currentTarget ? null : _vm.$emit("overlay-click");
          },
          touchmove: _vm.onScroll,
          mousewheel: _vm.onScroll
        }
      }, [ _c("div", {
        staticClass: "popup",
        class: {
          middle: _vm.middle
        },
        style: {
          "margin-top": _vm.marginTop + "px"
        }
      }, [ _vm._t("default") ], 2) ]);
    },
    staticRenderFns: []
  }, function(inject) {
    inject && inject("data-v-1ba53d01_0", {
      source: '.overlay[data-v-1ba53d01]{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center;background-color:rgba(0,0,0,.3)}.overlay[data-v-1ba53d01]:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.overlay .popup[data-v-1ba53d01]{display:inline-block;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;border:1px solid #247;padding:2px}.overlay .popup.middle[data-v-1ba53d01]{vertical-align:middle}',
      map: void 0,
      media: void 0
    });
  }, {
    name: "Popup",
    props: {
      zIndex: {
        type: Number,
        default: 10
      },
      middle: {
        type: Boolean,
        default: !1
      },
      marginTop: {
        type: Number,
        default: 0
      }
    },
    methods: {
      onScroll: function onScroll(evt) {
        var el = evt.target, _window$getComputedSt = window.getComputedStyle(el), overflow = _window$getComputedSt.overflow, overflowY = _window$getComputedSt.overflowY, overflowX = _window$getComputedSt.overflowX;
        (!/(auto|scroll)/.test(overflow + overflowX + overflowY) || 0 === el.scrollTop && evt.deltaY < 0 || Math.abs(el.scrollTop - (el.scrollHeight - el.clientHeight)) <= 1 && evt.deltaY > 0) && evt.preventDefault();
      }
    }
  }, "data-v-1ba53d01", !1, void 0, browser, void 0);
  var LinksPopup = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("popup", {
        attrs: {
          "z-index": _vm.zIndex,
          middle: !1,
          "margin-top": 100
        },
        on: {
          "overlay-click": function($event) {
            return _vm.$emit("close");
          }
        }
      }, [ _c("div", {
        staticClass: "popup-header"
      }, [ _c("h4", [ _vm._v("查看链接") ]), _c("button", {
        staticClass: "btn",
        on: {
          click: function($event) {
            return _vm.$emit("close");
          }
        }
      }, [ _vm._v("关闭") ]) ]), _c("div", {
        staticClass: "popup-body"
      }, [ _c("textarea", {
        directives: [ {
          name: "model",
          rawName: "v-model",
          value: _vm.content,
          expression: "content"
        } ],
        ref: "textarea",
        staticClass: "links-box",
        style: _vm.textStyle,
        attrs: {
          rows: "10",
          cols: "80"
        },
        domProps: {
          value: _vm.content
        },
        on: {
          input: function($event) {
            $event.target.composing || (_vm.content = $event.target.value);
          }
        }
      }) ]), _c("div", {
        staticClass: "popup-footer"
      }, [ _c("button", {
        staticClass: "btn",
        on: {
          click: _vm.resetContent
        }
      }, [ _vm._v("重置") ]), _c("button", {
        staticClass: "btn",
        on: {
          click: _vm.selectAll
        }
      }, [ _vm._v("全选") ]), _c("button", {
        staticClass: "btn",
        on: {
          click: _vm.copySelected
        }
      }, [ _vm._v("复制选中") ]), _c("button", {
        staticClass: "btn",
        on: {
          click: _vm.copyAll
        }
      }, [ _vm._v("复制全部") ]), _c("p", [ _vm._v("共 " + _vm._s(_vm.links.length) + " 条链接") ]) ]) ]);
    },
    staticRenderFns: []
  }, function(inject) {
    inject && inject("data-v-4105bcac_0", {
      source: ".btn[data-v-4105bcac]{padding:2px 5px;color:#247;background-color:#fff;border:1px solid #247;outline:0}.popup-header[data-v-4105bcac]{background-color:#247;padding:5px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.popup-header h4[data-v-4105bcac]{font-size:14px;text-align:left;font-weight:400;line-height:1.5;color:#fff;-ms-flex:1 1 0px;flex:1 1 0}.popup-body[data-v-4105bcac]{padding:5px;background-color:#fff}.popup-body .links-box[data-v-4105bcac]{background-color:#eef;background-image:none;border:1px solid #247;color:#333;padding:4px 8px;font-size:12px;line-height:1.5;overflow:auto;resize:none;cursor:text}.popup-footer[data-v-4105bcac]{padding:5px;background-color:#cdf;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.popup-footer .btn[data-v-4105bcac]:not(:first-child){margin-left:10px}.popup-footer p[data-v-4105bcac]{text-align:right;-ms-flex:1 1 0px;flex:1 1 0;margin:0}",
      map: void 0,
      media: void 0
    });
  }, {
    name: "LinksPopup",
    components: {
      Popup: Popup
    },
    props: {
      zIndex: {
        type: Number,
        default: 10
      },
      links: {
        type: Array,
        default: function _default() {
          return [];
        }
      },
      options: {
        type: Object,
        default: function _default() {
          return {
            separator: getDefaultLinebreak()
          };
        }
      }
    },
    data: function data() {
      return {
        content: ""
      };
    },
    created: function created() {
      this.resetContent();
    },
    watch: {
      links: function links() {
        this.resetContent();
      }
    },
    computed: {
      textStyle: function textStyle() {
        return [ "\n", "\r\n" ].indexOf(this.options.separator) > -1 && this.links.length > 1 ? {
          "white-space": "nowrap",
          "word-wrap": "normal"
        } : {
          "white-space": "pre-wrap",
          "word-wrap": "break-all"
        };
      }
    },
    methods: {
      resetContent: function resetContent() {
        this.content = this.links.join(this.options.separator);
      },
      copySelected: function copySelected() {
        var target = this.$refs.textarea;
        if (target) {
          var start = target.selectionStart, finish = target.selectionEnd;
          if (start < 0 || finish <= start) {
            this.$toast.display("所选内容为空!");
            return;
          }
          try {
            var text = this.content.substring(start, finish);
            GM_setClipboard(text, "{ type: 'text', mimetype: 'text/plain'}");
            this.$toast.display("复制成功");
          } catch (e) {
            this.$toast.display("复制失败");
          }
        } else {
          this.$toast.display("获取文本框失败");
        }
      },
      copyAll: function copyAll() {
        if (this.content) {
          try {
            GM_setClipboard(this.content, "{ type: 'text', mimetype: 'text/plain'}");
            this.$toast.display("复制成功");
          } catch (e) {
            this.$toast.display("复制失败");
          }
        } else {
          this.$toast.display("文本框内容为空");
        }
      },
      selectAll: function selectAll() {
        var target = this.$refs.textarea;
        target ? target.select() : this.$toast.display("获取文本框失败");
      }
    }
  }, "data-v-4105bcac", !1, void 0, browser, void 0), HeaderVM = Vue.extend(CheckboxHeader), ItemVM = Vue.extend(CheckboxItem), ToolBarVM = Vue.extend(ToolBar), LinksPopupVM = Vue.extend(LinksPopup);
  function mountListElement(el) {
    new Vue({
      data: function data() {
        return {
          header: null,
          all: [],
          selected: [],
          popupIndex: 10,
          toolbars: []
        };
      },
      mounted: function mounted() {
        this.$nextTick(function() {
          var tableContainer, table = this.$el;
          if (table.parentNode && ((tableContainer = table.parentNode.parentNode) && !(tableContainer.className.indexOf("table") < 0))) {
            if (table.tHead && table.tBodies) {
              table.tHead.rows && table.tHead.rows.length > 0 && this.insertHeaderToRow(table.tHead.rows[0]);
              for (var index = 0, i = 0, len = table.tBodies.length; i < len; i++) {
                for (var body = table.tBodies[i], j = 0, rowLen = body.rows.length; j < rowLen; j++) {
                  this.insertCheckBoxToRow(body.rows[j], index++);
                }
              }
            } else if (table.rows) {
              for (var _i = 0, _len = table.rows.length; _i < _len; _i++) {
                var row = table.rows[_i];
                0 === _i ? this.insertHeaderToRow(row) : this.insertCheckBoxToRow(row, _i - 1);
              }
            }
            this.initToolBars(tableContainer);
          }
        });
      },
      beforeDestroy: function beforeDestroy() {
        if (this.header) {
          this.header.$off("change");
          this.header = null;
        }
        this.all.forEach(function(item) {
          item.$off("change");
        });
        this.toolbars.forEach(function(t) {
          t.$off("copy");
          t.$off("show");
        });
        this.all.splice(0, this.all.length);
        this.selected.splice(0, this.selected.length);
        this.toolbars.splice(0, this.toolbars.length);
      },
      computed: {
        links: function links() {
          return this.selected.map(function(item) {
            return item.magnet;
          }).filter(function(m) {
            return !!m;
          });
        }
      },
      watch: {
        links: function links(val) {
          var isEmpty = !val || val.length <= 0;
          this.toolbars.forEach(function(t) {
            t.visible = !isEmpty;
          });
        }
      },
      methods: {
        initToolBars: function initToolBars(tableContainer) {
          var headerToolbar = new ToolBarVM({
            propsData: {
              position: "top"
            }
          }).$mount();
          headerToolbar.$on("copy", this.onCopyLinks);
          headerToolbar.$on("show", this.onShowLinks);
          var bottomToobar = new ToolBarVM({
            propsData: {
              position: "bottom"
            }
          }).$mount();
          bottomToobar.$on("copy", this.onCopyLinks);
          bottomToobar.$on("show", this.onShowLinks);
          tableContainer.insertBefore(headerToolbar.$el, tableContainer.firstChild);
          tableContainer.appendChild(bottomToobar.$el);
          this.toolbars.push(headerToolbar, bottomToobar);
        },
        insertHeaderToRow: function insertHeaderToRow(row) {
          var th = new HeaderVM().$mount();
          th.$on("change", this.onSelectAllChange);
          row.insertBefore(th.$el, row.cells[0]);
          this.header = th;
        },
        insertCheckBoxToRow: function insertCheckBoxToRow(row, index) {
          var linkDOM = row.querySelector(".arrow-magnet"), tdDOM = row.insertCell(0), td = new ItemVM({
            propsData: {
              index: index,
              magnet: linkDOM ? linkDOM.href : ""
            }
          }).$mount(tdDOM), _self = this;
          td.$on("change", function(checked) {
            _self.onItemSelectChange(td, checked);
          });
          this.all.push(td);
        },
        onSelectAllChange: function onSelectAllChange(checked) {
          this.all.forEach(function(item) {
            item.checked = checked;
          });
          checked ? this.selected = _toConsumableArray(this.all) : this.selected.splice(0, this.selected.length);
        },
        onItemSelectChange: function onItemSelectChange(item, checked) {
          var selectedIndex = this.selected.indexOf(item);
          checked && selectedIndex < 0 ? this.selected.push(item) : !checked && selectedIndex > -1 && this.selected.splice(selectedIndex, 1);
          this.header && (this.header.checked = this.all.length === this.selected.length);
        },
        onCopyLinks: function onCopyLinks(opts) {
          var links = magnetLinksWithOptions(this.links, opts);
          if (links.length > 0) {
            try {
              var content = links.join(opts.separator);
              GM_setClipboard(content, "{ type: 'text', mimetype: 'text/plain'}");
              this.$toast.display("复制成功!");
            } catch (e) {
              this.$toast.display("复制失败,请重试。");
            }
          }
        },
        onShowLinks: function onShowLinks(opts) {
          var links = magnetLinksWithOptions(this.links, opts);
          if (links.length > 0) {
            var popup = new LinksPopupVM({
              propsData: {
                zIndex: this.popupIndex++,
                links: links,
                options: opts
              }
            }).$mount();
            popup.$on("close", function() {
              popup.$off("close");
              try {
                popup.$el.remove();
              } catch (e) {
                document.body.removeChild(popup.$el);
              }
            });
            document.body.appendChild(popup.$el);
          }
        }
      }
    }).$mount(el);
  }
  var bytes_1 = bytes, format_1 = format, parse_1 = parse, formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g, formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/, map = {
    b: 1,
    kb: 1024,
    mb: 1 << 20,
    gb: 1 << 30,
    tb: Math.pow(1024, 4),
    pb: Math.pow(1024, 5)
  }, parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;
  function bytes(value, options) {
    return "string" == typeof value ? parse(value) : "number" == typeof value ? format(value, options) : null;
  }
  function format(value, options) {
    if (!Number.isFinite(value)) {
      return null;
    }
    var mag = Math.abs(value), thousandsSeparator = options && options.thousandsSeparator || "", unitSeparator = options && options.unitSeparator || "", decimalPlaces = options && void 0 !== options.decimalPlaces ? options.decimalPlaces : 2, fixedDecimals = Boolean(options && options.fixedDecimals), unit = options && options.unit || "";
    unit && map[unit.toLowerCase()] || (unit = mag >= map.pb ? "PB" : mag >= map.tb ? "TB" : mag >= map.gb ? "GB" : mag >= map.mb ? "MB" : mag >= map.kb ? "KB" : "B");
    var str = (value / map[unit.toLowerCase()]).toFixed(decimalPlaces);
    fixedDecimals || (str = str.replace(formatDecimalsRegExp, "$1"));
    thousandsSeparator && (str = str.replace(formatThousandsRegExp, thousandsSeparator));
    return str + unitSeparator + unit;
  }
  function parse(val) {
    if ("number" == typeof val && !isNaN(val)) {
      return val;
    }
    if ("string" != typeof val) {
      return null;
    }
    var floatValue, results = parseRegExp.exec(val), unit = "b";
    if (results) {
      floatValue = parseFloat(results[1]);
      unit = results[4].toLowerCase();
    } else {
      floatValue = parseInt(val, 10);
      unit = "b";
    }
    return Math.floor(map[unit] * floatValue);
  }
  bytes_1.format = format_1;
  bytes_1.parse = parse_1;
  var TreeItem = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("li", {
        staticClass: "tree-item",
        class: {
          collection: this.isFolder,
          last: this.isLast
        }
      }, [ _vm.isFolder ? _c("div", {
        staticClass: "hitarea",
        class: {
          "collapsable-hitarea": _vm.isOpen,
          "last-hitarea": _vm.isLast
        },
        on: {
          click: _vm.toggle
        }
      }) : _vm._e(), _c("div", {
        class: [ "title", _vm.icon ],
        on: {
          click: function($event) {
            _vm.isFolder && _vm.toggle();
          }
        }
      }, [ _c("h5", [ _vm._v(_vm._s(_vm.name)) ]), _c("span", {
        staticClass: "size"
      }, [ _vm._v(_vm._s(_vm.totalSize)) ]) ]), _vm.isFolder ? _c("ul", {
        directives: [ {
          name: "show",
          rawName: "v-show",
          value: _vm.isOpen,
          expression: "isOpen"
        } ]
      }, _vm._l(_vm.children, function(child, index) {
        return _c("tree-item", _vm._b({
          key: child.key,
          staticClass: "item",
          attrs: {
            "is-last": index === _vm.children.length - 1
          }
        }, "tree-item", child, !1));
      }), 1) : _vm._e() ]);
    },
    staticRenderFns: []
  }, function(inject) {
    inject && inject("data-v-6b1028e2_0", {
      source: 'li.tree-item[data-v-6b1028e2]{margin:0;padding:2px 0 2px 16px;background:url(data:image/gif;base64,R0lGODlhEADwBvABAICAgAAAACH5BAUAAAEALAAAAAAQAPAGQAL/jI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFhoeIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusp6ATDxKhEbMQvxehuAq1D7wOvg2wDMILxAvAuLLJtMu2zb3Pv8Gx08PVxdfH2svM3M7ewNDS4tTk1ubY6Nrt3N/t0e/j4eXz5/Xp9+v+6+D88v708PoD2B+Ajq64fwX8KACwc2LPjwoMKJDL0YS3ARQcYD/xsNdMyVDWNIjSM5lvR4EqQ6kStJtjT5EmVMlflY1nR5E2ZOmTtpGrT5E2dQnUN5FvUZEWhSoUuJNjX6FClFh1MhVpVYMStVrVa5Yt0KtmvYr2LLkj2r9Gpar2vHtjX7Fi1TtXPZ1nV7F25euU7p9rX7F29gvYP5QvV7GHBiwYsJNzYsVXFkxpMdV4b8MXNKzTM59/R8FHRU0Ygvxz29F3Vh1Y9Zm04Ne3Xs1rNfy75NG7ft3Lx3+yYtGThl4ZaJY96MvHPyz8tDNx/9vLRx19NrV9d9vXf239GDdx/+vXj448rLMzfvHD109dLHU3dvHT52+drpc2fvHT94/eL5k/8/D2B6Aa43YHv+vXdgfAnOt2B9Dd5XYH4R7jdhfxX+J2CGBGpo4IUIeqggiAyK6CCJEHIoIYoUqmghixhuCGOHLn44Y4g1jnhjiTmeGGOKPa74Y4tBvijjkDQaaSOSOCqpI5M8Fgmlj1ECOaWQVRIpZZZUamkll1huCWaXYX4pZplknnnklWl6ueaYbZr5JppJqjknm3W6eSececq5JJ192vknnoHqOSifTfp5KKCJCroooY0a+qSikTI6qaOVQrpdpvZp+iCnJnq6I6hOioropXGeuieqhar6KKumpgrrqrG2Ouurst5KK6625srrrr6SKimwlAprKbGYbopsp8knfrpsqM2O+mypxro6ba3V6nptr9n+Gm2w3Q77bbHhHqtsuczicksBADs=) 0 0 no-repeat}li.tree-item.collection[data-v-6b1028e2]{background-position:0 -176px}li.tree-item.last[data-v-6b1028e2]{background-position:0 -1766px}li.tree-item .hitarea[data-v-6b1028e2]{background:url(data:image/gif;base64,R0lGODlhYACFAPACAAAAAICAgCH5BAUAAAIALAAAAABgAIUAAAL/lI+py+0PBZjA0Yiz3qjyD4aaJ5amSZ7qyrbuGsSy/NZmsOD2/unS4eMJIz5ScIhk4CgTAe6ZjCKKQKl1ejBet0dDdzucicHkstl5Tqul37X7fWrDUfNkqlqPXCzNPOjOIeeXNVhoeAgmNoNY8iXICOEIGSI52SPBhAZliVHJqeH52ZkjCqoYU5pq9aja+sLqGqsCqwoo+2BLW7fXwOtqCyoKfEtcbFx3inqMl6BbSuW1zKwljcZUAeU8CY1Wza39GXqcDF5tfo6ero4xXN3OmdnbF/u+nGtef3y/zu+UbC7O2DeAhKJ5w3Qh27iC3aQNPKignCVy/SpavCgtnzGNWsU4IvK1AGStih5vlcSIMhZFiM0IRnTZ8uA1TQ2JBSx20yYpb/9S+vwJdNBJeiSJiewwL6griUohMW06aKXDnVNfssQiM5NCgVSX5bz1VZZUqGTLmj2LNu2tAgA7) -48px -47px no-repeat;height:16px;width:16px;margin-left:-16px;float:left;cursor:pointer}li.tree-item .hitarea.last-hitarea[data-v-6b1028e2]{background-color:#fff;background-position:-32px -69px}li.tree-item .hitarea.collapsable-hitarea[data-v-6b1028e2]{background-position:-16px -91px}li.tree-item .hitarea.collapsable-hitarea.last-hitarea[data-v-6b1028e2]{background-position:0 -113px}li.tree-item .title[data-v-6b1028e2]{padding-left:18px;line-height:16px;height:16px;position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;box-sizing:border-box;width:100%}li.tree-item .title h5[data-v-6b1028e2]{-ms-flex:1 1 0px;flex:1 1 0;font-weight:400;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}li.tree-item .title[data-v-6b1028e2]:before{position:absolute;left:0;top:0;content:"";display:block;width:16px;height:16px;background-color:#fff;background-repeat:no-repeat}li.tree-item .title.folder-close[data-v-6b1028e2]:before{background-image:url(data:image/gif;base64,R0lGODdhEAAOAPIHAK1zLeC6eP/insOHNP/////Sg59oJJdaHywAAAAAEAAOAEADM0i63AoiygnYkCWEwXkzYCg6RDeQyzWtB3MUcCy3aL1Ud33qDLRSDINsWDC4AMQYzUZKAAA7)}li.tree-item .title.folder-open[data-v-6b1028e2]:before{background-image:url(data:image/gif;base64,R0lGODlhEAAOAIIAAZdaH+C6eP/inq1zLf/////Sg59oJMOHNCwAAAAAEAAOAAIDN0i63P7vyAPXYBcewUsIk8RQFalsXKoCmDq8cEwMKa2mxWUUOe//GUDvB1wABsQiw8BsOitQQgIAOw==)}li.tree-item .title.text[data-v-6b1028e2]:before{background-image:url(data:image/gif;base64,R0lGODdhDwAOAPIHANS9fIy3oamMQX98XzmJdP////9tcGpsYiwAAAAADwAOAEADOlgl3KxQjWJMGefIKGi1UAdNUUQqYgQAKVoE8KQtZgHAAUFsYWm3rtKKxfH1jsbWybdclpqDqHSqSAAAOw==)}li.tree-item .title.video[data-v-6b1028e2]:before{background-image:url(https://share.dmhy.org/images/icon/mkv.gif)}li.tree-item .title.audio[data-v-6b1028e2]:before{background-image:url(https://share.dmhy.org/images/icon/mp3.gif)}li.tree-item .title.image[data-v-6b1028e2]:before{background-image:url(https://share.dmhy.org/images/icon/jpg.gif)}li.tree-item .title.archive[data-v-6b1028e2]:before{background-image:url(https://share.dmhy.org/images/icon/rar.gif)}li.tree-item .title.subtitle[data-v-6b1028e2]:before{background-image:url(https://share.dmhy.org/images/icon/txt.gif)}li.tree-item .title.unknown[data-v-6b1028e2]:before{background-image:url(https://share.dmhy.org/images/icon/unknown.gif)}li.tree-item .title .size[data-v-6b1028e2]{display:block;-ms-flex:0;flex:0;color:grey;white-space:nowrap}li.tree-item:nth-child(2n)>.title[data-v-6b1028e2]{background-color:#cdf}li.tree-item::nth-child(odd)>.title[data-v-6b1028e2]{background-color:#fff}li.tree-item ul[data-v-6b1028e2]{padding:0;margin:4px 0 0;list-style:none}',
      map: void 0,
      media: void 0
    });
  }, {
    name: "TreeItem",
    props: {
      key: {
        type: Number,
        default: -1
      },
      parentKey: {
        type: Number,
        default: -1
      },
      name: {
        type: String,
        default: ""
      },
      level: {
        type: Number,
        default: 1
      },
      size: {
        type: Number,
        default: 0
      },
      children: {
        type: Array,
        default: function _default() {
          return [];
        }
      },
      isLast: {
        type: Boolean,
        default: !1
      },
      expand: {
        type: Boolean,
        default: !1
      }
    },
    data: function data() {
      return {
        isOpen: this.expand
      };
    },
    computed: {
      isFolder: function isFolder() {
        return this.children && this.children.length > 0;
      },
      totalSize: function totalSize() {
        var sum;
        if (this.size > 0) {
          sum = this.size;
        } else {
          sum = this.sizeListWithItem({
            size: this.size,
            children: this.children
          }).reduce(function(a, b) {
            return a + b;
          }, 0);
        }
        return bytes_1(sum, {
          decimalPlaces: 2,
          unitSeparator: " "
        });
      },
      icon: function icon() {
        if (this.isFolder) {
          return this.isOpen ? "folder-open" : "folder-close";
        }
        switch (this.name.split(".").pop().toLowerCase()) {
         case "mp4":
         case "rmvb":
         case "avi":
         case "mkv":
         case "wmv":
         case "flv":
         case "ts":
          return "video";

         case "jpg":
         case "jpeg":
         case "png":
         case "gif":
         case "bmp":
         case "pdf":
         case "webp":
          return "image";

         case "rar":
         case "zip":
         case "7z":
         case "tar":
         case "gz":
         case "xz":
          return "archive";

         case "mp3":
         case "ogg":
         case "wma":
         case "wav":
         case "aac":
         case "flac":
         case "mka":
         case "cue":
          return "audio";

         case "txt":
         case "log":
         case "md":
          return "text";

         case "sub":
         case "idx":
         case "sst":
         case "srt":
         case "ssa":
         case "ass":
         case "tts":
          return "subtitle";

         default:
          return "unknown";
        }
      }
    },
    methods: {
      toggle: function toggle() {
        this.isOpen = !this.isOpen;
      },
      sizeListWithItem: function sizeListWithItem(item) {
        var children = item.children;
        if (!children || children.length <= 0) {
          return item.size ? [ item.size ] : [];
        }
        for (var list = [], i = 0, len = children.length; i < len; i++) {
          var cList = this.sizeListWithItem(children[i]);
          list.push.apply(list, _toConsumableArray(cList));
        }
        return list;
      }
    }
  }, "data-v-6b1028e2", !1, void 0, browser, void 0);
  var Tree = normalizeComponent_1({
    render: function() {
      var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h;
      return _c("ul", {
        staticStyle: {
          padding: "0",
          margin: "0",
          "list-style": "none"
        }
      }, _vm._l(_vm.folders, function(folder, index) {
        return _c("tree-item", _vm._b({
          key: folder.key,
          attrs: {
            "is-last": index === _vm.folders.length - 1,
            expand: !0
          }
        }, "tree-item", folder, !1));
      }), 1);
    },
    staticRenderFns: []
  }, void 0, {
    name: "Tree",
    components: {
      TreeItem: TreeItem
    },
    props: {
      folders: {
        type: Array,
        default: function _default() {
          return [];
        }
      }
    }
  }, void 0, !1, void 0, void 0, void 0), TreeVM = Vue.extend(Tree);
  function folderTreeFromNodeList(fileNodeList) {
    for (var map = {}, list = [], i = 0, len = fileNodeList.length; i < len; i++) {
      var fileNode = fileNodeList[i], fileSizeNode = fileNode.querySelector(".bt_file_size"), nodeText = fileNode.innerText, fileSizeStr = void 0;
      fileSizeNode && (fileSizeStr = fileSizeNode.innerText.trim());
      var filePath = void 0, fileBytes = 0;
      if (fileSizeStr) {
        var bytes = fileSizeStr.replace(/(\d+)bytes?/i, "$1");
        fileBytes = isNaN(+bytes) ? bytes_1(fileSizeStr) : +bytes;
        filePath = nodeText.substring(0, nodeText.indexOf(fileSizeStr)).trim();
      } else {
        filePath = nodeText.trim();
      }
      filePath || (filePath = "".concat(i + 1));
      for (var slice = filePath.split("/"), parentKey = 0, j = 0, sLen = slice.length; j < sLen; j++) {
        var fileName = slice[j], level = j + 1, key = hashCode(filePath.substring(0, filePath.indexOf(fileName) + fileName.length));
        if (!map[key]) {
          var file = {
            key: key,
            parentKey: parentKey,
            name: fileName,
            level: level,
            size: level === sLen ? fileBytes : 0,
            children: level === sLen ? null : []
          };
          map[key] = file;
          list.push(file);
        }
        parentKey = key;
      }
    }
    for (var root = [], _i = 0, _len = list.length; _i < _len; _i++) {
      var _file = list[_i];
      _file.parentKey ? map[_file.parentKey].children.push(_file) : root.push(_file);
    }
    return root;
  }
  function mountFileListElement(el, title) {
    var fileListNode = el.querySelector("ul"), fileItemNodeList = el.querySelectorAll("ul > li");
    if (fileListNode && !(fileItemNodeList.length <= 0)) {
      var folders = folderTreeFromNodeList(fileItemNodeList);
      if (!(folders.length <= 0)) {
        new TreeVM({
          propsData: {
            folders: (folders.length > 1 || folders[0].size) && title ? [ {
              key: 0,
              parentKey: -1,
              name: title,
              children: folders
            } ] : folders
          }
        }).$mount(fileListNode);
      }
    }
  }
  var toast = new (Vue.extend(Toast))().$mount();
  document.body.appendChild(toast.$el);
  Object.defineProperty(Vue.prototype, "$toast", {
    value: toast
  });
  var topicListEl = document.querySelector("#topic_list");
  topicListEl && mountListElement(topicListEl);
  var fileListEl = document.querySelector("#resource-tabs .file_list");
  if (fileListEl) {
    var title = "", titleEl = document.querySelector(".topic-title h3");
    titleEl && (title = titleEl.innerText.trim());
    mountFileListElement(fileListEl, title);
  }
}(Vue);