Skip to content

Commit

Permalink
[bukuserver] Last page endpoint (#630)
Browse files Browse the repository at this point in the history
* [#606] implemented a generic last-page endpoint

* PR edit
  • Loading branch information
LeXofLeviafan authored Dec 3, 2022
1 parent 0ecadb3 commit 1155891
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
4 changes: 4 additions & 0 deletions bukuserver/static/bukuserver/js/last_page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
$(document).ready(function() {
$(`.pagination :contains("»") a`).not(`[href^="javascript:"]`).attr('href', (idx, href) =>
href.replace(/\/?(\?|$)/, '/last-page$1').replace(/([?&]page=)[0-9]+(&|$)/, '$1-1$2'));
});
31 changes: 28 additions & 3 deletions bukuserver/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,29 @@ def search(self):
return redirect(url)


def last_page(self):
"""Generic '/last_page' endpoint handler; based on
https://github.com/flask-admin/flask-admin/blob/v1.6.0/flask_admin/model/base.py#L1956-L1969 """
# Grab parameters from URL
view_args = self._get_list_extra_args()

# Map column index to column name
sort_column = self._get_column_by_idx(view_args.sort)
if sort_column is not None:
sort_column = sort_column[0]

# Get page size
page_size = view_args.page_size or self.page_size

# Get count and data
count, data = self.get_list(-1, sort_column, view_args.sort_desc,
view_args.search, view_args.filters, page_size=page_size)

args = request.args.copy()
args.setlist('page', [max(0, view_args.page + (count + page_size - 1) // page_size)])
return redirect(url_for('.index_view', **args))


class BookmarkModelView(BaseModelView):
@staticmethod
def _filter_arg(flt):
Expand Down Expand Up @@ -132,7 +155,8 @@ def _list_entry(self, context: Any, model: Namespace, name: str) -> Markup:
edit_template = "bukuserver/bookmark_edit.html"
named_filter_urls = True
extra_css = ['/static/bukuserver/css/bookmark.css']
extra_js = ['/static/bukuserver/js/page_size.js']
extra_js = ['/static/bukuserver/js/' + it for it in ('page_size.js', 'last_page.js')]
last_page = expose('/last-page')(last_page)

def __init__(self, *args, **kwargs):
self.bukudb: buku.BukuDb = args[0]
Expand Down Expand Up @@ -425,7 +449,8 @@ def _name_formatter(self, _, model, name):
"name": _name_formatter,
}
list_template = 'bukuserver/tags_list.html'
extra_js = ['/static/bukuserver/js/page_size.js']
extra_js = ['/static/bukuserver/js/' + it for it in ('page_size.js', 'last_page.js')]
last_page = expose('/last-page')(last_page)

def __init__(self, *args, **kwargs):
self.bukudb = args[0]
Expand All @@ -440,7 +465,7 @@ def __init__(self, *args, **kwargs):
@expose('/refresh', methods=['POST'])
def refresh(self):
self.all_tags = self.bukudb.get_tag_all()
return redirect(request.referrer or url_for('tags.index_page'))
return redirect(request.referrer or url_for('.index_view'))

def scaffold_list_columns(self):
return ["name", "usage_count"]
Expand Down

0 comments on commit 1155891

Please sign in to comment.