webui-aria2/js/libs/dojox/geo/openlayers/Patch.js.uncompressed.js
2012-05-01 19:52:07 +08:00

68 lines
2.4 KiB
JavaScript

//>>built
define("dojox/geo/openlayers/Patch", [
"dojo/_base/kernel",
"dojo/_base/lang", // dojo.extend getObject
"dojo/_base/sniff", // dojo.isIE
"dojox/gfx",
"dojox/gfx/shape"
], function(dojo, lang, sniff, gfx, shape){
var dgo = lang.getObject("geo.openlayers", true, dojox);
dgo.Patch = {
patchMethod : function(/*Object*/type, /*String*/method, /*Function*/execBefore, /*Function*/
execAfter){
// summary:
// Patches the specified method of the given type so that the 'execBefore' (resp. 'execAfter') function is
// called before (resp. after) invoking the legacy implementation.
// description:
// The execBefore function is invoked with the following parameter:
// execBefore(method, arguments) where 'method' is the patched method name and 'arguments' the arguments received
// by the legacy implementation.
// The execAfter function is invoked with the following parameter:
// execBefore(method, returnValue, arguments) where 'method' is the patched method name, 'returnValue' the value
// returned by the legacy implementation and 'arguments' the arguments received by the legacy implementation.
// type: Object: the type to patch.
// method: String: the method name.
// execBefore: Function: the function to execute before the legacy implementation.
// execAfter: Function: the function to execute after the legacy implementation.
// tags:
// private
var old = type.prototype[method];
type.prototype[method] = function(){
var callee = method;
if (execBefore)
execBefore.call(this, callee, arguments);
var ret = old.apply(this, arguments);
if (execAfter)
ret = execAfter.call(this, callee, ret, arguments) || ret;
return ret;
};
},
patchGFX : function(){
var vmlFixRawNodePath = function(){
if (!this.rawNode.path)
this.rawNode.path = {};
};
var vmlFixFillColors = function() {
if(this.rawNode.fill && !this.rawNode.fill.colors)
this.rawNode.fill.colors = {};
};
if (sniff.isIE <= 8) {
dojox.geo.openlayers.Patch.patchMethod(gfx.Line, "setShape", vmlFixRawNodePath, null);
dojox.geo.openlayers.Patch.patchMethod(gfx.Polyline, "setShape", vmlFixRawNodePath, null);
dojox.geo.openlayers.Patch.patchMethod(gfx.Path, "setShape", vmlFixRawNodePath, null);
dojox.geo.openlayers.Patch.patchMethod(shape.Shape, "setFill", vmlFixFillColors, null);
}
}
};
return dgo.Patch;
});