فهرست منبع

Comment loading. Improved debugging

Beginnings of comment loading. Doesn't seem to limit properly.
Nathaniel van Diepen 11 سال پیش
والد
کامیت
85b52db4c9
5فایلهای تغییر یافته به همراه77 افزوده شده و 15 حذف شده
  1. 13 0
      api.php
  2. 11 0
      data/pages/comment.template
  3. 3 0
      data/pages/project.template
  4. 46 11
      js/index.js
  5. 4 4
      php/messages.php

+ 13 - 0
api.php

@@ -369,6 +369,19 @@
 								}
 								retj($ret,$ret['state']['title']);
 							break;
+							case 'more':
+								if(isset($_GET['of']) && isset($_GET['pid'])){
+									$ret = array();
+									$limit = array(
+										isset($_GET['start'])?$_GET['start']:0,
+										isset($_GET['amount'])?$_GET['amount']:10
+									);
+									$ret['messages'] = messages($_GET['pid'],$_GET['of'],$limit[0],$limit[1]);
+								}else{
+									$ret['error'] = 'Missing comment parameters';
+								}
+								retj($ret);
+							break;
 							default:
 								retj(array(
 									'error'=>'Invalid action.'

+ 11 - 0
data/pages/comment.template

@@ -0,0 +1,11 @@
+<li>
+	<a style="font-size:small;color:gray;text-decoration:none;" href="#~{{name}}">
+		{{name}}
+	</a>
+	<time style="font-size:smaller;" class="timeago">
+		{{timestamp}}
+	</time>
+	<div>
+		{{message}}
+	</div>
+</li>

+ 3 - 0
data/pages/project.template

@@ -22,6 +22,9 @@
 		</li>
 	{{/each}}
 </ul>
+<a class="more">
+	project
+</a>
 <a class="comment">
 	{
 		"text": "comment",

+ 46 - 11
js/index.js

@@ -221,10 +221,11 @@
 		error = window.error = function(e,callback){
 			if(!flag('error')){
 				flag('error',true);
-				var msg = '['+State.url+']'+e.error;
+				var msg = '['+State.url+'] '+e;
 				console.error((msg.trim()+"\n"+(exists(e.state)?JSON.stringify(e.state):'')).trim());
 				alert(msg.trim(),'Error',callback);
 				console.trace();
+				console.log(e);
 			}
 		},
 		getNewState = function(state){
@@ -296,27 +297,26 @@
 		render = window.render = {
 			topbar: function(t,c){
 				$('#topbar').html(Handlebars.compile(t)(c));
-				render.links('#topbar');
-				render.buttons('#topbar');
-				render.menus('#topbar');
-				render.time('#topbar');
 				if(State.url == location.origin+'/page-index'){
 					$('#topbar').find('.topbar-history').hide();
 				}
 				$('#topbar').addClass('overflow-hide');
-				$(window).resize();
+				render.refresh('#topbar');
 			},
 			content: function(t,c){
 				$(document).unbind('ready');
 				$('#content').html(
 					Handlebars.compile(t)(c)
 				);
-				render.links('#content');
-				render.buttons('#content');
-				render.accordions('#content');
-				render.menus('#content');
 				render.form('#content');
-				render.time('#content');
+				render.accordions('#content');
+				render.refresh('#content');
+			},
+			refresh: function(selector){
+				render.links(selector);
+				render.buttons(selector);
+				render.menus(selector);
+				render.time(selector);
 				$(window).resize();
 			},
 			time: function(selector){
@@ -349,6 +349,41 @@
 				$(selector).find('input[type=submit]').button();
 				$(selector).find('input[type=button]').button();
 				$(selector).find('button').button();
+				$(selector).find('.more').off().each(function(){
+					var t = $(this);
+					if(!$.hasData(t)){
+						t.data('type',t.text().trim());
+						t.text('Load More');
+					}
+				}).click(function(){
+					var t = $(this),
+						data = {
+							type: 'action',
+							id: 'more',
+							pid: State.data.id,
+							url: State.url,
+							title: State.title,
+							topbar: false,
+							no_state: true,
+							of: t.data('type'),
+							at: Number(t.children().length)+10
+						};
+					data.start = t.data('at');
+					apiCall(data,function(d){
+						var tmplt = Handlebars.compile(template('pages','comment')),
+							i;
+						for(i in d.messages){
+							try{
+								t.prev().append(
+									tmplt(d.messages[i])
+								);
+							}catch(e){
+								console.log("Could not load message: ",d.messages[i],e);
+							}
+							render.refresh(t.prev());
+						}
+					},true);
+				}).button();
 				render.comment.buttons(selector);
 			},
 			comment: {

+ 4 - 4
php/messages.php

@@ -1,10 +1,10 @@
 <?php
 	require_once(realpath(dirname(__FILE__)).'/config.php');
 	require_once(PATH_PHP.'database.php');
-	function messages($id,$type){
+	function messages($id,$type,$start=0,$amount=10){
 		switch($type){
 			case 'project':
-				if($res = query("SELECT m.id, u.name, m.message, UNIX_TIMESTAMP(m.timestamp) as timestamp FROM `messages` m JOIN `users` u ON u.id = m.from_id WHERE m.p_id='%d' ORDER BY m.timestamp ASC",array($id))){
+				if($res = query("SELECT m.id, u.name, m.message, UNIX_TIMESTAMP(m.timestamp) as timestamp FROM `messages` m JOIN `users` u ON u.id = m.from_id WHERE m.p_id='%d' ORDER BY m.timestamp DESC LIMIT %d,%d",array($id,$start,$amount))){
 					$arr = array();
 					while($row = $res->fetch_assoc()){
 						array_push($arr,$row);
@@ -13,7 +13,7 @@
 				}
 			break;
 			case 'user':
-				if($res = query("SELECT  m.id, uf.name as \"from\", ut.name as \"to\", m.message, UNIX_TIMESTAMP(m.timestamp) as timestamp, m.timestamp > ut.last_pm_check as is_new FROM `messages` m JOIN `users` uf ON uf.id = m.from_id JOIN `users` ut ON ut.id = m.to_id WHERE (m.from_id='%d' AND m.to_id IS NOT NULL) OR m.to_id='%d' ORDER BY m.timestamp DESC",array($id,$id))){
+				if($res = query("SELECT  m.id, uf.name as \"from\", ut.name as \"to\", m.message, UNIX_TIMESTAMP(m.timestamp) as timestamp, m.timestamp > ut.last_pm_check as is_new FROM `messages` m JOIN `users` uf ON uf.id = m.from_id JOIN `users` ut ON ut.id = m.to_id WHERE (m.from_id='%d' AND m.to_id IS NOT NULL) OR m.to_id='%d' ORDER BY m.timestamp DESC LIMIT %d,%d",array($id,$id,$start,$amount))){
 					$arr = array();
 					while($row = $res->fetch_assoc()){
 						$msg = array(
@@ -32,7 +32,7 @@
 				}
 			break;
 			case 'issue':
-				if($res = query("SELECT m.id, u.name, m.message, UNIX_TIMESTAMP(m.timestamp) as timestamp FROM `messages` m JOIN `users` u ON u.id = m.from_id WHERE m.i_id='%d' ORDER BY m.timestamp ASC",array($id))){
+				if($res = query("SELECT m.id, u.name, m.message, UNIX_TIMESTAMP(m.timestamp) as timestamp FROM `messages` m JOIN `users` u ON u.id = m.from_id WHERE m.i_id='%d' ORDER BY m.timestamp DESC LIMIT %d,$d",array($id,$start,$amount))){
 					$arr = array();
 					while($row = $res->fetch_assoc()){
 						array_push($arr,$row);