Course ZJU Open in New Tab

让学在浙大首页的链接总是在新标签页中打开

  1. // ==UserScript==
  2. // @name Course ZJU Open in New Tab
  3. // @namespace https://www.cc98.org/user/name/ml98
  4. // @description Make the links in courses.zju.edu.cn always open in new tab
  5. // @description:zh-CN 让学在浙大首页的链接总是在新标签页中打开
  6. // @version 0.0.1
  7. // @author ml98
  8. // @license MIT
  9. // @match https://courses.zju.edu.cn/user/index
  10. // ==/UserScript==
  11.  
  12. /* eslint-disable no-undef */
  13.  
  14. (function() {
  15. 'use strict';
  16. setInterval(()=>{
  17. // links
  18. $('a[ng-href]:not(.__visited_f3641d)').addClass('__visited_f3641d')
  19. .off('click').attr('target', '_blank');
  20.  
  21. // todos
  22. $('a[ng-click^="openActivity"]:not(.__visited_f3641d)').addClass('__visited_f3641d')
  23. .off('click').on('click', (e)=>{
  24. let payload = $(e.target).scope().activity;
  25. window.open($(e.target).scope().activity.url, '_blank')
  26. });
  27.  
  28. // activities
  29. $('a[ng-click^="linkToActivity"]:not(.__visited_f3641d)').addClass('__visited_f3641d')
  30. .off('click').on('click', e=>{
  31. let payload = $(e.target).scope().n.payload;
  32. window.open('/course/' + payload.course_id + '/learning-activity#/' + payload.activity_id, '_blank');
  33. });
  34.  
  35. // uploads
  36. $('.notification-attachment-uploads:not(.__visited_f3641d)').addClass('__visited_f3641d')
  37. .off('click').on('click', async e=>{
  38. let n = $(e.target).scope().n;
  39. if (['web_link', 'slide', 'lesson', 'online_video'].indexOf(n.payload.activity_type) == -1
  40. && n.payload.uploads.length != 0) {
  41. let uploads = n.payload.uploads;
  42. let resp = await Promise.all(uploads.map(upload=>fetch('/api/uploads/reference/document/'
  43. + upload.reference_id + '/url?preview=true')));
  44. let json = await Promise.all(resp.map(res=>res.json()));
  45. let files = json.map((j,i)=>`<a href="${j.url}">${uploads[i].file_name}</a>`).join('<br>');
  46. window.open('', '_blank').document.body.outerHTML = files;
  47. }
  48. })
  49. }, 3000);
  50. })();