diff options
| -rw-r--r-- | ext/bg/background.html | 1 | ||||
| -rw-r--r-- | ext/bg/js/polyfill-gecko.js | 15 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 10 | ||||
| -rw-r--r-- | ext/bg/options.html | 1 | ||||
| -rw-r--r-- | ext/fg/js/popup.js | 6 | ||||
| -rw-r--r-- | ext/fg/js/range.js | 13 | ||||
| -rw-r--r-- | ext/manifest.json | 13 | 
7 files changed, 52 insertions, 7 deletions
| diff --git a/ext/bg/background.html b/ext/bg/background.html index c35e917d..c6a84636 100644 --- a/ext/bg/background.html +++ b/ext/bg/background.html @@ -1,6 +1,7 @@  <!DOCTYPE html>  <html lang="en">  <body> +    <script src="js/polyfill-gecko.js"></script>      <script src="../lib/handlebars.min.js"></script>      <script src="js/templates.js"></script>      <script src="js/dictionary.js"></script> diff --git a/ext/bg/js/polyfill-gecko.js b/ext/bg/js/polyfill-gecko.js new file mode 100644 index 00000000..8c7cc403 --- /dev/null +++ b/ext/bg/js/polyfill-gecko.js @@ -0,0 +1,15 @@ +// Gecko does not currently support chrome.storage.sync, use storage.local instead +// https://bugzilla.mozilla.org/show_bug.cgi?id=1220494 +if (!chrome.storage.sync) { +    chrome.storage.sync = chrome.storage.local; +} + +// Gecko does not currently support chrome.runtime.onInstalled, just ignore calls to it +// (https://bugzilla.mozilla.org/show_bug.cgi?id=1252871) +if (!chrome.runtime.onInstalled) { +    chrome.runtime.onInstalled = { +        'addListener' : function(){}, +        'hasListener' : function(){}, +        'removeListener' : function(){} +    }; +}
\ No newline at end of file diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index bf1538e2..d79ec6d1 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -46,8 +46,17 @@ class Translator {          const pendingLoads = [];          for (let key of files) { +            /* +                Spidermonkey does not implement lexical bindings for for-of loop +                (see https://bugzilla.mozilla.org/show_bug.cgi?id=449811) +                so we need to manually make a new declaration for key. +                Otherwise key will always remain the same in the callback to loadData +                and the dictionary data will not be set correctly +            */ +            let key_ = key;              pendingLoads.push(key);              Translator.loadData(this.paths[key], (response) => { +                let key = key_                  switch (key) {                      case 'rules':                          this.deinflector.setRules(JSON.parse(response)); @@ -228,6 +237,7 @@ class Translator {      static loadData(url, callback) {          const xhr = new XMLHttpRequest(); +        xhr.overrideMimeType("application/json");          xhr.addEventListener('load', () => callback(xhr.responseText));          xhr.open('GET', chrome.extension.getURL(url), true);          xhr.send(); diff --git a/ext/bg/options.html b/ext/bg/options.html index 289a0f60..a2b4a56b 100644 --- a/ext/bg/options.html +++ b/ext/bg/options.html @@ -163,6 +163,7 @@          <script src="../lib/jquery-2.2.2.min.js"></script>          <script src="../lib/bootstrap-3.3.6-dist/js/bootstrap.min.js"></script> +        <script src="js/polyfill-gecko.js"></script>          <script src="js/options.js"></script>          <script src="js/options-form.js"></script>      </body> diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index 78106319..4c2b18f7 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -62,10 +62,8 @@ class Popup {              return;          } -        const doc = this.popup.contentDocument; -        doc.open(); -        doc.write(content); -        doc.close(); +        const doc = this.popup; +        doc.srcdoc=content;      }      sendMessage(action, params, callback) { diff --git a/ext/fg/js/range.js b/ext/fg/js/range.js index 182e242c..0befe279 100644 --- a/ext/fg/js/range.js +++ b/ext/fg/js/range.js @@ -16,6 +16,19 @@   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ +// Polyfill caretRangeFromPoint() using the newer caretPositionFromPoint() +if (!document.caretRangeFromPoint){ +    document.caretRangeFromPoint = function polyfillcaretRangeFromPoint(x,y){ +        let range = document.createRange(); +        let position = document.caretPositionFromPoint(x,y); +        if (!position) { +            return null; +        } +        range.setStart(position.offsetNode, position.offset); +        range.setEnd(position.offsetNode, position.offset); +        return range; +    }; +}  class Range {      constructor(range) { diff --git a/ext/manifest.json b/ext/manifest.json index 3cb13480..70ce4a9a 100644 --- a/ext/manifest.json +++ b/ext/manifest.json @@ -15,8 +15,10 @@          "css": ["fg/css/client.css"]      }],      "minimum_chrome_version": "45.0.0.0", -    "options_page": "bg/options.html", -    "permissions": ["storage"], +    "options_ui": { +        "page": "bg/options.html" +    }, +    "permissions": ["*://127.0.0.1/*", "storage"],      "web_accessible_resources": [          "fg/css/frame.css",          "fg/img/add_kanji.png", @@ -26,5 +28,10 @@          "fg/js/frame.js",          "fg/ttf/kanji-stroke-orders.ttf",          "fg/ttf/vl-gothic-regular.ttf" -    ] +    ], +    "applications": { +      "gecko": { +        "id": "yomichan-gecko@example.com" +      } +    }  } |