Fixed embed API

git-svn-id: http://svg-edit.googlecode.com/svn/trunk@967 eee81c28-f429-11dd-99c0-75d572ba1ddd
master
Kevin Kwok 2009-11-22 20:33:12 +00:00
parent db5df84bcc
commit e689ca3dcf
2 changed files with 46 additions and 13 deletions

View File

@ -1,3 +1,35 @@
/*
function embedded_svg_edit(frame){
//initialize communication
this.frame = frame;
this.stack = []; //callback stack
var editapi = this;
window.addEventListener("message", function(e){
if(e.data.substr(0,5) == "ERROR"){
editapi.stack.splice(0,1)[0](e.data,"error")
}else{
editapi.stack.splice(0,1)[0](e.data)
}
}, false)
}
embedded_svg_edit.prototype.call = function(code, callback){
this.stack.push(callback);
this.frame.contentWindow.postMessage(code,"*");
}
embedded_svg_edit.prototype.getSvgString = function(callback){
this.call("svgCanvas.getSvgString()",callback)
}
embedded_svg_edit.prototype.setSvgString = function(svg){
this.call("svgCanvas.setSvgString('"+svg.replace(/'/g, "\\'")+"')");
}
*/
/*
Embedded SVG-edit API
@ -46,19 +78,14 @@ function embedded_svg_edit(frame){
for(var i = 0; i < functions.length; i++){
this[functions[i]] = (function(d){
return function(){
var cbk = function(){}, t = this //new callback
var t = this //new callback
for(var g = 0, args = []; g < arguments.length; g++){
args.push(arguments[g]);
}
setTimeout(function(){//delay for the callback to be set in case its synchronous
t.send(d, //the name of the function
args, //the arguments to the function
function(r){
cbk(r); //the callback (currently it's nothing, but will be set later
})
},0)
var cbid = t.send(d,args, function(){}) //the callback (currently it's nothing, but will be set later
return function(newcallback){
cbk = newcallback;
t.callbacks[cbid] = newcallback; //set callback
}
}
})(functions[i])
@ -68,10 +95,10 @@ function embedded_svg_edit(frame){
window.addEventListener("message", function(e){
if(e.data.substr(0,4)=="SVGe"){ //because svg-edit is too longish
var data = e.data.substr(4);
var cbid = parseInt(data.substr(0, data.indexOf(";")));
var cbid = data.substr(0, data.indexOf(";"));
if(t.callbacks[cbid]){
if(data.substr(0,6) != "error:"){
t.callbacks[cbid](eval("("+data+")"))
t.callbacks[cbid](eval("("+data.substr(cbid.length+1)+")"))
}else{
t.callbacks[cbid](data, "error");
}
@ -118,7 +145,11 @@ embedded_svg_edit.prototype.send = function(name, args, callback){
for(var argstr = [], i = 0; i < args.length; i++){
argstr.push(this.encode(args[i]))
}
this.frame.contentWindow.postMessage(cbid+";svgCanvas['"+name+"']("+argstr.join(",")+")");
var t = this;
setTimeout(function(){//delay for the callback to be set in case its synchronous
t.frame.contentWindow.postMessage(cbid+";svgCanvas['"+name+"']("+argstr.join(",")+")","*");
}, 0);
return cbid;
//this.stack.shift()("svgCanvas['"+name+"']("+argstr.join(",")+")")
}

View File

@ -2274,6 +2274,8 @@ $(function() {
e.source.postMessage("SVGe"+cbid+";error:"+err.message, e.origin);
}
}, false)
}catch(err){}
}catch(err){
window.embed_error = err;
}
});