Skip to content

Commit

Permalink
usermenu: Load usermenu asynchronously
Browse files Browse the repository at this point in the history
  • Loading branch information
doortts committed Mar 13, 2017
1 parent 59be649 commit 4015ec2
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 121 deletions.
4 changes: 4 additions & 0 deletions app/controllers/UserApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -1154,4 +1154,8 @@ public static boolean isSiteAdminLoggedInSession(){
return false;
}
}

public static Result usermenuTabContentList(){
return ok(views.html.common.usermenu_tab_content_list.render());
}
}
2 changes: 1 addition & 1 deletion app/views/common/navbar.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,6 @@
</form>
</li>
</ul>
@common.usermenu(null)
@common.usermenu()
</div>
</header>
11 changes: 3 additions & 8 deletions app/views/common/usermenu.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* https://yona.io
**@
@import org.apache.commons.lang3.StringUtils
@(project:Project)
@()
@import utils.TemplateHelper._
@import com.feth.play.module.pa.PlayAuthenticate._
@import com.feth.play.module.pa.views.html._
Expand Down Expand Up @@ -51,13 +51,8 @@
</li>
</ul>
<div class="tab-content tab-box">
<div class="tab-content">
<div class="tab-pane user-project-list active" id="myProjectList">
@views.html.index.myProjectList(UserApp.currentUser())
</div>
<div class="tab-pane user-project-list" id="myOrganizationList">
@views.html.index.myOrganizationList(UserApp.currentUser())
</div>
<div id="usermenu-tab-content-list" class="tab-content">
Loading...
</div>
</div>
</div>
Expand Down
12 changes: 12 additions & 0 deletions app/views/common/usermenu_tab_content_list.scala.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
@**
* Yona, 21st Century Project Hosting SW
*
* Copyright Yona & Yobi Authors & NAVER Corp.
* https://yona.io
**@
<div class="tab-pane user-project-list active" id="myProjectList">
@views.html.index.myProjectList(UserApp.currentUser())
</div>
<div class="tab-pane user-project-list" id="myOrganizationList">
@views.html.index.myOrganizationList(UserApp.currentUser())
</div>
2 changes: 1 addition & 1 deletion app/views/error/notfound_default.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<a href="https://github.com/nforge/yobi/issues?state=open" target="_blank">@Messages("title.yobi.feedback")</a>
</li>
</ul>
@common.usermenu(null)
@common.usermenu()
</div>
</header>
<div class="page-wrap-outer">
Expand Down
1 change: 1 addition & 0 deletions app/views/layout.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
var UsermenuToggleFavoriteProjectUrl = "@api.routes.UserApi.toggleFoveriteProject("")";
var UsermenuToggleFoveriteOrganizationUrl = "@api.routes.UserApi.toggleFoveriteOrganization("")";
var UsermenuGetFoveriteProjectsUrl = "@api.routes.UserApi.getFoveriteProjects()";
var UsermenuUrl = "@routes.UserApp.usermenuTabContentList()";
</script>
<script type="text/javascript" src="@routes.Assets.at("javascripts/common/yona.Usermenu.js")"></script>
</body>
Expand Down
1 change: 1 addition & 0 deletions conf/routes
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ POST /user/resetPassword
POST /user/resetVisitedList controllers.UserApp.resetUserVisitedList()
GET /user/isUsed controllers.UserApp.isUsed(name:String)
GET /user/isEmailExist controllers.UserApp.isEmailExist(email:String)
GET /user/usermenuTabContentList controllers.UserApp.usermenuTabContentList()
GET /info/leave/:user/:project controllers.UserApp.leave(user, project)
POST /user/email controllers.UserApp.addEmail()
DELETE /user/email/delete/:emailId controllers.UserApp.deleteEmail(emailId:Long)
Expand Down
233 changes: 122 additions & 111 deletions public/javascripts/common/yona.Usermenu.js
Original file line number Diff line number Diff line change
@@ -1,133 +1,144 @@
$(function() {
/* Set side navigation */
// Also, see index.scala.html for home page menu sliding actions !!
var $sidebar = $("#mySidenav");
var viewSize = $(window).width();
var PIXEL_CRITERIA_FOR_SMALL_DEVICE = 720; // Criteria to distinguish small devices
var SIDE_BAR_DEFAULT_WIDTH = "420px";
$.get(UsermenuUrl)
.done(function (data) {
$("#usermenu-tab-content-list").html(data);
afterUsermenuLoaded();
})
.fail(function (data) {
$yobi.alert("Usermenu loading failed: " + data);
});;

$("#main").on("click", function(event){
if( $sidebar.width() !== 0 && $(event.target).parents("#mySidenav").length == 0) {
closeSidebar($sidebar);
}
});
function afterUsermenuLoaded(){
/* Set side navigation */
// Also, see index.scala.html for home page menu sliding actions !!
var $sidebar = $("#mySidenav");
var viewSize = $(window).width();
var PIXEL_CRITERIA_FOR_SMALL_DEVICE = 720; // Criteria to distinguish small devices
var SIDE_BAR_DEFAULT_WIDTH = "420px";

$("#sidebar-open-btn").on("click", function (event) {
event.stopPropagation();
if( $sidebar.width() !== 0){
closeSidebar($sidebar);
} else {
openSidebar($sidebar);
updateStar();
}
});
$("#main").on("click", function(event){
if( $sidebar.width() !== 0 && $(event.target).parents("#mySidenav").length == 0) {
closeSidebar($sidebar);
}
});

function closeSidebar($sidebar) {
$sidebar.width("0").css("border", "none");
$(".main-stream").removeClass("span8").addClass("span12");
}
$("#sidebar-open-btn").on("click", function (event) {
event.stopPropagation();
if( $sidebar.width() !== 0){
closeSidebar($sidebar);
} else {
openSidebar($sidebar);
updateStar();
}
});

function openSidebar($sidebar){
// 720px is a criteria to distinguish small devices
if (viewSize > PIXEL_CRITERIA_FOR_SMALL_DEVICE) {
$sidebar.width(SIDE_BAR_DEFAULT_WIDTH).css("border", "1px solid #ccc");
$(".search-input").focus();
} else {
$sidebar.width("100vw").css("border", "1px solid #ccc");
function closeSidebar($sidebar) {
$sidebar.width("0").css("border", "none");
$(".main-stream").removeClass("span8").addClass("span12");
}
$(".main-stream").removeClass("span12").addClass("span8");
}

// used for new project list ui
$(".right-menu").on('click', ".myProjectList, a[href='#recentlyVisited'], a[href='#createdByMe'], a[href='#watching'], a[href='#joinmember']", function() {
updateStar();
setTimeout(function focusToProjectSearchInput() {
var $projectSearch = $('.project-search');
var $orgSearch = $('.org-search');
function openSidebar($sidebar){
// 720px is a criteria to distinguish small devices
if (viewSize > PIXEL_CRITERIA_FOR_SMALL_DEVICE) {
$projectSearch.focus();
}
if(!$projectSearch.val()){
$projectSearch.val($orgSearch.val());
$sidebar.width(SIDE_BAR_DEFAULT_WIDTH).css("border", "1px solid #ccc");
$(".search-input").focus();
} else {
$sidebar.width("100vw").css("border", "1px solid #ccc");
}
$orgSearch.val("");
}, 200);
$(".main-stream").removeClass("span12").addClass("span8");
}

});
// used for new project list ui
$(".right-menu").on('click', ".myProjectList, a[href='#recentlyVisited'], a[href='#createdByMe'], a[href='#watching'], a[href='#joinmember']", function() {
updateStar();
setTimeout(function focusToProjectSearchInput() {
var $projectSearch = $('.project-search');
var $orgSearch = $('.org-search');
if (viewSize > PIXEL_CRITERIA_FOR_SMALL_DEVICE) {
$projectSearch.focus();
}
if(!$projectSearch.val()){
$projectSearch.val($orgSearch.val());
}
$orgSearch.val("");
}, 200);

$('.myOrganizationList').on('click', function focusToOrgSearchInput(){
setTimeout(function () {
var $projectSearch = $('.project-search');
var $orgSearch = $('.org-search');
if (viewSize > PIXEL_CRITERIA_FOR_SMALL_DEVICE) {
$orgSearch.focus();
}
$orgSearch.val($projectSearch.val());
$projectSearch.val("");
}, 200);
});
});

// search by keyword
$(".search-input").on("keyup", function() {
var value = $(this).val().toLowerCase().trim();
$(".user-li").each(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) !== -1);
$('.myOrganizationList').on('click', function focusToOrgSearchInput(){
setTimeout(function () {
var $projectSearch = $('.project-search');
var $orgSearch = $('.org-search');
if (viewSize > PIXEL_CRITERIA_FOR_SMALL_DEVICE) {
$orgSearch.focus();
}
$orgSearch.val($projectSearch.val());
$projectSearch.val("");
}, 200);
});
}).on("keydown.moveCursorFromInputform", function(e) {
switch (e.keyCode) {
case 27: // ESC
closeSidebar($sidebar);
break;
default:
break;
}
});

$(".project-list > .star-project").on("click", function toggleProjectFavorite(e) {
e.stopPropagation();
var that = $(this);
$.post(UsermenuToggleFavoriteProjectUrl + that.data("projectId"))
.done(function (data) {
if(data.favored){
that.find('i').addClass("starred");
} else {
that.find('i').removeClass("starred");
that.parent(".project-list").remove();
}
})
.fail(function (data) {
$yobi.alert("Update failed: " + JSON.parse(data.responseText).reason);
// search by keyword
$(".search-input").on("keyup", function() {
var value = $(this).val().toLowerCase().trim();
$(".user-li").each(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) !== -1);
});
});

$(".org-list > .star-org").on("click", function toggleOrgFavorite(e) {
e.stopPropagation();
var that = $(this);
$.post(UsermenuToggleFoveriteOrganizationUrl + that.data("organizationId"))
.done(function (data) {
if(data.favored){
that.find('i').addClass("starred");
} else {
that.find('i').removeClass("starred");
}).on("keydown.moveCursorFromInputform", function(e) {
switch (e.keyCode) {
case 27: // ESC
closeSidebar($sidebar);
break;
default:
break;
}
})
.fail(function (data) {
$yobi.alert("Update failed: " + JSON.parse(data.responseText).reason);
});
});
});

// This method intended to sync sub tab list of projects
function updateStar(){
$.get(UsermenuGetFoveriteProjectsUrl)
.done(function(data){
$(".star-project").each(function () {
var $this = $(this);
if (data.projectIds.includes($this.data("projectId"))) {
$this.find("i").addClass("starred");
$(".project-list > .star-project").on("click", function toggleProjectFavorite(e) {
e.stopPropagation();
var that = $(this);
$.post(UsermenuToggleFavoriteProjectUrl + that.data("projectId"))
.done(function (data) {
if(data.favored){
that.find('i').addClass("starred");
} else {
$this.find("i").removeClass("starred");
that.find('i').removeClass("starred");
that.parent(".project-list").remove();
}
})
.fail(function (data) {
$yobi.alert("Update failed: " + JSON.parse(data.responseText).reason);
});
});
});

$(".org-list > .star-org").on("click", function toggleOrgFavorite(e) {
e.stopPropagation();
var that = $(this);
$.post(UsermenuToggleFoveriteOrganizationUrl + that.data("organizationId"))
.done(function (data) {
if(data.favored){
that.find('i').addClass("starred");
} else {
that.find('i').removeClass("starred");
}
})
.fail(function (data) {
$yobi.alert("Update failed: " + JSON.parse(data.responseText).reason);
});
});

// This method intended to sync sub tab list of projects
function updateStar(){
$.get(UsermenuGetFoveriteProjectsUrl)
.done(function(data){
$(".star-project").each(function () {
var $this = $(this);
if (data.projectIds.includes($this.data("projectId"))) {
$this.find("i").addClass("starred");
} else {
$this.find("i").removeClass("starred");
}
});
});
}
}
});

0 comments on commit 4015ec2

Please sign in to comment.