summaryrefslogtreecommitdiff
path: root/misc/openlayers/lib/OpenLayers/Events
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/lib/OpenLayers/Events')
-rw-r--r--misc/openlayers/lib/OpenLayers/Events/buttonclick.js206
-rw-r--r--misc/openlayers/lib/OpenLayers/Events/featureclick.js321
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;