Greasy Fork 还支持 简体中文。

seu-library-tutor

国际交流英语课程小组项目-SEU图书馆交互式教学

  1. // ==UserScript==
  2. // @name seu-library-tutor
  3. // @namespace https://github.com/qisumi
  4. // @version 1.1.0
  5. // @description 国际交流英语课程小组项目-SEU图书馆交互式教学
  6. // @author Qisumi
  7. // @license MIT
  8. // @match http://lib.seu.edu.cn/*
  9. // @match http://lib.seu.edu.cn/seu_en/
  10. // @match https://*.cnki.net/*
  11. // @match https://kns.cnki.net/kns8s/*
  12. // @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net.cn
  13. // @grant GM_setValue
  14. // @grant GM_getValue
  15. // @grant GM_addStyle
  16. // @grant GM_getResourceText
  17. // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js
  18. // @require https://cdn.jsdelivr.net/npm/driver.js@1.3.0/dist/driver.js.iife.js
  19. // @require https://unpkg.com/i18next/dist/umd/i18next.min.js
  20. // @resource driverjs_css https://cdn.jsdelivr.net/npm/driver.js@1.3.0/dist/driver.css
  21. // @run-at document-start
  22. // ==/UserScript==
  23. (() => {
  24. var __defProp = Object.defineProperty;
  25. var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
  26.  
  27. // global-externals:jquery
  28. var jquery_default = $;
  29.  
  30. // src/style/userpanel.css
  31. var userpanel_default = ".Q-accordion {\n background-color: #eee;\n color: #444;\n cursor: pointer;\n padding: 8px;\n width: 100%;\n text-align: left;\n border: none;\n outline: none;\n transition: 0.4s;\n text-align: center;\n font-size: 13px;\n}\n\n.Q-active,\n.Q-accordion:hover {\n background-color: #ccc;\n}\n\n.Q-panel {\n padding: 2px;\n background-color: white;\n display: none;\n overflow: hidden;\n}\n\n#Q-floating-panel {\n position: absolute;\n z-index: 999;\n background-color: #f1f1f1;\n border: 1px solid #d3d3d3;\n border-radius: 5px;\n text-align: center;\n width: 200px;\n}\n\n#Q-floating-panel-header {\n padding: 10px;\n cursor: move;\n z-index: 10;\n background-color: #2196F3;\n font-size: 16px;\n font-weight: 900;\n color: #fff;\n}\n\n.Q-func {\n margin: 3px;\n cursor: pointer;\n border: 1px solid #d3d3d3;\n font-size: 12px;\n}\n\n.Q-func:hover {\n background-color: #11e42a;\n}\n\n/* \u8FD9\u90E8\u5206\u4E3B\u8981\u7528\u4E8E\u5B9E\u73B0\u9F20\u6807\u4E8B\u4EF6\u7A7F\u900F */\n/* .driver-overlay {\n pointer-events: none;\n} */\n\n#driver-popover-content {\n color: #fff;\n background-color: #409eff;\n}\n\n#driver-popover-content:has(img) {\n max-width: 3000px;\n padding: 0;\n}\n\n#driver-popover-content .driver-popover-arrow {\n border: 5px solid #409eff;\n border-left-color: transparent;\n border-top-color: transparent;\n border-right-color: transparent;\n}\n\n#driver-popover-content .driver-popover-prev-btn {\n background: #fff;\n color: #2d2d2d;\n /* border: 1px solid #dcdfe6; */\n border: none;\n}\n\n#driver-popover-content .driver-popover-next-btn {\n background: #fff;\n color: #2d2d2d;\n /* border: 1px solid #dcdfe6; */\n border: none;\n}\n\n.driver-popover-footer .driver-popover-progress-text {\n color: #fff;\n}";
  32.  
  33. // src/html/userpanel.html
  34. var userpanel_default2 = '<div id="Q-floating-panel">\n <div id="Q-floating-panel-header"></div>\n <div class="Q-floating-panel-submodule">\n <button class="Q-accordion" id="Q-panel-5"></button>\n <div class="Q-panel">\n <div id="Q-panel-5-func-1" class="Q-func"></div>\n </div>\n </div>\n <div class="Q-floating-panel-submodule">\n <button class="Q-accordion" id="Q-panel-1"></button>\n <div class="Q-panel">\n <div id="Q-panel-1-func-1" class="Q-func"></div>\n <div id="Q-panel-1-func-2" class="Q-func"></div>\n <div id="Q-panel-1-func-3" class="Q-func"></div>\n </div>\n </div>\n <div class="Q-floating-panel-submodule">\n <button class="Q-accordion" id="Q-panel-2"></button>\n <div class="Q-panel">\n <div id="Q-panel-2-func-1" class="Q-func"></div>\n <div id="Q-panel-2-func-2" class="Q-func"></div>\n </div>\n </div>\n <div class="Q-floating-panel-submodule">\n <button class="Q-accordion" id="Q-panel-3"></button>\n <div class="Q-panel">\n <div id="Q-panel-3-func-1" class="Q-func"></div>\n <div id="Q-panel-3-func-2" class="Q-func"></div>\n </div>\n </div>\n <div class="Q-floating-panel-submodule">\n <button class="Q-accordion" id="Q-panel-4"></button>\n <div class="Q-panel">\n <div id="Q-panel-4-func-1" class="Q-func"></div>\n </div>\n </div>\n</div>';
  35.  
  36. // global-externals:driver.js
  37. var driver_default = window.driver.js;
  38.  
  39. // src/userpanel.js
  40. function enablePanelDraggable() {
  41. let elem = document.querySelector("#Q-floating-panel");
  42. var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
  43. if (document.getElementById(elem.id + "-header")) {
  44. document.getElementById(elem.id + "-header").onmousedown = dragMouseDown;
  45. } else {
  46. elem.onmousedown = dragMouseDown;
  47. }
  48. function dragMouseDown(e) {
  49. e = e || window.event;
  50. e.preventDefault();
  51. pos3 = e.clientX;
  52. pos4 = e.clientY;
  53. document.onmouseup = closeDragElement;
  54. document.onmousemove = elementDrag;
  55. }
  56. __name(dragMouseDown, "dragMouseDown");
  57. function elementDrag(e) {
  58. e = e || window.event;
  59. e.preventDefault();
  60. pos1 = pos3 - e.clientX;
  61. pos2 = pos4 - e.clientY;
  62. pos3 = e.clientX;
  63. pos4 = e.clientY;
  64. elem.style.top = elem.offsetTop - pos2 + "px";
  65. elem.style.left = elem.offsetLeft - pos1 + "px";
  66. }
  67. __name(elementDrag, "elementDrag");
  68. function closeDragElement() {
  69. document.onmouseup = null;
  70. document.onmousemove = null;
  71. }
  72. __name(closeDragElement, "closeDragElement");
  73. }
  74. __name(enablePanelDraggable, "enablePanelDraggable");
  75. function enablePanelFoldable() {
  76. let acc = document.getElementsByClassName("Q-accordion");
  77. let panel_selector;
  78. for (panel_selector = 0; panel_selector < acc.length; panel_selector++) {
  79. acc[panel_selector].addEventListener("click", function() {
  80. this.classList.toggle("Q-active");
  81. var panel = this.nextElementSibling;
  82. if (panel.style.display === "block") {
  83. panel.style.display = "none";
  84. } else {
  85. panel.style.display = "block";
  86. }
  87. });
  88. }
  89. let submodule_hide = false;
  90. $("#Q-floating-panel-header").on("dblclick", function() {
  91. if (submodule_hide)
  92. $(".Q-floating-panel-submodule").show();
  93. else
  94. $(".Q-floating-panel-submodule").hide();
  95. submodule_hide = !submodule_hide;
  96. });
  97. }
  98. __name(enablePanelFoldable, "enablePanelFoldable");
  99. function bindFunction2Panel(panelIdx, buttonIdx, func, params = []) {
  100. $("#Q-panel-" + panelIdx + "-func-" + buttonIdx).on("click", function() {
  101. func(...params);
  102. });
  103. }
  104. __name(bindFunction2Panel, "bindFunction2Panel");
  105. function refreshPanelWithLang($2, i18next) {
  106. $2("#Q-floating-panel-header").text(i18next.t("panel.title"));
  107. $2("#Q-panel-1").text(i18next.t("panel.panel-1"));
  108. $2("#Q-panel-1-func-1").text(i18next.t("panel.panel-1-func-1"));
  109. $2("#Q-panel-1-func-2").text(i18next.t("panel.panel-1-func-2"));
  110. $2("#Q-panel-1-func-3").text(i18next.t("panel.panel-1-func-3"));
  111. $2("#Q-panel-2").text(i18next.t("panel.panel-2"));
  112. $2("#Q-panel-2-func-1").text(i18next.t("panel.panel-2-func-1"));
  113. $2("#Q-panel-2-func-2").text(i18next.t("panel.panel-2-func-2"));
  114. $2("#Q-panel-3").text(i18next.t("panel.panel-3"));
  115. $2("#Q-panel-3-func-1").text(i18next.t("panel.panel-3-func-1"));
  116. $2("#Q-panel-3-func-2").text(i18next.t("panel.panel-3-func-2"));
  117. $2("#Q-panel-4").text(i18next.t("panel.panel-last"));
  118. $2("#Q-panel-4-func-1").text(i18next.t("panel.panel-last"));
  119. $2("#Q-panel-5").text(i18next.t("panel.panel-5"));
  120. $2("#Q-panel-5-func-1").text(i18next.t("panel.panel-5-func-1"));
  121. }
  122. __name(refreshPanelWithLang, "refreshPanelWithLang");
  123.  
  124. // src/utils.js
  125. function waitForElementToDisplay(selector, callback, timeout = 1e3) {
  126. let el = document.querySelector(selector);
  127. if (el) {
  128. setTimeout(() => {
  129. callback(el);
  130. }, timeout);
  131. } else {
  132. setTimeout(() => {
  133. waitForElementToDisplay(selector, callback);
  134. }, 100);
  135. }
  136. }
  137. __name(waitForElementToDisplay, "waitForElementToDisplay");
  138.  
  139. // src/plugins/cnki-plugin.js
  140. var cnkiDriver = {};
  141. function cnkiTutor(langProvider) {
  142. if (window.location.href === "http://lib.seu.edu.cn/") {
  143. GM_setValue("cnkiTutor", true);
  144. initialCnkiDriver(langProvider);
  145. cnkiDriver.drive(0);
  146. } else if (window.location.href === "https://www.cnki.net/" && GM_getValue("cnkiTutor")) {
  147. initialCnkiDriver(langProvider);
  148. cnkiDriver.drive(2);
  149. } else if (window.location.href.startsWith("https://kns.cnki.net/kns8") && GM_getValue("cnkiTutor")) {
  150. waitForElementToDisplay(".result-table-list", () => {
  151. initialCnkiDriver(langProvider);
  152. cnkiDriver.drive(4);
  153. });
  154. } else if (GM_getValue("cnkiTutor")) {
  155. cnkiDriver.highlight({
  156. popover: {
  157. description: langProvider.t("cnki.gotoHomepage")
  158. }
  159. });
  160. }
  161. }
  162. __name(cnkiTutor, "cnkiTutor");
  163. function initialCnkiDriver(langProvider) {
  164. let steps = [
  165. {
  166. element: document.querySelectorAll("a.r-tabs-anchor[href='#searchtabs-4']")[0],
  167. popover: {
  168. onNextClick: (el, step, opts) => {
  169. el.click();
  170. cnkiDriver.moveNext();
  171. }
  172. }
  173. },
  174. {
  175. element: document.querySelector("a[href='https://www.cnki.net/']"),
  176. popover: {
  177. onNextClick: (el, step, opts) => {
  178. el.click();
  179. cnkiDriver.destroy();
  180. }
  181. }
  182. },
  183. {
  184. element: document.querySelector("input.search-input"),
  185. popover: {
  186. onNextClick: (el, step, opts) => {
  187. if (el.value === "" || el.value === "\u4E2D\u6587\u6587\u732E\u3001\u5916\u6587\u6587\u732E") {
  188. return;
  189. }
  190. cnkiDriver.moveNext();
  191. }
  192. }
  193. },
  194. {
  195. element: document.querySelector("input.search-btn"),
  196. popover: {
  197. onNextClick: (el, step, opts) => {
  198. cnkiDriver.moveNext();
  199. el.click();
  200. cnkiDriver.destroy();
  201. }
  202. }
  203. },
  204. {
  205. element: document.querySelector(".result-table-list")
  206. },
  207. {
  208. element: document.querySelector("div#divGroup dl:nth-child(1)")
  209. },
  210. {
  211. element: document.querySelector("div#divGroup dl:nth-child(3)")
  212. },
  213. {
  214. element: document.querySelector(".order-group")
  215. },
  216. {
  217. element: document.querySelector("a.fz14")
  218. },
  219. {
  220. element: document.querySelector("a[title='\u4E0B\u8F7D']")
  221. },
  222. {
  223. element: document.querySelector(".result-table-list input.cbItem")
  224. },
  225. {
  226. element: document.querySelector("li.bulkdownload")
  227. },
  228. {
  229. element: document.querySelector("a[title='HTML\u9605\u8BFB']")
  230. },
  231. {
  232. element: document.querySelector("a[title='\u6536\u85CF']")
  233. },
  234. {
  235. element: document.querySelector("a[title='\u5F15\u7528']")
  236. },
  237. {
  238. element: document.querySelector(".btn-result-search")
  239. },
  240. {
  241. element: document.querySelector("i.icon-detail")
  242. },
  243. {
  244. element: document.querySelector("div.foot-top ul.content li:nth-child(2) a")
  245. },
  246. {
  247. popover: {
  248. description: langProvider.t("cnki.end")
  249. }
  250. }
  251. ];
  252. steps.forEach((step, idx, arr) => {
  253. step.popover = step.popover || {};
  254. step.popover.title = langProvider.t("cnki.title");
  255. step.popover.align = step.popover.align || "center";
  256. step.popover.side = step.popover.side || "bottom";
  257. step.popover.description = step.popover.description || langProvider.t("cnki.steps." + idx);
  258. });
  259. steps[4].popover.side = "right";
  260. steps[5].popover.side = "right";
  261. steps[6].popover.side = "right";
  262. steps[12].popover.side = "right";
  263. steps[steps.length - 1].popover.onNextClick = () => {
  264. GM_setValue("cnkiTutor", false);
  265. cnkiDriver.destroy();
  266. };
  267. let driverOptions = {
  268. showProgress: true,
  269. steps,
  270. disableButtons: ["previous", "close"],
  271. allowClose: false,
  272. nextBtnText: langProvider.t("driver-buttons.next"),
  273. doneBtnText: langProvider.t("driver-buttons.done"),
  274. prevBtnText: langProvider.t("driver-buttons.previous")
  275. };
  276. cnkiDriver = driver_default.driver(driverOptions);
  277. }
  278. __name(initialCnkiDriver, "initialCnkiDriver");
  279.  
  280. // global-externals:i18next
  281. var i18next_default = window.i18next;
  282.  
  283. // src/i18n/en-us.json
  284. var en_us_default = {
  285. panel: {
  286. lang: "American English(en-US)",
  287. title: "Library Assistant",
  288. "panel-1": "Database usage tutorial",
  289. "panel-2": "Language Settings",
  290. "panel-3": "Font-Size Settings",
  291. "panel-5": "Database introduction",
  292. "panel-1-func-1": "Searching for Literature Using CNKI Databases",
  293. "panel-1-func-2": "Searching for Literature Using IEEE Databases",
  294. "panel-1-func-3": "Searching for Literature Using Nature Databases",
  295. "panel-2-func-1": "\u7B80\u4F53\u4E2D\u6587(zh-CN)",
  296. "panel-2-func-2": "American English(en-US)",
  297. "panel-3-func-1": "Small Fonts",
  298. "panel-3-func-2": "Large Fonts",
  299. "panel-5-func-1": "CNKI Database",
  300. "panel-last": "Features awaiting development..."
  301. },
  302. "driver-buttons": {
  303. next: "next",
  304. previous: "previous",
  305. done: "done"
  306. },
  307. cnki: {
  308. gotoHomepage: "Please do so on the library homepage",
  309. title: "CNKI Database Guidance",
  310. steps: [
  311. "To begin, select the database column and follow the provided instructions.",
  312. "Next, click on 'Jump to CNKI.' No registration is required for the campus network. For off-campus access, use a Southeastern University VPN.",
  313. "Please enter your search keywords.",
  314. "Click the search button.",
  315. "Here is the search results.",
  316. "You can further filter the search results here.",
  317. "For instance, if you have a requirement for the timeliness of the paper, you can choose the paper of nearly 1 year.",
  318. "Different sorting order of the results can be chosen here.",
  319. "Detailed information of the paper can be found here.",
  320. "Download the paper here.",
  321. "Tick papers you want before batch download.",
  322. "Then click here for bulk downloads.",
  323. "Click here to preview the paper.",
  324. "Click here to favorite the papers.",
  325. "Click here to copy the citation format of the paper.",
  326. "Enter new keywords here to search within results if necessary.",
  327. "CNKI Features: Click here to view the summary directly.",
  328. "Note that CNKI downloads in caj format by default and require this reader to read."
  329. ],
  330. end: "Congratulations! You have learnt how to use CNKI database."
  331. }
  332. };
  333.  
  334. // src/i18n/zh-cn.json
  335. var zh_cn_default = {
  336. panel: {
  337. lang: "\u7B80\u4F53\u4E2D\u6587",
  338. title: "\u56FE\u4E66\u9986\u5C0F\u52A9\u624B",
  339. "panel-1": "\u6570\u636E\u5E93\u4F7F\u7528\u6559\u7A0B",
  340. "panel-2": "\u8BED\u8A00\u8BBE\u7F6E",
  341. "panel-3": "\u5B57\u4F53\u5927\u5C0F\u8BBE\u7F6E",
  342. "panel-5": "\u6570\u636E\u5E93\u7B80\u4ECB",
  343. "panel-1-func-1": "\u4F7F\u7528\u77E5\u7F51\u6570\u636E\u5E93\u68C0\u7D22\u6587\u732E",
  344. "panel-1-func-2": "\u4F7F\u7528IEEE\u6570\u636E\u5E93\u68C0\u7D22\u6587\u732E",
  345. "panel-1-func-3": "\u4F7F\u7528Nature\u6570\u636E\u5E93\u68C0\u7D22\u6587\u732E",
  346. "panel-2-func-1": "\u7B80\u4F53\u4E2D\u6587(zh-CN)",
  347. "panel-2-func-2": "American English(en-US)",
  348. "panel-3-func-1": "\u5C0F\u53F7\u5B57\u4F53",
  349. "panel-3-func-2": "\u5927\u53F7\u5B57\u4F53",
  350. "panel-last": "\u529F\u80FD\u7B49\u5F85\u5F00\u53D1\u4E2D...",
  351. "panel-5-func-1": "\u77E5\u7F51\u6570\u636E\u5E93"
  352. },
  353. "driver-buttons": {
  354. next: "\u4E0B\u4E00\u6B65",
  355. previous: "\u4E0A\u4E00\u6B65",
  356. done: "\u5B8C\u6210"
  357. },
  358. cnki: {
  359. gotoHomepage: "\u8BF7\u5728\u56FE\u4E66\u9986\u9996\u9875\u8FDB\u884C\u64CD\u4F5C",
  360. title: "\u77E5\u7F51\u6570\u636E\u5E93\u5F15\u5BFC",
  361. steps: [
  362. "\u9996\u5148\uFF0C\u8BF7\u70B9\u51FB\u9009\u62E9\u6570\u636E\u5E93\u680F\u76EE,\u7136\u540E\u8BF7\u6309\u7167\u63D0\u793A\u64CD\u4F5C\u3002",
  363. "\u63A5\u4E0B\u6765\uFF0C\u70B9\u51FB\u8DF3\u8F6C\u5230\u77E5\u7F51\u3002\u5728\u6821\u56ED\u7F51\u5185\u65E0\u9700\u6CE8\u518C\u3002\u6821\u5916\u8BBF\u95EE\u9700\u8981\u4F7F\u7528\u4E1C\u5357\u5927\u5B66VPN\u3002",
  364. "\u8BF7\u8F93\u5165\u60A8\u60F3\u8981\u641C\u7D22\u7684\u5173\u952E\u5B57\u3002",
  365. "\u70B9\u51FB\u641C\u7D22\u6309\u94AE\u3002",
  366. "\u8FD9\u91CC\u5C55\u793A\u4E86\u68C0\u7D22\u7ED3\u679C\u3002",
  367. "\u5728\u8FD9\u91CC\uFF0C\u60A8\u53EF\u4EE5\u5BF9\u68C0\u7D22\u7ED3\u679C\u8FDB\u884C\u8FDB\u4E00\u6B65\u7B5B\u9009\u3002",
  368. "\u4F8B\u5982\uFF0C\u5982\u679C\u60A8\u5BF9\u8BBA\u6587\u7684\u65F6\u6548\u6027\u6709\u8981\u6C42\uFF0C\u53EF\u4EE5\u9009\u62E9\u8FD1\u4E00\u5E74\u7684\u8BBA\u6587\u3002",
  369. "\u5728\u8FD9\u91CC\uFF0C\u53EF\u4EE5\u9009\u62E9\u68C0\u7D22\u7ED3\u679C\u7684\u6392\u5E8F\u65B9\u5F0F\u3002",
  370. "\u70B9\u51FB\u8FD9\u91CC\uFF0C\u53EF\u4EE5\u67E5\u770B\u8BBA\u6587\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002",
  371. "\u70B9\u51FB\u8FD9\u91CC\uFF0C\u53EF\u4EE5\u4E0B\u8F7D\u8BBA\u6587\u3002",
  372. "\u5982\u679C\u9700\u8981\u6279\u91CF\u4E0B\u8F7D\uFF0C\u53EF\u4EE5\u5148\u5728\u8FD9\u91CC\u52FE\u9009\u9700\u8981\u4E0B\u8F7D\u7684\u8BBA\u6587\u3002",
  373. "\u7136\u540E\u70B9\u51FB\u8FD9\u91CC\uFF0C\u8FDB\u884C\u6279\u91CF\u4E0B\u8F7D\u3002",
  374. "\u70B9\u51FB\u8FD9\u91CC\uFF0C\u53EF\u4EE5\u5BF9\u8BBA\u6587\u8FDB\u884C\u9884\u89C8\u3002",
  375. "\u70B9\u51FB\u8FD9\u91CC\uFF0C\u53EF\u4EE5\u5BF9\u8BBA\u6587\u8FDB\u884C\u6536\u85CF\u3002",
  376. "\u70B9\u51FB\u8FD9\u91CC\uFF0C\u53EF\u4EE5\u62F7\u8D1D\u8BBA\u6587\u7684\u5F15\u7528\u683C\u5F0F\u3002",
  377. "\u5982\u679C\u6709\u9700\u8981\uFF0C\u5728\u8FD9\u91CC\u8F93\u5165\u65B0\u7684\u5173\u952E\u8BCD\uFF0C\u53EF\u4EE5\u8FDB\u884C\u4E8C\u6B21\u68C0\u7D22\u3002",
  378. "\u77E5\u7F51\u7279\u8272\u529F\u80FD\uFF1A\u70B9\u51FB\u8FD9\u91CC\u53EF\u4EE5\u76F4\u63A5\u67E5\u770B\u6982\u8981\u3002",
  379. "\u6CE8\u610F\uFF0C\u77E5\u7F51\u9ED8\u8BA4\u4E0B\u8F7Dcaj\u683C\u5F0F\u8BBA\u6587\uFF0C\u9700\u8981\u4F7F\u7528\u6B64\u9605\u8BFB\u5668\u9605\u8BFB\u3002"
  380. ],
  381. end: "\u606D\u559C\u60A8\uFF0C\u5DF2\u7ECF\u5B8C\u6210\u4E86\u77E5\u7F51\u6570\u636E\u5E93\u7684\u4F7F\u7528\u6559\u7A0B\uFF01"
  382. }
  383. };
  384.  
  385. // index.js
  386. jQuery(() => {
  387. let lang = window.GM_getValue("lang");
  388. if (lang === void 0) {
  389. lang = navigator.language;
  390. GM_setValue("lang", lang);
  391. } else if (window.location.href === "http://lib.seu.edu.cn/seu_en/") {
  392. lang = "en-US";
  393. }
  394. i18next_default.init({
  395. lng: lang,
  396. resources: {
  397. "en-US": {
  398. translation: en_us_default
  399. },
  400. "zh-CN": {
  401. translation: zh_cn_default
  402. }
  403. }
  404. });
  405. GM_addStyle(userpanel_default);
  406. jquery_default("body").prepend(userpanel_default2);
  407. enablePanelDraggable();
  408. enablePanelFoldable();
  409. refreshPanelWithLang(jquery_default, i18next_default);
  410. GM_addStyle(GM_getResourceText("driverjs_css"));
  411. if (window.location.href === "http://lib.seu.edu.cn/") {
  412. GM_setValue("cnkiTutor", false);
  413. }
  414. alertDriver = driver_default.driver();
  415. initialCnkiDriver(i18next_default);
  416. bindFunction2Panel(1, 1, cnkiTutor, [i18next_default]);
  417. bindFunction2Panel(2, 1, () => {
  418. GM_setValue("lang", "zh-CN");
  419. i18next_default.changeLanguage("zh-CN");
  420. refreshPanelWithLang(jquery_default, i18next_default);
  421. initialCnkiDriver(i18next_default);
  422. });
  423. bindFunction2Panel(2, 2, () => {
  424. GM_setValue("lang", "en-US");
  425. i18next_default.changeLanguage("en-US");
  426. refreshPanelWithLang(jquery_default, i18next_default);
  427. initialCnkiDriver(i18next_default);
  428. });
  429. function changeFontSize(Size) {
  430. const panelHeader = document.getElementById("Q-floating-panel-header");
  431. const panelAccordion = document.querySelectorAll(".Q-accordion");
  432. const panelFunc = document.querySelectorAll(".Q-func");
  433. if (Size === "small") {
  434. panelHeader.style.fontSize = "16px";
  435. panelAccordion.forEach((item) => {
  436. item.style.fontSize = "13px";
  437. });
  438. panelFunc.forEach((item) => {
  439. item.style.fontSize = "12px";
  440. });
  441. } else if (Size === "big") {
  442. panelHeader.style.fontSize = "18px";
  443. panelAccordion.forEach((item) => {
  444. item.style.fontSize = "15px";
  445. });
  446. panelFunc.forEach((item) => {
  447. item.style.fontSize = "14px";
  448. });
  449. }
  450. }
  451. __name(changeFontSize, "changeFontSize");
  452. bindFunction2Panel(3, 1, () => {
  453. changeFontSize("small");
  454. });
  455. bindFunction2Panel(3, 2, () => {
  456. changeFontSize("big");
  457. });
  458. bindFunction2Panel(4, 1, () => {
  459. alertDriver.highlight({
  460. popover: {
  461. description: "\u524D\u9762\u7684\u533A\u57DF\uFF0C\u8BF7\u4EE5\u540E\u518D\u6765\u63A2\u7D22\u5427"
  462. }
  463. });
  464. });
  465. bindFunction2Panel(5, 1, () => {
  466. const picDriver = driver_default.driver();
  467. picDriver.highlight({
  468. popover: {
  469. description: "<img src='https://gitlab.seu.edu.cn/qisumi/seu-library-tutor/-/raw/dev/src/static/databaseIntroduction.png?inline=false' style=' width: 1040px; display:block; ' />"
  470. }
  471. });
  472. });
  473. if (GM_getValue("cnkiTutor")) {
  474. cnkiTutor(i18next_default);
  475. }
  476. });
  477. })();