diff options
| -rw-r--r-- | ext/bg/background.html | 1 | ||||
| -rw-r--r-- | ext/bg/js/options.js | 132 | ||||
| -rw-r--r-- | ext/bg/js/util.js | 119 | ||||
| -rw-r--r-- | ext/bg/popup.html | 1 | ||||
| -rw-r--r-- | ext/bg/settings.html | 1 | ||||
| -rw-r--r-- | ext/mixed/js/audio.js | 4 | 
6 files changed, 135 insertions, 123 deletions
| diff --git a/ext/bg/background.html b/ext/bg/background.html index 4a2d8c8d..a9071cc7 100644 --- a/ext/bg/background.html +++ b/ext/bg/background.html @@ -11,6 +11,7 @@          <script src="/mixed/js/audio.js"></script>          <script src="/bg/js/templates.js"></script>          <script src="/bg/js/util.js"></script> +        <script src="/bg/js/options.js"></script>          <script src="/bg/js/anki-connect.js"></script>          <script src="/bg/js/anki-null.js"></script>          <script src="/bg/js/database.js"></script> diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js new file mode 100644 index 00000000..a9345fdd --- /dev/null +++ b/ext/bg/js/options.js @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2016  Alex Yatskov <alex@foosoft.net> + * Author: Alex Yatskov <alex@foosoft.net> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ + + +function optionsSetDefaults(options) { +    const defaults = { +        general: { +            enable: true, +            audioSource: 'jpod101', +            audioVolume: 100, +            groupResults: true, +            debugInfo: false, +            maxResults: 32, +            showAdvanced: false, +            popupWidth: 400, +            popupHeight: 250, +            popupOffset: 10, +            showGuide: true +        }, + +        scanning: { +            middleMouse: true, +            selectText: true, +            alphanumeric: true, +            delay: 15, +            length: 10, +            modifier: 'shift' +        }, + +        dictionaries: {}, + +        anki: { +            enable: false, +            server: 'http://127.0.0.1:8765', +            tags: ['yomichan'], +            htmlCards: true, +            sentenceExt: 200, +            terms: {deck: '', model: '', fields: {}}, +            kanji: {deck: '', model: '', fields: {}} +        } +    }; + +    const combine = (target, source) => { +        for (const key in source) { +            if (!target.hasOwnProperty(key)) { +                target[key] = source[key]; +            } +        } +    }; + +    combine(options, defaults); +    combine(options.general, defaults.general); +    combine(options.scanning, defaults.scanning); +    combine(options.anki, defaults.anki); +    combine(options.anki.terms, defaults.anki.terms); +    combine(options.anki.kanji, defaults.anki.kanji); + +    return options; +} + +function optionsVersion(options) { +    const fixups = [ +        () => {}, +        () => {}, +        () => {}, +        () => {}, +        () => { +            if (options.general.audioPlayback) { +                options.general.audioSource = 'jpod101'; +            } else { +                options.general.audioSource = 'disabled'; +            } +        }, +        () => { +            options.general.showGuide = false; +        }, +        () => { +            if (options.scanning.requireShift) { +                options.scanning.modifier = 'shift'; +            } else { +                options.scanning.modifier = 'none'; +            } +        } +    ]; + +    optionsSetDefaults(options); +    if (!options.hasOwnProperty('version')) { +        options.version = fixups.length; +    } + +    while (options.version < fixups.length) { +        fixups[options.version++](); +    } + +    return options; +} + +function optionsLoad() { +    return new Promise((resolve, reject) => { +        chrome.storage.local.get(null, store => resolve(store.options)); +    }).then(optionsStr => { +        return optionsStr ? JSON.parse(optionsStr) : {}; +    }).catch(error => { +        return {}; +    }).then(options => { +        return optionsVersion(options); +    }); +} + +function optionsSave(options) { +    return new Promise((resolve, reject) => { +        chrome.storage.local.set({options: JSON.stringify(options)}, resolve); +    }).then(() => { +        instYomi().optionsSet(options); +        fgOptionsSet(options); +    }); +} diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js index 4d0aa27e..5d80fdb7 100644 --- a/ext/bg/js/util.js +++ b/ext/bg/js/util.js @@ -92,125 +92,6 @@ function fgOptionsSet(options) {  /* - * Options - */ - -function optionsSetDefaults(options) { -    const defaults = { -        general: { -            enable: true, -            audioSource: 'jpod101', -            audioVolume: 100, -            groupResults: true, -            debugInfo: false, -            maxResults: 32, -            showAdvanced: false, -            popupWidth: 400, -            popupHeight: 250, -            popupOffset: 10, -            showGuide: true -        }, - -        scanning: { -            middleMouse: true, -            selectText: true, -            alphanumeric: true, -            delay: 15, -            length: 10, -            modifier: 'shift' -        }, - -        dictionaries: {}, - -        anki: { -            enable: false, -            server: 'http://127.0.0.1:8765', -            tags: ['yomichan'], -            htmlCards: true, -            sentenceExt: 200, -            terms: {deck: '', model: '', fields: {}}, -            kanji: {deck: '', model: '', fields: {}} -        } -    }; - -    const combine = (target, source) => { -        for (const key in source) { -            if (!target.hasOwnProperty(key)) { -                target[key] = source[key]; -            } -        } -    }; - -    combine(options, defaults); -    combine(options.general, defaults.general); -    combine(options.scanning, defaults.scanning); -    combine(options.anki, defaults.anki); -    combine(options.anki.terms, defaults.anki.terms); -    combine(options.anki.kanji, defaults.anki.kanji); - -    return options; -} - -function optionsVersion(options) { -    const fixups = [ -        () => {}, -        () => {}, -        () => {}, -        () => {}, -        () => { -            if (options.general.audioPlayback) { -                options.general.audioSource = 'jpod101'; -            } else { -                options.general.audioSource = 'disabled'; -            } -        }, -        () => { -            options.general.showGuide = false; -        }, -        () => { -            if (options.scanning.requireShift) { -                options.scanning.modifier = 'shift'; -            } else { -                options.scanning.modifier = 'none'; -            } -        } -    ]; - -    optionsSetDefaults(options); -    if (!options.hasOwnProperty('version')) { -        options.version = fixups.length; -    } - -    while (options.version < fixups.length) { -        fixups[options.version++](); -    } - -    return options; -} - -function optionsLoad() { -    return new Promise((resolve, reject) => { -        chrome.storage.local.get(null, store => resolve(store.options)); -    }).then(optionsStr => { -        return optionsStr ? JSON.parse(optionsStr) : {}; -    }).catch(error => { -        return {}; -    }).then(options => { -        return optionsVersion(options); -    }); -} - -function optionsSave(options) { -    return new Promise((resolve, reject) => { -        chrome.storage.local.set({options: JSON.stringify(options)}, resolve); -    }).then(() => { -        instYomi().optionsSet(options); -        fgOptionsSet(options); -    }); -} - - -/*   * Dictionary   */ diff --git a/ext/bg/popup.html b/ext/bg/popup.html index dec52795..ab2ee1e0 100644 --- a/ext/bg/popup.html +++ b/ext/bg/popup.html @@ -31,6 +31,7 @@          <script src="/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js"></script>          <script src="/mixed/lib/handlebars.min.js"></script>          <script src="/bg/js/util.js"></script> +        <script src="/bg/js/options.js"></script>          <script src="/bg/js/popup.js"></script>      </body>  </html> diff --git a/ext/bg/settings.html b/ext/bg/settings.html index 19dfec22..ada3299b 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -277,6 +277,7 @@          <script src="/mixed/lib/handlebars.min.js"></script>          <script src="/bg/js/templates.js"></script>          <script src="/bg/js/util.js"></script> +        <script src="/bg/js/options.js"></script>          <script src="/bg/js/settings.js"></script>      </body>  </html> diff --git a/ext/mixed/js/audio.js b/ext/mixed/js/audio.js index 451fe1d9..eb8fde94 100644 --- a/ext/mixed/js/audio.js +++ b/ext/mixed/js/audio.js @@ -17,10 +17,6 @@   */ -/* - * Audio - */ -  async function audioBuildUrl(definition, mode, cache={}) {      if (mode === 'jpod101') {          let kana = definition.reading; |