diff inkscape/firefox/content/inkscape.js @ 339:63aaf96209cd

* Move location of files so that we can produce XPI file from them. * Add the produce to compile the inkscape for madbutterfly * Add makefile to produce inkscape and madbuilder.xpi
author wycc
date Sun, 08 Mar 2009 10:05:22 +0800
parents inkscape/firefox/inkscape.js@d5327265da1e
children 4350aa369149
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inkscape/firefox/content/inkscape.js	Sun Mar 08 10:05:22 2009 +0800
@@ -0,0 +1,394 @@
+var isInProgress=0;
+
+var MAX_DUMP_DEPTH = 10;
+var inkscape;
+
+      
+
+function dumpObj(obj, name, indent, depth) {
+      if (depth > MAX_DUMP_DEPTH) {
+             return indent + name + ": <Maximum Depth Reached>\n";
+      }
+      if (typeof obj == "object") {
+             var child = null;
+             var output = indent + name + "\n";
+             indent += "\t";
+             for (var item in obj)
+             {
+                   try {
+                          child = obj[item];
+                   } catch (e) {
+                          child = "<Unable to Evaluate>";
+                   }
+                   if (typeof child == "object") {
+                          output += dumpObj(child, item, indent, depth + 1);
+                   } else {
+                          output += indent + item + ": " + child + "\n";
+                   }
+             }
+             return output;
+      } else {
+             return obj;
+      }
+}
+function dumpObjItem(obj, name, indent, depth) {
+      if (depth > MAX_DUMP_DEPTH) {
+             return indent + name + ": <Maximum Depth Reached>\n";
+      }
+      if (typeof obj == "object") {
+             var child = null;
+             var output = indent + name + "\n";
+             indent += "\t";
+             for (var item in obj)
+             {
+                   try {
+                          child = obj[item];
+                   } catch (e) {
+                          child = "<Unable to Evaluate>";
+                   }
+                   if (typeof child == "object") {
+                          output += dumpObjItem(child, item, indent, depth + 1);
+                   } else {
+                          output += indent + item + ":\n";
+                   }
+             }
+             return output;
+      } else {
+             return obj;
+      }
+}
+/**
+ *   Inkscape class
+ *
+ */
+function Inkscape(file) 
+{
+	var ink = document.getElementById('inkscape');
+	ink.innerHTML = "<embed src="+file+" width=640 height=480 />";
+	this.isInProgress = 0;
+
+	setTimeout("inkscape.fetchDocument()",4000);
+}
+
+Inkscape.prototype.gotoScene = function (n)
+{
+	nextScene = n;
+	var soapBody = new SOAPObject("START");
+	var sr = new SOAPRequest("START", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.gotoScene1(resp);},this);
+	this.isInProgress++;
+}
+Inkscape.prototype.gotoScene1 = function (resp,n)
+{
+	var soapBody = new SOAPObject("SCENE");
+	var v1 = new SOAPObject("v1");
+	v1.val(nextScene);
+	soapBody.appendChild(v1);
+	var sr = new SOAPRequest("SCENE", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.gotoScene2(resp);},this);
+}	
+Inkscape.prototype.gotoScene2 = function (resp)
+{
+	var soapBody = new SOAPObject("PUBLISH");
+	var sr = new SOAPRequest("PUBLISH", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.gotoScene3(resp);},this);
+}
+
+Inkscape.prototype.gotoScene3 = function (resp)
+{
+	this.isInProgress--;
+}
+Inkscape.prototype.publishDocument= function(resp)
+{
+	mbsvg = new MBSVGString(resp.Body[0].GETDOCResponse[0].Result[0].Text);
+	mbsvg.renderUI();
+
+	var soapBody = new SOAPObject("PUBLISH");
+	var sr = new SOAPRequest("PUBLISH", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function(resp,arg) {arg.operationDone(resp);},this);
+}
+
+Inkscape.prototype.refreshDocument = function(resp)
+{
+	var soapBody = new SOAPObject("GETDOC");
+	var sr = new SOAPRequest("GETDOC", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function(resp,arg) { arg.publishDocument(resp);},this);
+}	
+
+Inkscape.prototype.operationDone = function (res)
+{
+	this.isInProgress--;
+}
+Inkscape.prototype.insertKey= function(n)
+{
+	nextScene = n;
+	var soapBody = new SOAPObject("START");
+	var sr = new SOAPRequest("START", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.insertKey1(resp);},this);
+	this.isInProgress++;
+}
+Inkscape.prototype.insertKey1 = function(resp)
+{
+	var soapBody = new SOAPObject("INSERTKEY");
+	var v1 = new SOAPObject("v1");
+	v1.attr('type','string');
+	v1.val(currentLayer);
+	soapBody.appendChild(v1);
+	var v2 = new SOAPObject("v2");
+	v2.val(nextScene);
+	soapBody.appendChild(v2);
+	var sr = new SOAPRequest("INSERTKEY", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.refreshDocument(resp);},this);
+}
+
+Inkscape.prototype.extendScene=function()
+{
+	var soapBody = new SOAPObject("START");
+	var sr = new SOAPRequest("START", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.extendScene1(resp);},this);
+	this.isInProgress++;
+}
+
+
+Inkscape.prototype.extendScene1 = function(resp)
+{
+	var soapBody = new SOAPObject("EXTENDSCENE");
+	var v1 = new SOAPObject("v1");
+	v1.attr('type','string');
+	v1.val(currentLayer);
+	soapBody.appendChild(v1);
+	var v2 = new SOAPObject("v2");
+	v2.val(currentScene);
+	soapBody.appendChild(v2);
+	var sr = new SOAPRequest("EXTENDSCENE", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.refreshDocument(resp);},this);
+}	
+
+
+Inkscape.prototype.deleteScene=function()
+{
+	var soapBody = new SOAPObject("START");
+	var sr = new SOAPRequest("START", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.deleteScene1(resp);},this);
+	this.isInProgress++;
+}
+
+Inkscape.prototype.deleteScene1=function(resp)
+{
+	var soapBody = new SOAPObject("DELETESCENE");
+	var v1 = new SOAPObject("v1");
+	v1.attr('type','string');
+	v1.val(currentLayer);
+	soapBody.appendChild(v1);
+	var v2 = new SOAPObject("v2");
+	v2.val(currentScene);
+	soapBody.appendChild(v2);
+	var sr = new SOAPRequest("EXTENDSCENE", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr, function (resp,arg) {arg.refreshDocument(resp);},this);
+}	
+
+Inkscape.prototype.fetchDocument = function()
+{	
+	var soapBody = new SOAPObject("START");
+	var sr = new SOAPRequest("START", soapBody);
+	SOAPClient.Proxy = "http://localhost:19192/";
+	SOAPClient.SendRequest(sr,function(resp,arg) {arg.refreshDocument(resp);},this);
+	this.isInProgress++;
+}
+
+
+
+function MBSVG(file)
+{
+	var xmlDoc=document.implementation.createDocument("http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd","",null);
+	xmlDoc.async=false;
+	xmlDoc.load(file);
+	MBSVG_loadFromDoc(this,xmlDoc);
+
+}
+function MBSVGString(xml)
+{
+	var xmlParser = new DOMParser();
+	var xmlDoc = xmlParser.parseFromString( xml, 'text/xml');
+	MBSVG_loadFromDoc(this,xmlDoc);
+}
+
+
+
+function MBSVG_loadFromDoc(self,xmlDoc)
+{
+	var scenesNode = xmlDoc.getElementsByTagNameNS("http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd","scene");
+	if (scenesNode == null) {
+		alert('This is not a valid scene file');
+	}
+	var len = scenesNode.length;
+	var i,j;
+	var max = 0;
+	var scenes = new Array();
+
+	// Get the length of scenes
+	for(i=0;i<len;i++) {
+		var s = scenesNode[i];
+		var start = s.getAttribute("start");
+		var end = s.getAttribute("end");
+		var ref = s.getAttribute("ref");
+		var ss = new Object();
+
+		if (end == null) end = start
+		if (max <end) max = end;
+		ss.node = s;
+		ss.start = start;
+		ss.end = end;
+		ss.ref = ref;
+		ss.layer = null;
+		scenes.push(ss);
+	}
+	if (max < 20) max = 20;
+	// Collect all layers
+	var nodes = xmlDoc.getElementsByTagNameNS("http://www.w3.org/2000/svg","svg")[0].childNodes;
+	var layers = new Array();
+	len = nodes.length;
+	for(i=0;i<len;i++) {
+		if (nodes[i].localName == 'g') {
+			var subnodes = nodes[i].childNodes;
+			for(j=0;j<subnodes.length;j++) {
+				if (subnodes[j].localName == 'g') {
+					for(var k=0;k<scenes.length;k++) {
+						if (scenes[k].ref == subnodes[j].getAttribute('id')) {
+							scenes[k].layer = nodes[i].getAttribute('id');
+							break;
+						}
+					}
+				}
+			}
+			layers.push(nodes[i]);
+		}
+	}
+	self.layers = layers;
+	self.scenes = scenes;
+	self.maxframe = max;
+}
+
+MBSVGString.prototype=MBSVG.prototype;
+MBSVG.prototype.renderUI=function()
+{
+	var layers = this.layers;
+	var scenes = this.scenes;
+	var max = this.maxframe;
+	var cmd = "<table border=1>\n";
+	cmd = cmd + "<tr><td></td>";
+	for(var j=1;j<=max;j++) 
+		cmd = cmd + "<td>"+j+"</td>";
+	
+	for(var i=layers.length-1;i>=0;i--) {
+		var l = layers[i];
+		var id = l.getAttribute('id');
+		var label = l.getAttribute('inkscape:label');
+		cmd = cmd + "<tr><td>"+label+"</td>";
+		for(j=0;j<max;j++) {
+			var empty = 1;
+			var n = j +1;
+			var id_str = id+"#"+n
+			for(var k=0;k<scenes.length;k++) {
+				if (id != scenes[k].layer) continue;
+				if (n == scenes[k].start) {
+					cmd = cmd + "<td><img class='normal' src=start.png id='"+id_str+"' onClick='selectCell(this)' /></td>";
+					empty = 0;
+					break;
+				} else if ((n>scenes[k].start)&&(n <= scenes[k].end)) {
+					cmd = cmd + "<td><img class='normal' src=fill.png id='"+id_str+"' onClick='selectCell(this)' /></td>";
+					empty = 0;
+					break;
+				}
+			}
+			if (empty) {
+				cmd = cmd + "<td><img class='normal' src=empty.png id='"+id_str+"'onClick='selectCell(this)' /></td>";
+			}
+
+		}
+		cmd = cmd + "</tr>\n";
+	}
+	cmd = cmd + "</table>\n";
+	var frame = document.getElementById('frame');
+	frame.innerHTML=cmd;
+}
+
+
+
+/**
+ *    UI for madbuilder.html to build the scene editor
+ */
+
+function selectCell(obj)
+{
+	var id = obj.getAttribute('id');
+	var layer,n;
+	var f = id.split('#');
+	layer=f[0];
+	n = f[1];
+	var img = obj.getAttribute('src');
+	var f = img.split('-');
+
+	if (f[0] == 'active')
+		return;
+	else {
+		obj.setAttribute('src', 'active-'+img);
+	}
+
+	if (last_select != null) {
+		f = last_select.getAttribute('src').split('-');
+		last_select.setAttribute('src', f[1]);
+	}
+	last_select = obj;
+	currentScene = n;
+	currentLayer = layer;
+}
+
+
+function onButtonClick(obj)
+{
+	if (inkscape.isInProgress != 0) return;
+	var id = obj.getAttribute('id');
+	if (id == 'Jump') {
+		if (currentScene != 0)
+			inkscape.gotoScene(currentScene);
+	} else if (id == 'InsertKey') {
+		inkscape.insertKey(currentScene);
+	} else if (id == 'ExtendScene') {
+		inkscape.extendScene(currentScene);
+	} else if (id == 'DeleteScene') {
+		inkscape.deleteScene(currentScene);
+	} else {
+		alert(id+' has not been implemented yet');
+	}
+}
+
+function gotoScene_cb(resObj)
+{
+
+}
+var nextScene;
+var currentScene = 0;
+var currentLayer = '';
+
+var last_select = null;
+inkscape = new Inkscape("scene.mbsvg");
+
+$('a.button').mouseover(function () {
+			if (inkscape.isInProgress==0)
+				this.style.MozOpacity = 0.1;
+		}).mouseout(function () {
+			this.style.MozOpacity= 1;
+		});	
+