1. 10 Mar, 2016 3 commits
    • Robert Knight's avatar
      Simplify API authentication in the client · e5af8365
      Robert Knight authored
      In order to make API requests, the client needs to
      fetch a JWT token and then configure 'angular-jwt'
      to provide it on subsequent HTTP requests to
      API endpoints.
      
      This fairly simple task was complicated by
      the inclusion of an emulation of the deprecated
      Mozilla IdentityManager API - see https://developer.mozilla.org/en-US/docs/Web/API/IdentityManager
      
      This commit replaces the identity module with
      a much simpler implementation that only does
      what we actually need at present:
      
       1. Enable the 'angular-jwt' interceptor which
          adds 'Authorization: Bearer <Token>' headers
          to API HTTP requests.
      
       2. Provide the JWT interceptor with a function
          which fetches JWT tokens and caches them.
      
      The new implementation fixes two bugs in the previous
      implementation:
      
       1. Cached API tokens were not invalidated properly when
          signing out (#3083).
      
          (In the old code, 'authPromise' was set to a rejected promise
           after signing out, but 'checkAuthentication()' checked for
           'authPromise' being _null_ when deciding whether to retrieve
           a new token. Consequently API requests made immediately
           after signing in could end up being unauthenticated).
      
       2. The value of $scope.auth.username and session.state.userid
          could get out of sync (#2924).
      
          In the new implementation, $scope.auth.username is always
          updated whenever the USER_CHANGED event is emitted and that
          event is always emitted when session.state.userid changes.
      
      Fixes #3083
      Fixes #2924
      e5af8365
    • Nick Stenning's avatar
      Merge pull request #3075 from hypothesis/decaf-tool · e0ef6831
      Nick Stenning authored
      Add a utility script to assist with CoffeeScript -> JS conversion
      e0ef6831
    • Nick Stenning's avatar
      Merge pull request #3074 from hypothesis/annotation-ui-decaf · 111f29c1
      Nick Stenning authored
      Convert 'annotation-ui' from CoffeeScript to JS
      111f29c1
  2. 09 Mar, 2016 4 commits
    • Nick Stenning's avatar
      Merge pull request #3042 from hypothesis/remove-mathjax-fallback · 38010360
      Nick Stenning authored
      Remove the MathJax math rendering fallback
      38010360
    • Robert Knight's avatar
    • Robert Knight's avatar
      Add a utility script to assist with CoffeeScript -> JS conversion · c0a2709b
      Robert Knight authored
      It accepts a list of CoffeeScript file paths on stdin
      and for each <path>.coffee file in the input, it writes
      a <path>.js output file containing the converted,
      reformatted source.
      
      The result is ES2015 source so will require some
      fixups as long as we're using ES5 in the main app
      codebase.
      
      The current transformation process involves:
      
       1. Performing an initial CoffeeScript -> JS
          conversion with 'decaffeinate'
      
       2. Applying some fixups for common issues, currently
          done with dumb string modifications.
      
          In future I might look at writing a Babel transformer.
      
       3. Parsing the source with Babylon to check that it is valid ES2015
          If not, the user is prompted to go and simplify the CoffeeScript
          so that decaffeinate can process it correctly.
      
       4. Reformatting the source with typescript-formatter, which
          takes care of indentation and high-level formatting.
      
       5. Running the source through JSCS' fix mode which deals
          with smaller details.
      c0a2709b
    • Robert Knight's avatar
      Convert 'annotation-ui' from CoffeeScript to JS · 57209793
      Robert Knight authored
      Since this is a very simple module with no Angular
      dependencies, I've also de-Angularized the unit test.
      57209793
  3. 08 Mar, 2016 3 commits
    • Nick Stenning's avatar
      Merge pull request #3065 from hypothesis/url-polyfill-update · 77db5fd6
      Nick Stenning authored
      Fix installation of URL polyfill with js-polyfills v0.1.16
      77db5fd6
    • Robert Knight's avatar
      Fix installation of URL polyfill with js-polyfills v0.1.16 · e76f270b
      Robert Knight authored
      js-polyfills v0.1.15 used to install the polyfill on
      `this.URL`, where `this` was set to module.exports in
      the context of a Browserify bundle. Consequently the result
      was available as `require('js-polyfills/url').URL`.
      
      As of v0.1.16 however, it installs the polyfill on `self`,
      which is the Window object in the context of the browser
      and so `require('js-polyfills/url').URL` is undefined.
      
      Fixes #3064
      e76f270b
    • Robert Knight's avatar
      Remove the MathJax math rendering fallback · 715b1a52
      Robert Knight authored
      The MathJax fallback was inadvertently broken during recent
      refactoring of the <markdown> component and has long been untested.
      
      This removes the fallback for the moment and in doing so
      provides a clearer definition of what math we support -
      the subset supported by KaTeX.
      
      Looking at our public annotations, there is very little use
      of complex math currently.
      
      When we find a clear use case for it, we can revisit supporting
      additional math beyond what KaTeX supports.
      
      See https://trello.com/c/9KkjsO6v/66-remove-the-mathjax-fallback
      for more background.
      715b1a52
  4. 07 Mar, 2016 5 commits
  5. 05 Mar, 2016 2 commits
  6. 04 Mar, 2016 8 commits
  7. 03 Mar, 2016 2 commits
  8. 02 Mar, 2016 2 commits
    • Robert Knight's avatar
      Use Element.scrollIntoView() to scroll new annotations into view · dbbeadf8
      Robert Knight authored
      The previous method of scrolling a newly created annotation
      into view in the sidebar resulted in the input field for
      the new annotation losing focus.
      
      Note that only top level annotations have an 'id'
      attribute set on the corresponding HTML element.
      It might make sense to change this in future although
      it would add an extra binding. For now I've just noted this.
      dbbeadf8
    • Robert Knight's avatar
      Focus annotation editor when a new annotation is created · ec0e0f9f
      Robert Knight authored
      When a new annotation card was added, the sidebar tried
      to focus it but this failed because the sidebar iframe
      itself did not have focus.
      
      When a new annotation is created, first focus the sidebar
      in the Annotator host and then let the sidebar focus the
      input field.
      
       * Remove unnecessary use of the $timeout service which
         triggers a root scope digest.
      ec0e0f9f
  9. 01 Mar, 2016 8 commits
  10. 29 Feb, 2016 3 commits