1. 15 Jun, 2017 10 commits
  2. 14 Jun, 2017 15 commits
    • Sean Hammond's avatar
      Merge pull request #445 from hypothesis/fix-js-er · 69a3dac2
      Sean Hammond authored
      Fixing js error on :3000 page
      69a3dac2
    • Sean Roberts's avatar
      Fixing js error on :3000 page · 7f98162a
      Sean Roberts authored
      7f98162a
    • Sean Hammond's avatar
      Merge pull request #442 from hypothesis/add-symbol-polyfill · 7f965106
      Sean Hammond authored
      Add Symbol polyfill
      7f965106
    • Sean Hammond's avatar
      Use hostPageSetting() instead of Object.assign() · b8cff0a2
      Sean Hammond authored
      Use the new `settings.hostPageSetting()` method in `index.js`.
      
      This means that `index.js` no longer uses `shared/settings.js`
      (`jsonConfigsFrom()`) or `configFuncSettingsFrom()`. These are both
      encapsulated in `hostPageSetting()`.
      
      Previously `index.js` blindly assigned a lot of property names and
      values fo the `config` object using a couple of `Object.assign()` calls:
      
          Object.assign(config, sharedSettings.jsonConfigsFrom(window_.document));
          Object.assign(config, configFuncSettingsFrom(window_));
      
      These `Object.assign()`s are now gone, and instead it explicitly assigns
      each property to the `config` object by name:
      
          var config = {
            app: settings.app,
            query: settings.query,
            ...
            openLoginForm: settings.hostPageSetting('openLoginForm'),
            openSidebar: settings.hostPageSetting('openSidebar'),
            ...
          };
      
      (Some of these settings were already being assigned in this way, but the
      ones that uses `hostPageSetting()` are new.)
      
      This also means that `index.js` no longer uses `isBrowserExtension()`.
      Previously `index.js` contained logic to return early, declining to read
      various config settings from the host page using its `Object.assign()`s,
      if the client was running in a browser extension. This logic is also now
      encapsulated in the new `settings.hostPageSetting()` method and so is
      removed from `index.js`.
      b8cff0a2
    • Sean Hammond's avatar
      Read annotations from the host page in settings.annotations() · dc1801f4
      Sean Hammond authored
      Add code to the `settings.annotations()` method so that, instead of
      reading the setting from the URL only, it reads the annotations setting
      from the `js-hypothesis-config` scripts in the host page or, failing
      that, tries to read it from the URL.
      
      In `index.js`, after `settings.annotations()` is called, there are two
      `Object.assign()` calls that overwrite values already in the `config`
      objects with any returned from `js-hypothesis-config` scripts or the
      `window.hypothesisConfig()` function in the host page. So a
      `config.annotations` setting from `settings.annotations()` already gets
      overwritten by a `annotations` setting in a `js-hypothesis-config`
      script or `hypothesisConfig()` function.
      
      This commit makes that overwriting explicit, encapsulates it in the
      `annotations()` method, and unit tests it.
      
      Note that the two `Object.assign()`s are still present in `index.js` so
      the `config.annotations` setting returned by the `annotations()` method
      still gets overwritten by them, but this now has no effect as the
      `annotations()` method will already have set `config.annotations` to the
      same value that it will be overwritten with.
      
      In a future commit the `Object.assign()`s will be removed and there
      won't be any overwriting.
      
      Note that **this will change the behaviour of the code** once the
      `Object.assign()`s have been removed: the `annotations()` method reads
      the annotations setting from `js-hypothesis-config` scripts but does not
      read it from `window.hypothesisConfig()` any longer. I don't believe
      it's necessary to read `annotations` from `hypothesisConfig()`.
      dc1801f4
    • Sean Hammond's avatar
      Read query from the host page in settings.query() · 30160267
      Sean Hammond authored
      Add code to the `settings.query()` method so that, instead of reading
      the setting from the URL only, it reads the query setting from the
      `js-hypothesis-config` scripts in the host page or, failing that, tries
      to read it from the URL.
      
      In `index.js`, after `settings.query()` is called, there are two
      `Object.assign()` calls that overwrite values already in the `config`
      objects with any returned from `js-hypothesis-config` scripts or the
      `window.hypothesisConfig()` function in the host page. So a
      `config.query` setting from `settings.query()` already gets overwritten
      by a `query` setting in a `js-hypothesis-config` script or
      `hypothesisConfig()` function.
      
      This commit makes that overwriting explicit, encapsulates it in the
      `query()` method, and unit tests it.
      
      Note that the two `Object.assign()`s are still present in `index.js` so
      the `config.query` setting returned by the `query()` method still gets
      overwritten by them, but this now has no effect as the `query()` method
      will already have set `config.query` to the same value that it will be
      overwritten with.
      
      In a future commit the `Object.assign()`s will be removed and there
      won't be any overwriting.
      
      Note that **this will change the behaviour of the code** once the
      `Object.assign()`s have been removed: the `query()` method reads the
      query setting from `js-hypothesis-config` scripts but does not read it
      from `window.hypothesisConfig()` any longer. I don't believe it's
      necessary to read `query` from `hypothesisConfig()`.
      30160267
    • Sean Hammond's avatar
      Add hostPageSetting() method (not used yet) · 5a2181e3
      Sean Hammond authored
      Add a new `annotator.config.settingsFrom#hostPageSetting(settingName)`
      method that encapsulates a bunch of logic in one method:
      
      - It always returns null if the client is from a browser extension.
        Browser extensions don't read settings from the host page.
      - If the host page's `window.hypothesisConfig()` function returned a
        value for the requested setting, `hostPageSetting(settingName)` returns
        that value.
      - If `hypothesisConfig()` doesn't return the setting it looks for it in
        `js-hypothesis-config` scripts in the host page
      - If the setting isn't defined in either place it returns `undefined`.
      5a2181e3
    • Robert Knight's avatar
      Merge pull request #437 from hypothesis/turn-config-settings-into-one-closure-func · 6d9bd921
      Robert Knight authored
      (config 3/n): Turn the settings obj into a settingsFrom function 
      6d9bd921
    • Sean Hammond's avatar
      Turn the settings obj into a settingsFrom function · ae3e804a
      Sean Hammond authored
      annotator.config.settings currently exports an object containing
      individual standalone functions for returning different settings'
      values:
      
          module.exports = {
            app: appFunction,
            annotations: annotationsFunction,
            ...
          };
      
      Change it to export just a single constructor function - settingsFrom()
      - that returns an object containing the previously-exported functions as
      methods:
      
          function settingsFrom(window_) {
            ...
            return {
              get app() { return app(); },
              get annotations() { return annotations(); },
              ...
            };
          }
      
          module.exports = settingsFrom;
      
      Note that ES5 getters are used so that, even though app() and
      annotations() are methods rather than simple properties now, they can
      still be accessed as properties - settings.app not settings.app(). This
      makes the code that uses this object slightly simpler, and makes mocking
      this object in unit tests simpler.
      
      The diff of this commit looks big, because the indentation of a lot of
      code is changed, but it really is just changing functions into methods
      and not actually changing the code of any of those functions.
      
      The reason for turning functions into an object with methods is so that
      the object that settingsFrom() returns can have state (by having closure
      variables inside the settingsFrom() function). We don't make any use of
      this state yet but future commits will do.
      ae3e804a
    • Robert Knight's avatar
      Merge pull request #436 from hypothesis/move-configFuncSettingsFrom-into-own-file · f13dbe86
      Robert Knight authored
      (config 2/n): Move configFuncSettingsFrom() into its own file
      f13dbe86
    • Robert Knight's avatar
      Add Symbol polyfill · 02ae0e83
      Robert Knight authored
      This is needed for various ES6 language constructs, such as `for ... of`
      loops, to work because the transpiled code depends on references to
      properties of the `Symbol` object (eg. Symbol.iterator).
      02ae0e83
    • Sean Hammond's avatar
      Move configFuncSettingsFrom() into its own file · 287ea62b
      Sean Hammond authored
      Cut-paste the configFuncSettingsFrom() function and its unit tests out
      of settings.js and into its own config-func-settings-from.js file.
      
      This is because in a future refactoring index.js isn't going to call
      configFuncSettingsFrom() anymore, only settings.js will call it, which
      would make configFuncSettingsFrom() a private helper function of
      settings.js, but I don't want to lose configFuncSettingsFrom()'s unit
      tests so I'm moving it into its own file from where settings.js (in the
      future, index.js currently) can import and use it. This way
      configFuncSettingsFrom() remains part of the public API of its
      containing module and can have unit tests.
      287ea62b
    • Robert Knight's avatar
      Merge pull request #435 from hypothesis/move-isBrowserExtension-into-own-file · e4cd67e8
      Robert Knight authored
      (config 1/n): Move isBrowserExtension() into own file
      e4cd67e8
    • Sean Hammond's avatar
      Merge pull request #441 from hypothesis/gulp-sass-upgrade · b3e9276c
      Sean Hammond authored
      Upgrade gulp-sass
      b3e9276c
    • Sean Hammond's avatar
      Merge pull request #431 from hypothesis/tags-decaf · 9051fefd
      Sean Hammond authored
      Convert tags service to JS
      9051fefd
  3. 13 Jun, 2017 5 commits
  4. 12 Jun, 2017 10 commits