diff options
| -rw-r--r-- | ext/bg/js/options-form.js | 47 | ||||
| -rw-r--r-- | ext/bg/js/templates.js | 2 | ||||
| -rw-r--r-- | ext/bg/js/util.js | 1 | ||||
| -rw-r--r-- | ext/bg/options.html | 6 | ||||
| -rw-r--r-- | tmpl/dictionary.html | 2 | 
5 files changed, 49 insertions, 9 deletions
diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js index 14143d81..ce829698 100644 --- a/ext/bg/js/options-form.js +++ b/ext/bg/js/options-form.js @@ -166,6 +166,9 @@ function populateDictionaries(opts) {      const container = $('.dicts');      container.empty(); +    const dictError = $('#dict-error'); +    dictError.hide(); +      yomichan().translator.database.getDictionaries().then(rows => {          rows.forEach(row => {              const dictOpts = opts.dictionaries[row.title] || {enableTerms: true, enableKanji: false}; @@ -182,13 +185,47 @@ function populateDictionaries(opts) {          });          $('.dict-delete').click(e => { -            const dict = $(e.target).closest('.dict'); +            const button = $(e.target); +            const dict = button.closest('.dict');              const title = dict.data('title'); -            yomichan().translator.database.deleteDictionary(title); -            dict.slideUp(); + +            button.prop('disabled', true); +            yomichan().translator.database.deleteDictionary(title).then(() => { +                dict.slideUp(); +            }).catch(error => { +                dictError.show().find('span').text(error); +            }).then(() => { +                button.prop('disabled', false); +            });          });          container.find('.dict input').change(onOptionsChanged); +    }).catch(error => { +        dictError.show().find('span').text(error); +    }); +} + +function onImportDictionary() { +    const dictInputs = $('#dict-import').find('input'); +    dictInputs.prop('disabled', true); + +    const dictError = $('#dict-error'); +    dictError.hide(); + +    const progressbar = $('#dict-import-progress'); +    const progressValue = progressbar.find('div'); +    progressbar.show(); + +    const callback = (total, current) => { +        $('.progress-bar').css('width', `${current / total * 100.0}%`); +    }; + +    const dictUrl = $('#dict-import-url').val(); +    yomichan().translator.database.importDictionary(dictUrl, callback).catch(error => { +        dictError.show().find('span').text(error); +    }).then(() => { +        dictInputs.prop('disabled', false); +        progressbar.hide();      });  } @@ -303,7 +340,7 @@ $(document).ready(() => {              if (url.includes('/')) {                  control.val(url);              } else { -                control.val(chrome.extension.getURL(`bg/data/${url}`)); +                control.val(chrome.extension.getURL(`bg/data/${url}/index.json`));              }              control.trigger('input');          }); @@ -314,6 +351,8 @@ $(document).ready(() => {              $('#dict-import-start').prop('disabled', disable);          }); +        $('#dict-import-start').click(onImportDictionary); +          populateDictionaries(opts);          populateAnkiDeckAndModel(opts);          updateVisibility(opts); diff --git a/ext/bg/js/templates.js b/ext/bg/js/templates.js index d42d972d..ce44de8d 100644 --- a/ext/bg/js/templates.js +++ b/ext/bg/js/templates.js @@ -13,7 +13,7 @@ templates['dictionary.html'] = template({"1":function(container,depth0,helpers,p      + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper)))      + " <small>v."      + alias4(((helper = (helper = helpers.version || (depth0 != null ? depth0.version : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"version","hash":{},"data":data}) : helper))) -    + "</small></h4>\n        </div>\n        <div class=\"col-xs-4 text-right\">\n            <button type=\"button\" class=\"dict-delete btn btn-danger\">Delete</button>\n        </div>\n    </div>\n\n    <div class=\"checkbox " +    + "</small></h4>\n        </div>\n        <div class=\"col-xs-4 text-right disabled\">\n            <button type=\"button\" class=\"dict-delete btn btn-danger\">Delete</button>\n        </div>\n    </div>\n\n    <div class=\"checkbox "      + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasTerms : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")      + "\">\n        <label><input type=\"checkbox\" class=\"dict-enable-terms\" "      + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hasTerms : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js index e99cdeab..8a21b264 100644 --- a/ext/bg/js/util.js +++ b/ext/bg/js/util.js @@ -112,6 +112,7 @@ function loadJson(url) {      return new Promise((resolve, reject) => {          const xhr = new XMLHttpRequest();          xhr.addEventListener('load', () => resolve(JSON.parse(xhr.responseText))); +        xhr.addEventListener('error', () => reject('failed to execute network request'));          xhr.open('GET', chrome.extension.getURL(url));          xhr.send();      }); diff --git a/ext/bg/options.html b/ext/bg/options.html index 800fe8e9..8c19ac8f 100644 --- a/ext/bg/options.html +++ b/ext/bg/options.html @@ -69,11 +69,11 @@                  <div class="alert alert-danger" id="dict-error">                      <strong>Error:</strong> -                    <span>Something went wrong!</span> +                    <span></span>                  </div>                  <div class="progress" id="dict-import-progress"> -                    <div id="dict-import-progress-value" class="progress-bar progress-bar-striped" style="width: 45%"></div> +                    <div class="progress-bar progress-bar-striped" style="width: 0%"></div>                  </div>                  <div class="input-group" id="dict-import"> @@ -84,7 +84,7 @@                              <li><a href="#" data-url="enamdict">JMnedict</a></li>                              <li><a href="#" data-url="kanjidic">KANJIDIC2</a></li>                              <li role="separator" class="divider"></li> -                            <li><a href="#" data-url="http://localhost:9876">Local dictionary</a></li> +                            <li><a href="#" data-url="http://localhost:9876/index.json">Local dictionary</a></li>                          </ul>                      </div>                      <input type="text" id="dict-import-url" class="form-control" placeholder="Dictionary import URL"> diff --git a/tmpl/dictionary.html b/tmpl/dictionary.html index 73bce769..526e856b 100644 --- a/tmpl/dictionary.html +++ b/tmpl/dictionary.html @@ -3,7 +3,7 @@          <div class="col-xs-8">              <h4><span class="text-muted glyphicon glyphicon-book"></span> {{title}} <small>v.{{version}}</small></h4>          </div> -        <div class="col-xs-4 text-right"> +        <div class="col-xs-4 text-right disabled">              <button type="button" class="dict-delete btn btn-danger">Delete</button>          </div>      </div>  |