瀏覽代碼

Comment loading. Improved debugging

Beginnings of comment loading. Doesn't seem to limit properly.
Nathaniel van Diepen 10 年之前
父節點
當前提交
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);