aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gogs.go2
-rw-r--r--models/action.go12
-rw-r--r--public/js/gogs.js24
-rw-r--r--routers/user/home.go24
-rw-r--r--routers/user/profile.go2
-rw-r--r--templates/.VERSION2
-rw-r--r--templates/user/dashboard/dashboard.tmpl1
-rw-r--r--templates/user/dashboard/feeds.tmpl2
8 files changed, 52 insertions, 17 deletions
diff --git a/gogs.go b/gogs.go
index 04029391..2f8e51bf 100644
--- a/gogs.go
+++ b/gogs.go
@@ -16,7 +16,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.10.19.0316"
+const APP_VER = "0.10.20.0316"
func init() {
setting.AppVer = APP_VER
diff --git a/models/action.go b/models/action.go
index 6a25f542..d04f6d3d 100644
--- a/models/action.go
+++ b/models/action.go
@@ -671,14 +671,12 @@ func MergePullRequestAction(actUser *User, repo *Repository, pull *Issue) error
// GetFeeds returns action list of given user in given context.
// actorID is the user who's requesting, ctxUserID is the user/org that is requested.
// actorID can be -1 when isProfile is true or to skip the permission check.
-func GetFeeds(ctxUser *User, actorID int64, page int, isProfile bool) ([]*Action, error) {
- if page <= 0 {
- page = 1
- }
-
+func GetFeeds(ctxUser *User, actorID, afterID int64, isProfile bool) ([]*Action, error) {
actions := make([]*Action, 0, setting.UI.User.NewsFeedPagingNum)
- sess := x.Limit(setting.UI.User.NewsFeedPagingNum, (page-1)*setting.UI.User.NewsFeedPagingNum).
- Desc("id").Where("user_id = ?", ctxUser.ID)
+ sess := x.Limit(setting.UI.User.NewsFeedPagingNum).Where("user_id = ?", ctxUser.ID).Desc("id")
+ if afterID > 0 {
+ sess.And("id < ?", afterID)
+ }
if isProfile {
sess.And("is_private = ?", false).And("act_user_id = ?", ctxUser.ID)
} else if actorID != -1 && ctxUser.IsOrganization() {
diff --git a/public/js/gogs.js b/public/js/gogs.js
index 5c35cae0..9ea6f6f1 100644
--- a/public/js/gogs.js
+++ b/public/js/gogs.js
@@ -1339,6 +1339,30 @@ $(document).ready(function () {
e.trigger.setAttribute('data-content', e.trigger.getAttribute('data-original'))
});
+ // AJAX load buttons
+ $('.ajax-load-button').click(function () {
+ var $this = $(this);
+ $this.addClass('disabled');
+
+ $.ajax({
+ url: $this.data('url'),
+ headers: {
+ 'X-AJAX': "true"
+ }
+ }).success(function (data, status, request) {
+ $(data).insertBefore($this);
+
+ // Update new URL or remove self if no more feeds
+ var url = request.getResponseHeader('X-AJAX-URL');
+ if (url) {
+ $this.data('url', url);
+ $this.removeClass('disabled');
+ } else {
+ $this.remove();
+ }
+ });
+ });
+
// Helpers.
$('.delete-button').click(function () {
var $this = $(this);
diff --git a/routers/user/home.go b/routers/user/home.go
index 5dc83466..2fe70c43 100644
--- a/routers/user/home.go
+++ b/routers/user/home.go
@@ -20,6 +20,7 @@ import (
const (
DASHBOARD base.TplName = "user/dashboard/dashboard"
+ NEWS_FEED base.TplName = "user/dashboard/feeds"
ISSUES base.TplName = "user/dashboard/issues"
PROFILE base.TplName = "user/profile"
ORG_HOME base.TplName = "org/home"
@@ -52,8 +53,8 @@ func getDashboardContextUser(ctx *context.Context) *models.User {
// retrieveFeeds loads feeds from database by given context user.
// The user could be organization so it is not always the logged in user,
// which is why we have to explicitly pass the context user ID.
-func retrieveFeeds(ctx *context.Context, ctxUser *models.User, userID int64, page int, isProfile bool) {
- actions, err := models.GetFeeds(ctxUser, userID, page, isProfile)
+func retrieveFeeds(ctx *context.Context, ctxUser *models.User, userID int64, isProfile bool) {
+ actions, err := models.GetFeeds(ctxUser, userID, ctx.QueryInt64("after_id"), isProfile)
if err != nil {
ctx.Handle(500, "GetFeeds", err)
return
@@ -81,6 +82,11 @@ func retrieveFeeds(ctx *context.Context, ctxUser *models.User, userID int64, pag
feeds = append(feeds, act)
}
ctx.Data["Feeds"] = feeds
+ if len(feeds) > 0 {
+ afterID := feeds[len(feeds)-1].ID
+ ctx.Data["AfterID"] = afterID
+ ctx.Header().Set("X-AJAX-URL", fmt.Sprintf("%s?after_id=%d", ctx.Data["Link"], afterID))
+ }
}
func Dashboard(ctx *context.Context) {
@@ -89,6 +95,16 @@ func Dashboard(ctx *context.Context) {
return
}
+ retrieveFeeds(ctx, ctxUser, ctx.User.ID, false)
+ if ctx.Written() {
+ return
+ }
+
+ if ctx.Req.Header.Get("X-AJAX") == "true" {
+ ctx.HTML(200, NEWS_FEED)
+ return
+ }
+
ctx.Data["Title"] = ctxUser.DisplayName() + " - " + ctx.Tr("dashboard")
ctx.Data["PageIsDashboard"] = true
ctx.Data["PageIsNews"] = true
@@ -143,10 +159,6 @@ func Dashboard(ctx *context.Context) {
ctx.Data["MirrorCount"] = len(mirrors)
ctx.Data["Mirrors"] = mirrors
- retrieveFeeds(ctx, ctxUser, ctx.User.ID, 1, false)
- if ctx.Written() {
- return
- }
ctx.HTML(200, DASHBOARD)
}
diff --git a/routers/user/profile.go b/routers/user/profile.go
index be435619..ee5f97c5 100644
--- a/routers/user/profile.go
+++ b/routers/user/profile.go
@@ -86,7 +86,7 @@ func Profile(ctx *context.Context) {
ctx.Data["TabName"] = tab
switch tab {
case "activity":
- retrieveFeeds(ctx, ctxUser, -1, 0, true)
+ retrieveFeeds(ctx, ctxUser, -1, true)
if ctx.Written() {
return
}
diff --git a/templates/.VERSION b/templates/.VERSION
index c4d428b7..5c9f0f2f 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.10.19.0316 \ No newline at end of file
+0.10.20.0316 \ No newline at end of file
diff --git a/templates/user/dashboard/dashboard.tmpl b/templates/user/dashboard/dashboard.tmpl
index 5e862f99..0c2c744f 100644
--- a/templates/user/dashboard/dashboard.tmpl
+++ b/templates/user/dashboard/dashboard.tmpl
@@ -5,6 +5,7 @@
<div class="ui grid">
<div class="ten wide column">
{{template "user/dashboard/feeds" .}}
+ <button class="ui fluid basic button center ajax-load-button" data-url="{{.Link}}?after_id={{.AfterID}}">More</button>
</div>
<div class="six wide column">
<div class="ui {{if not .ContextUser.IsOrganization}}three{{else}}two{{end}} item tabable menu">
diff --git a/templates/user/dashboard/feeds.tmpl b/templates/user/dashboard/feeds.tmpl
index 4d4a0268..a110c04a 100644
--- a/templates/user/dashboard/feeds.tmpl
+++ b/templates/user/dashboard/feeds.tmpl
@@ -89,4 +89,4 @@
</div>
<div class="ui divider"></div>
</div>
-{{end}}
+{{end}} \ No newline at end of file