Browse Source

Sync current offset state to URL

![Screenshot showing offset state in URL](https://user-images.githubusercontent.com/1086421/51856321-6e0e1e00-22fd-11e9-8420-1204b8a3d3b7.png)
pull/79/head
Clemens Wolff 5 years ago
parent
commit
a2378ad8e2
1 changed files with 39 additions and 1 deletions
  1. 40
      app/server/static/js/mixin.js

40
app/server/static/js/mixin.js

@ -1,5 +1,37 @@
import HTTP from './http';
const getOffsetFromUrl = function(url) {
const offsetMatch = url.match(/[?#].*offset=(\d+)/);
if (offsetMatch == null) {
return 0;
}
return parseInt(offsetMatch[1], 10);
};
const storeOffsetInUrl = function(offset) {
let href = window.location.href;
const fragmentStart = href.indexOf('#') + 1;
if (fragmentStart === 0) {
href += '#offset=' + offset;
} else {
const prefix = href.substring(0, fragmentStart);
const fragment = href.substring(fragmentStart);
const newFragment = fragment.split('&').map(function(fragmentPart) {
const keyValue = fragmentPart.split('=');
return keyValue[0] === 'offset'
? 'offset=' + offset
: fragmentPart;
}).join('&');
href = prefix + newFragment;
}
window.location.href = href;
};
const annotationMixin = {
data() {
return {
@ -12,6 +44,7 @@ const annotationMixin = {
remaining: 0,
searchQuery: '',
url: '',
offset: getOffsetFromUrl(window.location.href),
picked: 'all',
count: 0,
isActive: false,
@ -56,6 +89,7 @@ const annotationMixin = {
const doc = this.docs[i];
this.annotations.push(doc.annotations);
}
this.offset = getOffsetFromUrl(this.url);
});
},
@ -71,7 +105,7 @@ const annotationMixin = {
async submit() {
const state = this.getState();
this.url = `docs/?q=${this.searchQuery}&is_checked=${state}`;
this.url = `docs/?q=${this.searchQuery}&is_checked=${state}&offset=${this.offset}`;
await this.search();
this.pageNumber = 0;
},
@ -97,6 +131,10 @@ const annotationMixin = {
this.remaining = response.data.remaining;
});
},
offset() {
storeOffsetInUrl(this.offset);
},
},
created() {

Loading…
Cancel
Save