Преглед изворни кода

fixed a bug of data vacuum, load script editor when a new script is built

Gerald пре 12 година
родитељ
комит
a8b050e44d
2 измењених фајлова са 36 додато и 32 уклоњено
  1. 28 24
      background.js
  2. 8 8
      options.js

+ 28 - 24
background.js

@@ -83,26 +83,35 @@ function saveScript(i,src,callback) {
 	return o.put(i);
 	return o.put(i);
 }
 }
 function vacuum(o,src,callback) {
 function vacuum(o,src,callback) {
-	var cc={},rq={},vl={},w=0;
-	function vacuumPosition(){
-		var o=db.transaction('scripts','readwrite').objectStore('scripts'),p=0;
+	var ids=[],cc={},rq={},vl={},w=0,p=0;
+	function init(){
+		var o=db.transaction('scripts').objectStore('scripts');
 		o.index('position').openCursor().onsuccess=function(e){
 		o.index('position').openCursor().onsuccess=function(e){
 			var r=e.target.result,v,i;
 			var r=e.target.result,v,i;
 			if(r) {
 			if(r) {
-				v=r.value;p++;
-				if(v.position!=p) {v.position=p;o.put(v);}
+				v=r.value;ids.push(v.id);
 				v.meta.require.forEach(function(i){rq[i]=1;});
 				v.meta.require.forEach(function(i){rq[i]=1;});
 				for(i in v.meta.resources) cc[i]=1;
 				for(i in v.meta.resources) cc[i]=1;
 				if(v.meta.icon) cc[v.meta.icon]=1;vl[v.uri]=1;
 				if(v.meta.icon) cc[v.meta.icon]=1;vl[v.uri]=1;
 				r.continue();
 				r.continue();
-			} else {
-				setOption({key:'maxPosition',value:pos=p});
-				vacuumDB('require',rq);
-				vacuumDB('cache',cc);
-				vacuumDB('values',vl);
-			}
+			} else vacuumPosition();
 		};
 		};
 	}
 	}
+	function vacuumPosition(){
+		var i=ids.shift();
+		if(i) {
+			var o=db.transaction('scripts','readwrite').objectStore('scripts');
+			o.get(i).onsuccess=function(e){
+				var r=e.target.result;r.position=++p;
+				o.put(r).onsuccess=vacuumPosition;
+			};
+		} else {
+			setOption({key:'maxPosition',value:pos=p});
+			vacuumDB('require',rq);
+			vacuumDB('cache',cc);
+			vacuumDB('values',vl);
+		}
+	}
 	function vacuumDB(dbName,dic){
 	function vacuumDB(dbName,dic){
 		w++;
 		w++;
 		var o=db.transaction(dbName,'readwrite').objectStore(dbName);
 		var o=db.transaction(dbName,'readwrite').objectStore(dbName);
@@ -117,12 +126,14 @@ function vacuum(o,src,callback) {
 		};
 		};
 	}
 	}
 	function finish(){
 	function finish(){
-		var i;
-		for(i in rq) if(rq[i]==1) fetchRequire(i);
-		for(i in cc) if(cc[i]==1) fetchCache(i);
-		if(!--w) chrome.tabs.sendMessage(src.tab.id,{cmd:'Vacuumed'});
+		if(!--w) {
+			var i;
+			for(i in rq) if(rq[i]==1) fetchRequire(i);
+			for(i in cc) if(cc[i]==1) fetchCache(i);
+			chrome.tabs.sendMessage(src.tab.id,{cmd:'Vacuumed'});
+		}
 	}
 	}
-	vacuumPosition();
+	init();
 	if(callback) callback();
 	if(callback) callback();
 }
 }
 function move(data,src,callback){
 function move(data,src,callback){
@@ -579,14 +590,7 @@ chrome.runtime.onConnect.addListener(function(p){
 });
 });
 chrome.runtime.onMessage.addListener(function(req,src,callback) {
 chrome.runtime.onMessage.addListener(function(req,src,callback) {
 	var maps={
 	var maps={
-		NewScript:function(o,src,callback){
-			o=newScript();
-			saveScript(o,src).onsuccess=function(e){
-				o.id=e.target.result;
-				chrome.tabs.sendMessage(src.tab.id,{cmd:'NewScript',data:o});
-			};
-			if(callback) callback();
-		},
+		NewScript:function(o,src,callback){callback(newScript());},
 		RemoveScript: removeScript,
 		RemoveScript: removeScript,
 		GetData: getData,
 		GetData: getData,
 		GetInjected: getInjected,
 		GetInjected: getInjected,

+ 8 - 8
options.js

@@ -113,12 +113,15 @@ function addItem(o){
 		}
 		}
 	};
 	};
 })();
 })();
