Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. /* global api */
  2. class enfr_Cambridge {
  3. constructor(options) {
  4. this.options = options;
  5. this.maxexample = 2;
  6. this.word = '';
  7. }
  8.  
  9. async displayName() {
  10. let locale = await api.locale();
  11. if (locale.indexOf('CN') != -1) return 'Cambridge English-English Dictionary';
  12. if (locale.indexOf('TW') != -1) return 'Cambridge English-English Dictionary';
  13. return 'Cambridge EN->EN Dictionary';
  14. }
  15.  
  16. setOptions(options) {
  17. this.options = options;
  18. this.maxexample = options.maxexample;
  19. }
  20.  
  21. async findTerm(word) {
  22. this.word = word;
  23. return await this.findCambridge(word);
  24. }
  25.  
  26. removeTags(elem, name) {
  27. let tags = elem.querySelectorAll(name);
  28. tags.forEach(x => {
  29. x.outerHTML = '';
  30. });
  31. }
  32.  
  33. removelinks(elem) {
  34. let tags = elem.querySelectorAll('a');
  35. tags.forEach(x => {
  36. x.outerHTML = x.innerText;
  37. });
  38.  
  39. tags = elem.querySelectorAll('h2');
  40. tags.forEach(x => {
  41. x.outerHTML = `<div class='head2'>${x.innerHTML}</div>`;
  42. });
  43.  
  44. tags = elem.querySelectorAll('h3');
  45. tags.forEach(x => {
  46. x.outerHTML = `<div class='head3'>${x.innerHTML}</div>`;
  47. });
  48. }
  49.  
  50. async findCambridge(word) {
  51. if (!word) return null;
  52.  
  53. let base = 'https://dictionary.cambridge.org/search/';
  54. let url = base + encodeURIComponent(word);
  55. let doc = '';
  56. try {
  57. let data = await api.fetch(url);
  58. let parser = new DOMParser();
  59. doc = parser.parseFromString(data, 'text/html');
  60. } catch (err) {
  61. return null;
  62. }
  63.  
  64. let contents = doc.querySelectorAll('.pr .dictionary') || [];
  65. if (contents.length == 0) return null;
  66.  
  67. let definition = '';
  68. for (const content of contents) {
  69. this.removeTags(content, '.extraexamps');
  70. this.removeTags(content, '.definition-src');
  71. this.removeTags(content, 'h2');
  72. this.removeTags(content, '.d_br');
  73. this.removeTags(content, '.freq.dfreq');
  74. this.removelinks(content);
  75. definition += content.innerHTML;
  76. }
  77. let css = this.renderCSS();
  78. return definition ? css + definition : null;
  79. }
  80.  
  81. renderCSS() {
  82. let css = `
  83. <style>
  84. .entry-body__el{margin-bottom:10px;}
  85. .head2{font-size: 1.2em;font-weight:bold;}
  86. .pos-header{border-bottom: 1px solid;}
  87. .head3 {display:none;}
  88. .posgram {font-size: 0.8em;background-color: #959595;color: white;padding: 2px 5px;border-radius: 3px;}
  89. .epp-xref::after {content: ")";}
  90. .epp-xref::before {content: "(";}
  91. .def-block, .phrase-block {
  92. /*border: 1px solid;*/
  93. /*border-color: #e5e6e9 #dfe0e4 #d0d1d5;*/
  94. border-radius: 3px;
  95. padding: 5px;
  96. margin: 5px 0;
  97. background-color: #f6f6f6;
  98. }
  99. .phrase-block .def-block{border: initial;padding: initial;}
  100. p.def-head {margin: auto;}
  101. .phrase-head {vertical-align: middle;color: #1683ea;font-weight: bold;}
  102. .trans {color: #5079bb;}
  103. </style>`;
  104.  
  105. return css;
  106. }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement