Source: BKGWebMap/Control/Permalink.js

/*
 * Copyright (c) 2013 Bundesamt für Kartographie und Geodäsie.
 * See license.txt in the BKG WebMap distribution or repository for the
 * full text of the license.
 *
 * Author: Dirk Thalheim
 */

/**
 * @requires OpenLayers/BaseTypes/Class.js
 * @requires OpenLayers/Control/Permalink.js
 * @requires BKGWebMap/Control.js
 */

/**
 * @classdesc Permalink-Element mit erweiterterten Möglichkeiten zur Konfiguration der Anzeige.
 *
 * Ein Permalink-Element generiert einen Link/URL auf die aktuelle Kartenansicht (Center-Koordinate, Zoomlevel und
 * ausgewählte Layer.
 *
 * @constructor BKGWebMap.Control.Permalink
 * @param {object} options - Optionen für das Controlelement
 */
BKGWebMap.Control.Permalink = OpenLayers.Class(OpenLayers.Control.Permalink, {

    /**
     * Linktext
     * @memberOf BKGWebMap.Control.Permalink
     */
    label: "Karten-Link",

    /**
     * Tooltip
     * @memberOf BKGWebMap.Control.Permalink
     */
    title: "Link für aktuellen Kartenausschnitt",

    initialize:function(options) {
        options = options || {};
        var element = options.element || null;
        var base = options.base || null;
        OpenLayers.Control.Permalink.prototype.initialize.apply(this, [element, base, options]);
    },

    /**
     * Erzeugt das HTML-Element und Kontainer für den Permalink
     *
     * @memberOf BKGWebMap.Control.Permalink
     * @return {HTMLElement} Kontainer für Permalink
     */
    draw: function() {
        OpenLayers.Control.prototype.draw.apply(this, arguments);

        if (!this.element && !this.anchor) {
            this.element = document.createElement("a");
            this.element.innerHTML = this.label;
            this.element.href="";
            this.div.appendChild(this.element);
        }

        this.map.events.on({
            'moveend': this.updateLink,
            'changelayer': this.updateLink,
            'changebaselayer': this.updateLink,
            scope: this
        });

        // Make it so there is at least a link even though the map may not have
        // moved yet.
        this.updateLink();

        return this.div;
    },

    CLASS_NAME: "BKGWebMap.Control.Permalink"
});

/**
 * Factory-Funktion zur Generierung eines PermaLink Steuerelement.
 * @param {Array<OpenLayers.Control>} controls - Liste der Steuerelemente, in die die neue erzeugten Steuerelemente
 *                                               eingefügt werden sollen.
 * @param {boolean} enabled
 */
BKGWebMap.Control.FACTORIES['permaLink'] = function(controls, enabled) {
    if (!enabled) return;
    controls.push(new BKGWebMap.Control.Permalink());
};