Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Patch for syncdb error #3

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 43 additions & 33 deletions endless_pagination/models.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
from django.template import Context, loader

from endless_pagination import settings, utils


# preload page templates
PAGE_TEMPLATE = loader.get_template("endless/page_link.html")
CURRENT_TEMPLATE = loader.get_template("endless/current_link.html")
try:
PAGE_TEMPLATE = loader.get_template("endless/page_link.html")
CURRENT_TEMPLATE = loader.get_template("endless/current_link.html")
except:
pass


class EndlessPage(object):
"""
A page link representation.
Interesting attributes:

- *self.number*: the page number
- *self.label*: the label of the link (normally the page number as string)
- *self.url*: the url of the page (strting with "?")
Expand All @@ -19,17 +23,17 @@ class EndlessPage(object):
- *self.is_first*: return True if page is the first page
- *self.is_last*: return True if page is the last page
"""
def __init__(self, request, number, current_number, total_number,
def __init__(self, request, number, current_number, total_number,
querystring_key, label=None, default_number=1, override_path=None):
self.number = number
self.label = unicode(number) if label is None else label
self.querystring_key = querystring_key

self.is_current = number == current_number
self.is_first = number == 1
self.is_last = number == total_number
self.url = utils.get_querystring_for_page(request, number,

self.url = utils.get_querystring_for_page(request, number,
self.querystring_key, default_number=default_number)
self.path = "%s%s" % (override_path or request.path, self.url)

Expand All @@ -38,14 +42,20 @@ def __unicode__(self):
Render the page as a link.
"""
context_instance = Context({
'page': self,
'page': self,
'add_nofollow': settings.ADD_NOFOLLOW,
'querystring_key': self.querystring_key,
})
template = CURRENT_TEMPLATE if self.is_current else PAGE_TEMPLATE
if PAGE_TEMPLATE and CURRENT_TEMPLATE:
template = CURRENT_TEMPLATE if self.is_current else PAGE_TEMPLATE
else:
if self.is_current:
template = loader.get_template("endless/current_link.html")
else:
template = loader.get_template("endless/page_link.html")
return template.render(context_instance)


class PageList(object):
"""
A sequence of endless pages.
Expand All @@ -56,20 +66,20 @@ def __init__(self, request, page, querystring_key, default_number=None, override
self._default_number = 1 if default_number is None else int(default_number)
self._querystring_key = querystring_key
self._override_path = override_path

def _endless_page(self, number, label=None):
"""
Factory function that returns a EndlessPage instance.
It works just like a partial constructor.
"""
return EndlessPage(self._request, number, self._page.number, len(self),
self._querystring_key, label=label,
return EndlessPage(self._request, number, self._page.number, len(self),
self._querystring_key, label=label,
default_number=self._default_number,
override_path=self._override_path)

def __getitem__(self, value):
# type conversion is needed beacuse in templates django performs a
# dictionary lookup before the attribute lokups
# type conversion is needed beacuse in templates django performs a
# dictionary lookup before the attribute lokups
# (when a dot is encountered)
try:
value = int(value)
Expand All @@ -79,20 +89,20 @@ def __getitem__(self, value):
if 1 <= value <= len(self):
return self._endless_page(value)
raise IndexError("page list index out of range")

def __len__(self):
"""
The length of the sequence is the total number of pages.
"""
return self._page.paginator.num_pages

def __iter__(self):
"""
Iterate over all the endless pages (from first to last).
"""
for i in range(len(self)):
yield self[i+1]
yield self[i + 1]

def __unicode__(self):
"""
Return digg-style pagination (by default).
Expand All @@ -101,17 +111,17 @@ def __unicode__(self):
The callable takes the current page number and the total number of pages
and must return a sequence of page numbers that will be displayed.
The sequence can contain other values:

- *"previous"*: will display the previous page in that position
- *"next"*: will display the next page in that position
- *None*: a separator will be displayed in that position

Here is an example of custom calable that displays previous page, then
first page, then a separator, then current page, then next page::

def get_page_numbers(current_page, num_pages):
return ("previous", 1, None, current_page, "next")

If *settings.PAGE_LIST_CALLABLE* is None an internal callable is used,
generating a digg-style pagination.
"""
Expand All @@ -130,39 +140,39 @@ def get_page_numbers(current_page, num_pages):
context = {'pages': pages}
return loader.render_to_string("endless/show_pages.html", context)
return u""

def current(self):
"""
Return current page.
"""
return self[self._page.number]

def first(self):
"""
Return first page.
"""
return self[1]

def last(self):
"""
Return last page.
"""
return self[len(self)]

def previous(self):
"""
Return previous page or an empty string if current page is the first.
"""
if self._page.has_previous():
return self._endless_page(self._page.previous_page_number(),
return self._endless_page(self._page.previous_page_number(),
label=settings.PREVIOUS_LABEL)
return u""

def next(self):
"""
Return next page or an empty string if current page is the last.
"""
if self._page.has_next():
return self._endless_page(self._page.next_page_number(),
return self._endless_page(self._page.next_page_number(),
label=settings.NEXT_LABEL)
return u""
4 changes: 2 additions & 2 deletions endless_pagination/static/endless_pagination/js/endless.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(function($) {
$(document).ready(function(){
$("a.endless_more").live("click", function() {
$("a.endless_more").on("click", function() {
var container = $(this).closest(".endless_container");
var loading = container.find(".endless_loading");
$(this).hide();
Expand All @@ -12,7 +12,7 @@
});
return false;
});
$("a.endless_page_link").live("click", function() {
$("a.endless_page_link").on("click", function() {
var page_template = $(this).closest(".endless_page_template");
if (!page_template.hasClass("endless_page_skip")) {
var data = "querystring_key=" + $(this).attr("rel").split(" ")[0];
Expand Down