diff options
Diffstat (limited to 'ext/bg')
-rw-r--r-- | ext/bg/context.html | 67 | ||||
-rw-r--r-- | ext/bg/js/audio.js | 2 | ||||
-rw-r--r-- | ext/bg/js/context.js | 39 | ||||
-rw-r--r-- | ext/bg/js/deinflector.js | 2 | ||||
-rw-r--r-- | ext/bg/js/profile-conditions.js | 22 | ||||
-rw-r--r-- | ext/bg/js/search.js | 2 | ||||
-rw-r--r-- | ext/bg/js/translator.js | 20 | ||||
-rw-r--r-- | ext/bg/legal.html | 1 | ||||
-rw-r--r-- | ext/bg/settings.html | 2 |
9 files changed, 119 insertions, 38 deletions
diff --git a/ext/bg/context.html b/ext/bg/context.html index 7e08dddd..bd62270b 100644 --- a/ext/bg/context.html +++ b/ext/bg/context.html @@ -11,7 +11,6 @@ <link rel="icon" type="image/png" href="/mixed/img/icon128.png" sizes="128x128"> <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap/css/bootstrap-theme.min.css"> - <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.css"> <style type="text/css"> body { padding: 10px; @@ -89,12 +88,73 @@ .link-group-label { vertical-align: middle; } + + + .toggle { + width: 60px; + height: 34px; + position: relative; + overflow: hidden; + } + .toggle-group { + position: absolute; + width: 200%; + left: 0; + top: 0; + bottom: 0; + user-select: none; + } + .toggle-group.toggle-group-animated { + transition: transform 0.35s; + } + .toggle-on, + .toggle-off { + position: absolute; + top: 0; + bottom: 0; + margin: 0; + border: 0; + border-radius: 0; + } + .toggle-on { + padding-right: 24px; + left: 0; + right: 50%; + } + .toggle-off { + padding-left: 24px; + left: 50%; + right: 0; + } + .toggle-handle { + position: relative; + margin: 0 auto; + padding-top: 0; + padding-bottom: 0; + height: 100%; + width: 0; + border-width: 0 1px; + } + + .toggle>input[type=checkbox] { + display: none; + } + .toggle>input[type=checkbox]:not(:checked)~.toggle-group { + transform: translateX(-50%); + } </style> </head> <body> <div id="mini"> <div> - <input type="checkbox" id="enable-search"> + <label class="btn btn-primary toggle"> + <input type="checkbox" id="enable-search" /> + <div class="toggle-group"> + <span class="btn btn-primary toggle-on">On</span> + <span class="btn btn-default active toggle-off">Off</span> + <span class="btn btn-default toggle-handle"></span> + </div> + </label> </div> <div class="btn-group"> <a title="Search (Alt + Insert) (Middle click to open in new tab)" class="btn btn-default btn-xs action-open-search"><span class="glyphicon glyphicon-search"></span></a> @@ -118,9 +178,6 @@ </a> </div> - <script src="/mixed/lib/jquery.min.js"></script> - <script src="/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js"></script> - <script src="/mixed/js/extension.js"></script> <script src="/bg/js/api.js"></script> diff --git a/ext/bg/js/audio.js b/ext/bg/js/audio.js index 3efcce46..cd42a158 100644 --- a/ext/bg/js/audio.js +++ b/ext/bg/js/audio.js @@ -128,7 +128,7 @@ function audioUrlNormalize(url, baseUrl, basePath) { if (url[0] === '/') { if (url.length >= 2 && url[1] === '/') { // Begins with "//" - url = baseUrl.substr(0, baseUrl.indexOf(':') + 1) + url; + url = baseUrl.substring(0, baseUrl.indexOf(':') + 1) + url; } else { // Begins with "/" url = baseUrl + url; diff --git a/ext/bg/js/context.js b/ext/bg/js/context.js index 3fb27f0d..b288a79a 100644 --- a/ext/bg/js/context.js +++ b/ext/bg/js/context.js @@ -26,26 +26,26 @@ function showExtensionInfo() { } function setupButtonEvents(selector, command, url) { - const node = $(selector); - node.on('click', (e) => { + const node = document.querySelector(selector); + node.addEventListener('click', (e) => { if (e.button !== 0) { return; } apiCommandExec(command, {newTab: e.ctrlKey}); e.preventDefault(); - }) - .on('auxclick', (e) => { + }, false); + node.addEventListener('auxclick', (e) => { if (e.button !== 1) { return; } apiCommandExec(command, {newTab: true}); e.preventDefault(); - }); + }, false); if (typeof url === 'string') { - node.attr('href', url); - node.attr('target', '_blank'); - node.attr('rel', 'noopener'); + node.href = url; + node.target = '_blank'; + node.rel = 'noopener'; } } -$(document).ready(utilAsync(() => { +window.addEventListener('DOMContentLoaded', () => { showExtensionInfo(); apiGetEnvironmentInfo().then(({browser}) => { @@ -64,13 +64,18 @@ $(document).ready(utilAsync(() => { url: window.location.href }; apiOptionsGet(optionsContext).then(options => { - const toggle = $('#enable-search'); - toggle.prop('checked', options.general.enable).change(); - toggle.bootstrapToggle(); - toggle.change(() => apiCommandExec('toggle')); + const toggle = document.querySelector('#enable-search'); + toggle.checked = options.general.enable; + toggle.addEventListener('change', () => apiCommandExec('toggle'), false); + + const toggle2 = document.querySelector('#enable-search2'); + toggle2.checked = options.general.enable; + toggle2.addEventListener('change', () => apiCommandExec('toggle'), false); - const toggle2 = $('#enable-search2'); - toggle2.prop('checked', options.general.enable).change(); - toggle2.change(() => apiCommandExec('toggle')); + setTimeout(() => { + for (const n of document.querySelectorAll('.toggle-group')) { + n.classList.add('toggle-group-animated'); + } + }, 10); }); -})); +}); diff --git a/ext/bg/js/deinflector.js b/ext/bg/js/deinflector.js index ce4b2961..e2fb7461 100644 --- a/ext/bg/js/deinflector.js +++ b/ext/bg/js/deinflector.js @@ -44,7 +44,7 @@ class Deinflector { results.push({ source, - term: term.slice(0, -kanaIn.length) + kanaOut, + term: term.substring(0, term.length - kanaIn.length) + kanaOut, rules: rulesOut, definitions: [], reasons: [reason, ...reasons] diff --git a/ext/bg/js/profile-conditions.js b/ext/bg/js/profile-conditions.js index 5daa904e..8272e5dd 100644 --- a/ext/bg/js/profile-conditions.js +++ b/ext/bg/js/profile-conditions.js @@ -17,6 +17,26 @@ */ +function _profileConditionTestDomain(urlDomain, domain) { + return ( + urlDomain.endsWith(domain) && + ( + domain.length === urlDomain.length || + urlDomain[urlDomain.length - domain.length - 1] === '.' + ) + ); +} + +function _profileConditionTestDomainList(url, domainList) { + const urlDomain = new URL(url).hostname.toLowerCase(); + for (const domain of domainList) { + if (_profileConditionTestDomain(urlDomain, domain)) { + return true; + } + } + return false; +} + const profileConditionsDescriptor = { popupLevel: { name: 'Popup Level', @@ -69,7 +89,7 @@ const profileConditionsDescriptor = { transform: (optionValue) => optionValue.split(/[,;\s]+/).map(v => v.trim().toLowerCase()).filter(v => v.length > 0), transformReverse: (transformedOptionValue) => transformedOptionValue.join(', '), validateTransformed: (transformedOptionValue) => (transformedOptionValue.length > 0), - test: ({url}, transformedOptionValue) => (transformedOptionValue.indexOf(new URL(url).hostname.toLowerCase()) >= 0) + test: ({url}, transformedOptionValue) => _profileConditionTestDomainList(url, transformedOptionValue) }, matchRegExp: { name: 'Matches RegExp', diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 20d0c58c..b4731e6a 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -210,7 +210,7 @@ class DisplaySearch extends Display { const match = /[\*\uff0a]+$/.exec(query); if (match !== null) { details.wildcard = true; - query = query.substr(0, query.length - match[0].length); + query = query.substring(0, query.length - match[0].length); } const valid = (query.length > 0); diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 583d6e31..e27cbdff 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -327,22 +327,22 @@ class Translator { const deinflections = []; for (let i = text.length; i > 0; --i) { - const textSlice = text.slice(0, i); - deinflections.push(...this.deinflector.deinflect(textSlice)); + const textSubstring = text.substring(0, i); + deinflections.push(...this.deinflector.deinflect(textSubstring)); } return deinflections; } - getDeinflections2(text, text2) { + getDeinflections2(text1, text2) { const deinflections = []; - for (let i = text.length; i > 0; --i) { - const textSlice = text.slice(0, i); - const text2Slice = text2.slice(0, i); - deinflections.push(...this.deinflector.deinflect(textSlice)); - if (textSlice !== text2Slice) { - deinflections.push(...this.deinflector.deinflect(text2Slice)); + for (let i = text1.length; i > 0; --i) { + const text1Substring = text1.substring(0, i); + const text2Substring = text2.substring(0, i); + deinflections.push(...this.deinflector.deinflect(text1Substring)); + if (text1Substring !== text2Substring) { + deinflections.push(...this.deinflector.deinflect(text2Substring)); } } @@ -516,6 +516,6 @@ class Translator { static getNameBase(name) { const pos = name.indexOf(':'); - return (pos >= 0 ? name.substr(0, pos) : name); + return (pos >= 0 ? name.substring(0, pos) : name); } } diff --git a/ext/bg/legal.html b/ext/bg/legal.html index 377d25ba..3047ab3e 100644 --- a/ext/bg/legal.html +++ b/ext/bg/legal.html @@ -41,7 +41,6 @@ and are used in conformance with the Group's <a href="https://www.edrdg.org/edrd <h3>Third-Party Software Licenses</h3> <ul> <li><a href="https://github.com/twbs/bootstrap/blob/v3.3.7/LICENSE" target="_blank" rel="noopener">Bootstrap v3.3.7</a></li> - <li><a href="https://github.com/minhur/bootstrap-toggle/blob/2.2.0/LICENSE" target="_blank" rel="noopener">Bootstrap Toggle v2.2.0</a></li> <li><a href="https://github.com/wycats/handlebars.js/blob/v4.0.6/LICENSE" target="_blank" rel="noopener">Handlebars v4.0.6</a></li> <li><a href="https://github.com/jquery/jquery/blob/3.2.1/LICENSE.txt" target="_blank" rel="noopener">jQuery v3.2.1</a></li> <li><a href="https://github.com/Stuk/jszip/blob/v3.1.3/LICENSE.markdown" target="_blank" rel="noopener">JSZip v3.1.3</a></li> diff --git a/ext/bg/settings.html b/ext/bg/settings.html index 0badb817..262386e9 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -488,7 +488,7 @@ <button class="btn btn-primary" id="dict-file-button">Import Dictionary</button> <button class="btn btn-danger" id="dict-purge-button">Purge Database</button> </div> - <div hidden><input type="file" id="dict-file" multiple></div> + <div hidden><input type="file" id="dict-file" accept=".zip,application/zip" multiple></div> </div> <div class="modal fade" tabindex="-1" role="dialog" id="dict-purge-modal"> |