Sfoglia il codice sorgente

Better caching.

First load time and any updates are slower, but overall the site will be
faster. Everything will be cached initially.
Nathaniel van Diepen 11 anni fa
parent
commit
54025b961b
5 ha cambiato i file con 83 aggiunte e 38 eliminazioni
  1. 4 1
      api.php
  2. 1 1
      bugs.appcache
  3. 2 4
      data/pages/index.template
  4. 1 1
      data/version
  5. 75 31
      js/index.js

+ 4 - 1
api.php

@@ -111,6 +111,7 @@
 					$title = $id;
 					if(file_exists(PATH_DATA.'pages/'.$id.'.template')){
 						$context = array();
+						$ret['template'] = $id;
 						if($LOGGEDIN){
 							$context['key'] = true;
 							$context['user'] = userObj($_SESSION['username']);
@@ -188,7 +189,8 @@
 				case 'template':
 					if(isset($_GET['name'])){
 						retj(array(
-							'template'=>file_get_conetents(PATH_DATA.'/'.$_GET['id'].'/'.$_GET['name'])
+							'template'=>file_get_contents(PATH_DATA.'/'.$_GET['id'].'/'.$_GET['name'].'.template'),
+							'name'=>$_GET['name']
 						));
 					}else{
 						retj(array(
@@ -334,6 +336,7 @@
 			));
 		}
 	}else{
+		$_GET['type'] = '';
 		retj(array(
 		'error'=>'Type missing.'
 	));

+ 1 - 1
bugs.appcache

@@ -111,4 +111,4 @@ NETWORK:
 *
 
 FALLBACK:
-#Version Sat Mar 29 19:55:22 MDT 2014
+#Version Tue Apr  1 23:13:27 MDT 2014

+ 2 - 4
data/pages/index.template

@@ -1,4 +1,4 @@
-<button id="install" class="recommend">
+<button id="install" style="display:none;" class="recommend">
   Install this App
 </button>
 <script>
@@ -21,12 +21,10 @@
 							error(request.error.name);
 						};
 						return false;
-					});
+					}).show();
 				};
 			};
 		})(navigator.mozApps.checkInstalled(location.origin+"/bugs.webapp"));
-	}else{
-		$('button#install').hide();
 	}
 </script>
 <h3>

+ 1 - 1
data/version

@@ -1 +1 @@
-Sat Mar 29 19:55:22 MDT 2014
+Tue Apr  1 23:13:27 MDT 2014

+ 75 - 31
js/index.js

@@ -96,16 +96,13 @@
 				data.get = 'api';
 				data.back = State.data.back;
 				data.timestamp = +new Date;
-				if(''!=template(data.type+'-'+data.id)){
-					data.template = false;
-				}
 				$.get(location.href,data,function(d){
 					if(exists(d['error'])){
 						error(d);
 					}else{
 						if(exists(d.state)){
 							d.state.title = d.state.title.capitalize();
-							if(location.href.substr(location.href.lastIndexOf('/')+1) != d.state.url && d.state.url != ''){
+							if(location.href.substr(location.href.lastIndexOf('/')+1) != d.state.url && d.state.url !== ''){
 								console.log('Forced redirection to '+d.state.url);
 								History.replaceState(d.state.data,d.state.title,d.state.url);
 								getNewState();
@@ -115,7 +112,11 @@
 					}
 					if(exists(callback)){
 						console.log('Running apiCall callback');
-						callback(d);
+						try{
+							callback(d);
+						}catch(e){
+							error(e);
+						}
 					}
 				},'json');
 			}
@@ -241,13 +242,14 @@
 										console.log('Context detected console.logout');
 										setKey(null);
 									}
+									render.topbar(d.topbar.template,d.topbar.context);
 									if(exists(d.template)){
-										template(State.data.type+'-'+State.data.id,d.template);
+										console.log('Using template: '+d.template);
+										d.template = template(d.template);
+										render.content(d.template,d.context);
 									}else{
-										d.template = template(State.data.type+'-'+State.data.id);
+										console.log('No template used');
 									}
-									render.topbar(d.topbar.template,d.topbar.context);
-									render.content(d.template,d.context);
 									$(window).resize();
 									loading(false);
 								}else{
@@ -636,6 +638,46 @@
 					flag('firebug-lite',true);
 				}
 			}
+		},
+		getTemplates = window.getTemplates = function(callback){
+			$.get('api.php',{
+					type: 'manifest',
+					id: 'pages'
+				},function(d){
+				if(!exists(d.error)){
+					var count = d.manifest.length;
+					for(var i in d.manifest){
+						console.log('Loading template('+(Number(i)+1)+'/'+d.manifest.length+'): '+d.manifest[i]);
+						if(template(d.manifest[i]) === ''){
+							$.get('api.php',{
+								type: 'template',
+								id: 'pages',
+								name: d.manifest[i]
+							},function(d){
+								templates.push({
+									name: d.name,
+									template: d.template
+								});
+								$.localStorage('templates',templates);
+								count--;
+								console.log('Loaded template('+count+' left): '+d.name);
+							},'json');
+						}else{
+							count--;
+						}
+					}
+					setTimeout(function wait_for_templates(){
+						if(count === 0){
+							console.log('getTemplates callback');
+							callback();
+						}else{
+							setTimeout(wait_for_templates,10);
+						}
+					},10);
+				}else{
+					error(d.error);
+				}
+			},'json');
 		};
 	if(exists($.cookie('key'))){
 		setKey($.cookie('key'));
@@ -697,7 +739,30 @@
 						templates = [];
 					}
 				}
-				replaceState(location.href);
+				getTemplates(function(){
+					replaceState(location.href);
+					(function notifications(){
+						var context = State;
+						context.type = 'action';
+						context.id = 'notifications';
+						context.url = State.url;
+						context.title = State.title;
+						context.topbar = false;
+						context.no_state = true;
+						apiCall(context,function(d){
+							if(!exists(d.error)){
+								if(d.count>0 && $.localStorage('last_pm_check') < d.timestamp){
+									notify('Alert','You have '+d.count+' new message'+(d.count>1?'s':''),function(){
+										loadState('page-messages');
+									});
+								}
+								$('.topbar-notifications').css('display',d.count>0?'block':'').text('('+d.count+')');
+								$.localStorage('last_pm_check',d.timestamp);
+							}
+							setTimeout(notifications,5*1000); // every 5 seconds
+						},true);
+					})();
+				});
 			}else{
 				error(d.error);
 			}
@@ -717,27 +782,6 @@
 			}
 		};
 		$('#notification-container').notify();
-		(function notifications(){
-			var context = State;
-			context.type = 'action';
-			context.id = 'notifications';
-			context.url = State.url;
-			context.title = State.title;
-			context.topbar = false;
-			context.no_state = true;
-			apiCall(context,function(d){
-				if(!exists(d.error)){
-					if(d.count>0 && $.localStorage('last_pm_check') < d.timestamp){
-						notify('Alert','You have '+d.count+' new message'+(d.count>1?'s':''),function(){
-							loadState('page-messages');
-						});
-					}
-					$('.topbar-notifications').css('display',d.count>0?'block':'').text('('+d.count+')');
-					$.localStorage('last_pm_check',d.timestamp);
-				}
-				setTimeout(notifications,5*1000); // every 5 seconds
-			},true);
-		})();
 	});
 	shortcut.add('f12',function(){
 		debug.firebug();