- 26 Jul, 2016 1 commit
-
-
Robert Knight authored
Avoid double highlighting
-
- 25 Jul, 2016 1 commit
-
-
Nick Stenning authored
When the client is destroyed, it's important that we correctly tear down the frame-rpc event listeners (bound to the document's `onmessage` event). These event listeners are responsible for relaying messages from the frame-rpc mechanism to various parts of the code on either side of the frame boundary, including the `AnnotationSync` component. If the frame-rpc channels aren't correctly torn down, they will hold a reference to the `Bridge` object, which in turn holds a reference to the `AnnotationSync` object, and thus old copies of `AnnotationSync` which should have been garbage-collected will continue to receive events from the brand new Hypothesis client. The most visible result of this problem was that repeated activation and deactivation of the client would result in increasing numbers of highlights being drawn on annotated text, as reported in hypothesis/h#3096. Fixes hypothesis/h#3096.
-
- 22 Jul, 2016 3 commits
-
-
Robert Knight authored
-
Robert Knight authored
-
Robert Knight authored
PhantomJS supports ES5 fully and does not require specific polyfills for it. This means that we can use exactly the same polyfill script in both our unit tests and the actual app, which reduces the chances of breakage due to mismatches. Additionally, the broken URL constructor could potentially affect other browsers, so it makes sense to include it in the main polyfill script.
-
- 21 Jul, 2016 6 commits
-
-
Nick Stenning authored
Defer initialization of websocket client until sidebar is interacted with for logged-out users
-
Nick Stenning authored
Using `$rootScope.$on` to bind event handlers in a controller is usually going to result in bugs, because: - The lifecycle of `$rootScope` is that of the entire application -- that is, it never gets torn down. - The lifecycle of the controller depends on when and where that controller is instantiated. In our case, logging in and logging out of the application triggers a route reload[1], which tears down the WidgetController. - WidgetController has no ability to unbind event handlers when it is torn down. Luckily the fix is relatively straightforward. Because this event is `$broadcast` on the root scope, it propagates to all child scopes. Thus, we can listen to the event on the controller's local `$scope` and ensure that the handlers are garbage collected along with the scope when the controller is torn down. [1]: https://github.com/hypothesis/client/blob/d6a1392/h/static/scripts/app-controller.js#L71
-
Alice Wyan authored
-
Alice Wyan authored
-
Alice Wyan authored
-
Alice Wyan authored
until sidebar is interacted with for logged-out users https://trello.com/c/53uY3Xit/386-defer-initialization-of-websocket-client-until-sidebar-is-interacted-with-for-logged-out-users#
-
- 19 Jul, 2016 5 commits
-
-
Nick Stenning authored
Move root UI structure into an "app" component
-
Robert Knight authored
Set the `ng-csp` attribute on the document body on app startup before Angular is loaded to avoid triggering warnings when app.html is served with Content Security Policy headers. This used to be done via an `ng-csp` attribute on the <body> tag in the app.html file served by the `h` service but this moves it to client code to avoid the service needing to know this implementation detail of the client app.
-
Robert Knight authored
This was needed when this part of the app template lived in the `h` repository. It is not needed any more.
-
Robert Knight authored
Move the template which defines the structure of the top-level of the UI from `app.html.jinja2` in the hypothesis/h repo into the client. This means that the H service only needs to serve an app.html page containing a `<hypothesis-app></hypothesis-app>` placeholder in the body which the app will then load into.
-
Robert Knight authored
Remove SASS variables and mixins which are not used by the client
-
- 15 Jul, 2016 16 commits
-
-
Nick Stenning authored
ESLint - Enforce indentation, quote style and `this` style consistency
-
Robert Knight authored
Since this module was imported with minor changes from substack/frame-rpc, disable ESLint to avoid adding noise to the Git history for this file.
-
-
Robert Knight authored
-
Robert Knight authored
-
Robert Knight authored
Use 2-space indents everywhere and fix up non-conforming code with ESLint's --fix tool.
-
Robert Knight authored
Only allow use of `this` or `self` to refer to the 'this' context object in a method.
-
Robert Knight authored
Add an ESLint rule to require this and fix up non-conforming code using ESLint's --fix tool.
-
Robert Knight authored
Refactor the streamer into a stand alone class
-
Alice Wyan authored
-
Alice Wyan authored
-
Sheetal Umesh Kumar authored
-
Robert Knight authored
The group invite icon is only used in the H web service
-
Robert Knight authored
* The corejs polyfills are not needed in the Gulpfile since we switched to a more recent version of Node * The Object.assign() polyfill does not need to be included in 'raven' or 'settings' because it is already included by the polyfills.js script
-
Robert Knight authored
This was left over from when the Hypothesis client was extracted out from the hypothesis/h repository, where the extension code currently remains.
-
Robert Knight authored
Enforce that all paths through a function either return a value or do not return a value. This cause several cases of spurious returns left in by CoffeeScript -> JS conversion and return statements with missing values.
-
- 14 Jul, 2016 8 commits
-
-
Sheetal Umesh Kumar authored
Fix 'time' tests in timezones behind UTC
-
Robert Knight authored
Several test fixtures have expectations that the "current date", where "current" is reset to the Unix epoch at the start of the tests, is 1st Jan 1970. This is true in timezones equal to or ahead of UTC but not the case for timezones behind UTC. Resolve the issue by just advancing the fake clock forwards to midnight on 01/01/1970 if the timezone is behind UTC at the start of the tests.
-
Sheetal Umesh Kumar authored
-
Alice Wyan authored
-
Sheetal Umesh Kumar authored
Annotation / Notes tabs copy update and style tweaks
-
Sheetal Umesh Kumar authored
Update UI state after search API request completes with no results
-
Sheetal Umesh Kumar authored
Remove sticky tab bar behavior
-
Robert Knight authored
When a search API request returns results, the returned annotations are added to the app state and this transition triggers a digest cycle. When there are no results however, this was not happening and the value of the 'isLoading()' function changed but no digest cycle was triggered to pick this up and reflect it in the UI. Since SearchClient's 'end' event is emitted asynchronously via a Promise callback, $scope.$apply() or $evalAsync() must be used to ensure that change detection runs. The real solution will be to store all the information required to determine the loading/not-loading state in the Redux store, so that any transition automatically triggers a digest cycle. This requires some more extensive refactoring however.
-