Skip to content

Commit 4074def

Browse files
committed
Merge pull request ByScripts#3 from Webastronaut/master
Optimized loading script and added error message
2 parents 7b2204a + b26c682 commit 4074def

File tree

2 files changed

+35
-37
lines changed

2 files changed

+35
-37
lines changed

byscripts_ajax_posts_loader.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public function start() {
7878
'page_link_model' => get_pagenum_link(9999999999),
7979
'load_more_str' => __('Load more news', $this->identifier),
8080
'loading_str' => __('Loading...', $this->identifier),
81+
'error_str' => __('An error occured. Could not load more posts.', $this->identifier),
8182
'no_more_str' => __('No more news to load', $this->identifier),
8283
'content_css_selector' => get_option($this->prefix('content_css_selector'), '#content'),
8384
'pagination_css_selector' => get_option($this->prefix('pagination_css_selector'), '.pagination'),
@@ -132,4 +133,4 @@ public function settingsLink($links) {
132133
}
133134
}
134135

135-
new ByScriptsAjaxPostsLoader();
136+
new ByScriptsAjaxPostsLoader();

js/byscripts_ajax_posts_loader.js

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,60 @@
11
jQuery(document).ready(function($) {
22

3-
// The number of the next page to load (/page/x/).
4-
var page_number_next = parseInt(byscripts_ajax_posts_loader.page_number_next);
5-
6-
// The maximum number of pages the current query can return.
7-
var page_number_max = parseInt(byscripts_ajax_posts_loader.page_number_max);
8-
9-
// The link of the next page of posts.
10-
var page_link_model = byscripts_ajax_posts_loader.page_link_model;
3+
var page_number_next = parseInt(byscripts_ajax_posts_loader.page_number_next), // The number of the next page to load (/page/x/).
4+
page_number_max = parseInt(byscripts_ajax_posts_loader.page_number_max), // The maximum number of pages the current query can return.
5+
page_link_model = byscripts_ajax_posts_loader.page_link_model, // The link of the next page of posts.
6+
$content = $(byscripts_ajax_posts_loader.content_css_selector), // The content Element posts are inserted to
7+
$pagination = $(byscripts_ajax_posts_loader.pagination_css_selector), // The wordpress default pagination
8+
$loaderTrigger;
119

1210
/**
1311
* Replace the traditional navigation with our own,
1412
* but only if there is at least one page of new posts to load.
1513
*/
1614
if(page_number_next <= page_number_max) {
1715
// Insert the "More Posts" link.
18-
$(byscripts_ajax_posts_loader.content_css_selector)
19-
.append('<div id="byscripts_ajax_posts_loader_placeholder_'+ page_number_next +'"></div>')
20-
.append('<div id="byscripts_ajax_posts_loader_trigger">{loadmore}</div>'.replace('{loadmore}', byscripts_ajax_posts_loader.load_more_str));
16+
$content.append('<div id="byscripts_ajax_posts_loader_trigger">{loadmore}</div>'.replace('{loadmore}', byscripts_ajax_posts_loader.load_more_str));
17+
$loaderTrigger = $('#byscripts_ajax_posts_loader_trigger');
2118

2219
// Remove the traditional navigation.
23-
$(byscripts_ajax_posts_loader.pagination_css_selector).remove();
20+
$pagination.remove();
2421
}
2522

2623

2724
/**
2825
* Load new posts when the link is clicked.
2926
*/
30-
$('#byscripts_ajax_posts_loader_trigger').click(function() {
31-
27+
$loaderTrigger.click(function() {
28+
var next_link = page_link_model.replace(/\d+$/, page_number_next);
29+
3230
// Are there more posts to load?
3331
if(page_number_next <= page_number_max) {
34-
32+
3533
// Show that we're working.
3634
$(this).text(byscripts_ajax_posts_loader.loading_str);
3735

38-
var next_link = page_link_model.replace(/9999999999/, page_number_next);
39-
40-
$('#byscripts_ajax_posts_loader_placeholder_'+ page_number_next).load(next_link + ' .post',
41-
function() {
42-
// Update page number and next_link.
43-
page_number_next++;
44-
45-
// Add a new placeholder, for when user clicks again.
46-
$('#byscripts_ajax_posts_loader_trigger')
47-
.before('<div id="byscripts_ajax_posts_loader_placeholder_'+ page_number_next +'"></div>')
48-
49-
// Update the button message.
50-
if(page_number_next <= page_number_max) {
51-
$('#byscripts_ajax_posts_loader_trigger').text(byscripts_ajax_posts_loader.load_more_str);
52-
} else if(byscripts_ajax_posts_loader.remove_link_after_last_result) {
53-
$('#byscripts_ajax_posts_loader_trigger').remove();
54-
} else {
55-
$('#byscripts_ajax_posts_loader_trigger').text(byscripts_ajax_posts_loader.no_more_str);
56-
}
36+
// Load more posts
37+
$.ajax({
38+
type : 'POST',
39+
url : next_link
40+
}).done(function(data) {
41+
page_number_next++;
42+
43+
$loaderTrigger.before($(data).find(byscripts_ajax_posts_loader.content_css_selector).remove(byscripts_ajax_posts_loader.pagination_css_selector).html());
44+
$(byscripts_ajax_posts_loader.pagination_css_selector).remove();
45+
46+
if(page_number_next <= page_number_max) {
47+
$loaderTrigger.text(byscripts_ajax_posts_loader.load_more_str);
48+
} else if(byscripts_ajax_posts_loader.remove_link_after_last_result) {
49+
$loaderTrigger.remove();
50+
} else {
51+
$loaderTrigger.text(byscripts_ajax_posts_loader.no_more_str);
5752
}
58-
);
53+
}).fail(function() {
54+
$loaderTrigger.text(byscripts_ajax_posts_loader.error_str);
55+
});
5956
}
6057

6158
return false;
6259
});
63-
});
60+
});

0 commit comments

Comments
 (0)