-$('bNew').onclick=function(){chrome.runtime.sendMessage({cmd:'NewScript'});};
+$('bNew').onclick=function(){chrome.runtime.sendMessage({cmd:'NewScript'},function(o){
+	E.cur=null;gotScript(o);
+});};
 $('bUpdate').onclick=function(){chrome.runtime.sendMessage({cmd:'CheckUpdateAll'});};
 $('bUpdate').onclick=function(){chrome.runtime.sendMessage({cmd:'CheckUpdateAll'});};
 $('cDetail').onchange=function(){L.classList.toggle('simple');chrome.runtime.sendMessage({cmd:'SetOption',data:{key:'showDetails',value:this.checked}});};
 $('cDetail').onchange=function(){L.classList.toggle('simple');chrome.runtime.sendMessage({cmd:'SetOption',data:{key:'showDetails',value:this.checked}});};
-var panel=N;
+var panel=null;
 function switchTo(D){
 function switchTo(D){
-	panel.classList.add('hide');D.classList.remove('hide');panel=D;
+	if(panel) panel.classList.add('hide');
+	D.classList.remove('hide');panel=D;
 }
 }
 var dialogs=[];
 var dialogs=[];
 function showDialog(D,z){
 function showDialog(D,z){
@@ -147,7 +150,7 @@ O.onclick=function(){
 function confirmCancel(dirty){
 function confirmCancel(dirty){
 	return !dirty||confirm(_('confirmNotSaved'));
 	return !dirty||confirm(_('confirmNotSaved'));
 }
 }
-initCSS();initI18n();
+initCSS();initI18n(function(){switchTo(N);});
 
 
 // Advanced
 // Advanced
 var A=$('advanced');
 var A=$('advanced');
@@ -356,7 +359,7 @@ $('mOK').onclick=function(){
 		c.match=split(mM.value);
 		c.match=split(mM.value);
 		c._exclude=cE.checked;
 		c._exclude=cE.checked;
 		c.exclude=split(mE.value);
 		c.exclude=split(mE.value);
-		loadItem(E.cur,E.scr);
+		if(E.cur) loadItem(E.cur,E.scr);
 		chrome.runtime.sendMessage({cmd:'SaveScript',data:E.scr});
 		chrome.runtime.sendMessage({cmd:'SaveScript',data:E.scr});
 	}
 	}
 	closeDialog();
 	closeDialog();
@@ -393,9 +396,6 @@ function updateItem(r){
 chrome.runtime.sendMessage({cmd:'GetData'},loadOptions);
 chrome.runtime.sendMessage({cmd:'GetData'},loadOptions);
 chrome.runtime.onMessage.addListener(function(req,src){
 chrome.runtime.onMessage.addListener(function(req,src){
 	var maps={
 	var maps={
-		NewScript: function(o){
-			ids.push(o.id);addItem(map[o.id]={obj:o});o=map[o.id].div;
-		},
 		Vacuumed: function(){
 		Vacuumed: function(){
 			for(var i=0;i<ids.length;i++) map[ids[i]].obj.position=i+1;
 			for(var i=0;i<ids.length;i++) map[ids[i]].obj.position=i+1;
 			$('aVacuum').innerHTML=_('buttonVacuumed');
 			$('aVacuum').innerHTML=_('buttonVacuumed');