Skip to content

Commit

Permalink
Merge pull request openlayers#207 from probins/script
Browse files Browse the repository at this point in the history
Change Protocol/Script registry to object
  • Loading branch information
Éric Lemoine committed Mar 5, 2012
2 parents fb3caf1 + 21d06b0 commit d5da113
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 19 deletions.
43 changes: 25 additions & 18 deletions lib/OpenLayers/Protocol/Script.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,12 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
callback: null,

/**
* APIProperty: scope
* {Object} Optional ``this`` object for the callback. Read-only, set
* through the options passed to the constructor.
* APIProperty: callbackTemplate
* {String} Template for creating a unique callback function name
* for the registry. Should include ${id}.
* Default is "OpenLayers.Protocol.Script.registry[${id}]".
*/
scope: null,

/**
* APIProperty: format
* {<OpenLayers.Format>} Format for parsing features. Default is an
* <OpenLayers.Format.GeoJSON> format. If an alternative is provided,
* the format's read method must take an object and return an array
* of features.
*/
format: null,
callbackTemplate: "OpenLayers.Protocol.Script.registry[${id}]",

/**
* APIProperty: callbackKey
Expand All @@ -88,6 +80,22 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
*/
callbackPrefix: "",

/**
* APIProperty: scope
* {Object} Optional ``this`` object for the callback. Read-only, set
* through the options passed to the constructor.
*/
scope: null,

/**
* APIProperty: format
* {<OpenLayers.Format>} Format for parsing features. Default is an
* <OpenLayers.Format.GeoJSON> format. If an alternative is provided,
* the format's read method must take an object and return an array
* of features.
*/
format: null,

/**
* Property: pendingRequests
* {Object} References all pending requests. Property names are script
Expand Down Expand Up @@ -212,7 +220,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
*/
createRequest: function(url, params, callback) {
var id = OpenLayers.Protocol.Script.register(callback);
var name = "OpenLayers.Protocol.Script.registry[" + id + "]";
var name = OpenLayers.String.format(this.callbackTemplate, {id: id});
params = OpenLayers.Util.extend({}, params);
params[this.callbackKey] = this.callbackPrefix + name;
url = OpenLayers.Util.urlAppend(
Expand Down Expand Up @@ -333,7 +341,7 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
(function() {
var o = OpenLayers.Protocol.Script;
var counter = 0;
o.registry = [];
o.registry = {};

/**
* Function: OpenLayers.Protocol.Script.register
Expand All @@ -345,12 +353,11 @@ OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
* that is the JSON returned by the service.
*
* Returns:
* {Number} An identifier for retreiving the registered callback.
* {Number} An identifier for retrieving the registered callback.
*/
o.register = function(callback) {
var id = ++counter;
var id = "c"+(++counter);
o.registry[id] = function() {
o.unregister(id);
callback.apply(this, arguments);
};
return id;
Expand Down
8 changes: 7 additions & 1 deletion tests/Protocol/Script.html
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@
}

function test_createRequest(t) {
t.plan(3);
t.plan(4);
var protocol = new OpenLayers.Protocol.Script({
callbackKey: 'cb_key',
callbackPrefix: 'cb_prefix:'
Expand All @@ -155,7 +155,13 @@
t.eq(script.id, 'OpenLayers_Protocol_Script_bar',
'created script has a correct id');

protocol.callbackTemplate = "OpenLayers.Protocol.Script.registry.${id}";
script = protocol.createRequest('http://bar_url/', {'k': 'bar_param'}, 'bar_callback');
t.eq(script.src, 'http://bar_url/?k=bar_param&cb_key=cb_prefix%3AOpenLayers.Protocol.Script.registry.bar',
'created script has a correct url with different template');

OpenLayers.Protocol.Script.register = _register;

}

function test_destroyRequest(t) {
Expand Down

0 comments on commit d5da113

Please sign in to comment.