网盘链接检查

自动识别并标记百度云、蓝奏云、腾讯微云和天翼云盘的链接状态

  1. // ==UserScript==
  2. // @name 网盘链接检查
  3. // @namespace http://go.newday.me/s/link-home
  4. // @version 0.2.2
  5. // @icon http://cdn.newday.me/addon/link/favicon.ico
  6. // @author 哩呵
  7. // @description 自动识别并标记百度云、蓝奏云、腾讯微云和天翼云盘的链接状态
  8. // @match *://**/*
  9. // @connect www.lanzous.com
  10. // @connect pan.baidu.com
  11. // @connect share.weiyun.com
  12. // @connect cloud.189.cn
  13. // @connect newday.me
  14. // @connect likestyle.cn
  15. // @require https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js
  16. // @require https://cdn.staticfile.org/snap.svg/0.5.1/snap.svg-min.js
  17. // @require https://cdn.staticfile.org/findAndReplaceDOMText/0.4.6/findAndReplaceDOMText.min.js
  18. // @run-at document-start
  19. // @grant unsafeWindow
  20. // @grant GM_getValue
  21. // @grant GM_setValue
  22. // @grant GM_deleteValue
  23. // @grant GM_listValues
  24. // @grant GM_openInTab
  25. // @grant GM_notification
  26. // @grant GM_xmlhttpRequest
  27. // @noframes
  28. // ==/UserScript==
  29. (function () {
  30. 'use strict';
  31.  
  32. var manifest = {
  33. "name": "ljjc",
  34. "urls": {},
  35. "apis": {
  36. "version": "https://api.newday.me/share/link/version",
  37. "valid": "https://api.newday.me/share/link/valid",
  38. "report": "https://api.newday.me/share/link/report"
  39. },
  40. "logger_level": 3,
  41. "options_page": "http://go.newday.me/s/link-option"
  42. };
  43.  
  44. var container = (function () {
  45. var obj = {
  46. defines: {},
  47. modules: {}
  48. };
  49.  
  50. obj.define = function (name, requires, callback) {
  51. name = obj.processName(name);
  52. obj.defines[name] = {
  53. requires: requires,
  54. callback: callback
  55. };
  56. };
  57.  
  58. obj.require = function (name, cache) {
  59. if (typeof cache == "undefined") {
  60. cache = true;
  61. }
  62.  
  63. name = obj.processName(name);
  64. if (cache && obj.modules.hasOwnProperty(name)) {
  65. return obj.modules[name];
  66. } else if (obj.defines.hasOwnProperty(name)) {
  67. var requires = obj.defines[name].requires;
  68. var callback = obj.defines[name].callback;
  69.  
  70. var module = obj.use(requires, callback);
  71. cache && obj.register(name, module);
  72. return module;
  73. }
  74. };
  75.  
  76. obj.use = function (requires, callback) {
  77. var module = {
  78. exports: undefined
  79. };
  80. var params = obj.buildParams(requires, module);
  81. var result = callback.apply(this, params);
  82. if (typeof result != "undefined") {
  83. return result;
  84. } else {
  85. return module.exports;
  86. }
  87. };
  88.  
  89. obj.register = function (name, module) {
  90. name = obj.processName(name);
  91. obj.modules[name] = module;
  92. };
  93.  
  94. obj.buildParams = function (requires, module) {
  95. var params = [];
  96. requires.forEach(function (name) {
  97. params.push(obj.require(name));
  98. });
  99. params.push(obj.require);
  100. params.push(module.exports);
  101. params.push(module);
  102. return params;
  103. };
  104.  
  105. obj.processName = function (name) {
  106. return name.toLowerCase();
  107. };
  108.  
  109. return {
  110. define: obj.define,
  111. use: obj.use,
  112. register: obj.register,
  113. modules: obj.modules
  114. };
  115. })();
  116.  
  117. container.define("gm", [], function () {
  118. var obj = {};
  119.  
  120. obj.ready = function (callback) {
  121. if (typeof GM_getValue != "undefined") {
  122. callback && callback();
  123. }
  124. else {
  125. setTimeout(function () {
  126. obj.ready(callback);
  127. }, 100);
  128. }
  129. };
  130.  
  131. return obj;
  132. });
  133.  
  134. /** common **/
  135. container.define("gmDao", [], function () {
  136. var obj = {
  137. items: {}
  138. };
  139.  
  140. obj.get = function (name) {
  141. return GM_getValue(name);
  142. };
  143.  
  144. obj.getBatch = function (names) {
  145. var items = {};
  146. names.forEach(function (name) {
  147. items[name] = obj.get(name);
  148. });
  149. return items;
  150. };
  151.  
  152. obj.getAll = function () {
  153. return obj.getBatch(GM_listValues());
  154. };
  155.  
  156. obj.set = function (name, item) {
  157. GM_setValue(name, item);
  158. };
  159.  
  160. obj.setBatch = function (items) {
  161. for (var name in items) {
  162. obj.set(name, items[name]);
  163. }
  164. };
  165.  
  166. obj.setAll = function (items) {
  167. var names = GM_listValues();
  168. names.forEach(function (name) {
  169. if (!items.hasOwnProperty(name)) {
  170. obj.remove(name);
  171. }
  172. });
  173. obj.setBatch(items);
  174. };
  175.  
  176. obj.remove = function (name) {
  177. GM_deleteValue(name);
  178. };
  179.  
  180. obj.removeBatch = function (names) {
  181. names.forEach(function (name) {
  182. obj.remove(name);
  183. });
  184. };
  185.  
  186. obj.removeAll = function () {
  187. obj.removeBatch(GM_listValues());
  188. };
  189.  
  190. return obj;
  191. });
  192.  
  193. container.define("ScopeDao", [], function () {
  194. return function (dao, scope) {
  195. var obj = {
  196. items: {}
  197. };
  198.  
  199. obj.get = function (name) {
  200. return obj.items[name];
  201. };
  202.  
  203. obj.getBatch = function (names) {
  204. var items = {};
  205. names.forEach(function (name) {
  206. if (obj.items.hasOwnProperty(name)) {
  207. items[name] = obj.items[name];
  208. }
  209. });
  210. return items;
  211. };
  212.  
  213. obj.getAll = function () {
  214. return obj.items;
  215. };
  216.  
  217. obj.set = function (name, item) {
  218. obj.items[name] = item;
  219.  
  220. obj.sync();
  221. };
  222.  
  223. obj.setBatch = function (items) {
  224. obj.items = Object.assign(obj.items, items);
  225.  
  226. obj.sync();
  227. };
  228.  
  229. obj.setAll = function (items) {
  230. obj.items = Object.assign({}, items);
  231.  
  232. obj.sync();
  233. };
  234.  
  235. obj.remove = function (name) {
  236. delete obj.items[name];
  237.  
  238. obj.sync();
  239. };
  240.  
  241. obj.removeBatch = function (names) {
  242. names.forEach(function (name) {
  243. delete obj.items[name];
  244. });
  245.  
  246. obj.sync();
  247. };
  248.  
  249. obj.removeAll = function () {
  250. obj.items = {};
  251.  
  252. obj.getDao().remove(obj.getScope());
  253. };
  254.  
  255. obj.init = function () {
  256. var items = obj.getDao().get(obj.getScope());
  257. if (items instanceof Object) {
  258. obj.items = items;
  259. }
  260. };
  261.  
  262. obj.sync = function () {
  263. obj.getDao().set(obj.getScope(), obj.items);
  264. };
  265.  
  266. obj.getDao = function () {
  267. return dao;
  268. };
  269.  
  270. obj.getScope = function () {
  271. return scope;
  272. };
  273.  
  274. return obj.init(), obj;
  275. };
  276. });
  277.  
  278. container.define("config", ["factory"], function (factory) {
  279. var obj = {};
  280.  
  281. obj.getConfig = function (name) {
  282. return obj.getDao().get(name);
  283. };
  284.  
  285. obj.setConfig = function (name, value) {
  286. obj.getDao().set(name, value);
  287. };
  288.  
  289. obj.getAll = function () {
  290. return obj.getDao().getAll();
  291. };
  292.  
  293. obj.getDao = function () {
  294. return factory.getConfigDao();
  295. };
  296.  
  297. return obj;
  298. });
  299.  
  300. container.define("storage", ["factory"], function (factory) {
  301. var obj = {};
  302.  
  303. obj.getValue = function (name) {
  304. return obj.getDao().get(name);
  305. };
  306.  
  307. obj.setValue = function (name, value) {
  308. obj.getDao().set(name, value);
  309. };
  310.  
  311. obj.getAll = function () {
  312. return obj.getDao().getAll();
  313. };
  314.  
  315. obj.getDao = function () {
  316. return factory.getStorageDao();
  317. };
  318.  
  319. return obj;
  320. });
  321.  
  322. container.define("option", ["config", "constant"], function (config, constant) {
  323. var obj = {
  324. name: "option",
  325. constants: constant.options
  326. };
  327.  
  328. obj.isOptionActive = function (item) {
  329. var name = item.name;
  330. var option = obj.getOption();
  331. return option.indexOf(name) >= 0 ? true : false;
  332. };
  333.  
  334. obj.setOptionActive = function (item) {
  335. var name = item.name;
  336. var option = obj.getOption();
  337. if (option.indexOf(name) < 0) {
  338. option.push(name);
  339. obj.setOption(option);
  340. }
  341. };
  342.  
  343. obj.setOptionUnActive = function (item) {
  344. var name = item.name;
  345. var option = obj.getOption();
  346. var index = option.indexOf(name);
  347. if (index >= 0) {
  348. delete option[index];
  349. obj.setOption(option);
  350. }
  351. };
  352.  
  353. obj.getOption = function () {
  354. var option = [];
  355. var optionList = obj.getOptionList();
  356. Object.values(obj.constants).forEach(function (item) {
  357. var name = item.name;
  358. if (optionList.hasOwnProperty(name)) {
  359. if (optionList[name] != "no") {
  360. option.push(name);
  361. }
  362. }
  363. else if (item.value != "no") {
  364. option.push(name);
  365. }
  366. });
  367. return option;
  368. };
  369.  
  370. obj.setOption = function (option) {
  371. var optionList = {};
  372. Object.values(obj.constants).forEach(function (item) {
  373. var name = item.name;
  374. if (option.indexOf(name) >= 0) {
  375. optionList[name] = "yes";
  376. } else {
  377. optionList[name] = "no";
  378. }
  379. });
  380. obj.setOptionList(optionList);
  381. };
  382.  
  383. obj.getOptionList = function () {
  384. var optionList = config.getConfig(obj.name);
  385. return optionList ? optionList : {};
  386. };
  387.  
  388. obj.setOptionList = function (optionList) {
  389. config.setConfig(obj.name, optionList);
  390. };
  391.  
  392. return obj;
  393. });
  394.  
  395. container.define("manifest", [], function () {
  396. var obj = {
  397. manifest: manifest
  398. };
  399.  
  400. obj.getItem = function (name) {
  401. return obj.manifest[name];
  402. };
  403.  
  404. obj.getManifest = function () {
  405. return obj.manifest;
  406. };
  407.  
  408. obj.getName = function () {
  409. return obj.getItem("name");
  410. };
  411.  
  412. obj.getAppName = function () {
  413. return obj.getItem("app_name");
  414. };
  415.  
  416. obj.getUrl = function (name) {
  417. var urls = obj.getItem("urls");
  418. (urls instanceof Object) || (urls = {});
  419. return urls[name];
  420. };
  421.  
  422. obj.getApi = function (name) {
  423. var apis = obj.getItem("apis");
  424. (apis instanceof Object) || (apis = {});
  425. return apis[name];
  426. };
  427.  
  428. obj.getOptionsPage = function () {
  429. if (GM_info.script.optionUrl) {
  430. return GM_info.script.optionUrl;
  431. }
  432. else {
  433. return obj.getItem("options_page");
  434. }
  435. };
  436.  
  437. return obj;
  438. });
  439.  
  440. container.define("env", ["config", "manifest"], function (config, manifest) {
  441. var obj = {
  442. modes: {
  443. ADDON: "addon",
  444. SCRIPT: "script"
  445. },
  446. browsers: {
  447. FIREFOX: "firefox",
  448. EDG: "edg",
  449. EDGE: "edge",
  450. BAIDU: "baidu",
  451. LIEBAO: "liebao",
  452. UC: "uc",
  453. QQ: "qq",
  454. SOGOU: "sogou",
  455. OPERA: "opera",
  456. MAXTHON: "maxthon",
  457. IE2345: "2345",
  458. SE360: "360",
  459. CHROME: "chrome",
  460. SAFIRI: "safari",
  461. OTHER: "other"
  462. }
  463. };
  464.  
  465. obj.getName = function () {
  466. return manifest.getName();
  467. };
  468.  
  469. obj.getMode = function () {
  470. if (GM_info.mode) {
  471. return GM_info.mode;
  472. }
  473. else {
  474. return obj.modes.SCRIPT;
  475. }
  476. };
  477.  
  478. obj.getAid = function () {
  479. if (GM_info.scriptHandler) {
  480. return GM_info.scriptHandler.toLowerCase();
  481. }
  482. else {
  483. return "unknown";
  484. }
  485. };
  486.  
  487. obj.getUid = function () {
  488. var uid = config.getConfig("uid");
  489. if (!uid) {
  490. uid = obj.randString(32);
  491. config.setConfig("uid", uid);
  492. }
  493. return uid;
  494. };
  495.  
  496. obj.getBrowser = function () {
  497. if (!obj._browser) {
  498. obj._browser = obj.matchBrowserType(navigator.userAgent);
  499. }
  500. return obj._browser;
  501. };
  502.  
  503. obj.getVersion = function () {
  504. return GM_info.script.version;
  505. };
  506.  
  507. obj.getEdition = function () {
  508. return GM_info.version;
  509. };
  510.  
  511. obj.getInfo = function () {
  512. return {
  513. mode: obj.getMode(),
  514. aid: obj.getAid(),
  515. uid: obj.getUid(),
  516. browser: obj.getBrowser(),
  517. version: obj.getVersion(),
  518. edition: obj.getEdition()
  519. };
  520. };
  521.  
  522. obj.matchBrowserType = function (userAgent) {
  523. var browser = obj.browsers.OTHER;
  524. userAgent = userAgent.toLowerCase();
  525. if (userAgent.match(/firefox/) != null) {
  526. browser = obj.browsers.FIREFOX;
  527. } else if (userAgent.match(/edge/) != null) {
  528. browser = obj.browsers.EDGE;
  529. } else if (userAgent.match(/edg/) != null) {
  530. browser = obj.browsers.EDG;
  531. } else if (userAgent.match(/bidubrowser/) != null) {
  532. browser = obj.browsers.BAIDU;
  533. } else if (userAgent.match(/lbbrowser/) != null) {
  534. browser = obj.browsers.LIEBAO;
  535. } else if (userAgent.match(/ubrowser/) != null) {
  536. browser = obj.browsers.UC;
  537. } else if (userAgent.match(/qqbrowse/) != null) {
  538. browser = obj.browsers.QQ;
  539. } else if (userAgent.match(/metasr/) != null) {
  540. browser = obj.browsers.SOGOU;
  541. } else if (userAgent.match(/opr/) != null) {
  542. browser = obj.browsers.OPERA;
  543. } else if (userAgent.match(/maxthon/) != null) {
  544. browser = obj.browsers.MAXTHON;
  545. } else if (userAgent.match(/2345explorer/) != null) {
  546. browser = obj.browsers.IE2345;
  547. } else if (userAgent.match(/chrome/) != null) {
  548. if (navigator.mimeTypes.length > 10) {
  549. browser = obj.browsers.SE360;
  550. } else {
  551. browser = obj.browsers.CHROME;
  552. }
  553. } else if (userAgent.match(/safari/) != null) {
  554. browser = obj.browsers.SAFIRI;
  555. }
  556. return browser;
  557. };
  558.  
  559. obj.randString = function (length) {
  560. var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
  561. var text = "";
  562. for (var i = 0; i < length; i++) {
  563. text += possible.charAt(Math.floor(Math.random() * possible.length));
  564. }
  565. return text;
  566. };
  567.  
  568. return obj;
  569. });
  570.  
  571. container.define("http", [], function () {
  572. var obj = {};
  573.  
  574. obj.ajax = function (option) {
  575. var details = {
  576. method: option.type,
  577. url: option.url,
  578. responseType: option.dataType,
  579. onload: function (result) {
  580. option.success && option.success(result.response);
  581. },
  582. onerror: function (result) {
  583. option.error && option.error(result.error);
  584. }
  585. };
  586.  
  587. // 提交数据
  588. if (option.data instanceof Object) {
  589. if (option.data instanceof FormData) {
  590. details.data = option.data;
  591. }
  592. else {
  593. var formData = new FormData();
  594. for (var i in option.data) {
  595. formData.append(i, option.data[i]);
  596. }
  597. details.data = formData;
  598. }
  599. }
  600.  
  601. // 自定义头
  602. if (option.headers) {
  603. details.headers = option.headers;
  604. }
  605.  
  606. // 超时
  607. if (option.timeout) {
  608. details.timeout = option.timeout;
  609. }
  610.  
  611. GM_xmlhttpRequest(details);
  612. };
  613.  
  614. return obj;
  615. });
  616.  
  617. container.define("router", [], function () {
  618. var obj = {};
  619.  
  620. obj.getUrl = function () {
  621. return location.href;
  622. };
  623.  
  624. obj.goUrl = function (url) {
  625. location.href = url;
  626. };
  627.  
  628. obj.openUrl = function (url) {
  629. window.open(url);
  630. };
  631.  
  632. obj.openTab = function (url, active) {
  633. GM_openInTab(url, !active);
  634. };
  635.  
  636. obj.jumpLink = function (jumpUrl, jumpMode) {
  637. switch (jumpMode) {
  638. case 9:
  639. // self
  640. obj.goUrl(jumpUrl);
  641. break;
  642. case 6:
  643. // new
  644. obj.openUrl(jumpUrl);
  645. break;
  646. case 3:
  647. // new & not active
  648. obj.openTab(jumpUrl, false);
  649. break;
  650. case 1:
  651. // new & active
  652. obj.openTab(jumpUrl, true);
  653. break;
  654. }
  655. };
  656.  
  657. obj.getUrlParam = function (name) {
  658. var param = obj.parseUrlParam(obj.getUrl());
  659. if (name) {
  660. return param.hasOwnProperty(name) ? param[name] : null;
  661. }
  662. else {
  663. return param;
  664. }
  665. };
  666.  
  667. obj.parseUrlParam = function (url) {
  668. if (url.indexOf("?")) {
  669. url = url.split("?")[1];
  670. }
  671. var reg = /([^=&\s]+)[=\s]*([^=&\s]*)/g;
  672. var obj = {};
  673. while (reg.exec(url)) {
  674. obj[RegExp.$1] = RegExp.$2;
  675. }
  676. return obj;
  677. };
  678.  
  679. return obj;
  680. });
  681.  
  682. container.define("logger", ["env", "manifest"], function (env, manifest) {
  683. var obj = {
  684. constant: {
  685. DEBUG: 0,
  686. INFO: 1,
  687. WARN: 2,
  688. ERROR: 3,
  689. NONE: 4
  690. }
  691. };
  692.  
  693. obj.debug = function (message) {
  694. obj.log(message, obj.constant.DEBUG);
  695. };
  696.  
  697. obj.info = function (message) {
  698. obj.log(message, obj.constant.INFO);
  699. };
  700.  
  701. obj.warn = function (message) {
  702. obj.log(message, obj.constant.WARN);
  703. };
  704.  
  705. obj.error = function (message) {
  706. obj.log(message, obj.constant.ERROR);
  707. };
  708.  
  709. obj.log = function (message, level) {
  710. if (level < manifest.getItem("logger_level")) {
  711. return false;
  712. }
  713.  
  714. console.group("[" + env.getName() + "]" + env.getMode());
  715. console.log(message);
  716. console.groupEnd();
  717. };
  718.  
  719. return obj;
  720. });
  721.  
  722. container.define("meta", ["env", "$"], function (env, $) {
  723. var obj = {};
  724.  
  725. obj.existMeta = function (name) {
  726. name = obj.processName(name);
  727. if ($("meta[name='" + name + "']").length) {
  728. return true;
  729. }
  730. else {
  731. return false;
  732. }
  733. };
  734.  
  735. obj.appendMeta = function (name, content) {
  736. name = obj.processName(name);
  737. content || (content = "on");
  738. $('<meta name="' + name + '" content="on">').appendTo($("head"));
  739. };
  740.  
  741. obj.processName = function (name) {
  742. return env.getName() + "::" + name;
  743. };
  744.  
  745. return obj;
  746. });
  747.  
  748. container.define("unsafeWindow", [], function () {
  749. if (typeof unsafeWindow == "undefined") {
  750. return window;
  751. }
  752. else {
  753. return unsafeWindow;
  754. }
  755. });
  756.  
  757. container.define("svgCrypt", ["Snap"], function (Snap) {
  758. var obj = {};
  759.  
  760. obj.getReqData = function () {
  761. var reqTime = Math.round(new Date().getTime() / 1000);
  762. var reqPoint = obj.getStrPoint("timestamp:" + reqTime);
  763. return {
  764. req_time: reqTime,
  765. req_point: reqPoint
  766. };
  767. };
  768.  
  769. obj.getStrPoint = function (str) {
  770. if (str.length < 2) {
  771. return "0:0";
  772. }
  773.  
  774. var path = "";
  775. var current, last = str[0].charCodeAt();
  776. var sum = last;
  777. for (var i = 1; i < str.length; i++) {
  778. current = str[i].charCodeAt();
  779. if (i == 1) {
  780. path = path + "M";
  781. } else {
  782. path = path + " L";
  783. }
  784. path = path + current + " " + last;
  785. last = current;
  786. sum = sum + current;
  787. }
  788. path = path + " Z";
  789. var index = sum % str.length;
  790. var data = Snap.path.getPointAtLength(path, str[index].charCodeAt());
  791. return data.m.x + ":" + data.n.y;
  792. };
  793.  
  794. return obj;
  795. });
  796.  
  797. container.define("calendar", [], function () {
  798. var obj = {};
  799.  
  800. obj.getTime = function () {
  801. return (new Date()).getTime();
  802. };
  803.  
  804. obj.formatTime = function (format, timestamp) {
  805. format || (format = "Y-m-d H:i:s");
  806. timestamp || (timestamp = obj.getTime());
  807. var date = new Date(timestamp);
  808. var year = 1900 + date.getYear();
  809. var month = "0" + (date.getMonth() + 1);
  810. var day = "0" + date.getDate();
  811. var hour = "0" + date.getHours();
  812. var minute = "0" + date.getMinutes();
  813. var second = "0" + date.getSeconds();
  814. var vars = {
  815. "Y": year,
  816. "m": month.substring(month.length - 2, month.length),
  817. "d": day.substring(day.length - 2, day.length),
  818. "H": hour.substring(hour.length - 2, hour.length),
  819. "i": minute.substring(minute.length - 2, minute.length),
  820. "s": second.substring(second.length - 2, second.length)
  821. };
  822. return obj.replaceVars(vars, format);
  823. };
  824.  
  825. obj.replaceVars = function (vars, value) {
  826. Object.keys(vars).forEach(function (key) {
  827. value = value.replace(key, vars[key]);
  828. });
  829. return value;
  830. };
  831.  
  832. return obj;
  833. });
  834.  
  835. container.define("oneData", ["env", "http"], function (env, http) {
  836. var obj = {};
  837.  
  838. obj.requestOneApi = function (url, data, callback) {
  839. http.ajax({
  840. type: "post",
  841. url: url,
  842. dataType: "json",
  843. data: Object.assign(env.getInfo(), data),
  844. success: function (response) {
  845. callback && callback(response);
  846. },
  847. error: function () {
  848. callback && callback("");
  849. }
  850. });
  851. };
  852.  
  853. return obj;
  854. });
  855.  
  856. container.define("appRunner", ["router", "logger", "meta", "$"], function (router, logger, meta, $, require) {
  857. var obj = {};
  858.  
  859. obj.run = function (appList) {
  860. var metaName = "status";
  861. if (meta.existMeta(metaName)) {
  862. logger.info("setup already");
  863. }
  864. else {
  865. // 添加meta
  866. meta.appendMeta(metaName);
  867.  
  868. // 运行应用
  869. $(function () {
  870. obj.runAppList(appList);
  871. });
  872. }
  873. };
  874.  
  875. obj.runAppList = function (appList) {
  876. var url = router.getUrl();
  877. for (var i in appList) {
  878. var app = appList[i];
  879.  
  880. var match = obj.matchApp(url, app);
  881. if (match == false) {
  882. continue;
  883. }
  884.  
  885. if (require(app.name).run() == true) {
  886. break;
  887. }
  888. }
  889. };
  890.  
  891. obj.matchApp = function (url, app) {
  892. var match = false;
  893. app.matchs.forEach(function (item) {
  894. if (url.indexOf(item) > 0 || item == "*") {
  895. match = true;
  896. }
  897. });
  898. return match;
  899. };
  900.  
  901. return obj;
  902. });
  903.  
  904. /** custom **/
  905. container.define("factory", ["gmDao", "ScopeDao"], function (gmDao, ScopeDao) {
  906. var obj = {
  907. daos: {}
  908. };
  909.  
  910. obj.getConfigDao = function () {
  911. return obj.getDao("config", function () {
  912. return ScopeDao(gmDao, "$config");
  913. });
  914. };
  915.  
  916. obj.getStorageDao = function () {
  917. return obj.getDao("storage", function () {
  918. return ScopeDao(gmDao, "$storage");
  919. });
  920. };
  921.  
  922. obj.getCheckDao = function () {
  923. return obj.getDao("check", function () {
  924. return ScopeDao(gmDao, "$check");
  925. });
  926. };
  927.  
  928. obj.getDao = function (key, createFunc) {
  929. if (!obj.daos.hasOwnProperty(key)) {
  930. obj.daos[key] = createFunc();
  931. }
  932. return obj.daos[key];
  933. };
  934.  
  935. return obj;
  936. });
  937.  
  938. container.define("constant", [], function () {
  939. return {
  940. sources: {
  941. BAIDU: "baidu",
  942. WEIYUN: "weiyun",
  943. LANZOUS: "lanzous",
  944. TY189: "ty189"
  945. },
  946. options: {
  947. BAIDU_COMPLETE: {
  948. name: "baidu_complete",
  949. value: "yes"
  950. },
  951. BAIDU_TRANS: {
  952. name: "baidu_trans",
  953. value: "yes"
  954. },
  955. BAIDU_CHECK: {
  956. name: "baidu_check",
  957. value: "yes"
  958. },
  959. WEIYUN_TRANS: {
  960. name: "weiyun_trans",
  961. value: "yes"
  962. },
  963. WEIYUN_CHECK: {
  964. name: "weiyun_check",
  965. value: "yes"
  966. },
  967. LANZOUS_TRANS: {
  968. name: "lanzous_trans",
  969. value: "yes"
  970. },
  971. LANZOUS_CHECK: {
  972. name: "lanzous_check",
  973. value: "yes"
  974. },
  975. TY189_COMPLETE: {
  976. name: "ty189_complete",
  977. value: "yes"
  978. },
  979. TY189_TRANS: {
  980. name: "ty189_trans",
  981. value: "yes"
  982. },
  983. TY189_CHECK: {
  984. name: "ty189_check",
  985. value: "yes"
  986. }
  987. }
  988. };
  989. });
  990.  
  991. container.define("resource", [], function () {
  992. var obj = {};
  993.  
  994. obj.getErrorIcon = function () {
  995. return "data:image/png;base64,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";
  996. };
  997.  
  998. obj.getSuccessIcon = function () {
  999. return "data:image/png;base64,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";
  1000. };
  1001.  
  1002. obj.getLockIcon = function () {
  1003. return "data:image/png;base64,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";
  1004. };
  1005.  
  1006. obj.getOtherIcon = function () {
  1007. return "data:image/png;base64,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";
  1008. }
  1009.  
  1010. obj.getStyleText = function () {
  1011. return ".one-pan-tip { cursor: pointer;}" +
  1012. ".one-pan-tip::before {background-position: center;background-size: 100% 100%;background-repeat: no-repeat;box-sizing: border-box;width: 1em;height: 1em;margin: 0 1px .15em 1px;vertical-align: middle;display: inline-block;}" +
  1013. ".one-pan-tip-success::before {content: '';background-image: url(" + obj.getSuccessIcon() + ")}" +
  1014. ".one-pan-tip-error {text-decoration: line-through;}" +
  1015. ".one-pan-tip-error::before {content: '';background-image: url(" + obj.getErrorIcon() + ")}" +
  1016. ".one-pan-tip-other::before {content: '';background-image: url(" + obj.getOtherIcon() + ")}" +
  1017. ".one-pan-tip-lock::before{content: '';background-image: url(" + obj.getLockIcon() + ")}";
  1018. };
  1019.  
  1020. return obj;
  1021. });
  1022.  
  1023. container.define("api", ["http", "manifest", "oneData", "constant", "svgCrypt"], function (http, manifest, oneData, constant, svgCrypt) {
  1024. var obj = {};
  1025.  
  1026. obj.versionQuery = function (callback) {
  1027. oneData.requestOneApi(manifest.getApi("version"), {}, callback);
  1028. };
  1029.  
  1030. obj.checkLinkBatch = function (linkList, callback) {
  1031. var data = Object.assign(svgCrypt.getReqData(), {
  1032. link_json: JSON.stringify(linkList)
  1033. });
  1034. oneData.requestOneApi(manifest.getApi("valid"), data, callback);
  1035. };
  1036.  
  1037. obj.reportLink = function (shareSource, shareId, checkState, callback) {
  1038. var data = {
  1039. share_source: shareSource,
  1040. share_id: shareId,
  1041. share_point: svgCrypt.getStrPoint(shareId),
  1042. check_state: checkState
  1043. };
  1044. oneData.requestOneApi(manifest.getApi("report"), data, callback);
  1045. };
  1046.  
  1047. obj.checkLinkLocal = function (shareSource, shareId, callback) {
  1048. if (shareSource == constant.sources.BAIDU) {
  1049. obj.checkLinkBaidu(shareId, callback);
  1050. }
  1051. else if (shareSource == constant.sources.LANZOUS) {
  1052. obj.checkLinkLanzous(shareId, callback);
  1053. }
  1054. else if (shareSource == constant.sources.WEIYUN) {
  1055. obj.checkLinkWeiyun(shareId, callback);
  1056. } else if (shareSource == constant.sources.TY189) {
  1057. obj.checkLinkTy189(shareId, callback);
  1058. }
  1059. else {
  1060. callback({
  1061. state: 0
  1062. });
  1063. }
  1064. };
  1065.  
  1066. obj.checkLinkBaidu = function (shareId, callback) {
  1067. var url;
  1068. if (shareId.indexOf("http") < 0) {
  1069. url = "https://pan.baidu.com/s/1" + shareId;
  1070. }
  1071. else {
  1072. url = shareId;
  1073. }
  1074. http.ajax({
  1075. type: "get",
  1076. url: url,
  1077. success: function (response) {
  1078. var state = 1;
  1079. if (response.indexOf("输入提取码") > 0) {
  1080. state = 2;
  1081. }
  1082. else if (response.indexOf("页面不存在了") > 0 || response.indexOf("来晚了") > 0) {
  1083. state = -1;
  1084. }
  1085. else if (response.indexOf("可能的原因") > 0 || response.indexOf("分享的文件已经被取消了") > 0 || response.indexOf("分享内容可能因为涉及侵权") > 0) {
  1086. state = -1;
  1087. }
  1088. callback && callback({
  1089. state: state
  1090. });
  1091. },
  1092. error: function () {
  1093. callback && callback({
  1094. state: 0
  1095. });
  1096. }
  1097. });
  1098. };
  1099.  
  1100. obj.checkLinkLanzous = function (shareId, callback) {
  1101. var url;
  1102. if (shareId.indexOf("http") < 0) {
  1103. url = "https://www.lanzous.com/" + shareId;
  1104. }
  1105. else {
  1106. url = shareId;
  1107. }
  1108. http.ajax({
  1109. type: "get",
  1110. url: url,
  1111. success: function (response) {
  1112. var state = 1;
  1113. if (response.indexOf("输入密码") > 0) {
  1114. state = 2;
  1115. }
  1116. else if (response.indexOf("来晚啦") > 0) {
  1117. state = -1;
  1118. }
  1119. callback && callback({
  1120. state: state
  1121. });
  1122. },
  1123. error: function () {
  1124. callback && callback({
  1125. state: 0
  1126. });
  1127. }
  1128. });
  1129. };
  1130.  
  1131. obj.checkLinkWeiyun = function (shareId, callback) {
  1132. var url;
  1133. if (shareId.indexOf("http") < 0) {
  1134. url = "https://share.weiyun.com/" + shareId;
  1135. }
  1136. else {
  1137. url = shareId;
  1138. }
  1139. http.ajax({
  1140. type: "get",
  1141. url: url,
  1142. success: function (response) {
  1143. var state = 1;
  1144. if (response.indexOf("链接已删除") > 0 || response.indexOf("违反相关法规") > 0) {
  1145. state = -1;
  1146. }
  1147. else if (response.indexOf('"share_key":null') > 0) {
  1148. state = 2;
  1149. }
  1150. callback && callback({
  1151. state: state
  1152. });
  1153. },
  1154. error: function () {
  1155. callback && callback({
  1156. state: 0
  1157. });
  1158. }
  1159. });
  1160. };
  1161.  
  1162. obj.checkLinkTy189 = function (shareId, callback) {
  1163. var url;
  1164. if (shareId.indexOf("http") < 0) {
  1165. url = "https://cloud.189.cn/t/" + shareId;
  1166. }
  1167. else {
  1168. url = shareId;
  1169. }
  1170. http.ajax({
  1171. type: "get",
  1172. url: url,
  1173. success: function (response) {
  1174. var state = 1;
  1175. if (response.indexOf("页面地址有误") > 0 || response.indexOf("页面不存在") > 0 || response.indexOf("此外链不存在") > 0) {
  1176. state = -1;
  1177. }
  1178. else if (response.indexOf("私密分享") > 0) {
  1179. state = 2;
  1180. }
  1181. callback && callback({
  1182. state: state
  1183. });
  1184. },
  1185. error: function () {
  1186. callback && callback({
  1187. state: 0
  1188. });
  1189. }
  1190. });
  1191. };
  1192.  
  1193. return obj;
  1194. });
  1195.  
  1196. container.define("checkManage", ["logger", "calendar", "factory", "api"], function (logger, calendar, factory, api) {
  1197. var obj = {
  1198. active: false,
  1199. timer: null,
  1200. queues: []
  1201. };
  1202.  
  1203. obj.activeQueue = function () {
  1204. if (!obj.active) {
  1205. obj.active = true;
  1206. obj.consumeQueue();
  1207. }
  1208. };
  1209.  
  1210. obj.consumeQueue = function () {
  1211. if (obj.queues.length) {
  1212. obj.timer && clearTimeout(obj.timer);
  1213.  
  1214. var items = [];
  1215. while (obj.queues.length && items.length < 5) {
  1216. items.push(obj.queues.shift());
  1217. }
  1218. obj.checkLinkBatch(items, obj.consumeQueue);
  1219. }
  1220. else {
  1221. obj.active = false;
  1222. obj.timer = setTimeout(obj.consumeQueue, 1000);
  1223. }
  1224. };
  1225.  
  1226. obj.checkLinkAsync = function (shareSource, shareId, bearTime, callback) {
  1227. obj.queues.push({
  1228. share_source: shareSource,
  1229. share_id: shareId,
  1230. bear_time: bearTime,
  1231. callback: callback
  1232. });
  1233.  
  1234. obj.activeQueue();
  1235. };
  1236.  
  1237. obj.checkLinkBatch = function (items, callback) {
  1238. obj.syncLinkBatch(items, function () {
  1239. callback();
  1240.  
  1241. items.forEach(function (item) {
  1242. try {
  1243. obj.checkLink(item.share_source, item.share_id, item.bear_time, item.callback);
  1244. }
  1245. catch (err) {
  1246. logger.error(err);
  1247. }
  1248. });
  1249. });
  1250. };
  1251.  
  1252. obj.checkLink = function (shareSource, shareId, bearTime, callback) {
  1253. var item = obj.getItem(shareSource, shareId);
  1254. bearTime || (bearTime = 86400 * 3);
  1255. if (item instanceof Object && item.check_time > calendar.getTime() - bearTime) {
  1256. callback && callback({
  1257. state: item.check_state
  1258. });
  1259. }
  1260. else {
  1261. api.checkLinkLocal(shareSource, shareId, function (item) {
  1262. if (item instanceof Object && item.state != 0) {
  1263. obj.setItem(shareSource, shareId, item.state);
  1264. api.reportLink(shareSource, shareId, item.state);
  1265. }
  1266. callback && callback(item);
  1267. });
  1268. }
  1269. };
  1270.  
  1271. obj.syncLinkBatch = function (items, callback) {
  1272. var linkList = [];
  1273. items.forEach(function (item) {
  1274. linkList.push(obj.buildShareKey(item.share_source, item.share_id));
  1275. });
  1276. api.checkLinkBatch(linkList, function (response) {
  1277. if (response instanceof Object && response.code == 1) {
  1278. for (var i in response.data) {
  1279. try {
  1280. var item = response.data[i];
  1281. var localItem = obj.getItem(item.share_source, item.share_id);
  1282. if (item.check_state != 0 && (!localItem || item.check_time > localItem.check_time)) {
  1283. obj.setItem(item.share_source, item.share_id, item.check_state);
  1284. }
  1285. }
  1286. catch (err) {
  1287. logger.error(err);
  1288. }
  1289. }
  1290. }
  1291. callback && callback();
  1292. });
  1293. };
  1294.  
  1295. obj.getItem = function (shareSource, shareId) {
  1296. return obj.getDao().get(obj.buildShareKey(shareSource, shareId));
  1297. };
  1298.  
  1299. obj.setItem = function (shareSource, shareId, checkState) {
  1300. obj.getDao().set(obj.buildShareKey(shareSource, shareId), obj.buildItem(shareId, shareSource, checkState));
  1301. };
  1302.  
  1303. obj.buildItem = function (shareId, shareSource, checkState) {
  1304. return {
  1305. share_id: shareId,
  1306. share_source: shareSource,
  1307. check_state: checkState,
  1308. check_time: calendar.getTime()
  1309. };
  1310. };
  1311.  
  1312. obj.buildShareKey = function (shareSource, shareId) {
  1313. return shareSource + "#" + shareId;
  1314. };
  1315.  
  1316. obj.getDao = function () {
  1317. return factory.getCheckDao();
  1318. };
  1319.  
  1320. return obj;
  1321. });
  1322.  
  1323. container.define("runtime", ["calendar", "storage", "api"], function (calendar, storage, api) {
  1324. var obj = {};
  1325.  
  1326. obj.initVersion = function () {
  1327. var versionDate = parseInt(storage.getValue("version_date"));
  1328. var currentDate = calendar.formatTime("Ymd");
  1329. if (!versionDate || versionDate < currentDate) {
  1330. api.versionQuery(function (response) {
  1331. storage.setValue("version_date", currentDate);
  1332.  
  1333. if (response && response.code == 1 && response.data instanceof Object) {
  1334. var versionPayload = response.data;
  1335. storage.setValue("version_payload", versionPayload);
  1336. storage.setValue("version_latest", versionPayload.version);
  1337. }
  1338. });
  1339. }
  1340. };
  1341.  
  1342. obj.initRuntime = function () {
  1343. obj.initVersion();
  1344. };
  1345.  
  1346. return obj;
  1347. });
  1348.  
  1349. container.define("core", ["resource", "runtime", "$"], function (resource, runtime, $) {
  1350. var obj = {};
  1351.  
  1352. obj.appendStyle = function () {
  1353. var styleText = resource.getStyleText();
  1354. $("<style></style>").text(styleText).appendTo($("head"));
  1355. };
  1356.  
  1357. obj.ready = function (callback) {
  1358. runtime.initRuntime();
  1359.  
  1360. obj.appendStyle();
  1361.  
  1362. callback && callback();
  1363. };
  1364.  
  1365. return obj;
  1366. });
  1367.  
  1368. /** app **/
  1369. container.define("app_check_url", ["router", "constant", "config", "option", "checkManage", "findAndReplaceDOMText", "$"], function (router, constant, config, option, checkManage, findAndReplaceDOMText, $) {
  1370. var obj = {
  1371. index: 0,
  1372. prefixs: {
  1373. BAIDU: "https://pan.baidu.com/s/1",
  1374. LANZOUS: "https://www.lanzous.com/",
  1375. WEIYUN: "https://share.weiyun.com/",
  1376. TY189: "https://cloud.189.cn/t/"
  1377. }
  1378. };
  1379.  
  1380. obj.run = function () {
  1381. obj.isEnable() && obj.runMatch();
  1382. return false;
  1383. };
  1384.  
  1385. obj.isEnable = function () {
  1386. if (typeof findAndReplaceDOMText == "undefined") {
  1387. return false;
  1388. }
  1389.  
  1390. if (config.getConfig("check_switch") == "off") {
  1391. return false;
  1392. }
  1393.  
  1394. var nowUrl = router.getUrl();
  1395.  
  1396. var passUrl = config.getConfig("pass_url");
  1397. var passList = passUrl ? passUrl.split("\n") : [];
  1398. for (var i in passList) {
  1399. if (nowUrl.indexOf(passList[i]) >= 0) {
  1400. return true;
  1401. }
  1402. }
  1403.  
  1404. var ignoreUrl = config.getConfig("ignore_url");
  1405. var ignoreList = ignoreUrl ? ignoreUrl.split("\n") : ["bilibili.com"];
  1406. for (var j in ignoreList) {
  1407. if (nowUrl.indexOf(ignoreList[j]) >= 0) {
  1408. return false;
  1409. }
  1410. }
  1411.  
  1412. return true;
  1413. };
  1414.  
  1415. obj.runMatch = function () {
  1416. // 百度网盘补全链接
  1417. if (option.isOptionActive(option.constants.BAIDU_COMPLETE)) {
  1418. findAndReplaceDOMText(document.body, {
  1419. find: /([ ])(\/?s\/1[a-zA-Z0-9_\-]{5,22})/gi,
  1420. replace: function (portion, match) {
  1421. return " https://pan.baidu.com" + (match[2].indexOf("/") == 0 ? "" : "/") + match[2];
  1422. }
  1423. });
  1424. }
  1425.  
  1426. // 天翼云盘补全链接
  1427. if (option.isOptionActive(option.constants.TY189_COMPLETE)) {
  1428. findAndReplaceDOMText(document.body, {
  1429. find: /([ ])(\/?t\/[a-zA-Z0-9_\-]{8,14})/gi,
  1430. replace: function (portion, match) {
  1431. return " https://cloud.189.cn" + (match[2].indexOf("/") == 0 ? "" : "/") + match[2];
  1432. }
  1433. });
  1434. }
  1435.  
  1436. // 百度网盘补SPAN
  1437. obj.replaceTextAsLink(/(?:https?:\/\/)?(yun|pan)\.baidu\.com\/s\/([\w\-]{4,25})\b/gi, constant.sources.BAIDU, function (match) {
  1438. return match[2].slice(1);
  1439. });
  1440.  
  1441. // 蓝奏云补SPAN
  1442. obj.replaceTextAsLink(/(?:https?:\/\/)?www\.lanzous\.com\/([a-zA-Z0-9_\-]{5,22})\b/gi, constant.sources.LANZOUS, function (match) {
  1443. return match[1];
  1444. });
  1445.  
  1446. // 腾讯微云补SPAN
  1447. obj.replaceTextAsLink(/(?:https?:\/\/)?share\.weiyun\.com\/([a-zA-Z0-9_\-]{5,22})\b/gi, constant.sources.WEIYUN, function (match) {
  1448. return match[1];
  1449. });
  1450.  
  1451. // 天翼云盘补SPAN
  1452. obj.replaceTextAsLink(/(?:https?:\/\/)?cloud\.189\.cn\/t\/([a-zA-Z0-9_\-]{8,14})\b/gi, constant.sources.TY189, function (match) {
  1453. return match[1];
  1454. });
  1455.  
  1456. // 补超链接ATTR
  1457. $("a:not([one-link-mark])").each(function () {
  1458. var $this = $(this);
  1459.  
  1460. $this.attr("one-link-mark", "yes");
  1461.  
  1462. var match, oneId, oneSource;
  1463. var href = $this.attr("href");
  1464. if (href) {
  1465. if ((match = /(?:https?:\/\/)?(yun|pan)\.baidu\.com\/s\/([\w\-]{4,25})/gi.exec(href))) {
  1466. oneId = match[2].slice(1);
  1467. oneSource = constant.sources.BAIDU;
  1468. } else if ((match = /(?:https?:\/\/)?www\.lanzous\.com\/([a-zA-Z0-9_\-]{5,22})/gi.exec(href))) {
  1469. oneId = match[1];
  1470. oneSource = constant.sources.LANZOUS;
  1471. }
  1472. else if ((match = /(?:https?:\/\/)?share\.weiyun\.com\/([a-zA-Z0-9_\-]{5,22})/gi.exec(href))) {
  1473. oneId = match[1];
  1474. oneSource = constant.sources.WEIYUN;
  1475. } else if ((match = /(?:https?:\/\/)?cloud\.189\.cn\/t\/([a-zA-Z0-9_\-]{8,14})/gi.exec(href))) {
  1476. oneId = match[1];
  1477. oneSource = constant.sources.TY189;
  1478. }
  1479. }
  1480.  
  1481. if (match && $this.find(".one-pan-tip").length == 0) {
  1482. var node = obj.createOnePanNode(oneId, oneSource);
  1483. $this.wrapInner(node);
  1484. }
  1485. });
  1486.  
  1487. // 检查链接状态
  1488. $(".one-pan-tip:not([one-tip-mark])").each(function () {
  1489. var $this = $(this);
  1490.  
  1491. $this.attr("one-tip-mark", "yes");
  1492.  
  1493. var shareSource = $this.attr("one-source");
  1494. var shareId = $this.attr("one-id");
  1495.  
  1496. var parentNode = this.parentNode;
  1497. if (parentNode.nodeName != "A") {
  1498. // 转超链接
  1499. if (obj.isTransEnable(shareSource)) {
  1500. $this.wrap('<a href="' + this.textContent + '" target="_blank"></a>');
  1501. }
  1502. }
  1503.  
  1504. if (obj.isCheckEnable(shareSource)) {
  1505. checkManage.checkLinkAsync(shareSource, shareId, 0, function (response) {
  1506. if (response.state == 2) {
  1507. $this.addClass("one-pan-tip-lock");
  1508. }
  1509. else if (response.state == 1) {
  1510. $this.addClass("one-pan-tip-success");
  1511. }
  1512. else if (response.state == -1) {
  1513. $this.addClass("one-pan-tip-error");
  1514. }
  1515. else {
  1516. $this.addClass("one-pan-tip-other");
  1517. }
  1518. });
  1519. }
  1520. });
  1521.  
  1522. var checkTimes = obj.getCheckTimes();
  1523. if (checkTimes == 0 || obj.index < checkTimes) {
  1524. obj.index++;
  1525. setTimeout(obj.runMatch, 1000 * obj.getCheckInterval());
  1526. }
  1527. };
  1528.  
  1529. obj.replaceTextAsLink = function (shareMatch, shareSource, getShareId) {
  1530. findAndReplaceDOMText(document.body, {
  1531. find: shareMatch,
  1532. replace: function (portion, match) {
  1533. var parentNode = portion.node.parentNode;
  1534. if (parentNode.nodeName == "SPAN" && $(parentNode).hasClass("one-pan-tip")) {
  1535. return portion.text;
  1536. }
  1537. else {
  1538. var shareId = getShareId(match);
  1539. var node = obj.createOnePanNode(shareId, shareSource);
  1540. node.textContent = obj.buildShareUrl(shareId, shareSource);
  1541. return node;
  1542. }
  1543. }
  1544. });
  1545. };
  1546.  
  1547. obj.isTransEnable = function (shareSource) {
  1548. if (shareSource == constant.sources.BAIDU && option.isOptionActive(option.constants.BAIDU_TRANS)) {
  1549. return true;
  1550. }
  1551. else if (shareSource == constant.sources.LANZOUS && option.isOptionActive(option.constants.LANZOUS_TRANS)) {
  1552. return true;
  1553. }
  1554. else if (shareSource == constant.sources.WEIYUN && option.isOptionActive(option.constants.WEIYUN_TRANS)) {
  1555. return true;
  1556. }
  1557. else if (shareSource == constant.sources.TY189 && option.isOptionActive(option.constants.TY189_TRANS)) {
  1558. return true;
  1559. }
  1560. else {
  1561. return false;
  1562. }
  1563. };
  1564.  
  1565. obj.isCheckEnable = function (shareSource) {
  1566. if (shareSource == constant.sources.BAIDU && option.isOptionActive(option.constants.BAIDU_CHECK)) {
  1567. return true;
  1568. }
  1569. else if (shareSource == constant.sources.LANZOUS && option.isOptionActive(option.constants.LANZOUS_CHECK)) {
  1570. return true;
  1571. }
  1572. else if (shareSource == constant.sources.WEIYUN && option.isOptionActive(option.constants.WEIYUN_CHECK)) {
  1573. return true;
  1574. }
  1575. else if (shareSource == constant.sources.TY189 && option.isOptionActive(option.constants.TY189_CHECK)) {
  1576. return true;
  1577. }
  1578. else {
  1579. return false;
  1580. }
  1581. };
  1582.  
  1583. obj.getCheckTimes = function () {
  1584. var checkTimes = parseInt(config.getConfig("check_times"));
  1585. if (isNaN(checkTimes)) {
  1586. checkTimes = 3;
  1587. }
  1588. return checkTimes;
  1589. };
  1590.  
  1591. obj.getCheckInterval = function () {
  1592. var checkInterval = parseInt(config.getConfig("check_interval"));
  1593. if (isNaN(checkInterval)) {
  1594. checkInterval = 2;
  1595. }
  1596. else if (checkInterval < 1) {
  1597. checkInterval = 1;
  1598. }
  1599. return checkInterval;
  1600. };
  1601.  
  1602. obj.createOnePanNode = function (shareId, shareSource) {
  1603. var node = document.createElementNS(document.lookupNamespaceURI(null) || "http://www.w3.org/1999/xhtml", "span");
  1604. node.setAttribute("class", "one-pan-tip");
  1605. node.setAttribute("one-id", shareId);
  1606. node.setAttribute("one-source", shareSource);
  1607. return node;
  1608. };
  1609.  
  1610. obj.buildShareUrl = function (shareId, shareSource) {
  1611. var shareUrl = shareId;
  1612. if (shareSource == constant.sources.BAIDU) {
  1613. shareUrl = obj.prefixs.BAIDU + shareId;
  1614. }
  1615. else if (shareSource == constant.sources.LANZOUS) {
  1616. shareUrl = obj.prefixs.LANZOUS + shareId;
  1617. }
  1618. else if (shareSource == constant.sources.WEIYUN) {
  1619. shareUrl = obj.prefixs.WEIYUN + shareId;
  1620. } else if (shareSource == constant.sources.TY189) {
  1621. shareUrl = obj.prefixs.TY189 + shareId;
  1622. }
  1623. return shareUrl;
  1624. };
  1625.  
  1626. return obj;
  1627. });
  1628.  
  1629. container.define("app_manage", ["meta", "unsafeWindow"], function (meta, unsafeWindow) {
  1630. var obj = {};
  1631.  
  1632. obj.run = function () {
  1633. if (meta.existMeta("manage")) {
  1634. unsafeWindow.OneLink = container;
  1635. return true;
  1636. }
  1637. };
  1638.  
  1639. return obj;
  1640. });
  1641.  
  1642. container.define("app", ["appRunner"], function (appRunner) {
  1643. var obj = {};
  1644.  
  1645. obj.run = function () {
  1646. appRunner.run([
  1647. {
  1648. name: "app_check_url",
  1649. matchs: [
  1650. "*"
  1651. ]
  1652. },
  1653. {
  1654. name: "app_manage",
  1655. matchs: [
  1656. "*"
  1657. ]
  1658. }
  1659. ]);
  1660. };
  1661.  
  1662. return obj;
  1663. });
  1664.  
  1665. // lib
  1666. container.define("$", [], function () {
  1667. return window.$;
  1668. });
  1669. container.define("Snap", [], function () {
  1670. if (typeof Snap != "undefined") {
  1671. return Snap;
  1672. }
  1673. else {
  1674. return window.Snap;
  1675. }
  1676. });
  1677. container.define("findAndReplaceDOMText", [], function () {
  1678. if (typeof findAndReplaceDOMText != "undefined") {
  1679. return findAndReplaceDOMText;
  1680. }
  1681. else {
  1682. return window.findAndReplaceDOMText;
  1683. }
  1684. });
  1685.  
  1686. container.use(["gm", "core", "app"], function (gm, core, app) {
  1687. gm.ready(function () {
  1688. core.ready(app.run);
  1689. });
  1690. });
  1691. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址