243 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			243 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								//for timeline parent library, will be accessable by main library and API library for other people to use.. default inherits orbitDesktopAPI
							 | 
						||
| 
								 | 
							
								// Harry Bomrah
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var orbitTimeline = function(dom){
							 | 
						||
| 
								 | 
							
									t = this;
							 | 
						||
| 
								 | 
							
									this.dom = $(dom);
							 | 
						||
| 
								 | 
							
									this.timelineHtml = $("<div class='t_bottom t_scale' id='timeline_scale'></div>");
							 | 
						||
| 
								 | 
							
									//this.marker = t.timelineHtml.find("#timline_marker");
							 | 
						||
| 
								 | 
							
									this.scale = "";
							 | 
						||
| 
								 | 
							
									//this.container = t.timelineHtml.find("#t_container");
							 | 
						||
| 
								 | 
							
									this.events = new Array;
							 | 
						||
| 
								 | 
							
									this.monthList = ["","January","February","March","April","May","June","July","August","September","October","November","December"];
							 | 
						||
| 
								 | 
							
									this.dt = new Date();
							 | 
						||
| 
								 | 
							
									this.fromdate = [t.dt.getFullYear(),t.dt.getMonth()+1];
							 | 
						||
| 
								 | 
							
									this.ajaxload = true;
							 | 
						||
| 
								 | 
							
									this.halfline = $(window).width()/2 + 200;
							 | 
						||
| 
								 | 
							
									this.initialize = function(){
							 | 
						||
| 
								 | 
							
										t.dom.html(t.timelineHtml);
							 | 
						||
| 
								 | 
							
										$("div.scrollbar").hide();
							 | 
						||
| 
								 | 
							
										t.constructTimeScale(function(timelineScale){
							 | 
						||
| 
								 | 
							
											$("#timeline_scale").html(timelineScale);
							 | 
						||
| 
								 | 
							
											var totalyearwidth =timelineScale.find(".year").length * timelineScale.find(".year").outerWidth();
							 | 
						||
| 
								 | 
							
											var totalul = 0;
							 | 
						||
| 
								 | 
							
											$(".t_scale").css({"min-width":$(".tinycanvas .viewport").width()+500 + "px"})
							 | 
						||
| 
								 | 
							
											for(eve in t.events){
							 | 
						||
| 
								 | 
							
												t.makeBubble(t.events[eve]);
							 | 
						||
| 
								 | 
							
												totalul = $("#scale_wrapper ul").length
							 | 
						||
| 
								 | 
							
												$(".t_scale").width((totalul*350) + totalyearwidth);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											t.bubble_fx();
							 | 
						||
| 
								 | 
							
											var scrollvalue = 0;
							 | 
						||
| 
								 | 
							
											$('.tinycanvas').tinyscrollbar({ 
							 | 
						||
| 
								 | 
							
												axis: 'x',
							 | 
						||
| 
								 | 
							
												onMove: function(x){
							 | 
						||
| 
								 | 
							
													if(x > scrollvalue)
							 | 
						||
| 
								 | 
							
														t.timeScaleForward();
							 | 
						||
| 
								 | 
							
													// else
							 | 
						||
| 
								 | 
							
													// 	t.timeScaleBackward();
							 | 
						||
| 
								 | 
							
													scrollvalue = x;
							 | 
						||
| 
								 | 
							
													var limit = $("#timeline_scale").outerWidth() - $(".tinycanvas .scrollbar").outerWidth();
							 | 
						||
| 
								 | 
							
													if(t.ajaxload){
							 | 
						||
| 
								 | 
							
														if((limit - x) < 10){
							 | 
						||
| 
								 | 
							
															t.eventAjaxLoad(function(){
							 | 
						||
| 
								 | 
							
																var totalul = 0;
							 | 
						||
| 
								 | 
							
																for(eve in t.events){
							 | 
						||
| 
								 | 
							
																	t.makeBubble(t.events[eve]);
							 | 
						||
| 
								 | 
							
																	totalul = $("#scale_wrapper ul").length
							 | 
						||
| 
								 | 
							
																	$(".t_scale").width((totalul*360) + totalyearwidth + 314);
							 | 
						||
| 
								 | 
							
																}
							 | 
						||
| 
								 | 
							
																$('.tinycanvas').tinyscrollbar_update(x);
							 | 
						||
| 
								 | 
							
																t.bubble_fx();
							 | 
						||
| 
								 | 
							
															});
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
										});		
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									this.constructTimeScale = function(callbackFn){
							 | 
						||
| 
								 | 
							
										var mon ="",year="",formname;
							 | 
						||
| 
								 | 
							
										var scale = $("<div id='scale_wrapper'></div>");
							 | 
						||
| 
								 | 
							
										$.getJSON("/desktop_orbit/gettimelinespan",{"get":"papers"},function(years){
							 | 
						||
| 
								 | 
							
											var $ul = $("<ul></ul>");
							 | 
						||
| 
								 | 
							
											var startyear = years.startyear, endyear = years.endyear,year = years.startyear;
							 | 
						||
| 
								 | 
							
											$ul.append('<li><a href="'+startyear+'" class="wh3 hh3 admbg active" onclick="return false;">'+startyear+'</a></li>');
							 | 
						||
| 
								 | 
							
											while(year > endyear){
							 | 
						||
| 
								 | 
							
												year--;
							 | 
						||
| 
								 | 
							
												$ul.append('<li><a href="'+year+'" class="wh3 hh3 admbg" onclick="return false;">'+year+'</a></li>');
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											$("div#orbit div#year_navigation").html($ul);
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
										$.getJSON("/desktop_orbit/eventajaxload",{"event":"papers","from":t.fromdate},function(papersArray){
							 | 
						||
| 
								 | 
							
											$.each(papersArray,function(i,pa){
							 | 
						||
| 
								 | 
							
													$.each(pa.papers,function(i,paper){
							 | 
						||
| 
								 | 
							
														var dt = new Date(paper.created_at);
							 | 
						||
| 
								 | 
							
														var cur_mon = paper.created_at.substr(5,2);
							 | 
						||
| 
								 | 
							
														var cur_year = dt.getFullYear();
							 | 
						||
| 
								 | 
							
														var cdt = paper.created_at.substr(0,7).replace("-","");
							 | 
						||
| 
								 | 
							
														formname = (cur_mon.charAt(0) == "0"?cur_mon.charAt(1) : cur_mon)
							 | 
						||
| 
								 | 
							
														var bubbleData = {"fulldate" : t.monthList[parseInt(formname)] +", " + dt.getDate() + ", " + cur_year,"title":paper.title,"jtitle":"Harry","coauthors":paper.coauthors,"abstract":paper.abstract,"timestamp":cdt}
							 | 
						||
| 
								 | 
							
														t.events.push(bubbleData);
							 | 
						||
| 
								 | 
							
														if(cur_year != year){
							 | 
						||
| 
								 | 
							
															year = cur_year;
							 | 
						||
| 
								 | 
							
															scale.append($("<div class='group year w1 h1 hp vp thmtxt thmc1' for='"+year+"'>"+year+"</div><div class='region_year group' data-content='"+year+"'></div>"));
							 | 
						||
| 
								 | 
							
														} 
							 | 
						||
| 
								 | 
							
														if(cur_mon != mon){
							 | 
						||
| 
								 | 
							
															mon = cur_mon;
							 | 
						||
| 
								 | 
							
															var yr = scale.find("div[data-content="+year+"]");
							 | 
						||
| 
								 | 
							
															yr.append($("<div class='group month' data-content='"+cdt+"'><div class='month_heading vp hp'>"+t.monthList[parseInt(formname)]+"</div><div class='bubble_list'></div></div>"))					
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													});
							 | 
						||
| 
								 | 
							
												});
							 | 
						||
| 
								 | 
							
												//scale.append($("<div class='group year w1 h1 hp vp thmtxt thmc1'>"+year+"</div><div class='region_year group' data-content='"+(year-1)+"'></div>"));
							 | 
						||
| 
								 | 
							
												t.fromdate = [year,formname-1];
							 | 
						||
| 
								 | 
							
												if(typeof callbackFn == "function"){
							 | 
						||
| 
								 | 
							
													callbackFn.call(this,scale);
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											})		
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									this.makeBubble = function(bubbleData){
							 | 
						||
| 
								 | 
							
										var totalul = $("#scale_wrapper").find("div[data-content="+bubbleData.timestamp+"] ul").length;
							 | 
						||
| 
								 | 
							
										var targetul =  $("#scale_wrapper div[data-content="+bubbleData.timestamp+"] div.bubble_list ul").eq(totalul-1);
							 | 
						||
| 
								 | 
							
										if(totalul == 0){
							 | 
						||
| 
								 | 
							
											var ul = $("<ul></ul>");
							 | 
						||
| 
								 | 
							
											$("#scale_wrapper").find("div[data-content="+bubbleData.timestamp+"] div.bubble_list").append(ul);
							 | 
						||
| 
								 | 
							
											targetul = ul;
							 | 
						||
| 
								 | 
							
										}else{
							 | 
						||
| 
								 | 
							
											var totalli = targetul.find("li").length;
							 | 
						||
| 
								 | 
							
											if(totalli >= 5){
							 | 
						||
| 
								 | 
							
												var ul = $("<ul></ul>");
							 | 
						||
| 
								 | 
							
												$("#scale_wrapper").find("div[data-content="+bubbleData.timestamp+"] div.bubble_list").append(ul);
							 | 
						||
| 
								 | 
							
												targetul = ul;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										var bt = (bubbleData.title.length > 70? bubbleData.title.substr(0,70) + "..." : bubbleData.title);
							 | 
						||
| 
								 | 
							
										var bubble = $("<li class='bubble hh3 admbg vp hp'>"+bt+"<span class='date'>"+bubbleData.fulldate+"</span></li>");
							 | 
						||
| 
								 | 
							
										targetul.prepend(bubble);
							 | 
						||
| 
								 | 
							
										bubble.show();
							 | 
						||
| 
								 | 
							
										bubble.click(function(){
							 | 
						||
| 
								 | 
							
											var thisbubble = $(this);
							 | 
						||
| 
								 | 
							
											$(this).parents(dom)
							 | 
						||
| 
								 | 
							
														.find('.bubble, .date')
							 | 
						||
| 
								 | 
							
														.removeClass('thmc1 thmtxt');
							 | 
						||
| 
								 | 
							
													
							 | 
						||
| 
								 | 
							
											o.toolPopup({
							 | 
						||
| 
								 | 
							
												parent: $(this).parent(),
							 | 
						||
| 
								 | 
							
												html : "<div class='bubble_content'><h2>"+bubbleData.jtitle+"</h2><h3>Co-Authors</h3><span class='context'>"+bubbleData.coauthors+"</span><h3>Abstract</h3><span class='context'>"+bubbleData.abstract+"</span></div>",
							 | 
						||
| 
								 | 
							
												height: "392px",
							 | 
						||
| 
								 | 
							
												width:"310px",
							 | 
						||
| 
								 | 
							
												beforeClose : function(){
							 | 
						||
| 
								 | 
							
													$("div.bubble_arrow").remove();
							 | 
						||
| 
								 | 
							
													thisbubble.parents(dom)
							 | 
						||
| 
								 | 
							
														.find('.bubble, .date')
							 | 
						||
| 
								 | 
							
														.removeClass('thmc1 thmtxt');
							 | 
						||
| 
								 | 
							
												},
							 | 
						||
| 
								 | 
							
												onOpen : function(){
							 | 
						||
| 
								 | 
							
													thisbubble.append('<div class="bubble_arrow"/>');
							 | 
						||
| 
								 | 
							
												},
							 | 
						||
| 
								 | 
							
												beforeOpen : function(){
							 | 
						||
| 
								 | 
							
													thisbubble.addClass('thmc1 thmtxt');
							 | 
						||
| 
								 | 
							
													thisbubble.find('.date').addClass('thmtxt');
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									this.eventAjaxLoad = function(callbackFn){
							 | 
						||
| 
								 | 
							
										t.events = [];
							 | 
						||
| 
								 | 
							
										var mon ="",year="",formname;
							 | 
						||
| 
								 | 
							
										var scale = $("#scale_wrapper");
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
											t.ajaxload = false;
							 | 
						||
| 
								 | 
							
											$.getJSON("/desktop_orbit/eventajaxload",{"from":t.fromdate},function(papersArray){
							 | 
						||
| 
								 | 
							
												$.each(papersArray,function(i,pa){
							 | 
						||
| 
								 | 
							
													$.each(pa.papers,function(i,paper){
							 | 
						||
| 
								 | 
							
														var dt = new Date(paper.created_at);
							 | 
						||
| 
								 | 
							
														var cur_mon = paper.created_at.substr(5,2);
							 | 
						||
| 
								 | 
							
														var cur_year = dt.getFullYear();
							 | 
						||
| 
								 | 
							
														var cdt = paper.created_at.substr(0,7).replace("-","");
							 | 
						||
| 
								 | 
							
														formname = (cur_mon.charAt(0) == "0"?cur_mon.charAt(1) : cur_mon)
							 | 
						||
| 
								 | 
							
														var bubbleData = {"fulldate" : t.monthList[parseInt(formname)] +", " + dt.getDate() + ", " + cur_year,"title":paper.title,"jtitle":"Harry","coauthors":paper.coauthors,"abstract":paper.abstract,"timestamp":cdt}
							 | 
						||
| 
								 | 
							
														t.events.push(bubbleData);
							 | 
						||
| 
								 | 
							
														if(cur_year != year){
							 | 
						||
| 
								 | 
							
															year = cur_year;
							 | 
						||
| 
								 | 
							
															if(scale.find("div[data-content="+year+"]").length == 0){
							 | 
						||
| 
								 | 
							
																scale.append($("<div class='group year w1 h1 hp vp thmtxt thmc1' for='"+year+"'>"+year+"</div><div class='region_year group' data-content='"+year+"'></div>"));
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														} 
							 | 
						||
| 
								 | 
							
														if(cur_mon != mon){
							 | 
						||
| 
								 | 
							
															mon = cur_mon;
							 | 
						||
| 
								 | 
							
															var yr = scale.find("div[data-content="+year+"]");
							 | 
						||
| 
								 | 
							
															yr.append($("<div class='group month' data-content='"+cdt+"'><div class='month_heading vp hp'>"+t.monthList[parseInt(formname)]+"</div><div class='bubble_list'></div></div>"))					
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													});
							 | 
						||
| 
								 | 
							
												});
							 | 
						||
| 
								 | 
							
												if(papersArray.length != 0){
							 | 
						||
| 
								 | 
							
													// if(scale.find("div[data-content="+(year-1)+"]").length == 0)
							 | 
						||
| 
								 | 
							
													// 	scale.append($("<div class='group year w1 h1 hp vp thmtxt thmc1'>"+year+"</div><div class='region_year group' data-content='"+(year-1)+"'></div>"));
							 | 
						||
| 
								 | 
							
													t.ajaxload = true;
							 | 
						||
| 
								 | 
							
													t.fromdate = [year,formname-1];
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												if(typeof callbackFn == "function"){
							 | 
						||
| 
								 | 
							
													callbackFn.call(this,scale);
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											})
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									this.bubble_fx = function(){
							 | 
						||
| 
								 | 
							
										$('.bubble').on({
							 | 
						||
| 
								 | 
							
											mouseover: function(){
							 | 
						||
| 
								 | 
							
												$(this)
							 | 
						||
| 
								 | 
							
													.addClass('hover')
							 | 
						||
| 
								 | 
							
													.append('<span class="icon-chevron-right" />');
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											mouseout: function(){
							 | 
						||
| 
								 | 
							
												$(this)
							 | 
						||
| 
								 | 
							
													.removeClass('hover')
							 | 
						||
| 
								 | 
							
													.find('.icon-chevron-right').remove();
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									this.timeScaleForward = function(){
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										// var lastregion = regions.eq(regions.length-1);
							 | 
						||
| 
								 | 
							
										// if(lastregion.offset().left < halfline){
							 | 
						||
| 
								 | 
							
										// 	var year = lastregion.attr("data-content");
							 | 
						||
| 
								 | 
							
										// 	$("div#orbit div#year_navigation ul a").removeClass("active");
							 | 
						||
| 
								 | 
							
										// 	$("div#orbit div#year_navigation ul a[href="+year+"]").addClass("active");
							 | 
						||
| 
								 | 
							
										// }
							 | 
						||
| 
								 | 
							
										var regions = $("div.region_year");
							 | 
						||
| 
								 | 
							
										regions.each(function(){
							 | 
						||
| 
								 | 
							
											var offset = $(this).offset().left;
							 | 
						||
| 
								 | 
							
											if(offset < t.halfline){
							 | 
						||
| 
								 | 
							
												if(offset > 156){
							 | 
						||
| 
								 | 
							
													var year = $(this).attr("data-content");
							 | 
						||
| 
								 | 
							
													$("div#orbit div#year_navigation ul a").removeClass("active");
							 | 
						||
| 
								 | 
							
													$("div#orbit div#year_navigation ul a[href="+year+"]").addClass("active");
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									this.timeScaleBackward = function(){
							 | 
						||
| 
								 | 
							
										var regions = $("div.region_year");
							 | 
						||
| 
								 | 
							
										regions.each(function(){
							 | 
						||
| 
								 | 
							
											var offset = $(this).offset().left * -1
							 | 
						||
| 
								 | 
							
											if(offset > t.halfline){
							 | 
						||
| 
								 | 
							
												if(offset > 156){
							 | 
						||
| 
								 | 
							
													var year = $(this).attr("data-content");
							 | 
						||
| 
								 | 
							
													$("div#orbit div#year_navigation ul a").removeClass("active");
							 | 
						||
| 
								 | 
							
													$("div#orbit div#year_navigation ul a[href="+year+"]").addClass("active");
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									this.ajaxEventPull = function(){
							 | 
						||
| 
								 | 
							
										if(!t.update){
							 | 
						||
| 
								 | 
							
											t.update = true;
							 | 
						||
| 
								 | 
							
										 	$.getJSON("/desktop_orbit/ajaxeventpull",{"from":t.fromdate},function(){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										 	})
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |