(内测已在试用的代码丢失不在维护)刹客网络网盘助手 shakenetwork Network disk assistant was reported 2021-06-09 by msoop as an unauthorized copy of 网盘链接检查.

网盘链接检查 does not specify a license, which means distributing copies is not allowed unless explicit permission is given.

Script License Created Updated
Reported (内测已在试用的代码丢失不在维护)刹客网络网盘助手 shakenetwork Network disk assistant N/A 2020-07-14 17:24:06 UTC 2020-08-13 09:04:55 UTC
Original 网盘链接检查 N/A 2019-12-26 05:38:51 UTC 2020-07-22 11:57:47 UTC
  • // ==UserScript==
  • -// @name 网盘链接检查
  • -// @namespace http://go.newday.me/s/link-home
  • -// @version 0.2.2
  • -// @icon http://cdn.newday.me/addon/link/favicon.ico
  • -// @author 哩呵
  • -// @description 自动识别并标记百度云、蓝奏云、腾讯微云和天翼云盘的链接状态
  • +// @icon https://img.tujidu.com/image/5e7ba0d6b0062.jpg
  • +// @name (内测已在试用的代码丢失不在维护)刹客网络网盘助手 shakenetwork Network disk assistant
  • +// @namespace https://mp.weixin.qq.com/s/jif5WcnbS2lsQ3ufeikxmg
  • +// @version 0.1.1 20200813
  • +// @description 自动识别并标记百度云、蓝奏云、腾讯微云和天翼云盘的链接状态,网盘密码自动输入万能钥匙,百度网盘生成并展示下载链接,百度网盘分享时自定义提取码
  • +// @author 由刹客网络科技提供
  • // @match *://**/*
  • // @connect www.lanzous.com
  • // @connect pan.baidu.com
  • // @grant GM_openInTab
  • // @grant GM_notification
  • // @grant GM_xmlhttpRequest
  • -// @noframes
  • +// @match *://pan.baidu.com/*
  • +// @match *://yun.baidu.com/*
  • +// @match *://*.weiyun.com/*
  • +// @match *://*.lanzous.com/*
  • +// @match *://*.lanzoux.com/*
  • +// @match *://cloud.189.cn/*
  • +// @match *://*.newday.me/*
  • +// @match *://*.likestyle.cn/*
  • +// @connect newday.me
  • +// @connect likestyle.cn
  • +// @require https://cdn.staticfile.org/jquery/3.5.0/jquery.min.js
  • +// @require https://cdn.staticfile.org/dompurify/2.0.10/purify.min.js
  • +// @require https://cdn.staticfile.org/snap.svg/0.5.1/snap.svg-min.js
  • // ==/UserScript==
  • +
  • (function () {
  • 'use strict';
  • option.error && option.error(result.error);
  • }
  • };
  • -
  • - // 提交数据
  • if (option.data instanceof Object) {
  • if (option.data instanceof FormData) {
  • details.data = option.data;
  • details.data = formData;
  • }
  • }
  • -
  • - // 自定义头
  • if (option.headers) {
  • details.headers = option.headers;
  • }
  • - // 超时
  • if (option.timeout) {
  • details.timeout = option.timeout;
  • }
  • if (response.indexOf("输入提取码") > 0) {
  • state = 2;
  • }
  • - else if (response.indexOf("页面不存在了") > 0 || response.indexOf("来晚了") > 0) {
  • + else if (response.indexOf("页面不存在了") > 0) {
  • state = -1;
  • }
  • else if (response.indexOf("可能的原因") > 0 || response.indexOf("分享的文件已经被取消了") > 0 || response.indexOf("分享内容可能因为涉及侵权") > 0) {
  • url: url,
  • success: function (response) {
  • var state = 1;
  • - if (response.indexOf("链接已删除") > 0 || response.indexOf("违反相关法规") > 0) {
  • + if (response.indexOf("链接已删除") > 0) {
  • state = -1;
  • }
  • else if (response.indexOf('"share_key":null') > 0) {
  • url: url,
  • success: function (response) {
  • var state = 1;
  • - if (response.indexOf("页面地址有误") > 0 || response.indexOf("页面不存在") > 0 || response.indexOf("此外链不存在") > 0) {
  • + if (response.indexOf("页面地址有误") > 0 || response.indexOf("页面不存在") > 0) {
  • state = -1;
  • }
  • else if (response.indexOf("私密分享") > 0) {
  • return obj;
  • });
  • -
  • - /** app **/
  • container.define("app_check_url", ["router", "constant", "config", "option", "checkManage", "findAndReplaceDOMText", "$"], function (router, constant, config, option, checkManage, findAndReplaceDOMText, $) {
  • var obj = {
  • index: 0,
  • };
  • obj.runMatch = function () {
  • - // 百度网盘补全链接
  • if (option.isOptionActive(option.constants.BAIDU_COMPLETE)) {
  • findAndReplaceDOMText(document.body, {
  • find: /([ ])(\/?s\/1[a-zA-Z0-9_\-]{5,22})/gi,
  • }
  • });
  • }
  • -
  • - // 天翼云盘补全链接
  • if (option.isOptionActive(option.constants.TY189_COMPLETE)) {
  • findAndReplaceDOMText(document.body, {
  • find: /([ ])(\/?t\/[a-zA-Z0-9_\-]{8,14})/gi,
  • }
  • });
  • }
  • -
  • - // 百度网盘补SPAN
  • obj.replaceTextAsLink(/(?:https?:\/\/)?(yun|pan)\.baidu\.com\/s\/([\w\-]{4,25})\b/gi, constant.sources.BAIDU, function (match) {
  • return match[2].slice(1);
  • });
  • -
  • - // 蓝奏云补SPAN
  • obj.replaceTextAsLink(/(?:https?:\/\/)?www\.lanzous\.com\/([a-zA-Z0-9_\-]{5,22})\b/gi, constant.sources.LANZOUS, function (match) {
  • return match[1];
  • });
  • -
  • - // 腾讯微云补SPAN
  • obj.replaceTextAsLink(/(?:https?:\/\/)?share\.weiyun\.com\/([a-zA-Z0-9_\-]{5,22})\b/gi, constant.sources.WEIYUN, function (match) {
  • return match[1];
  • });
  • -
  • - // 天翼云盘补SPAN
  • obj.replaceTextAsLink(/(?:https?:\/\/)?cloud\.189\.cn\/t\/([a-zA-Z0-9_\-]{8,14})\b/gi, constant.sources.TY189, function (match) {
  • return match[1];
  • });
  • -
  • - // 补超链接ATTR
  • - $("a:not([one-link-mark])").each(function () {
  • + $("a:not(.one-pan-link-mark)").each(function () {
  • var $this = $(this);
  • - $this.attr("one-link-mark", "yes");
  • + $this.addClass("one-pan-link-mark");
  • var match, oneId, oneSource;
  • var href = $this.attr("href");
  • $this.wrapInner(node);
  • }
  • });
  • -
  • - // 检查链接状态
  • - $(".one-pan-tip:not([one-tip-mark])").each(function () {
  • + $(".one-pan-tip:not(.one-pan-tip-mark)").each(function () {
  • var $this = $(this);
  • - $this.attr("one-tip-mark", "yes");
  • + $this.addClass("one-pan-tip-mark");
  • var shareSource = $this.attr("one-source");
  • var shareId = $this.attr("one-id");
  • var parentNode = this.parentNode;
  • if (parentNode.nodeName != "A") {
  • - // 转超链接
  • if (obj.isTransEnable(shareSource)) {
  • $this.wrap('<a href="' + this.textContent + '" target="_blank"></a>');
  • }
  • }
  • });
  • + container.use(["gm", "core", "app"], function (gm, core, app) {
  • + gm.ready(function () {
  • + core.ready(app.run);
  • + });
  • + });
  • +})();
  • +(function () {
  • + 'use strict';
  • +
  • + var manifest = {
  • + "name": "wpzs",
  • + "urls": {},
  • + "apis": {
  • + "version": "https://api.newday.me/share/disk/version",
  • + "origin": "https://api.newday.me/share/disk/origin",
  • + "query": "https://api.newday.me/share/disk/query",
  • + "store": "https://api.newday.me/share/disk/store",
  • + "lists": "https://api.newday.me/share/disk/lists",
  • + "delete": "https://api.newday.me/share/disk/delete"
  • + },
  • + "logger_level": 3,
  • + "options_page": "http://go.newday.me/s/pan-option"
  • + };
  • +
  • + var container = (function () {
  • + var obj = {
  • + defines: {},
  • + modules: {}
  • + };
  • +
  • + obj.define = function (name, requires, callback) {
  • + name = obj.processName(name);
  • + obj.defines[name] = {
  • + requires: requires,
  • + callback: callback
  • + };
  • + };
  • +
  • + obj.require = function (name, cache) {
  • + if (typeof cache == "undefined") {
  • + cache = true;
  • + }
  • +
  • + name = obj.processName(name);
  • + if (cache && obj.modules.hasOwnProperty(name)) {
  • + return obj.modules[name];
  • + } else if (obj.defines.hasOwnProperty(name)) {
  • + var requires = obj.defines[name].requires;
  • + var callback = obj.defines[name].callback;
  • +
  • + var module = obj.use(requires, callback);
  • + cache && obj.register(name, module);
  • + return module;
  • + }
  • + };
  • +
  • + obj.use = function (requires, callback) {
  • + var module = {
  • + exports: undefined
  • + };
  • + var params = obj.buildParams(requires, module);
  • + var result = callback.apply(this, params);
  • + if (typeof result != "undefined") {
  • + return result;
  • + } else {
  • + return module.exports;
  • + }
  • + };
  • +
  • + obj.register = function (name, module) {
  • + name = obj.processName(name);
  • + obj.modules[name] = module;
  • + };
  • +
  • + obj.buildParams = function (requires, module) {
  • + var params = [];
  • + requires.forEach(function (name) {
  • + params.push(obj.require(name));
  • + });
  • + params.push(obj.require);
  • + params.push(module.exports);
  • + params.push(module);
  • + return params;
  • + };
  • +
  • + obj.processName = function (name) {
  • + return name.toLowerCase();
  • + };
  • +
  • + return {
  • + define: obj.define,
  • + use: obj.use,
  • + register: obj.register,
  • + modules: obj.modules
  • + };
  • + })();
  • +
  • + container.define("gm", [], function () {
  • + var obj = {};
  • +
  • + obj.ready = function (callback) {
  • + if (typeof GM_getValue != "undefined") {
  • + callback && callback();
  • + }
  • + else {
  • + setTimeout(function () {
  • + obj.ready(callback);
  • + }, 100);
  • + }
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + /** common **/
  • + container.define("gmDao", [], function () {
  • + var obj = {
  • + items: {}
  • + };
  • +
  • + obj.get = function (name) {
  • + return GM_getValue(name);
  • + };
  • +
  • + obj.getBatch = function (names) {
  • + var items = {};
  • + names.forEach(function (name) {
  • + items[name] = obj.get(name);
  • + });
  • + return items;
  • + };
  • +
  • + obj.getAll = function () {
  • + return obj.getBatch(GM_listValues());
  • + };
  • +
  • + obj.set = function (name, item) {
  • + GM_setValue(name, item);
  • + };
  • +
  • + obj.setBatch = function (items) {
  • + for (var name in items) {
  • + obj.set(name, items[name]);
  • + }
  • + };
  • +
  • + obj.setAll = function (items) {
  • + var names = GM_listValues();
  • + names.forEach(function (name) {
  • + if (!items.hasOwnProperty(name)) {
  • + obj.remove(name);
  • + }
  • + });
  • + obj.setBatch(items);
  • + };
  • +
  • + obj.remove = function (name) {
  • + GM_deleteValue(name);
  • + };
  • +
  • + obj.removeBatch = function (names) {
  • + names.forEach(function (name) {
  • + obj.remove(name);
  • + });
  • + };
  • +
  • + obj.removeAll = function () {
  • + obj.removeBatch(GM_listValues());
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("ScopeDao", [], function () {
  • + return function (dao, scope) {
  • + var obj = {
  • + items: {}
  • + };
  • +
  • + obj.get = function (name) {
  • + return obj.items[name];
  • + };
  • +
  • + obj.getBatch = function (names) {
  • + var items = {};
  • + names.forEach(function (name) {
  • + if (obj.items.hasOwnProperty(name)) {
  • + items[name] = obj.items[name];
  • + }
  • + });
  • + return items;
  • + };
  • +
  • + obj.getAll = function () {
  • + return obj.items;
  • + };
  • +
  • + obj.set = function (name, item) {
  • + obj.items[name] = item;
  • +
  • + obj.sync();
  • + };
  • +
  • + obj.setBatch = function (items) {
  • + obj.items = Object.assign(obj.items, items);
  • +
  • + obj.sync();
  • + };
  • +
  • + obj.setAll = function (items) {
  • + obj.items = Object.assign({}, items);
  • +
  • + obj.sync();
  • + };
  • +
  • + obj.remove = function (name) {
  • + delete obj.items[name];
  • +
  • + obj.sync();
  • + };
  • +
  • + obj.removeBatch = function (names) {
  • + names.forEach(function (name) {
  • + delete obj.items[name];
  • + });
  • +
  • + obj.sync();
  • + };
  • +
  • + obj.removeAll = function () {
  • + obj.items = {};
  • +
  • + obj.getDao().remove(obj.getScope());
  • + };
  • +
  • + obj.init = function () {
  • + var items = obj.getDao().get(obj.getScope());
  • + if (items instanceof Object) {
  • + obj.items = items;
  • + }
  • + };
  • +
  • + obj.sync = function () {
  • + obj.getDao().set(obj.getScope(), obj.items);
  • + };
  • +
  • + obj.getDao = function () {
  • + return dao;
  • + };
  • +
  • + obj.getScope = function () {
  • + return scope;
  • + };
  • +
  • + return obj.init(), obj;
  • + };
  • + });
  • +
  • + container.define("config", ["factory"], function (factory) {
  • + var obj = {};
  • +
  • + obj.getConfig = function (name) {
  • + return obj.getDao().get(name);
  • + };
  • +
  • + obj.setConfig = function (name, value) {
  • + obj.getDao().set(name, value);
  • + };
  • +
  • + obj.getAll = function () {
  • + return obj.getDao().getAll();
  • + };
  • +
  • + obj.getDao = function () {
  • + return factory.getConfigDao();
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("storage", ["factory"], function (factory) {
  • + var obj = {};
  • +
  • + obj.getValue = function (name) {
  • + return obj.getDao().get(name);
  • + };
  • +
  • + obj.setValue = function (name, value) {
  • + obj.getDao().set(name, value);
  • + };
  • +
  • + obj.getAll = function () {
  • + return obj.getDao().getAll();
  • + };
  • +
  • + obj.getDao = function () {
  • + return factory.getStorageDao();
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("option", ["config", "constant"], function (config, constant) {
  • + var obj = {
  • + name: "option",
  • + constant: constant.option
  • + };
  • +
  • + obj.isOptionActive = function (item) {
  • + var name = item.name;
  • + var option = obj.getOption();
  • + return option.indexOf(name) >= 0 ? true : false;
  • + };
  • +
  • + obj.setOptionActive = function (item) {
  • + var name = item.name;
  • + var option = obj.getOption();
  • + if (option.indexOf(name) < 0) {
  • + option.push(name);
  • + obj.setOption(option);
  • + }
  • + };
  • +
  • + obj.setOptionUnActive = function (item) {
  • + var name = item.name;
  • + var option = obj.getOption();
  • + var index = option.indexOf(name);
  • + if (index >= 0) {
  • + delete option[index];
  • + obj.setOption(option);
  • + }
  • + };
  • +
  • + obj.getOption = function () {
  • + var option = [];
  • + var optionList = obj.getOptionList();
  • + Object.values(obj.constant).forEach(function (item) {
  • + var name = item.name;
  • + if (optionList.hasOwnProperty(name)) {
  • + if (optionList[name] != "no") {
  • + option.push(name);
  • + }
  • + }
  • + else if (item.value != "no") {
  • + option.push(name);
  • + }
  • + });
  • + return option;
  • + };
  • +
  • + obj.setOption = function (option) {
  • + var optionList = {};
  • + Object.values(obj.constant).forEach(function (item) {
  • + var name = item.name;
  • + if (option.indexOf(name) >= 0) {
  • + optionList[name] = "yes";
  • + } else {
  • + optionList[name] = "no";
  • + }
  • + });
  • + obj.setOptionList(optionList);
  • + };
  • +
  • + obj.getOptionList = function () {
  • + var optionList = config.getConfig(obj.name);
  • + return optionList ? optionList : {};
  • + };
  • +
  • + obj.setOptionList = function (optionList) {
  • + config.setConfig(obj.name, optionList);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("manifest", [], function () {
  • + var obj = {
  • + manifest: manifest
  • + };
  • +
  • + obj.getItem = function (name) {
  • + return obj.manifest[name];
  • + };
  • +
  • + obj.getManifest = function () {
  • + return obj.manifest;
  • + };
  • +
  • + obj.getName = function () {
  • + return obj.getItem("name");
  • + };
  • +
  • + obj.getAppName = function () {
  • + return obj.getItem("app_name");
  • + };
  • +
  • + obj.getUrl = function (name) {
  • + var urls = obj.getItem("urls");
  • + (urls instanceof Object) || (urls = {});
  • + return urls[name];
  • + };
  • +
  • + obj.getApi = function (name) {
  • + var apis = obj.getItem("apis");
  • + (apis instanceof Object) || (apis = {});
  • + return apis[name];
  • + };
  • +
  • + obj.getOptionsPage = function () {
  • + if (GM_info.script.optionUrl) {
  • + return GM_info.script.optionUrl;
  • + }
  • + else {
  • + return obj.getItem("options_page");
  • + }
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("env", ["config", "manifest"], function (config, manifest) {
  • + var obj = {
  • + modes: {
  • + ADDON: "addon",
  • + SCRIPT: "script"
  • + },
  • + browsers: {
  • + FIREFOX: "firefox",
  • + EDG: "edg",
  • + EDGE: "edge",
  • + BAIDU: "baidu",
  • + LIEBAO: "liebao",
  • + UC: "uc",
  • + QQ: "qq",
  • + SOGOU: "sogou",
  • + OPERA: "opera",
  • + MAXTHON: "maxthon",
  • + IE2345: "2345",
  • + SE360: "360",
  • + CHROME: "chrome",
  • + SAFIRI: "safari",
  • + OTHER: "other"
  • + }
  • + };
  • +
  • + obj.getName = function () {
  • + return manifest.getName();
  • + };
  • +
  • + obj.getMode = function () {
  • + if (GM_info.mode) {
  • + return GM_info.mode;
  • + }
  • + else {
  • + return obj.modes.SCRIPT;
  • + }
  • + };
  • +
  • + obj.getAid = function () {
  • + if (GM_info.scriptHandler) {
  • + return GM_info.scriptHandler.toLowerCase();
  • + }
  • + else {
  • + return "unknown";
  • + }
  • + };
  • +
  • + obj.getUid = function () {
  • + var uid = config.getConfig("uid");
  • + if (!uid) {
  • + uid = obj.randString(32);
  • + config.setConfig("uid", uid);
  • + }
  • + return uid;
  • + };
  • +
  • + obj.getBrowser = function () {
  • + if (!obj._browser) {
  • + obj._browser = obj.matchBrowserType(navigator.userAgent);
  • + }
  • + return obj._browser;
  • + };
  • +
  • + obj.getVersion = function () {
  • + return GM_info.script.version;
  • + };
  • +
  • + obj.getEdition = function () {
  • + return GM_info.version;
  • + };
  • +
  • + obj.getInfo = function () {
  • + return {
  • + mode: obj.getMode(),
  • + aid: obj.getAid(),
  • + uid: obj.getUid(),
  • + browser: obj.getBrowser(),
  • + version: obj.getVersion(),
  • + edition: obj.getEdition()
  • + };
  • + };
  • +
  • + obj.matchBrowserType = function (userAgent) {
  • + var browser = obj.browsers.OTHER;
  • + userAgent = userAgent.toLowerCase();
  • + if (userAgent.match(/firefox/) != null) {
  • + browser = obj.browsers.FIREFOX;
  • + } else if (userAgent.match(/edge/) != null) {
  • + browser = obj.browsers.EDGE;
  • + } else if (userAgent.match(/edg/) != null) {
  • + browser = obj.browsers.EDG;
  • + } else if (userAgent.match(/bidubrowser/) != null) {
  • + browser = obj.browsers.BAIDU;
  • + } else if (userAgent.match(/lbbrowser/) != null) {
  • + browser = obj.browsers.LIEBAO;
  • + } else if (userAgent.match(/ubrowser/) != null) {
  • + browser = obj.browsers.UC;
  • + } else if (userAgent.match(/qqbrowse/) != null) {
  • + browser = obj.browsers.QQ;
  • + } else if (userAgent.match(/metasr/) != null) {
  • + browser = obj.browsers.SOGOU;
  • + } else if (userAgent.match(/opr/) != null) {
  • + browser = obj.browsers.OPERA;
  • + } else if (userAgent.match(/maxthon/) != null) {
  • + browser = obj.browsers.MAXTHON;
  • + } else if (userAgent.match(/2345explorer/) != null) {
  • + browser = obj.browsers.IE2345;
  • + } else if (userAgent.match(/chrome/) != null) {
  • + if (navigator.mimeTypes.length > 10) {
  • + browser = obj.browsers.SE360;
  • + } else {
  • + browser = obj.browsers.CHROME;
  • + }
  • + } else if (userAgent.match(/safari/) != null) {
  • + browser = obj.browsers.SAFIRI;
  • + }
  • + return browser;
  • + };
  • +
  • + obj.randString = function (length) {
  • + var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
  • + var text = "";
  • + for (var i = 0; i < length; i++) {
  • + text += possible.charAt(Math.floor(Math.random() * possible.length));
  • + }
  • + return text;
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("http", [], function () {
  • + var obj = {};
  • +
  • + obj.ajax = function (option) {
  • + var details = {
  • + method: option.type,
  • + url: option.url,
  • + responseType: option.dataType,
  • + onload: function (result) {
  • + if (!result.status || parseInt(result.status / 100) == 2) {
  • + option.success && option.success(result.response);
  • + }
  • + else {
  • + option.error && option.error("");
  • + }
  • + },
  • + onerror: function (result) {
  • + option.error && option.error(result.error);
  • + }
  • + };
  • +
  • + // 提交数据
  • + if (option.data instanceof Object) {
  • + if (option.data instanceof FormData) {
  • + details.data = option.data;
  • + }
  • + else {
  • + var formData = new FormData();
  • + for (var i in option.data) {
  • + formData.append(i, option.data[i]);
  • + }
  • + details.data = formData;
  • + }
  • + }
  • +
  • + // 自定义头
  • + if (option.headers) {
  • + details.headers = option.headers;
  • + }
  • +
  • + // 超时
  • + if (option.timeout) {
  • + details.timeout = option.timeout;
  • + }
  • +
  • + GM_xmlhttpRequest(details);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("router", [], function () {
  • + var obj = {};
  • +
  • + obj.getUrl = function () {
  • + return location.href;
  • + };
  • +
  • + obj.goUrl = function (url) {
  • + location.href = url;
  • + };
  • +
  • + obj.openUrl = function (url) {
  • + window.open(url);
  • + };
  • +
  • + obj.openTab = function (url, active) {
  • + GM_openInTab(url, !active);
  • + };
  • +
  • + obj.jumpLink = function (jumpUrl, jumpMode) {
  • + switch (jumpMode) {
  • + case 9:
  • + // self
  • + obj.goUrl(jumpUrl);
  • + break;
  • + case 6:
  • + // new
  • + obj.openUrl(jumpUrl);
  • + break;
  • + case 3:
  • + // new & not active
  • + obj.openTab(jumpUrl, false);
  • + break;
  • + case 1:
  • + // new & active
  • + obj.openTab(jumpUrl, true);
  • + break;
  • + }
  • + };
  • +
  • + obj.getUrlParam = function (name) {
  • + var param = obj.parseUrlParam(obj.getUrl());
  • + if (name) {
  • + return param.hasOwnProperty(name) ? param[name] : null;
  • + }
  • + else {
  • + return param;
  • + }
  • + };
  • +
  • + obj.parseUrlParam = function (url) {
  • + if (url.indexOf("?")) {
  • + url = url.split("?")[1];
  • + }
  • + var reg = /([^=&\s]+)[=\s]*([^=&\s]*)/g;
  • + var obj = {};
  • + while (reg.exec(url)) {
  • + obj[RegExp.$1] = RegExp.$2;
  • + }
  • + return obj;
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("logger", ["env", "manifest"], function (env, manifest) {
  • + var obj = {
  • + constant: {
  • + DEBUG: 0,
  • + INFO: 1,
  • + WARN: 2,
  • + ERROR: 3,
  • + NONE: 4
  • + }
  • + };
  • +
  • + obj.debug = function (message) {
  • + obj.log(message, obj.constant.DEBUG);
  • + };
  • +
  • + obj.info = function (message) {
  • + obj.log(message, obj.constant.INFO);
  • + };
  • +
  • + obj.warn = function (message) {
  • + obj.log(message, obj.constant.WARN);
  • + };
  • +
  • + obj.error = function (message) {
  • + obj.log(message, obj.constant.ERROR);
  • + };
  • +
  • + obj.log = function (message, level) {
  • + if (level < manifest.getItem("logger_level")) {
  • + return false;
  • + }
  • +
  • + console.group("[" + env.getName() + "]" + env.getMode());
  • + console.log(message);
  • + console.groupEnd();
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("meta", ["env", "$"], function (env, $) {
  • + var obj = {};
  • +
  • + obj.existMeta = function (name) {
  • + name = obj.processName(name);
  • + if ($("meta[name='" + name + "']").length) {
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.appendMeta = function (name, content) {
  • + name = obj.processName(name);
  • + content || (content = "on");
  • + $('<meta name="' + name + '" content="on">').appendTo($("head"));
  • + };
  • +
  • + obj.processName = function (name) {
  • + return env.getName() + "::" + name;
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("unsafeWindow", [], function () {
  • + if (typeof unsafeWindow == "undefined") {
  • + return window;
  • + }
  • + else {
  • + return unsafeWindow;
  • + }
  • + });
  • +
  • + container.define("svgCrypt", ["Snap"], function (Snap) {
  • + var obj = {};
  • +
  • + obj.getReqData = function () {
  • + var reqTime = Math.round(new Date().getTime() / 1000);
  • + var reqPoint = obj.getStrPoint("timestamp:" + reqTime);
  • + return {
  • + req_time: reqTime,
  • + req_point: reqPoint
  • + };
  • + };
  • +
  • + obj.getStrPoint = function (str) {
  • + if (str.length < 2) {
  • + return "0:0";
  • + }
  • +
  • + var path = "";
  • + var current, last = str[0].charCodeAt();
  • + var sum = last;
  • + for (var i = 1; i < str.length; i++) {
  • + current = str[i].charCodeAt();
  • + if (i == 1) {
  • + path = path + "M";
  • + } else {
  • + path = path + " L";
  • + }
  • + path = path + current + " " + last;
  • + last = current;
  • + sum = sum + current;
  • + }
  • + path = path + " Z";
  • + var index = sum % str.length;
  • + var data = Snap.path.getPointAtLength(path, str[index].charCodeAt());
  • + return data.m.x + ":" + data.n.y;
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("calendar", [], function () {
  • + var obj = {};
  • +
  • + obj.getTime = function () {
  • + return (new Date()).getTime();
  • + };
  • +
  • + obj.formatTime = function (format, timestamp) {
  • + format || (format = "Y-m-d H:i:s");
  • + timestamp || (timestamp = obj.getTime());
  • + var date = new Date(timestamp);
  • + var year = 1900 + date.getYear();
  • + var month = "0" + (date.getMonth() + 1);
  • + var day = "0" + date.getDate();
  • + var hour = "0" + date.getHours();
  • + var minute = "0" + date.getMinutes();
  • + var second = "0" + date.getSeconds();
  • + var vars = {
  • + "Y": year,
  • + "m": month.substring(month.length - 2, month.length),
  • + "d": day.substring(day.length - 2, day.length),
  • + "H": hour.substring(hour.length - 2, hour.length),
  • + "i": minute.substring(minute.length - 2, minute.length),
  • + "s": second.substring(second.length - 2, second.length)
  • + };
  • + return obj.replaceVars(vars, format);
  • + };
  • +
  • + obj.replaceVars = function (vars, value) {
  • + Object.keys(vars).forEach(function (key) {
  • + value = value.replace(key, vars[key]);
  • + });
  • + return value;
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("oneData", ["env", "http"], function (env, http) {
  • + var obj = {};
  • +
  • + obj.requestOneApi = function (url, data, callback) {
  • + http.ajax({
  • + type: "post",
  • + url: url,
  • + dataType: "json",
  • + data: Object.assign(env.getInfo(), data),
  • + success: function (response) {
  • + callback && callback(response);
  • + },
  • + error: function () {
  • + callback && callback("");
  • + }
  • + });
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("$extend", ["$", "DOMPurify", "logger"], function ($, DOMPurify, logger) {
  • + var obj = {};
  • +
  • + obj.init = function () {
  • + if (DOMPurify && DOMPurify instanceof Function) {
  • + var domPurify = DOMPurify(window);
  • + $.fn.safeHtml = function (html) {
  • + try {
  • + this.html(domPurify.sanitize(html));
  • + }
  • + catch (err) {
  • + logger.error(err);
  • + }
  • + };
  • + }
  • + else {
  • + $.fn.safeHtml = function (html) {
  • + this.html(html);
  • + };
  • + }
  • + };
  • +
  • + return obj.init(), obj;
  • + });
  • +
  • + container.define("appRunner", ["router", "logger", "meta", "$"], function (router, logger, meta, $, require) {
  • + var obj = {};
  • +
  • + obj.run = function (appList) {
  • + var metaName = "status";
  • + if (meta.existMeta(metaName)) {
  • + logger.info("setup already");
  • + }
  • + else {
  • + // 添加meta
  • + meta.appendMeta(metaName);
  • +
  • + // 运行应用
  • + $(function () {
  • + obj.runAppList(appList);
  • + });
  • + }
  • + };
  • +
  • + obj.runAppList = function (appList) {
  • + var url = router.getUrl();
  • + for (var i in appList) {
  • + var app = appList[i];
  • +
  • + var match = obj.matchApp(url, app);
  • + if (match == false) {
  • + continue;
  • + }
  • +
  • + if (require(app.name).run() == true) {
  • + break;
  • + }
  • + }
  • + };
  • +
  • + obj.matchApp = function (url, app) {
  • + var match = false;
  • + app.matchs.forEach(function (item) {
  • + if (url.indexOf(item) > 0 || item == "*") {
  • + match = true;
  • + }
  • + });
  • + return match;
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + /** custom **/
  • + container.define("factory", ["gmDao", "ScopeDao"], function (gmDao, ScopeDao) {
  • + var obj = {
  • + daos: {}
  • + };
  • +
  • + obj.getConfigDao = function () {
  • + return obj.getDao("config", function () {
  • + return ScopeDao(gmDao, "$config");
  • + });
  • + };
  • +
  • + obj.getStorageDao = function () {
  • + return obj.getDao("storage", function () {
  • + return ScopeDao(gmDao, "$storage");
  • + });
  • + };
  • +
  • + obj.getDao = function (key, createFunc) {
  • + if (!obj.daos.hasOwnProperty(key)) {
  • + obj.daos[key] = createFunc();
  • + }
  • + return obj.daos[key];
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("constant", [], function () {
  • + return {
  • + source: {
  • + baidu: "baidu",
  • + weiyun: "weiyun",
  • + lanzous: "lanzous",
  • + ty189: "189"
  • + },
  • + option: {
  • + baidu_page_home: {
  • + name: "baidu_page_home",
  • + value: "yes"
  • + },
  • + baidu_page_share: {
  • + name: "baidu_page_share",
  • + value: "yes"
  • + },
  • + baidu_page_verify: {
  • + name: "baidu_page_verify",
  • + value: "yes"
  • + },
  • + baidu_share_status: {
  • + name: "baidu_share_status",
  • + value: "yes"
  • + },
  • + baidu_custom_password: {
  • + name: "baidu_custom_password",
  • + value: "yes"
  • + },
  • + baidu_show_origin: {
  • + name: "baidu_show_origin",
  • + value: "yes"
  • + },
  • + baidu_auto_jump: {
  • + name: "baidu_auto_jump",
  • + value: "no"
  • + },
  • + weiyun_page_home: {
  • + name: "weiyun_page_home",
  • + value: "yes"
  • + },
  • + weiyun_page_share: {
  • + name: "weiyun_page_share",
  • + value: "yes"
  • + },
  • + weiyun_page_verify: {
  • + name: "weiyun_page_verify",
  • + value: "yes"
  • + },
  • + weiyun_share_status: {
  • + name: "weiyun_share_status",
  • + value: "yes"
  • + },
  • + weiyun_auto_jump: {
  • + name: "weiyun_auto_jump",
  • + value: "no"
  • + },
  • + lanzous_page_verify: {
  • + name: "lanzous_page_verify",
  • + value: "yes"
  • + },
  • + lanzous_share_status: {
  • + name: "lanzous_share_status",
  • + value: "yes"
  • + },
  • + lanzous_auto_jump: {
  • + name: "lanzous_auto_jump",
  • + value: "no"
  • + },
  • + ty189_page_home: {
  • + name: "189_page_home",
  • + value: "yes"
  • + },
  • + ty189_page_share: {
  • + name: "189_page_share",
  • + value: "yes"
  • + },
  • + ty189_page_verify: {
  • + name: "189_page_verify",
  • + value: "yes"
  • + },
  • + ty189_share_status: {
  • + name: "189_share_status",
  • + value: "yes"
  • + },
  • + ty189_auto_jump: {
  • + name: "189_auto_jump",
  • + value: "no"
  • + }
  • + }
  • + };
  • + });
  • +
  • + container.define("api", ["manifest", "oneData", "svgCrypt"], function (manifest, oneData, svgCrypt) {
  • + var obj = {};
  • +
  • + obj.versionQuery = function (callback) {
  • + oneData.requestOneApi(manifest.getApi("version"), {}, callback);
  • + };
  • +
  • + obj.queryShareOrigin = function (shareSource, shareId, shareLink, callback) {
  • + var data = {
  • + share_id: shareId,
  • + share_source: shareSource,
  • + share_point: svgCrypt.getStrPoint(shareId),
  • + share_link: shareLink
  • + };
  • + oneData.requestOneApi(manifest.getApi("origin"), data, callback);
  • + };
  • +
  • + obj.querySharePwd = function (shareSource, shareId, shareLink, callback) {
  • + var data = {
  • + share_id: shareId,
  • + share_source: shareSource,
  • + share_point: svgCrypt.getStrPoint(shareId),
  • + share_link: shareLink
  • + };
  • + oneData.requestOneApi(manifest.getApi("query"), data, callback);
  • + };
  • +
  • + obj.storeSharePwd = function (shareId, sharePwd, shareLink, shareSource, callback) {
  • + var data = {
  • + share_id: shareId,
  • + share_pwd: sharePwd,
  • + share_source: shareSource,
  • + share_point: svgCrypt.getStrPoint(shareId),
  • + share_link: shareLink
  • + };
  • + oneData.requestOneApi(manifest.getApi("store"), data, callback);
  • + };
  • +
  • + obj.queryShareList = function (shareSource, callback) {
  • + var data = {
  • + share_source: shareSource
  • + };
  • + oneData.requestOneApi(manifest.getApi("lists"), data, callback);
  • + };
  • +
  • + obj.deleteShare = function (shareId, callback) {
  • + var data = {
  • + share_id: shareId,
  • + share_point: svgCrypt.getStrPoint(shareId)
  • + };
  • + oneData.requestOneApi(manifest.getApi("delete"), data, callback);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("shareLog", ["config", "calendar", "constant", "api"], function (config, calendar, constant, api) {
  • + var obj = {
  • + name: "share_list",
  • + modes: {
  • + LOCAL: "local",
  • + ONLINE: "online"
  • + }
  • + };
  • +
  • + obj.getShareMode = function () {
  • + var shareMode = config.getConfig("share_mode");
  • + return shareMode == obj.modes.LOCAL ? obj.modes.LOCAL : obj.modes.ONLINE;
  • + };
  • +
  • + obj.setShareMode = function (shareMode) {
  • + config.setConfig("share_mode", shareMode == obj.modes.LOCAL ? obj.modes.LOCAL : obj.modes.ONLINE);
  • + };
  • +
  • + obj.getShareLogList = function (shareSource, callback) {
  • + if (obj.getShareMode() == obj.modes.LOCAL) {
  • + callback(obj.getLocalShareLogList());
  • + }
  • + else {
  • + obj.getOnlineShareLogList(shareSource, callback);
  • + }
  • + };
  • +
  • + obj.getOnlineShareLogList = function (shareSource, callback) {
  • + api.queryShareList(shareSource, function (response) {
  • + if (response instanceof Object && response.code == 1) {
  • + callback(response.data.list);
  • + }
  • + else {
  • + callback([]);
  • + }
  • + });
  • + };
  • +
  • + obj.getLocalShareLogList = function () {
  • + var shareList = config.getConfig(obj.name);
  • + return shareList ? shareList : {};
  • + };
  • +
  • + obj.addShareLog = function (shareId, sharePwd, shareLink, shareSource) {
  • + api.storeSharePwd(shareId, sharePwd, shareLink, shareSource);
  • +
  • + var shareList = obj.getLocalShareLogList();
  • + shareList[shareId] = {
  • + share_id: shareId,
  • + share_pwd: sharePwd,
  • + share_link: shareLink,
  • + share_source: shareSource,
  • + share_time: (new Date()).getTime()
  • + };
  • + config.setConfig(obj.name, shareList);
  • + };
  • +
  • + obj.removeShareLog = function (shareId, callback) {
  • + var shareList = obj.getLocalShareLogList();
  • + delete shareList[shareId];
  • + config.setConfig(obj.name, shareList);
  • +
  • + api.deleteShare(shareId, callback);
  • + };
  • +
  • + obj.buildShareLink = function (shareId, shareSource, shareLink) {
  • + if (shareSource == constant.source.baidu) {
  • + shareLink = "https://pan.baidu.com/s/1" + shareId;
  • + }
  • + else if (shareSource == constant.source.baidu) {
  • + shareLink = "https://share.weiyun.com/" + shareId;
  • + } else if (shareSource == constant.source.baidu) {
  • + shareLink = "https://www.lanzous.com/" + shareId;
  • + } else if (shareSource == constant.source.ty189) {
  • + shareLink = "https://cloud.189.cn/t/" + shareId;
  • + }
  • + return shareLink;
  • + };
  • +
  • + obj.buildShareTime = function (shareTime) {
  • + return calendar.formatTime("Y-m-d H:i:s", shareTime);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("runtime", ["router", "manifest", "calendar", "storage", "api"], function (router, manifest, calendar, storage, api) {
  • + var obj = {};
  • +
  • + obj.openOptionsPage = function () {
  • + router.openTab(manifest.getOptionsPage(), true);
  • + };
  • +
  • + obj.initVersion = function () {
  • + var versionDate = parseInt(storage.getValue("version_date"));
  • + var currentDate = calendar.formatTime("Ymd");
  • + if (!versionDate || versionDate < currentDate) {
  • + api.versionQuery(function (response) {
  • + storage.setValue("version_date", currentDate);
  • +
  • + if (response && response.code == 1 && response.data instanceof Object) {
  • + var versionPayload = response.data;
  • + storage.setValue("version_payload", versionPayload);
  • + storage.setValue("version_latest", versionPayload.version);
  • + }
  • + });
  • + }
  • + };
  • +
  • + obj.initRuntime = function () {
  • + obj.initVersion();
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("core", ["runtime", "$extend"], function (runtime) {
  • + var obj = {};
  • +
  • + obj.ready = function (callback) {
  • + runtime.initRuntime();
  • +
  • + callback && callback();
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + /** app **/
  • + container.define("app_baidu", ["config", "option", "router", "logger", "unsafeWindow", "constant", "runtime", "api", "shareLog", "$"], function (config, option, router, logger, unsafeWindow, constant, runtime, api, shareLog, $) {
  • + var obj = {
  • + app_id: 778750,
  • + temp_path: "/onetmp",
  • + yun_data: null,
  • + verify_page: {
  • + share_pwd: null,
  • + setPwd: null,
  • + backupPwd: null,
  • + restorePwd: null,
  • + submit_pwd: null
  • + }
  • + };
  • +
  • + obj.run = function () {
  • + var url = router.getUrl();
  • + if (url.indexOf(".baidu.com/s/") > 0) {
  • + option.isOptionActive(option.constant.baidu_page_share) && obj.initSharePage();
  • + return true;
  • + }
  • + else if (url.indexOf(".baidu.com/disk/home") > 0) {
  • + option.isOptionActive(option.constant.baidu_page_home) && obj.initHomePage();
  • + return true;
  • + } else if (url.indexOf(".baidu.com/disk/timeline") > 0) {
  • + option.isOptionActive(option.constant.baidu_page_home) && obj.initTimeLinePage();
  • + return true;
  • + } else if (url.indexOf(".baidu.com/share/init") > 0) {
  • + option.isOptionActive(option.constant.baidu_page_verify) && obj.initVerifyPage();
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.initSharePage = function () {
  • + obj.removeVideoLimit();
  • +
  • + obj.prettySingleSharePage();
  • +
  • + obj.initButtonShare();
  • +
  • + obj.initButtonEvent();
  • +
  • + if (option.isOptionActive(option.constant.baidu_show_origin)) {
  • + obj.showShareOrigin();
  • + }
  • + };
  • +
  • + obj.initHomePage = function () {
  • + obj.registerCustomSharePwd();
  • +
  • + obj.initButtonHome();
  • +
  • + obj.initButtonEvent();
  • + };
  • +
  • + obj.initTimeLinePage = function () {
  • + obj.registerCustomSharePwd();
  • +
  • + obj.initButtonTimeLine();
  • +
  • + obj.initButtonEvent();
  • + };
  • +
  • + obj.initVerifyPage = function () {
  • + obj.registerStoreSharePwd();
  • +
  • + if (obj.initVerifyPageElement()) {
  • + obj.autoPaddingSharePwd();
  • +
  • + obj.registerPwdShareSwitch();
  • + }
  • + };
  • +
  • + obj.initVerifyPageElement = function () {
  • + var shareId = obj.getShareId();
  • + var $pwd = $(".input-area input");
  • + if (shareId && $pwd.length) {
  • + // 设置提取码
  • + obj.verify_page.setPwd = function (pwd) {
  • + $pwd.val(pwd);
  • + };
  • +
  • + // 备份提取码
  • + obj.verify_page.backupPwd = function (pwd) {
  • + $pwd.attr("data-pwd", pwd);
  • + };
  • +
  • + // 还原提取码
  • + obj.verify_page.restorePwd = function () {
  • + $pwd.val($pwd.attr("data-pwd"));
  • + };
  • +
  • + // 提交提取码
  • + var $button = $(".input-area .g-button");
  • + if ($button.length) {
  • + obj.verify_page.submit_pwd = function () {
  • + $button.click();
  • + };
  • + }
  • +
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.autoPaddingSharePwd = function () {
  • + var shareId = obj.getShareId();
  • + var shareLink = router.getUrl();
  • + api.querySharePwd(constant.source.baidu, shareId, shareLink, function (response) {
  • + if (response && response.code == 1) {
  • + var sharePwd = response.data.share_pwd;
  • + obj.verify_page.share_pwd = sharePwd;
  • + obj.verify_page.setPwd(sharePwd);
  • + obj.showTipSuccess("填充提取码成功");
  • +
  • + if (option.isOptionActive(option.constant.baidu_auto_jump)) {
  • + obj.verify_page.submit_pwd && obj.verify_page.submit_pwd();
  • + }
  • + }
  • + else {
  • + obj.showTipError("暂无人分享提取码");
  • + }
  • + });
  • + };
  • +
  • + obj.registerPwdShareSwitch = function () {
  • + // 添加开关
  • + $(".pickpw").after('<dl class="clearfix"><dt>提取码分享设置<span style="float:right"><input type="checkbox" checked id="nd-share-check" style="vertical-align: middle;"> <a class="nd-open-page-option" href="javascript:;" title="点击查看更多脚本配置">共享提取码</a></span></dt></dl>');
  • + obj.isPwdShareOpen() || $("#nd-share-check").removeAttr("checked");
  • +
  • + // 开关-事件
  • + $("#nd-share-check").on("change", function () {
  • + if ($(this).is(':checked')) {
  • + option.setOptionActive(option.constant.baidu_share_status);
  • + }
  • + else {
  • + option.setOptionUnActive(option.constant.baidu_share_status);
  • + }
  • + });
  • +
  • + // 打开配置页
  • + $(".nd-open-page-option").click(function () {
  • + runtime.openOptionsPage();
  • + });
  • + };
  • +
  • + obj.registerStoreSharePwd = function () {
  • + obj.getJquery()(document).ajaxComplete(function (event, xhr, options) {
  • + var requestUrl = options.url;
  • + if (requestUrl.indexOf("/share/verify") >= 0) {
  • + var match = options.data.match(/pwd=([a-z0-9]+)/i);
  • + if (!match) {
  • + return logger.warn("pwd share not match");
  • + }
  • +
  • + // 拒绝*号
  • + if (obj.verify_page.backupPwd) {
  • + obj.verify_page.backupPwd(match[1]);
  • + setTimeout(obj.verify_page.restorePwd, 500);
  • + }
  • +
  • + var response = xhr.responseJSON;
  • + if (!(response && response.errno == 0)) {
  • + return logger.warn("pwd share error");
  • + }
  • +
  • + var sharePwd = match[1];
  • + if (sharePwd == obj.verify_page.share_pwd) {
  • + return logger.warn("pwd share not change");
  • + }
  • +
  • + if (!obj.isPwdShareOpen()) {
  • + return logger.warn("pwd share closed");
  • + }
  • +
  • + var shareId = obj.getShareId();
  • + var shareLink = router.getUrl();
  • + shareLog.addShareLog(shareId, sharePwd, shareLink, constant.source.baidu);
  • + }
  • + });
  • + };
  • +
  • + obj.registerCustomSharePwd = function () {
  • + // 功能开关
  • + if (!option.isOptionActive(option.constant.baidu_custom_password)) {
  • + return;
  • + }
  • +
  • + obj.loadPlugin("网盘分享", "com.baidu.pan");
  • +
  • + obj.onModuleReady("function-widget-1:share/util/shareDialog.js", function () {
  • + // 分享事件
  • + obj.async("function-widget-1:share/util/shareDialog.js", function (shareDialog) {
  • + shareDialog.prototype.onVisibilityChangeOrigin = shareDialog.prototype.onVisibilityChange;
  • + shareDialog.prototype.onVisibilityChange = function (status) {
  • + if ($(".nd-input-share-pwd").length == 0) {
  • + var sharePwd = config.getConfig("share_pwd");
  • + var html = '<tr><td class="first-child"><label>提取码</label></td><td><input type="text" class="nd-input-share-pwd" value="' + (sharePwd ? sharePwd : "") + '" placeholder="为空则随机四位" style="padding: 6px; width: 100px;border: 1px solid #e9e9e9;"></td></tr>';
  • + $("#share .dialog-body table").append(html);
  • + }
  • + this.onVisibilityChangeOrigin(status);
  • + };
  • + });
  • +
  • + // 生成提取码
  • + obj.async("function-widget-1:share/util/shareFriend/createLinkShare.js", function (shareLink) {
  • + shareLink.prototype.makePrivatePasswordOrigin = shareLink.prototype.makePrivatePassword;
  • + shareLink.prototype.makePrivatePassword = function () {
  • + var sharePwd = config.getConfig("share_pwd");
  • + return sharePwd ? sharePwd : this.makePrivatePasswordOrigin();
  • + };
  • + });
  • +
  • + // 提取码更改事件
  • + $(document).on("change", ".nd-input-share-pwd", function () {
  • + var value = this.value;
  • + if (value && !value.match(/^[0-9a-z]{4}$/i)) {
  • + obj.showTipError("提取码只能是四位数字或字母");
  • + }
  • + config.setConfig("share_pwd", value);
  • + });
  • + });
  • + };
  • +
  • + obj.loadPlugin = function (name, group) {
  • + try {
  • + var plugin = obj.require("system-core:pluginHub/data/Registry.js").getPluginByNameAndGroup(name, group);
  • + obj.require("system-core:pluginHub/invoker/loadPluginAssets.js")(plugin);
  • + } catch (err) { }
  • + };
  • +
  • + obj.onModuleReady = function (name, callback) {
  • + try {
  • + obj.require(name);
  • + callback && callback();
  • + }
  • + catch (err) {
  • + setTimeout(function () {
  • + obj.onModuleReady(name, callback);
  • + }, 500);
  • + }
  • + };
  • +
  • + obj.removeVideoLimit = function () {
  • + var message = obj.getSystemContext().message;
  • + if (message) {
  • + message.callSystem("share-video-after-transfer");
  • + }
  • + else {
  • + logger.warn("wait removeVideoLimit...");
  • + obj.setTimeout(obj.removeVideoLimit, 500);
  • + }
  • + };
  • +
  • + obj.prettySingleSharePage = function () {
  • + if (!obj.isSharePageMulti()) {
  • + $("#layoutMain").css({
  • + "width": "auto",
  • + "min-width": "1180px",
  • + "margin": "88px 30px"
  • + });
  • + }
  • + };
  • +
  • + obj.showShareOrigin = function () {
  • + api.queryShareOrigin(constant.source.baidu, obj.getShareId(), router.getUrl(), function (response) {
  • + if (response && response.code == 1) {
  • + var data = response.data;
  • + if (data.list && data.list.length) {
  • + var html = '<div style="padding: 10px 5px; border-bottom: 1px solid #f6f6f6; line-height: 30px;">';
  • + var item = data.list[0];
  • + if (data.list.length > 1) {
  • + html += '<p>分享来源:<a target="_blank" href="' + item.url + '">' + item.title + '</a> [<a class="show-origin-dialog" href="javascript:;" style="color:#ff0000;"> 查看更多 </a>]</p>';
  • + }
  • + else {
  • + html += '<p>分享来源:<a target="_blank" href="' + item.url + '">' + item.title + '</a></p>';
  • + }
  • + html += '</div>';
  • + $(".module-share-header").after(html);
  • +
  • + $(document).on("click", ".show-origin-dialog", function () {
  • + var title = "分享来源";
  • + var body = '<div style="padding: 20px 20px;min-height: 120px; max-height: 300px; overflow-y: auto;">';
  • +
  • + data.list.forEach(function (item, index) {
  • + body += '<p>' + (++index) + ':<a target="_blank" href="' + item.url + '">' + item.title + '</a></p>';
  • + });
  • +
  • + body += '</div>';
  • + var footer = obj.renderFooterAppId();
  • + obj.showDialog(title, body, footer);
  • + });
  • + }
  • + else {
  • + // obj.showTipError("暂未查询到分享的来源");
  • + }
  • + }
  • + });
  • + };
  • +
  • + obj.initButtonShare = function () {
  • + if ($(".x-button-box").length) {
  • + var html = '<a class="g-button nd-button-build"><span class="g-button-right"><em class="icon icon-disk" title="下载"></em><span class="text">生成链接</span></span></a>';
  • + $(".x-button-box").append(html);
  • + }
  • + else {
  • + logger.warn("wait initButtonShare...");
  • + setTimeout(obj.initButtonShare, 500);
  • + }
  • + };
  • +
  • + obj.initButtonHome = function () {
  • + var listTools = obj.getSystemContext().Broker.getButtonBroker("listTools");
  • + if (listTools && listTools.$box) {
  • + var html = '<a class="g-button nd-button-build"><span class="g-button-right"><em class="icon icon-disk" title="下载"></em><span class="text">生成链接</span></span></a>';
  • + $(listTools.$box).prepend(html);
  • + }
  • + else {
  • + logger.warn("wait initButtonHome...");
  • + setTimeout(obj.initButtonHome, 500);
  • + }
  • + };
  • +
  • + obj.initButtonTimeLine = function () {
  • + if ($(".module-operateBtn .group-button").length) {
  • + var html = '<span class="button"><a class="g-v-button g-v-button-middle nd-button-build"><span class="g-v-button-right"><em class="icon icon-disk"></em><span class="text">生成链接</span></span></a></span>';
  • + $(".module-operateBtn .group-button").prepend(html);
  • + }
  • + else {
  • + logger.warn("wait initButtonTimeLine...");
  • + setTimeout(obj.initButtonTimeLine, 500);
  • + }
  • + };
  • +
  • + obj.initButtonEvent = function () {
  • + // 生成链接
  • + $(document).on("click", ".nd-button-build", function () {
  • + var yunData = obj.getYunData();
  • + if (yunData.MYUK || obj.isHomePage()) {
  • + var fileList = obj.getSelectedFileList();
  • + var fileStat = obj.getFileListStat(fileList);
  • + if (fileList.length) {
  • + if (fileList.length > 1 && fileStat.file_num) {
  • + obj.showDownloadSelect(fileList, fileStat);
  • + }
  • + else if (fileStat.file_num == 1 && !obj.isHomePage()) {
  • + obj.showDownloadSingle(fileList, fileStat);
  • + }
  • + else {
  • + var pack = fileStat.file_num ? false : true;
  • + if (obj.isHomePage()) {
  • + obj.showDownloadInfoHome(fileList, pack);
  • + }
  • + else {
  • + obj.showDownloadInfoShareOffical(fileList, pack);
  • + }
  • + }
  • + }
  • + else {
  • + obj.showTipError("请至少选择一个文件或文件夹");
  • + }
  • + }
  • + else {
  • + obj.showLogin();
  • + }
  • + });
  • +
  • + // 压缩包
  • + $(document).on("click", ".nd-button-pack", function () {
  • + var fileList = obj.getSelectedFileList();
  • + if (obj.isHomePage()) {
  • + obj.showDownloadInfoHome(fileList, true);
  • + }
  • + else {
  • + obj.showDownloadInfoShareOffical(fileList, true);
  • + }
  • + });
  • +
  • + // 多文件
  • + $(document).on("click", ".nd-button-multi", function () {
  • + var fileList = obj.getSelectedFileList();
  • +
  • + // 过滤文件夹
  • + fileList = obj.filterFileListDir(fileList);
  • +
  • + if (obj.isHomePage()) {
  • + obj.showDownloadInfoHome(fileList, false);
  • + }
  • + else {
  • + obj.showDownloadInfoShareOffical(fileList, false);
  • + }
  • + });
  • +
  • + // 转存多文件
  • + $(document).on("click", ".nd-button-disk", function () {
  • + var fileList = obj.getSelectedFileList();
  • +
  • + // 过滤文件夹
  • + fileList = obj.filterFileListDir(fileList);
  • +
  • + if (obj.isHomePage()) {
  • + obj.showDownloadInfoHome(fileList, false);
  • + }
  • + else {
  • + obj.showDownloadInfoShareTransfer(fileList);
  • + }
  • + });
  • +
  • + // 应用ID
  • + $(document).on("click", ".nd-change-app-id", function () {
  • + obj.showAppIdChange();
  • + });
  • + $(document).on("change", ".nd-input-app-id", function () {
  • + obj.setAppId(this.value);
  • + });
  • +
  • + // 打开配置页
  • + $(document).on("click", ".nd-open-page-option", function () {
  • + runtime.openOptionsPage();
  • + });
  • +
  • + // 打开临时页面
  • + $(document).on("click", ".nd-open-page-temp", function () {
  • + router.openTab("https://pan.baidu.com/disk/home#/all?vmode=list&path=" + encodeURIComponent(obj.getTempPath()), true);
  • + });
  • + };
  • +
  • + obj.showLogin = function () {
  • + obj.getJquery()("[node-type='header-login-btn']").click();
  • + };
  • +
  • + obj.showDownloadInfoShareTransfer = function (fileList) {
  • + logger.info(fileList);
  • + obj.applyTransferFile(fileList, obj.getTempPath(), function (response) {
  • + if (response && response.extra && response.extra.list) {
  • + var listMap = {};
  • + response.extra.list.forEach(function (item) {
  • + listMap[item.from_fs_id] = item;
  • + });
  • +
  • + var downList = [];
  • + fileList.forEach(function (item) {
  • + if (listMap.hasOwnProperty(item.fs_id)) {
  • + item.dlink = obj.buildDownloadUrl(listMap[item.fs_id].to, item.server_filename);
  • + downList.push(item);
  • + }
  • + });
  • + obj.showDownloadLinkFile(downList);
  • + }
  • + });
  • + };
  • +
  • + obj.showDownloadInfoShareOffical = function (fileList, pack) {
  • + obj.getDownloadShare(fileList, pack, function (response) {
  • + obj.hideTip();
  • + logger.info(response);
  • +
  • + if (response.list && response.list.length) {
  • + // 文件
  • + obj.showDownloadLinkFile(response.list);
  • + }
  • + else if (response.dlink) {
  • + // 压缩包
  • + obj.showDownloadLinkPack(fileList, {
  • + dlink: response.dlink
  • + });
  • + }
  • + else {
  • + // 其他
  • + obj.showDialogUnKnownResponse(response);
  • + }
  • + });
  • + };
  • +
  • + obj.showDownloadInfoHome = function (fileList, pack) {
  • + logger.info(fileList);
  • + try {
  • + obj.getDownloadHome(fileList, pack, function (response) {
  • + obj.hideTip();
  • + logger.info(response);
  • +
  • + if (pack) {
  • + if (response.dlink && typeof response.dlink == "string") {
  • + // 压缩包
  • + obj.showDownloadLinkPack(fileList, {
  • + dlink: response.dlink
  • + });
  • + }
  • + else {
  • + // 其他
  • + obj.showDialogUnKnownResponse(response);
  • + }
  • + }
  • + else {
  • + if (response.dlink instanceof Array && response.dlink.length) {
  • + var dlinkMapping = {};
  • + response.dlink.forEach(function (item) {
  • + dlinkMapping[item.fs_id] = item.dlink;
  • + });
  • + fileList.forEach(function (item) {
  • + item.dlink = dlinkMapping[item.fs_id];
  • + item.dlinkApi = obj.buildDownloadUrl(item.path, item.server_filename);
  • + });
  • + }
  • + else {
  • + fileList.forEach(function (item) {
  • + item.dlink = obj.buildDownloadUrl(item.path, item.server_filename);
  • + });
  • + }
  • + obj.showDownloadLinkFile(fileList);
  • + }
  • + });
  • + }
  • + catch (err) {
  • + fileList.forEach(function (item) {
  • + item.dlink = obj.buildDownloadUrl(item.path, item.server_filename);
  • + });
  • + obj.showDownloadLinkFile(fileList);
  • + }
  • + };
  • +
  • + obj.showDownloadLinkFile = function (fileList) {
  • + var title = "文件下载";
  • + var body = '<div style="padding: 20px 20px;min-height: 120px; max-height: 300px; overflow-y: auto; ">';
  • +
  • + var rowStyle = "display:block; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;";
  • + fileList.forEach(function (item, index) {
  • + body += '<div style="margin-bottom: 10px;">';
  • + body += '<div>' + (index + 1) + ':' + item.server_filename + '</div>';
  • + if (item.dlinkApi) {
  • + body += '<div><a href="' + item.dlink + '&filename=' + encodeURIComponent(item.server_filename) + '" title="' + item.dlink + '" style="' + rowStyle + '">官方:' + item.dlink + '</a></div>';
  • + body += '<div><a href="' + item.dlinkApi + '&filename=' + encodeURIComponent(item.server_filename) + '" title="' + item.dlinkApi + '" style="' + rowStyle + '">直链:' + item.dlinkApi + '</a></div>';
  • + }
  • + else {
  • + body += '<div><a href="' + item.dlink + '&filename=' + encodeURIComponent(item.server_filename) + '" title="' + item.dlink + '" style="' + rowStyle + '">' + item.dlink + '</a></div>';
  • + }
  • + body += '</div>';
  • + });
  • +
  • + body += '</div>';
  • + var footer = obj.renderFooterAppId();
  • + obj.showDialog(title, body, footer);
  • + };
  • +
  • + obj.showDownloadLinkPack = function (fileList, data) {
  • + var title = "文件下载";
  • + var body = '<div style="padding: 20px 20px;min-height: 120px; max-height: 300px; overflow-y: auto; ">';
  • +
  • + var packName = obj.getDownloadPackName(fileList);
  • + body += '<div>' + packName + '</div><div><a href="' + data.dlink + '&zipname=' + encodeURIComponent(packName) + '" title="' + data.dlink + '" style="display:block; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">' + data.dlink + '</a></div>';
  • +
  • + body += '<div style="margin-top: 15px;">打包的文件/文件夹列表</div>';
  • + fileList.forEach(function (item, index) {
  • + body += '<div title="' + item.path + '" style="color: ' + (item.isdir ? "blue" : "inherit") + ';">[' + (index + 1) + '] ' + item.server_filename + '</div>';
  • + });
  • +
  • + body += '</div>';
  • + var footer = obj.renderFooterAppId();
  • + obj.showDialog(title, body, footer);
  • + };
  • +
  • + obj.getDownloadPackName = function (fileList) {
  • + return fileList[0].server_filename + " 等" + fileList.length + "个文件.zip";
  • + };
  • +
  • + obj.buildDownloadUrl = function (path, name) {
  • + return "https://pcs.baidu.com/rest/2.0/pcs/file?method=download&app_id=" + obj.getAppId() + "&filename=" + encodeURIComponent(name) + "&path=" + encodeURIComponent(path);
  • + };
  • +
  • + obj.showDownloadSingle = function (fileList, fileStat) {
  • + var title = "链接类型";
  • + var body = '<div style="padding: 40px 20px; max-height: 300px; overflow-y: auto;">';
  • +
  • + body += '<div class="normalBtnBox g-center">';
  • + body += '<a class="g-button g-button-large g-button-gray-large nd-button-multi" title="调用官方接口生成链接"><span class="g-button-right"><em class="icon icon-download"></em> 官方链接</span></a>';
  • + body += '<a class="g-button g-button-large g-button-gray-large nd-button-disk" style="margin-left:50px;" title="转存文件然后生成文件直链"><span class="g-button-right"><em class="icon icon-save-disk"></em> 转存直链</span></a>';
  • + body += '</div>';
  • +
  • + if (fileStat.dir_num) {
  • + body += '<div style="margin-top: 40px; padding-top: 10px; margin-bottom: -20px; border-top: 1px solid #D0DFE7;"><p class="g-center">选择 [多文件] 会过滤当前选中的 <span style="color: red">' + fileStat.dir_num + '</span> 个文件夹</p>';
  • +
  • + var index = 1;
  • + fileList.forEach(function (item) {
  • + if (item.isdir) {
  • + body += '<p title="' + item.path + '" style="color: blue;">[' + index + '] ' + item.server_filename + '</p>';
  • + index++;
  • + }
  • + });
  • + body += '</div>';
  • + }
  • +
  • + body += '</div>';
  • + var footer = obj.renderFooterAppId();
  • + obj.showDialog(title, body, footer);
  • + };
  • +
  • + obj.showDownloadSelect = function (fileList, fileStat) {
  • + var title = "链接类型";
  • + var body = '<div style="padding: 40px 20px; max-height: 300px; overflow-y: auto;">';
  • +
  • + body += '<div class="normalBtnBox g-center">';
  • + if (obj.isHomePage()) {
  • + body += '<a class="g-button g-button-large g-button-gray-large nd-button-disk" title="合并官方链接和文件直链"><span class="g-button-right"><em class="icon icon-save-disk"></em> 多文件</span></a>';
  • + }
  • + else {
  • + body += '<a class="g-button g-button-large g-button-gray-large nd-button-multi"><span class="g-button-right" title="调用官方接口生成文件链接"><em class="icon icon-download"></em> 官方多文件</span></a>';
  • + body += '<a class="g-button g-button-large g-button-gray-large nd-button-disk" style="margin-left:50px;" title="转存文件然后生成文件直链"><span class="g-button-right"><em class="icon icon-save-disk"></em> 转存多文件</span></a>';
  • + }
  • + body += '<a class="g-button g-button-large g-button-gray-large nd-button-pack" style="margin-left:50px;" title="调用官方接口生成压缩包链接"><span class="g-button-right"><em class="icon icon-poly"></em> 压缩包</span></a>';
  • + body += '</div>';
  • +
  • + if (fileStat.dir_num) {
  • + body += '<div style="margin-top: 40px; padding-top: 10px; margin-bottom: -20px; border-top: 1px solid #D0DFE7;"><p class="g-center">选择 [多文件] 会过滤当前选中的 <span style="color: red">' + fileStat.dir_num + '</span> 个文件夹</p>';
  • + var index = 1;
  • + fileList.forEach(function (item) {
  • + if (item.isdir) {
  • + body += '<p title="' + item.path + '" style="color: blue;">[' + index + '] ' + item.server_filename + '</p>';
  • + index++;
  • + }
  • + });
  • + body += '</div>';
  • + }
  • +
  • + body += '</div>';
  • + var footer = obj.renderFooterAppId();
  • + obj.showDialog(title, body, footer);
  • + };
  • +
  • + obj.showAppIdChange = function () {
  • + var title = "应用ID";
  • + var body = '<div style="padding: 60px 20px; max-height: 300px; overflow-y: auto;"><div class="g-center" style="margin-bottom: 10px;">当前应用ID:<input type="text" class="nd-input-app-id" style="border: 1px solid #f2f2f2; padding: 4px 5px;" value="' + obj.getAppId() + '"></div><div class="g-center"><p>用于构造个人网盘文件的下载直链,更多应用ID请查看<a target="_blank" href="http://go.newday.me/s/pan-script"> 脚本主页 </a></p></div></div>';
  • + var footer = '';
  • + obj.showDialog(title, body, footer);
  • + };
  • +
  • + obj.showDialogUnKnownResponse = function (response) {
  • + var title = "未知结果";
  • + var body = '<div style="padding: 20px 20px; max-height: 300px; overflow-y: auto;"><pre style="white-space: pre-wrap; word-wrap: break-word; word-break: break-all;">' + JSON.stringify(response, null, 4) + '</pre></div>';
  • + var footer = obj.renderFooterAppId();
  • + obj.showDialog(title, body, footer);
  • + };
  • +
  • + obj.renderFooterAppId = function () {
  • + return '<p style="padding-top: 10px; border-top: 1px solid #D0DFE7;">应用ID:' + obj.getAppId() + ' <a href="javascript:;" class="nd-change-app-id">修改</a>,其他页面: <a class="nd-open-page-option" href="javascript:;">配置页面</a> 、<a class="nd-open-page-temp" href="javascript:;">临时文件</a></p>';
  • + };
  • +
  • + obj.showDialog = function (title, body, footer) {
  • + var dialog = obj.require("system-core:system/uiService/dialog/dialog.js").verify({
  • + title: title,
  • + img: "img",
  • + vcode: "vcode"
  • + });
  • +
  • + // 内容
  • + $(dialog.$dialog).find(".dialog-body").safeHtml(body);
  • +
  • + // 底部
  • + $(dialog.$dialog).find(".dialog-footer").safeHtml(footer);
  • +
  • + dialog.show();
  • + };
  • +
  • + obj.showTipSuccess = function (msg, hasClose, autoClose) {
  • + obj.showTip("success", msg, hasClose, autoClose);
  • + };
  • +
  • + obj.showTipError = function (msg, hasClose, autoClose) {
  • + obj.showTip("failure", msg, hasClose, autoClose);
  • + };
  • +
  • + obj.showTipLoading = function (msg, hasClose, autoClose) {
  • + obj.showTip("loading", msg, hasClose, autoClose);
  • + };
  • +
  • + obj.showTip = function (mode, msg, hasClose, autoClose) {
  • + var option = {
  • + mode: mode,
  • + msg: msg
  • + };
  • +
  • + // 关闭按钮
  • + if (typeof hasClose != "undefined") {
  • + option.hasClose = hasClose;
  • + }
  • +
  • + // 自动关闭
  • + if (typeof autoClose != "undefined") {
  • + option.autoClose = autoClose;
  • + }
  • +
  • + obj.require("system-core:system/uiService/tip/tip.js").show(option);
  • + };
  • +
  • + obj.hideTip = function () {
  • + obj.require("system-core:system/uiService/tip/tip.js").hide({
  • + hideTipsAnimationFlag: 1
  • + });
  • + };
  • +
  • + obj.isHomePage = function () {
  • + var url = router.getUrl();
  • + if (url.indexOf(".baidu.com/disk") > 0) {
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.isTimelinePage = function () {
  • + var url = router.getUrl();
  • + if (url.indexOf(".baidu.com/disk/timeline") > 0) {
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.isSharePageMulti = function () {
  • + var yunData = obj.getYunData();
  • + if (yunData.SHAREPAGETYPE == "single_file_page") {
  • + return false;
  • + }
  • + else {
  • + return true;
  • + }
  • + };
  • +
  • + obj.getSelectedFileList = function () {
  • + if (obj.isHomePage()) {
  • + return obj.getSelectedFileListHome();
  • + }
  • + else {
  • + return obj.getSelectedFileListShare();
  • + }
  • + };
  • +
  • + obj.getSelectedFileListHome = function () {
  • + if (obj.isTimelinePage()) {
  • + return obj.require("pan-timeline:widget/store/index.js").getters.getChoosedItemArr;
  • + }
  • + else {
  • + return obj.require('system-core:context/context.js').instanceForSystem.list.getSelected();
  • + }
  • + };
  • +
  • + obj.getSelectedFileListShare = function () {
  • + return obj.require('system-core:context/context.js').instanceForSystem.list.getSelected();
  • + };
  • +
  • + obj.getFileListStat = function (fileList) {
  • + var fileStat = {
  • + file_num: 0,
  • + dir_num: 0
  • + };
  • + fileList.forEach(function (item) {
  • + if (item.isdir == 0) {
  • + fileStat.file_num++;
  • + }
  • + else {
  • + fileStat.dir_num++;
  • + }
  • + });
  • + return fileStat;
  • + };
  • +
  • + obj.filterFileListDir = function (fileList) {
  • + var fileListFilter = [];
  • + fileList.forEach(function (item) {
  • + if (item.isdir == 0) {
  • + fileListFilter.push(item);
  • + }
  • + });
  • + return fileListFilter;
  • + };
  • +
  • + obj.parseFidList = function (fileList) {
  • + var fidList = [];
  • + fileList.forEach(function (item) {
  • + fidList.push(item.fs_id);
  • + });
  • + return fidList;
  • + };
  • +
  • + obj.getDownloadShare = function (fileList, pack, callback) {
  • + obj.showTipLoading("生成链接中,请稍等...");
  • + obj.initWidgetContext("function-widget-1:download/util/context.js");
  • + obj.async("function-widget-1:download/service/dlinkService.js", function (dl) {
  • + var yunData = obj.getYunData();
  • + var data = {
  • + list: fileList,
  • + share_uk: yunData.SHARE_UK,
  • + share_id: yunData.SHARE_ID,
  • + sign: yunData.SIGN,
  • + timestamp: yunData.TIMESTAMP,
  • + type: pack ? "batch" : "nolimit"
  • + };
  • + dl.getDlinkShare(data, callback);
  • + });
  • + };
  • +
  • + obj.getDownloadHome = function (fileList, pack, callback) {
  • + obj.showTipLoading("生成链接中,请稍等...");
  • + obj.initWidgetContext("function-widget-1:download/util/context.js");
  • + obj.async("function-widget-1:download/service/dlinkService.js", function (dl) {
  • + var fidList = obj.parseFidList(fileList);
  • + var type = pack ? "batch" : "nolimit";
  • + dl.getDlinkPan(JSON.stringify(fidList), type, callback);
  • + });
  • + };
  • +
  • + obj.applyTransferFile = function (fileList, path, callback) {
  • + obj.listDir(path, function (response) {
  • + if (response && response.errno == 0) {
  • + obj.transferFile(fileList, path, callback);
  • + }
  • + else if (response) {
  • + obj.createDir(path, function (response) {
  • + if (response && response.errno == 0) {
  • + obj.transferFile(fileList, response.path, callback);
  • + }
  • + else {
  • + callback && callback("");
  • + }
  • + });
  • + }
  • + else {
  • + callback && callback("");
  • + }
  • + });
  • + };
  • +
  • + obj.transferFile = function (fileList, path, callback) {
  • + var yunData = obj.getYunData();
  • + var fidList = obj.parseFidList(fileList);
  • + var url = "/share/transfer?ondup=newcopy&async=1&shareid=" + yunData.SHARE_ID + "&from=" + yunData.SHARE_UK;
  • + var data = {
  • + fsidlist: "[" + fidList.join(",") + "]",
  • + path: path
  • + };
  • + obj.ajax({
  • + type: "post",
  • + url: url,
  • + data: data,
  • + dataType: "json",
  • + timeout: 1e5,
  • + error: function () {
  • + callback && callback("");
  • + },
  • + success: function (response) {
  • + callback && callback(response);
  • + }
  • + });
  • + };
  • +
  • + obj.listDir = function (path, callback) {
  • + var url = "/api/list";
  • + obj.ajax({
  • + type: "get",
  • + url: url,
  • + data: {
  • + order: "name",
  • + desc: 0,
  • + showempty: 0,
  • + web: 1,
  • + page: 1,
  • + num: 10,
  • + dir: path
  • + },
  • + dataType: "json",
  • + timeout: 1e5,
  • + error: function () {
  • + callback && callback("");
  • + },
  • + success: function (response) {
  • + callback && callback(response);
  • + }
  • + });
  • + };
  • +
  • + obj.createDir = function (path, callback) {
  • + var url = "/api/create?a=commit";
  • + obj.ajax({
  • + type: "post",
  • + url: url,
  • + data: {
  • + path: path,
  • + isdir: 1,
  • + block_list: "[]"
  • + },
  • + dataType: "json",
  • + timeout: 1e5,
  • + error: function () {
  • + callback && callback("");
  • + },
  • + success: function (response) {
  • + callback && callback(response);
  • + }
  • + });
  • + };
  • +
  • + obj.getShareId = function () {
  • + var match;
  • +
  • + match = location.href.match(/share\/init\?surl=([a-z0-9-_]+)/i);
  • + if (match) {
  • + return match[1];
  • + }
  • +
  • + match = location.pathname.match(/\/s\/1([a-z0-9-_]+)/i);
  • + if (match) {
  • + return match[1];
  • + }
  • +
  • + return null;
  • + };
  • +
  • + obj.isPwdShareOpen = function () {
  • + return option.isOptionActive(option.constant.baidu_share_status);
  • + };
  • +
  • + obj.getYunData = function () {
  • + if (!obj.yun_data) {
  • + obj.yun_data = unsafeWindow.yunData;
  • + }
  • + return obj.yun_data;
  • + };
  • +
  • + obj.getTempPath = function () {
  • + var tempPath = config.getConfig("temp_path");
  • + if (tempPath) {
  • + return tempPath;
  • + }
  • + else {
  • + return obj.temp_path;
  • + }
  • + };
  • +
  • + obj.setTempPath = function (tempPath) {
  • + config.setConfig("temp_path", tempPath);
  • + };
  • +
  • + obj.getAppId = function () {
  • + var appId = config.getConfig("app_id");
  • + if (appId) {
  • + return appId;
  • + }
  • + else {
  • + return obj.app_id;
  • + }
  • + };
  • +
  • + obj.setAppId = function (appId) {
  • + config.setConfig("app_id", appId);
  • + };
  • +
  • + obj.initWidgetContext = function (name) {
  • + try {
  • + obj.async(name, function (widget) {
  • + widget.setContext(obj.getSystemContext());
  • + });
  • + }
  • + catch (err) { }
  • + };
  • +
  • + obj.ajax = function (option) {
  • + obj.getJquery().ajax(option);
  • + };
  • +
  • + obj.getSystemContext = function () {
  • + return obj.require("system-core:context/context.js").instanceForSystem;
  • + };
  • +
  • + obj.getJquery = function () {
  • + return obj.require("base:widget/libs/jquerypacket.js");
  • + };
  • +
  • + obj.require = function (name) {
  • + return unsafeWindow.require(name);
  • + };
  • +
  • + obj.async = function (name, callback) {
  • + unsafeWindow.require.async(name, callback);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("app_weiyun", ["router", "option", "logger", "unsafeWindow", "constant", "runtime", "api", "shareLog", "$"], function (router, option, logger, unsafeWindow, constant, runtime, api, shareLog, $) {
  • + var obj = {
  • + modules: {},
  • + webpack_require: null,
  • + verify_page: {
  • + setPwd: null,
  • + share_pwd: null,
  • + submit_pwd: null
  • + }
  • + };
  • +
  • + obj.run = function () {
  • + var url = router.getUrl();
  • + if (url.indexOf("weiyun.com/disk") > 0) {
  • + option.isOptionActive(option.constant.weiyun_page_home) && obj.initHomePage();
  • + return true;
  • + }
  • + else if (url.indexOf("share.weiyun.com") > 0) {
  • + obj.initVerifyPage();
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.initHomePage = function () {
  • + obj.initWebpackRequire();
  • +
  • + setInterval(obj.initHomePageElement, 1000);
  • + };
  • +
  • + obj.initHomePageElement = function () {
  • + var template = '<div class="action-item mod-action-wrap-link"><div class="action-item-con"><i class="icon icon-link"></i><span class="act-txt">显示链接</span></div></div>';
  • + $(".mod-action-wrap-menu:not(.nd-show-link-already)").each(function () {
  • + var $this = $(this);
  • + if ($this.find(".icon-download")) {
  • + $this.addClass("nd-show-link-already");
  • +
  • + $this.prepend(template);
  • + $this.find(".mod-action-wrap-link").click(function (e) {
  • + e.stopPropagation();
  • + obj.showHomeDownload();
  • + });
  • + }
  • + });
  • + };
  • +
  • + obj.initVerifyPage = function () {
  • + obj.initWebpackRequire();
  • +
  • + if (option.isOptionActive(option.constant.weiyun_page_verify)) {
  • + obj.registerStoreSharePwd();
  • +
  • + obj.initVerifyPageElement(function () {
  • + obj.autoPaddingSharePwd();
  • + obj.registerPwdShareSwitch();
  • + });
  • + }
  • +
  • + if (option.isOptionActive(option.constant.weiyun_page_share) && unsafeWindow.syncData.shareInfo.note_list.length == 0) {
  • + obj.initSharePage();
  • + }
  • + };
  • +
  • + obj.initSharePage = function () {
  • + if ($(".mod-action-wrap-link").length == 0) {
  • + var html = '<div class="mod-action-wrap mod-action-wrap-menu mod-action-wrap-link clearfix"><div class="action-item"><div class="action-item-con"><i class="icon icon-link"></i><span class="act-txt">显示链接</span></div></div></div>';
  • + $(".mod-action-wrap-code").after(html);
  • +
  • + $(".mod-action-wrap-link").click(function (e) {
  • + e.stopPropagation();
  • + obj.showShareDownload();
  • + });
  • + }
  • + setTimeout(obj.initSharePage, 500);
  • + };
  • +
  • + obj.initVerifyPageElement = function (callback) {
  • + var shareId = obj.getShareId();
  • + var $pwd = $(".card-inner .input-txt[type='password']");
  • + var $button = $(".card-inner .btn-main");
  • + if (shareId && $pwd.length && $button.length) {
  • +
  • + // 显示分享密码
  • + $pwd.attr("type", "text");
  • +
  • + // 设置分享密码
  • + obj.verify_page.setPwd = function (pwd) {
  • + $pwd.val(pwd);
  • + };
  • +
  • + // 重造按钮
  • + var $itemButton = $button.parent();
  • + $itemButton.safeHtml($button.prop("outerHTML"));
  • + $button = $itemButton.find(".btn-main");
  • +
  • + // 按钮事件
  • + $button.on("click", function () {
  • + obj.getStore() && obj.getStore().dispatch("shareInfo/loadShareInfoWithoutLogin", $pwd.val());
  • + });
  • +
  • + // 提交密码
  • + obj.verify_page.submit_pwd = function () {
  • + $button.click();
  • + };
  • +
  • + callback && callback();
  • + }
  • + else {
  • + setTimeout(function () {
  • + obj.initVerifyPageElement(callback);
  • + }, 500);
  • + }
  • + };
  • +
  • + obj.autoPaddingSharePwd = function () {
  • + var shareId = obj.getShareId();
  • + var shareLink = obj.getShareLink();
  • + api.querySharePwd(constant.source.weiyun, shareId, shareLink, function (response) {
  • + if (response && response.code == 1) {
  • + var sharePwd = response.data.share_pwd;
  • + obj.verify_page.share_pwd = sharePwd;
  • + obj.verify_page.setPwd(sharePwd);
  • + obj.showTipSuccess("填充密码成功");
  • +
  • + if (option.isOptionActive(option.constant.weiyun_auto_jump)) {
  • + obj.verify_page.submit_pwd && obj.verify_page.submit_pwd();
  • + }
  • + }
  • + else {
  • + obj.showTipError("暂无人分享密码");
  • + }
  • + });
  • + };
  • +
  • + obj.registerPwdShareSwitch = function () {
  • + // 添加开关
  • + $(".card-inner .form-item-label .form-item-tit").safeHtml('<span class="form-item-tit">请输入分享密码<span style="margin-left: 45px;"><input type="checkbox" checked id="nd-share-check" style="vertical-align: middle;"> <a class="nd-open-page-option" href="javascript:;" title="点击查看更多脚本配置">共享密码</a></span></span>');
  • + obj.isPwdShareOpen() || $("#nd-share-check").removeAttr("checked");
  • +
  • + // 开关-事件
  • + $("#nd-share-check").on("change", function () {
  • + if ($(this).is(':checked')) {
  • + option.setOptionActive(option.constant.weiyun_share_status);
  • + }
  • + else {
  • + option.setOptionUnActive(option.constant.weiyun_share_status);
  • + }
  • + });
  • +
  • + // 打开配置页
  • + $(".nd-open-page-option").click(function () {
  • + runtime.openOptionsPage();
  • + });
  • + };
  • +
  • + obj.registerStoreSharePwd = function () {
  • + obj.addResponseInterceptor(function (request, response) {
  • + var requestUrl = request.responseURL;
  • + if (requestUrl.indexOf("weiyunShareNoLogin/WeiyunShareView") > 0) {
  • + if (response.data.data.rsp_header.retcode == 0) {
  • + var match = response.config.data.match(/\\"share_pwd\\":\\"([\w]+)\\"/);
  • + if (!match) {
  • + return logger.warn("pwd share not match");
  • + }
  • +
  • + var sharePwd = match[1];
  • + if (sharePwd == obj.verify_page.share_pwd) {
  • + return logger.warn("pwd share not change");
  • + }
  • +
  • + if (!obj.isPwdShareOpen()) {
  • + return logger.warn("pwd share closed");
  • + }
  • +
  • + var shareId = obj.getShareId();
  • + var shareLink = obj.getShareLink();
  • + shareLog.addShareLog(shareId, sharePwd, shareLink, constant.source.weiyun);
  • + }
  • + else {
  • + return logger.warn("pwd share error");
  • + }
  • + }
  • + });
  • + };
  • +
  • + obj.addResponseInterceptor = function (callback) {
  • + var success = function (response) {
  • + try {
  • + callback && callback(response.request, response);
  • + }
  • + catch (e) {
  • + logger.warn(e);
  • + }
  • + return response;
  • + };
  • + var error = function () {
  • + return Promise.reject(error);
  • + };
  • + obj.getAxios() && obj.getAxios().interceptors.response.use(success, error);
  • + };
  • +
  • + obj.showBox = function (body) {
  • + var template = '<div class="modal modal-show" id="file-modal"><b class="modal-mask"></b><div class="modal-dialog modal-dialog-680"><div class="modal-dialog-hd clearfix"><h4 class="modal-dialog-title">文件下载</h4><button class="btn-icon icon icon-pop-close"></button></div><div class="modal-dialog-bd modal-body"></div></div></div>';
  • + if ($("#file-modal").length == 0) {
  • + $("body").append(template);
  • + $("#file-modal .icon-pop-close").on("click", function () {
  • + $("#file-modal").hide();
  • + });
  • + }
  • + $("#file-modal").show();
  • + $("#file-modal .modal-body").safeHtml(body);
  • + };
  • +
  • + obj.showShareDownload = function () {
  • + var fileData = obj.getSelectedShareFileData();
  • + if (fileData.node_list.length == 0) {
  • + return obj.showTipError("请选择至少一个文件/文件夹");
  • + }
  • +
  • + obj.requestShareDownload(fileData).then(function (response) {
  • + obj.showShareDownloadBox(fileData, response);
  • + }, function (response) {
  • + obj.showTipError(response.msg);
  • + });
  • + };
  • +
  • + obj.showHomeDownload = function () {
  • + var fileData = obj.getSelectedShareFileData();
  • + if (fileData.node_list.length == 0) {
  • + return obj.showTipError("请选择至少一个文件/文件夹");
  • + }
  • +
  • + obj.requestHomeDownload(fileData).then(function (response) {
  • + obj.showShareDownloadBox(fileData, response);
  • + }, function (response) {
  • + obj.showTipError(response.msg);
  • + });
  • + };
  • +
  • + obj.parseDownFile = function (fileData) {
  • + var fileName = "", packName = "";
  • + if (fileData.dir_list.length > 0) {
  • + if (fileData.file_list.length > 0) {
  • + packName = fileData.dir_list[0].filename + " 等" + (fileData.dir_list.length + fileData.file_list.length) + "个文件";
  • + }
  • + else {
  • + packName = fileData.dir_list[0].filename;
  • + }
  • + fileName = packName + ".zip";
  • + }
  • + else {
  • + if (fileData.file_list.length > 1) {
  • + packName = fileData.node_list[0].getNameNoExt() + " 等" + fileData.file_list.length + "个文件";
  • + fileName = packName + ".zip";
  • + }
  • + else {
  • + fileName = fileData.file_list[0].filename;
  • + }
  • + }
  • + return {
  • + file_name: fileName,
  • + pack_name: packName
  • + };
  • + };
  • +
  • + obj.requestHomeDownload = function (fileData) {
  • + var baseRequest = obj.getBaseRequest();
  • + var downFile = obj.parseDownFile(fileData);
  • + if (baseRequest) {
  • + return downFile.pack_name ? baseRequest.getPackUrl(fileData.node_list, {}) : baseRequest.getSingleUrl(fileData.node_list, {});
  • + }
  • + else {
  • + return new Promise(function (resolve, reject) {
  • + reject({ retcode: -1, msg: "生成链接失败" });
  • + });
  • + }
  • + };
  • +
  • + obj.requestShareDownload = function (fileData) {
  • + var shareFile = obj.getShareFile(), downloadRequest = obj.getDownloadRequest();
  • + var downFile = obj.parseDownFile(fileData);
  • + if (shareFile && downloadRequest) {
  • + var detail = {
  • + shareKey: shareFile.shareKey,
  • + sharePwd: shareFile.sharePwd,
  • + fileOwner: shareFile.shareOwner,
  • + downloadType: 0,
  • + packName: downFile.pack_name,
  • + pdirKey: "",
  • + dirList: fileData.dir_list,
  • + fileList: fileData.file_list
  • + };
  • + return downFile.pack_name ? downloadRequest.sharePartDownload(detail) : downloadRequest.shareBatchDownload(detail);
  • + }
  • + else {
  • + return new Promise(function (resolve, reject) {
  • + reject({ retcode: -1, msg: "生成链接失败" });
  • + });
  • + }
  • + };
  • +
  • + obj.showShareDownloadBox = function (fileData, response) {
  • + var downFile = obj.parseDownFile(fileData);
  • + if (response.download_url) {
  • + Object.assign(downFile, response);
  • + }
  • + else {
  • + Object.assign(downFile, response.file_list[0]);
  • + }
  • +
  • + var html = '<div style="padding: 20px; overflow-y: auto;">';
  • + var rowStyle = "margin:10px 0px;overflow:hidden; white-space:nowrap; text-overflow:ellipsis;";
  • + html += '<p>' + downFile.file_name + '</p>';
  • + html += '<p style="' + rowStyle + '"><a title="' + downFile.download_url + '" href="' + downFile.download_url + '" style="color: blue;">' + downFile.download_url + '</a></p>';
  • + html += '<div>';
  • + obj.showBox(html);
  • + };
  • +
  • + obj.showTipSuccess = function (msg) {
  • + obj.getModal() && obj.getModal().success(msg);
  • + };
  • +
  • + obj.showTipError = function (msg) {
  • + obj.getModal() && obj.getModal().error(msg);
  • + };
  • +
  • + obj.getShareId = function () {
  • + var url = router.getUrl();
  • + var match = url.match(/share.weiyun.com\/([0-9a-z]+)/i);
  • + return match ? match[1] : null;
  • + };
  • +
  • + obj.getShareLink = function () {
  • + return router.getUrl();
  • + };
  • +
  • + obj.isHomePage = function () {
  • + if (router.getUrl().indexOf("weiyun.com/disk") >= 0) {
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.isPwdShareOpen = function () {
  • + return option.isOptionActive(option.constant.weiyun_share_status);
  • + };
  • +
  • + obj.getSelectedShareFileData = function () {
  • + var fileData = {
  • + node_list: obj.getSelectedFileNodes(),
  • + dir_list: [],
  • + file_list: []
  • + };
  • + fileData.node_list.forEach(function (item) {
  • + if (item.getSize) {
  • + var file = {
  • + file_id: item.getId(),
  • + pdir_key: item.getPdirKey(),
  • + filename: item.getName(),
  • + file_size: item.getSize()
  • + };
  • + if (item.isDir()) {
  • + fileData.dir_list.push(file);
  • + }
  • + else {
  • + fileData.file_list.push(file);
  • + }
  • + }
  • + });
  • + return fileData;
  • + };
  • +
  • + obj.getSelectedFileNodes = function () {
  • + var fileNodes = [];
  • + if (obj.isHomePage()) {
  • + fileNodes = obj.getHomeFileNodes();
  • + }
  • + else {
  • + var shareFile = obj.getShareFile();
  • + if (shareFile) {
  • + if (shareFile.isSingleFile) {
  • + fileNodes = shareFile.childNodes;
  • + }
  • + else {
  • + fileNodes = shareFile.selectedNodes;
  • + }
  • + }
  • + }
  • + return fileNodes;
  • + };
  • +
  • + obj.getHomeFileNodes = function () {
  • + var fileNodes = [];
  • + var store = obj.getStore();
  • + var url = location.href;
  • + var filter = function (node) {
  • + return node.isSelected() ? 1 : 0;
  • + };
  • + if (store instanceof Object) {
  • + if (url.indexOf("weiyun.com/disk/doc") >= 0) {
  • + fileNodes = store.state.doc.curCateNode.getKidNodes().filter(filter);
  • + }
  • + else if (url.indexOf("weiyun.com/disk/photo") >= 0) {
  • + fileNodes = store.state.photo.curCateNode.getKidNodes().filter(filter);
  • + }
  • + else if (url.indexOf("weiyun.com/disk/video") >= 0) {
  • + fileNodes = store.state.video.cateNode.getKidNodes().filter(filter);
  • + }
  • + else if (url.indexOf("weiyun.com/disk/auido") >= 0) {
  • + fileNodes = store.state.audio.cateNode.getKidNodes().filter(filter);
  • + }
  • + else if (url.indexOf("weiyun.com/disk/time") >= 0) {
  • + fileNodes = store.state.time.rootNode.getKidNodes().filter(filter);
  • + }
  • + else if (url.indexOf("weiyun.com/disk/sharedir") >= 0) {
  • + fileNodes = store.state.sharedir.curNode.getKidNodes().filter(filter);
  • + }
  • + else if (url.indexOf("weiyun.com/disk/recent") >= 0) {
  • + var kidFeeds = store.state.recent.rootNode.getKidFeeds();
  • + kidFeeds.forEach(function (feed) {
  • + if (feed.isSelected()) {
  • + fileNodes = fileNodes.concat(feed.getKidNodes());
  • + }
  • + });
  • + }
  • + else if (url.indexOf("weiyun.com/disk/recycle") >= 0) {
  • + fileNodes = store.state.recycle.rootNode.getKidNodes().filter(filter);
  • + }
  • + else if (store.state.disk) {
  • + fileNodes = store.state.disk.curNode.getKidNodes().filter(filter);
  • + }
  • + }
  • + return fileNodes;
  • + };
  • +
  • + obj.getShareFile = function () {
  • + var store = obj.getStore();
  • + if (store instanceof Object) {
  • + return store.state.sharefile.shareFile;
  • + }
  • + };
  • +
  • + obj.getBaseRequest = function () {
  • + return obj.matchWebpackModule("base_request", function (module, name) {
  • + if (module && module.getSingleUrl) {
  • + return module;
  • + }
  • + });
  • + };
  • +
  • + obj.getDownloadRequest = function () {
  • + return obj.matchWebpackModule("download_request", function (module, name) {
  • + if (module && module.DownloadRequest) {
  • + return new module.DownloadRequest();
  • + }
  • + });
  • + };
  • +
  • + obj.getAxios = function () {
  • + return obj.matchWebpackModule("axios", function (module, name) {
  • + if (module && module.Axios) {
  • + return module;
  • + }
  • + });
  • + };
  • +
  • + obj.getModal = function () {
  • + return obj.matchWebpackModule("modal", function (module, name) {
  • + if (module && module.confirm && module.success) {
  • + return module;
  • + }
  • + });
  • + };
  • +
  • + obj.getStore = function () {
  • + return obj.matchWebpackModule("store", function (module, name) {
  • + if (module && module.default && module.default._modulesNamespaceMap) {
  • + return module.default;
  • + }
  • + });
  • + };
  • +
  • + obj.matchWebpackModule = function (name, matchFunc) {
  • + if (!obj.modules.hasOwnProperty(name)) {
  • + for (var key in obj.webpack_require.c) {
  • + var match = matchFunc(obj.webpack_require(key), key);
  • + if (match) {
  • + obj.modules[name] = match;
  • + }
  • + }
  • + }
  • + return obj.modules[name];
  • + };
  • +
  • + obj.initWebpackRequire = function () {
  • + var injectName = "_nd_inject_";
  • + var moreModules = {};
  • + moreModules[injectName] = function (module, exports, __webpack_require__) {
  • + obj.webpack_require = __webpack_require__;
  • + };
  • + unsafeWindow.webpackJsonp([injectName], moreModules, [injectName]);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("app_lanzous", ["router", "option", "logger", "unsafeWindow", "constant", "runtime", "api", "shareLog", "$"], function (router, option, logger, unsafeWindow, constant, runtime, api, shareLog, $) {
  • + var obj = {
  • + verify_page: {
  • + setPwd: null,
  • + share_pwd: null,
  • + submit_pwd: null
  • + }
  • + };
  • +
  • + obj.run = function () {
  • + var url = router.getUrl();
  • + if (url.indexOf("lanzous.com") > 0 || url.indexOf("lanzoux.com") > 0) {
  • + option.isOptionActive(option.constant.lanzous_page_verify) && obj.initVerifyPage();
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.initVerifyPage = function () {
  • + obj.registerStoreSharePwd();
  • +
  • + obj.initVerifyPageElement(function () {
  • + obj.autoPaddingSharePwd();
  • +
  • + obj.registerPwdShareSwitch();
  • + });
  • + };
  • +
  • + obj.initVerifyPageElement = function (callback) {
  • + var shareId = obj.getShareId();
  • + var $pwd = $("#pwd");
  • + if (shareId && $pwd.length) {
  • +
  • + // 设置分享密码
  • + obj.verify_page.setPwd = function (pwd) {
  • + $pwd.val(pwd);
  • + };
  • +
  • + // 提交密码
  • + obj.verify_page.submit_pwd = function () {
  • + $("#sub").click();
  • + };
  • +
  • + callback && callback();
  • + }
  • + else {
  • + setTimeout(function () {
  • + obj.initVerifyPageElement(callback);
  • + }, 500);
  • + }
  • + };
  • +
  • + obj.autoPaddingSharePwd = function () {
  • + var shareId = obj.getShareId();
  • + var shareLink = obj.getShareLink();
  • + api.querySharePwd(constant.source.lanzous, shareId, shareLink, function (response) {
  • + if (response && response.code == 1) {
  • + var sharePwd = response.data.share_pwd;
  • + obj.verify_page.share_pwd = sharePwd;
  • + obj.verify_page.setPwd(sharePwd);
  • + obj.showTip(1, "填充密码成功", 2000);
  • +
  • + if (option.isOptionActive(option.constant.lanzous_auto_jump)) {
  • + obj.verify_page.submit_pwd && obj.verify_page.submit_pwd();
  • + }
  • + }
  • + else {
  • + obj.showTip(0, "暂无人分享密码", 2000);
  • + }
  • + });
  • + };
  • +
  • + obj.registerPwdShareSwitch = function () {
  • + var html = '<div style="text-align: center; margin-top: 10px;">分享设置 <input type="checkbox" checked id="nd-share-check" style="vertical-align: middle;" > <a style="cursor: pointer;" class="nd-open-page-option" href="javascript:;" title="点击查看更多脚本配置">共享密码</a></div>';
  • + if ($(".off").length) {
  • + $(".off").after(html);
  • + }
  • + else {
  • + $(".passwddiv-user").after(html);
  • + }
  • + obj.isPwdShareOpen() || $("#nd-share-check").removeAttr("checked");
  • +
  • + // 开关-事件
  • + $("#nd-share-check").on("change", function () {
  • + if ($(this).is(':checked')) {
  • + option.setOptionActive(option.constant.lanzous_share_status);
  • + }
  • + else {
  • + option.setOptionUnActive(option.constant.lanzous_share_status);
  • + }
  • + });
  • +
  • + // 打开配置页
  • + $(".nd-open-page-option").click(function () {
  • + runtime.openOptionsPage();
  • + });
  • + };
  • +
  • + obj.registerStoreSharePwd = function () {
  • + unsafeWindow.$(document).ajaxComplete(function (event, xhr, options) {
  • + var match = options.data.match(/pwd=(\w+)/);
  • + if (!match) {
  • + match = options.data.match(/p=(\w+)/);
  • + if (!match) {
  • + return logger.warn("pwd share not match");
  • + }
  • + }
  • +
  • + var sharePwd = match[1];
  • +
  • + if (sharePwd == obj.verify_page.share_pwd) {
  • + return logger.warn("pwd share not change");
  • + }
  • +
  • + if (!obj.isPwdShareOpen()) {
  • + return logger.warn("pwd share closed");
  • + }
  • +
  • + var shareId = obj.getShareId();
  • + var shareLink = obj.getShareLink();
  • + var response = obj.parseJson(xhr.response);
  • + if (response && response.zt == 1 && sharePwd) {
  • + shareLog.addShareLog(shareId, sharePwd, shareLink, constant.source.lanzous);
  • + }
  • + else {
  • + logger.warn("pwd share error");
  • + }
  • + });
  • + };
  • +
  • + obj.showTip = function (code, msg, timeout) {
  • + if (unsafeWindow.sms) {
  • + unsafeWindow.sms(msg);
  • + }
  • + else {
  • + var selector;
  • + if ($(".off").length) {
  • + selector = "#pwderr";
  • + }
  • + else {
  • + selector = "#info";
  • + }
  • + if (code) {
  • + $(selector).safeHtml('<span style="color: green;">' + msg + '</span>');
  • + }
  • + else {
  • + $(selector).safeHtml('<span style="color: red;">' + msg + '</span>');
  • + }
  • + setTimeout(function () {
  • + $(selector).text("");
  • + }, timeout);
  • + }
  • + };
  • +
  • + obj.getShareId = function () {
  • + var match;
  • +
  • + match = /lanzous.com\/([\w]+)\/([a-z0-9-_%]{4,})/gi.exec(location.href);
  • + if (match) {
  • + return match[1] + "/" + match[2];
  • + }
  • +
  • + match = /lanzous.com\/([a-z0-9-_]{4,})/gi.exec(location.href);
  • + if (match) {
  • + return match[1];
  • + }
  • +
  • + return location.pathname.substr(1);
  • + };
  • +
  • + obj.getShareLink = function () {
  • + return top.location.href;
  • + };
  • +
  • + obj.isPwdShareOpen = function () {
  • + return option.isOptionActive(option.constant.lanzous_share_status);
  • + };
  • +
  • + obj.parseJson = function (jsonStr) {
  • + var jsonObject = {};
  • + try {
  • + if (jsonStr) {
  • + jsonObject = JSON.parse(jsonStr);
  • + }
  • + }
  • + catch (e) { }
  • + return jsonObject;
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("app_189", ["router", "option", "logger", "constant", "api", "shareLog", "runtime", "unsafeWindow", "$"], function (router, option, logger, constant, api, shareLog, runtime, unsafeWindow, $) {
  • + var obj = {
  • + verify_page: {
  • + share_pwd: null
  • + }
  • + };
  • +
  • + obj.run = function () {
  • + var url = router.getUrl();
  • + if (url.indexOf("cloud.189.cn/t") > 0) {
  • + obj.initSharePage();
  • + return true;
  • + }
  • + else if (url.indexOf("cloud.189.cn/main") > 0 || url.indexOf("cloud.189.cn/photo") > 0) {
  • + option.isOptionActive(option.constant.ty189_page_home) && obj.initHomePage();
  • + return true;
  • + }
  • + else {
  • + return false;
  • + }
  • + };
  • +
  • + obj.initHomePage = function () {
  • + if ($("#J_Create").length) {
  • + $("#J_Create").after('<a class="btn btn-show-link" style="background: #2b89ea; color: #fff; cursor: pointer">显示链接</a>');
  • + $(".btn-show-link").on("click", obj.showDownload);
  • + }
  • + else if ($(".JC_Refresh").length) {
  • + $(".JC_Refresh").after('<a class="btn btn-show-link" style="background: #2b89ea; color: #fff; cursor: pointer">显示链接</a>');
  • + $(".btn-show-link").on("click", obj.showDownload);
  • + }
  • + else {
  • + setTimeout(obj.initHomePage, 500);
  • + }
  • + };
  • +
  • + obj.initSharePage = function () {
  • + if ($(".code-panel").length && option.isOptionActive(option.constant.ty189_page_verify)) {
  • + obj.initVerifyPage();
  • + }
  • +
  • + if (option.isOptionActive(option.constant.ty189_page_share)) {
  • + obj.initDownloadPage();
  • + }
  • + };
  • +
  • + obj.initVerifyPage = function () {
  • + obj.registerPwdShareSwitch();
  • +
  • + obj.registerStoreSharePwd();
  • +
  • + obj.autoPaddingSharePwd();
  • + };
  • +
  • + obj.registerPwdShareSwitch = function () {
  • + var html = '<span style="float:right"><input type="checkbox" checked id="nd-share-check" style="vertical-align: middle;"> <a class="nd-open-page-option one-pan-link-mark" title="点击查看更多脚本配置" style="cursor: pointer; text-decoration: underline;">共享提取码</a></span>';
  • + $(".code-panel .title").append(html);
  • + obj.isPwdShareOpen() || $("#nd-share-check").removeAttr("checked");
  • +
  • + // 开关-事件
  • + $("#nd-share-check").on("change", function () {
  • + if ($(this).is(':checked')) {
  • + option.setOptionActive(option.constant.ty189_share_status);
  • + }
  • + else {
  • + option.setOptionUnActive(option.constant.ty189_share_status);
  • + }
  • + });
  • +
  • + // 打开配置页
  • + $(".nd-open-page-option").click(function () {
  • + runtime.openOptionsPage();
  • + });
  • + };
  • +
  • + obj.registerStoreSharePwd = function () {
  • + unsafeWindow.$(document).ajaxComplete(function (event, xhr, options) {
  • + var response = xhr.responseJSON;
  • + if (options.url.indexOf("shareFileVerifyPass.action") > 0) {
  • + if (response instanceof Object && response.shareId && response.accessCode) {
  • + var sharePwd = response.accessCode;
  • +
  • + if (sharePwd == obj.verify_page.share_pwd) {
  • + return logger.warn("pwd share not change");
  • + }
  • +
  • + if (!obj.isPwdShareOpen()) {
  • + return logger.warn("pwd share closed");
  • + }
  • +
  • + var shareId = obj.getShareId();
  • + var shareLink = obj.getShareLink();
  • + shareLog.addShareLog(shareId, sharePwd, shareLink, constant.source.ty189);
  • + }
  • + else {
  • + logger.warn("pwd share not match");
  • + }
  • + }
  • + });
  • + };
  • +
  • + obj.autoPaddingSharePwd = function () {
  • + var shareId = obj.getShareId();
  • + var shareLink = obj.getShareLink();
  • + api.querySharePwd(constant.source.ty189, shareId, shareLink, function (response) {
  • + if (response && response.code == 1) {
  • + var sharePwd = response.data.share_pwd;
  • + obj.verify_page.share_pwd = sharePwd;
  • +
  • + $("#code_txt").val(sharePwd);
  • + obj.showTip(1, "填充访问码成功", 2000);
  • +
  • + if (option.isOptionActive(option.constant.ty189_auto_jump)) {
  • + setTimeout(function () {
  • + unsafeWindow.$(".btn.visit").click();
  • + }, 2000);
  • + }
  • + }
  • + else {
  • + obj.showTip(0, "暂无人分享访问码", 2000);
  • + }
  • + });
  • + };
  • +
  • + obj.showTip = function (code, msg, timeout) {
  • + var $element = $(".visit_error");
  • + if (code) {
  • + $element.safeHtml('<span style="color: green;">' + msg + '</span>');
  • + }
  • + else {
  • + $element.safeHtml('<span style="color: red;">' + msg + '</span>');
  • + }
  • + $element.show();
  • + setTimeout(function () {
  • + $element.hide();
  • + }, timeout);
  • + };
  • +
  • + obj.initDownloadPage = function () {
  • + $(".btn-download").after('<a class="btn btn-show-link" style="background: #2b89ea; cursor: pointer">显示链接</a>');
  • + $(".btn-show-link").on("click", obj.showDownload);
  • + };
  • +
  • + obj.showDownload = function () {
  • + var html = '<div style="padding: 20px; height: 410px; overflow-y: auto;">';
  • + var rowStyle = "margin:10px 0px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;";
  • +
  • + var fileIds = obj.getSelectedFileIds(),
  • + fileList = obj.getSelectedFileList();
  • +
  • + if (fileList.length > 1) {
  • + var packageUrl = obj.buildPackageUrl(fileIds, "打包下载.zip");
  • + html += '<p>压缩包</p>';
  • + html += '<p style="' + rowStyle + '"><a title="' + packageUrl + '" href="' + packageUrl + '" style="color: blue;">' + packageUrl + '</a></p>';
  • + html += '<p>&nbsp;</p>';
  • + }
  • +
  • + fileList.forEach(function (item, index) {
  • + var file = item.attributes;
  • + if (file.isFolder) {
  • + file.downloadUrl = obj.buildPackageUrl(file.fileId, file.fileName + ".zip");
  • + }
  • + else {
  • + file.downloadUrl = location.protocol + file.downloadUrl;
  • + }
  • + html += '<p>' + (++index) + ':' + (file.fileName ? file.fileName : file.fileId) + '</p>';
  • + html += '<p style="' + rowStyle + '"><a title="' + file.downloadUrl + '" href="' + file.downloadUrl + '" style="color: blue;">' + file.downloadUrl + '</a></p>';
  • + });
  • +
  • + html += '<div>';
  • + obj.showBox(html);
  • + };
  • +
  • + obj.showBox = function (body) {
  • + var template = '<div id="J_FileModal" class="treeBox-modal modal in" style="display:block"><div class="modal-dialog"><div class="modal-header"><a class="close">×</a><h3>文件下载</h3></div><div class="modal-body"></div></div></div>';
  • + if ($("#J_FileModal").length == 0) {
  • + $("body").append(template);
  • + $("#J_FileModal .close").on("click", function () {
  • + $("#J_FileModal").hide();
  • + });
  • + }
  • + $("#J_FileModal").show();
  • + $("#J_FileModal .modal-body").safeHtml(body);
  • + };
  • +
  • + obj.buildPackageUrl = function (fileIds, fileName) {
  • + var downloadUrl = unsafeWindow.edrive.downloadUrl,
  • + sessionKey = unsafeWindow.edrive.sessionKey;
  • + fileName || (fileName = "");
  • + if (unsafeWindow._shareId) {
  • + return location.protocol + downloadUrl + "?sessionKey=" + sessionKey + "&fileIdS=" + fileIds + "&downloadType=3&shareId=" + unsafeWindow._shareId + "&filename=" + encodeURIComponent(fileName);
  • + }
  • + else {
  • + return location.protocol + downloadUrl + "?sessionKey=" + sessionKey + "&fileIdS=" + fileIds + "&downloadType=1&filename=" + encodeURIComponent(fileName);
  • + }
  • + };
  • +
  • + obj.getSelectedFileIds = function () {
  • + var fileIdList = [];
  • + var fileList = obj.getSelectedFileList();
  • + fileList.forEach(function (item) {
  • + fileIdList.push(item.attributes.fileId);
  • + });
  • + return fileIdList.join(",");
  • + };
  • +
  • + obj.getSelectedFileList = function () {
  • + var mainView = null, fileList = [];
  • + if (unsafeWindow.downloadUrl) {
  • + fileList = [
  • + {
  • + attributes: unsafeWindow
  • + }
  • + ];
  • + }
  • + else if (unsafeWindow._shareId) {
  • + mainView = unsafeWindow.appRouter.mainView;
  • + if (mainView instanceof Object && mainView.fileList) {
  • + fileList = mainView.fileList;
  • + if (fileList.selected().length) {
  • + fileList = fileList.selected();
  • + }
  • + }
  • + }
  • + else if (unsafeWindow.mainView) {
  • + mainView = unsafeWindow.mainView;
  • + if (mainView.fileListTabObj && mainView.fileListTabObj[mainView.options.fileId]) {
  • + fileList = mainView.fileListTabObj[mainView.options.fileId].fileList.selected();
  • + }
  • + else if (mainView.getSelectedModels) {
  • + fileList = mainView.getSelectedModels();
  • + }
  • + }
  • +
  • + var selectedFileList = [];
  • + fileList.forEach(function (item) {
  • + if (item.attributes.fileId > 0) {
  • + selectedFileList.push(item);
  • + }
  • + });
  • + return selectedFileList;
  • + };
  • +
  • + obj.getShareId = function () {
  • + var url = router.getUrl();
  • + var match = url.match(/cloud\.189\.cn\/t\/([0-9a-z]+)/i);
  • + return match ? match[1] : null;
  • + };
  • +
  • + obj.getShareLink = function () {
  • + return location.href;
  • + };
  • +
  • + obj.isPwdShareOpen = function () {
  • + return option.isOptionActive(option.constant.ty189_share_status);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("app_manage", ["meta", "unsafeWindow"], function (meta, unsafeWindow) {
  • + var obj = {};
  • +
  • + obj.run = function () {
  • + if (meta.existMeta("manage")) {
  • + unsafeWindow.OnePan = container;
  • + return true;
  • + }
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + container.define("app", ["appRunner"], function (appRunner) {
  • + var obj = {};
  • +
  • + obj.run = function () {
  • + appRunner.run([
  • + {
  • + name: "app_baidu",
  • + matchs: [
  • + "baidu.com"
  • + ]
  • + },
  • + {
  • + name: "app_weiyun",
  • + matchs: [
  • + "weiyun.com"
  • + ]
  • + },
  • + {
  • + name: "app_lanzous",
  • + matchs: [
  • + "lanzous.com",
  • + "lanzoux.com"
  • + ]
  • + },
  • + {
  • + name: "app_189",
  • + matchs: [
  • + "cloud.189.cn"
  • + ]
  • + },
  • + {
  • + name: "app_manage",
  • + matchs: [
  • + "*"
  • + ]
  • + }
  • + ]);
  • + };
  • +
  • + return obj;
  • + });
  • +
  • + /** lib **/
  • + container.define("$", [], function () {
  • + return window.$;
  • + });
  • + container.define("Snap", [], function () {
  • + if (typeof Snap != "undefined") {
  • + return Snap;
  • + }
  • + else {
  • + return window.Snap;
  • + }
  • + });
  • + container.define("DOMPurify", [], function () {
  • + if (typeof DOMPurify != "undefined") {
  • + return DOMPurify;
  • + }
  • + else {
  • + return window.DOMPurify;
  • + }
  • + });
  • +
  • container.use(["gm", "core", "app"], function (gm, core, app) {
  • gm.ready(function () {
  • core.ready(app.run);

This report has been upheld by a moderator.