"use strict";
/**
 * EGroupware eTemplate2 - JS Timestamp button object
 *
 * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
 * @package etemplate
 * @subpackage api
 * @link http://www.egroupware.org
 * @author Nathan Gray
 * @copyright Nathan Gray 2017
 */
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", { value: true });
/*egw:uses
    et2_button;
*/
var et2_core_widget_1 = require("./et2_core_widget");
var et2_widget_button_1 = require("./et2_widget_button");
var et2_core_inheritance_1 = require("./et2_core_inheritance");
/**
 * Class which implements the "button-timestamper" XET-Tag
 *
 * Clicking the button puts the current time and current user at the end of
 * the provided field.
 *
 * @augments et2_button
 */
var et2_timestamper = /** @class */ (function (_super) {
    __extends(et2_timestamper, _super);
    function et2_timestamper(_parent, _attrs, _child) {
        var _this = 
        // Call the inherited constructor
        _super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_timestamper._attributes, _child || {})) || this;
        jQuery(_this.getDOMNode()).addClass('et2_timestamper');
        return _this;
    }
    /**
     * Overwritten to maintain an internal clicked attribute
     *
     * @param _ev
     * @returns {Boolean}
     */
    et2_timestamper.prototype.click = function (_ev) {
        // ignore click on readonly button
        if (this.options.readonly)
            return false;
        this._insert_text();
        return false;
    };
    et2_timestamper.prototype._insert_text = function () {
        var text = "";
        var now = new Date(new Date().toLocaleString('en-US', {
            timeZone: this.options.timezone ? this.options.timezone : egw.preference('tz')
        }));
        var format = (this.options.format ?
            this.options.format :
            egw.preference('dateformat') + ' ' + (egw.preference("timeformat") === "12" ? "h:ia" : "H:i")) + ' ';
        text += date(format, now);
        // Get properly formatted user name
        var user = parseInt(egw.user('account_id'));
        var accounts = egw.accounts('accounts');
        for (var j = 0; j < accounts.length; j++) {
            if (accounts[j]["value"] === user) {
                text += accounts[j]["label"];
                break;
            }
        }
        text += ': ';
        var widget = this._get_input(this.target);
        var input = widget.input ? widget.input : widget.getDOMNode();
        if (input.context) {
            input = input.get(0);
        }
        var scrollPos = input.scrollTop;
        var browser = ((input.selectionStart || input.selectionStart == "0") ?
            "standards" : (document["selection"] ? "ie" : false));
        var pos = 0;
        var tinymce = tinyMCE && tinyMCE.EditorManager.get(input.id) || false;
        // Find cursor or selection
        if (browser == "ie") {
            input.focus();
            var range = document["selection"].createRange();
            range.moveStart("character", -input.value.length);
            pos = range.text.length;
        }
        else if (browser == "standards") {
            pos = input.selectionStart;
        }
        // If tinymce, update it
        if (tinymce) {
            tinymce.insertContent(text);
        }
        else {
            // Insert the text
            var front = (input.value).substring(0, pos);
            var back = (input.value).substring(pos, input.value.length);
            input.value = front + text + back;
            // Clean up a little
            pos = pos + text.length;
            if (browser == "ie") {
                input.focus();
                var range = document["selection"].createRange();
                range.moveStart("character", -input.value.length);
                range.moveStart("character", pos);
                range.moveEnd("character", 0);
                range.select();
            }
            else if (browser == "standards") {
                input.selectionStart = pos;
                input.selectionEnd = pos;
                input.focus();
            }
            input.scrollTop = scrollPos;
            input.focus();
        }
        // If on a tab, switch to that tab so user can see it
        var tab = widget;
        while (tab._parent && tab._type != 'tabbox') {
            tab = tab._parent;
        }
        if (tab._type == 'tabbox')
            tab.activateTab(widget);
    };
    et2_timestamper.prototype._get_input = function (target) {
        var input = null;
        var widget = null;
        if (typeof target == 'string') {
            widget = this.getRoot().getWidgetById(target);
        }
        else if (target.instanceOf && target.instanceOf(et2_IInput)) {
            widget = target;
        }
        else if (typeof target == 'string' && target.indexOf('#') < 0 && jQuery('#' + this.target).is('input')) {
            input = this.target;
        }
        if (widget) {
            return widget;
        }
        if (input === null || input === void 0 ? void 0 : input.context) {
            input = input.get(0);
        }
        return input;
    };
    et2_timestamper._attributes = {
        target: {
            name: "Target field",
            type: "string",
            default: et2_no_init,
            description: "Which field to place the timestamp in"
        },
        format: {
            name: "Time format",
            type: "string",
            default: et2_no_init,
            description: "Format for the timestamp.  User is always after."
        },
        timezone: {
            name: "Timezone",
            type: "string",
            default: et2_no_init,
            description: "Timezone.  Default is user time."
        },
        statustext: {
            default: "Insert timestamp into description field"
        },
        image: {
            default: "timestamp"
        },
        background_image: {
            default: true
        }
    };
    return et2_timestamper;
}(et2_widget_button_1.et2_button));
et2_core_widget_1.et2_register_widget(et2_timestamper, ["button-timestamp", "timestamper"]);
//# sourceMappingURL=et2_widget_timestamper.js.map