diff options
Diffstat (limited to 'misc/openlayers/lib/OpenLayers/Events')
-rw-r--r-- | misc/openlayers/lib/OpenLayers/Events/buttonclick.js | 206 | ||||
-rw-r--r-- | misc/openlayers/lib/OpenLayers/Events/featureclick.js | 321 |
2 files changed, 0 insertions, 527 deletions
diff --git a/misc/openlayers/lib/OpenLayers/Events/buttonclick.js b/misc/openlayers/lib/OpenLayers/Events/buttonclick.js deleted file mode 100644 index ae9094d..0000000 --- a/misc/openlayers/lib/OpenLayers/Events/buttonclick.js +++ /dev/null @@ -1,206 +0,0 @@ -/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for - * full list of contributors). Published under the 2-clause BSD license. - * See license.txt in the OpenLayers distribution or repository for the - * full text of the license. */ - -/** - * @requires OpenLayers/Events.js - */ - -/** - * Class: OpenLayers.Events.buttonclick - * Extension event type for handling buttons on top of a dom element. This - * event type fires "buttonclick" on its <target> when a button was - * clicked. Buttons are detected by the "olButton" class. - * - * This event type makes sure that button clicks do not interfere with other - * events that are registered on the same <element>. - * - * Event types provided by this extension: - * - *buttonclick* Triggered when a button is clicked. Listeners receive an - * object with a *buttonElement* property referencing the dom element of - * the clicked button, and an *buttonXY* property with the click position - * relative to the button. - */ -OpenLayers.Events.buttonclick = OpenLayers.Class({ - - /** - * Property: target - * {<OpenLayers.Events>} The events instance that the buttonclick event will - * be triggered on. - */ - target: null, - - /** - * Property: events - * {Array} Events to observe and conditionally stop from propagating when - * an element with the olButton class (or its olAlphaImg child) is - * clicked. - */ - events: [ - 'mousedown', 'mouseup', 'click', 'dblclick', - 'touchstart', 'touchmove', 'touchend', 'keydown' - ], - - /** - * Property: startRegEx - * {RegExp} Regular expression to test Event.type for events that start - * a buttonclick sequence. - */ - startRegEx: /^mousedown|touchstart$/, - - /** - * Property: cancelRegEx - * {RegExp} Regular expression to test Event.type for events that cancel - * a buttonclick sequence. - */ - cancelRegEx: /^touchmove$/, - - /** - * Property: completeRegEx - * {RegExp} Regular expression to test Event.type for events that complete - * a buttonclick sequence. - */ - completeRegEx: /^mouseup|touchend$/, - - /** - * Property: startEvt - * {Event} The event that started the click sequence - */ - - /** - * Constructor: OpenLayers.Events.buttonclick - * Construct a buttonclick event type. Applications are not supposed to - * create instances of this class - they are created on demand by - * <OpenLayers.Events> instances. - * - * Parameters: - * target - {<OpenLayers.Events>} The events instance that the buttonclick - * event will be triggered on. - */ - initialize: function(target) { - this.target = target; - for (var i=this.events.length-1; i>=0; --i) { - this.target.register(this.events[i], this, this.buttonClick, { - extension: true - }); - } - }, - - /** - * Method: destroy - */ - destroy: function() { - for (var i=this.events.length-1; i>=0; --i) { - this.target.unregister(this.events[i], this, this.buttonClick); - } - delete this.target; - }, - - /** - * Method: getPressedButton - * Get the pressed button, if any. Returns undefined if no button - * was pressed. - * - * Arguments: - * element - {DOMElement} The event target. - * - * Returns: - * {DOMElement} The button element, or undefined. - */ - getPressedButton: function(element) { - var depth = 3, // limit the search depth - button; - do { - if(OpenLayers.Element.hasClass(element, "olButton")) { - // hit! - button = element; - break; - } - element = element.parentNode; - } while(--depth > 0 && element); - return button; - }, - - /** - * Method: ignore - * Check for event target elements that should be ignored by OpenLayers. - * - * Parameters: - * element - {DOMElement} The event target. - */ - ignore: function(element) { - var depth = 3, - ignore = false; - do { - if (element.nodeName.toLowerCase() === 'a') { - ignore = true; - break; - } - element = element.parentNode; - } while (--depth > 0 && element); - return ignore; - }, - - /** - * Method: buttonClick - * Check if a button was clicked, and fire the buttonclick event - * - * Parameters: - * evt - {Event} - */ - buttonClick: function(evt) { - var propagate = true, - element = OpenLayers.Event.element(evt); - if (element && (OpenLayers.Event.isLeftClick(evt) || !~evt.type.indexOf("mouse"))) { - // was a button pressed? - var button = this.getPressedButton(element); - if (button) { - if (evt.type === "keydown") { - switch (evt.keyCode) { - case OpenLayers.Event.KEY_RETURN: - case OpenLayers.Event.KEY_SPACE: - this.target.triggerEvent("buttonclick", { - buttonElement: button - }); - OpenLayers.Event.stop(evt); - propagate = false; - break; - } - } else if (this.startEvt) { - if (this.completeRegEx.test(evt.type)) { - var pos = OpenLayers.Util.pagePosition(button); - var viewportElement = OpenLayers.Util.getViewportElement(); - var scrollTop = window.pageYOffset || viewportElement.scrollTop; - var scrollLeft = window.pageXOffset || viewportElement.scrollLeft; - pos[0] = pos[0] - scrollLeft; - pos[1] = pos[1] - scrollTop; - - this.target.triggerEvent("buttonclick", { - buttonElement: button, - buttonXY: { - x: this.startEvt.clientX - pos[0], - y: this.startEvt.clientY - pos[1] - } - }); - } - if (this.cancelRegEx.test(evt.type)) { - delete this.startEvt; - } - OpenLayers.Event.stop(evt); - propagate = false; - } - if (this.startRegEx.test(evt.type)) { - this.startEvt = evt; - OpenLayers.Event.stop(evt); - propagate = false; - } - } else { - propagate = !this.ignore(OpenLayers.Event.element(evt)); - delete this.startEvt; - } - } - return propagate; - } - -}); diff --git a/misc/openlayers/lib/OpenLayers/Events/featureclick.js b/misc/openlayers/lib/OpenLayers/Events/featureclick.js deleted file mode 100644 index 9ae6ec5..0000000 --- a/misc/openlayers/lib/OpenLayers/Events/featureclick.js +++ /dev/null @@ -1,321 +0,0 @@ -/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for - * full list of contributors). Published under the 2-clause BSD license. - * See license.txt in the OpenLayers distribution or repository for the - * full text of the license. */ - -/** - * @requires OpenLayers/Events.js - */ - -/** - * Class: OpenLayers.Events.featureclick - * - * Extension event type for handling feature click events, including overlapping - * features. - * - * Event types provided by this extension: - * - featureclick - */ -OpenLayers.Events.featureclick = OpenLayers.Class({ - - /** - * Property: cache - * {Object} A cache of features under the mouse. - */ - cache: null, - - /** - * Property: map - * {<OpenLayers.Map>} The map to register browser events on. - */ - map: null, - - /** - * Property: provides - * {Array(String)} The event types provided by this extension. - */ - provides: ["featureclick", "nofeatureclick", "featureover", "featureout"], - - /** - * Constructor: OpenLayers.Events.featureclick - * Create a new featureclick event type. - * - * Parameters: - * target - {<OpenLayers.Events>} The events instance to create the events - * for. - */ - initialize: function(target) { - this.target = target; - if (target.object instanceof OpenLayers.Map) { - this.setMap(target.object); - } else if (target.object instanceof OpenLayers.Layer.Vector) { - if (target.object.map) { - this.setMap(target.object.map); - } else { - target.object.events.register("added", this, function(evt) { - this.setMap(target.object.map); - }); - } - } else { - throw("Listeners for '" + this.provides.join("', '") + - "' events can only be registered for OpenLayers.Layer.Vector " + - "or OpenLayers.Map instances"); - } - for (var i=this.provides.length-1; i>=0; --i) { - target.extensions[this.provides[i]] = true; - } - }, - - /** - * Method: setMap - * - * Parameters: - * map - {<OpenLayers.Map>} The map to register browser events on. - */ - setMap: function(map) { - this.map = map; - this.cache = {}; - map.events.register("mousedown", this, this.start, {extension: true}); - map.events.register("mouseup", this, this.onClick, {extension: true}); - map.events.register("touchstart", this, this.start, {extension: true}); - map.events.register("touchmove", this, this.cancel, {extension: true}); - map.events.register("touchend", this, this.onClick, {extension: true}); - map.events.register("mousemove", this, this.onMousemove, {extension: true}); - }, - - /** - * Method: start - * Sets startEvt = evt. - * - * Parameters: - * evt - {<OpenLayers.Event>} - */ - start: function(evt) { - this.startEvt = evt; - }, - - /** - * Method: cancel - * Deletes the start event. - * - * Parameters: - * evt - {<OpenLayers.Event>} - */ - cancel: function(evt) { - delete this.startEvt; - }, - - /** - * Method: onClick - * Listener for the click event. - * - * Parameters: - * evt - {<OpenLayers.Event>} - */ - onClick: function(evt) { - if (!this.startEvt || evt.type !== "touchend" && - !OpenLayers.Event.isLeftClick(evt)) { - return; - } - var features = this.getFeatures(this.startEvt); - delete this.startEvt; - // fire featureclick events - var feature, layer, more, clicked = {}; - for (var i=0, len=features.length; i<len; ++i) { - feature = features[i]; - layer = feature.layer; - clicked[layer.id] = true; - more = this.triggerEvent("featureclick", {feature: feature}); - if (more === false) { - break; - } - } - // fire nofeatureclick events on all vector layers with no targets - for (i=0, len=this.map.layers.length; i<len; ++i) { - layer = this.map.layers[i]; - if (layer instanceof OpenLayers.Layer.Vector && !clicked[layer.id]) { - this.triggerEvent("nofeatureclick", {layer: layer}); - } - } - }, - - /** - * Method: onMousemove - * Listener for the mousemove event. - * - * Parameters: - * evt - {<OpenLayers.Event>} - */ - onMousemove: function(evt) { - delete this.startEvt; - var features = this.getFeatures(evt); - var over = {}, newly = [], feature; - for (var i=0, len=features.length; i<len; ++i) { - feature = features[i]; - over[feature.id] = feature; - if (!this.cache[feature.id]) { - newly.push(feature); - } - } - // check if already over features - var out = []; - for (var id in this.cache) { - feature = this.cache[id]; - if (feature.layer && feature.layer.map) { - if (!over[feature.id]) { - out.push(feature); - } - } else { - // removed - delete this.cache[id]; - } - } - // fire featureover events - var more; - for (i=0, len=newly.length; i<len; ++i) { - feature = newly[i]; - this.cache[feature.id] = feature; - more = this.triggerEvent("featureover", {feature: feature}); - if (more === false) { - break; - } - } - // fire featureout events - for (i=0, len=out.length; i<len; ++i) { - feature = out[i]; - delete this.cache[feature.id]; - more = this.triggerEvent("featureout", {feature: feature}); - if (more === false) { - break; - } - } - }, - - /** - * Method: triggerEvent - * Determines where to trigger the event and triggers it. - * - * Parameters: - * type - {String} The event type to trigger - * evt - {Object} The listener argument - * - * Returns: - * {Boolean} The last listener return. - */ - triggerEvent: function(type, evt) { - var layer = evt.feature ? evt.feature.layer : evt.layer, - object = this.target.object; - if (object instanceof OpenLayers.Map || object === layer) { - return this.target.triggerEvent(type, evt); - } - }, - - /** - * Method: getFeatures - * Get all features at the given screen location. - * - * Parameters: - * evt - {Object} Event object. - * - * Returns: - * {Array(<OpenLayers.Feature.Vector>)} List of features at the given point. - */ - getFeatures: function(evt) { - var x = evt.clientX, y = evt.clientY, - features = [], targets = [], layers = [], - layer, target, feature, i, len; - // go through all layers looking for targets - for (i=this.map.layers.length-1; i>=0; --i) { - layer = this.map.layers[i]; - if (layer.div.style.display !== "none") { - if (layer.renderer instanceof OpenLayers.Renderer.Elements) { - if (layer instanceof OpenLayers.Layer.Vector) { - target = document.elementFromPoint(x, y); - while (target && target._featureId) { - feature = layer.getFeatureById(target._featureId); - if (feature) { - features.push(feature); - target.style.display = "none"; - targets.push(target); - target = document.elementFromPoint(x, y); - } else { - // sketch, all bets off - target = false; - } - } - } - layers.push(layer); - layer.div.style.display = "none"; - } else if (layer.renderer instanceof OpenLayers.Renderer.Canvas) { - feature = layer.renderer.getFeatureIdFromEvent(evt); - if (feature) { - features.push(feature); - layers.push(layer); - } - } - } - } - // restore feature visibility - for (i=0, len=targets.length; i<len; ++i) { - targets[i].style.display = ""; - } - // restore layer visibility - for (i=layers.length-1; i>=0; --i) { - layers[i].div.style.display = "block"; - } - return features; - }, - - /** - * APIMethod: destroy - * Clean up. - */ - destroy: function() { - for (var i=this.provides.length-1; i>=0; --i) { - delete this.target.extensions[this.provides[i]]; - } - this.map.events.un({ - mousemove: this.onMousemove, - mousedown: this.start, - mouseup: this.onClick, - touchstart: this.start, - touchmove: this.cancel, - touchend: this.onClick, - scope: this - }); - delete this.cache; - delete this.map; - delete this.target; - } - -}); - -/** - * Class: OpenLayers.Events.nofeatureclick - * - * Extension event type for handling click events that do not hit a feature. - * - * Event types provided by this extension: - * - nofeatureclick - */ -OpenLayers.Events.nofeatureclick = OpenLayers.Events.featureclick; - -/** - * Class: OpenLayers.Events.featureover - * - * Extension event type for handling hovering over a feature. - * - * Event types provided by this extension: - * - featureover - */ -OpenLayers.Events.featureover = OpenLayers.Events.featureclick; - -/** - * Class: OpenLayers.Events.featureout - * - * Extension event type for handling leaving a feature. - * - * Event types provided by this extension: - * - featureout - */ -OpenLayers.Events.featureout = OpenLayers.Events.featureclick; |