///<reference path="./IMacroFilter.ts" />
///<reference path="../SourceHelper.ts" />
var econda;
(function (econda) {
    var tagmanager;
    (function (tagmanager) {
        var macro;
        (function (macro) {
            var filter;
            (function (filter) {
                var SourceHelper = econda.tagmanager.macro.SourceHelper;
                /**
                 * StringFilter class applies filter rules to macros of type "string"
                 * @class econda.tagmanager.macro.filter.StringFilter
                 */
                var HtmlElementFilter = (function () {
                    function HtmlElementFilter() {
                    }
                    HtmlElementFilter.prototype.getFilteredValue = function (macroDefinition, element) {
                        var propertyName;
                        var s = SourceHelper.parse(macroDefinition.patternSourceName);
                        if (s.property !== null) {
                            propertyName = s.property;
                        }
                        else {
                            propertyName = this._getDefaultPropertyNameForElement(element);
                        }
                        return this._readPropertyValue(element, propertyName);
                    };
                    HtmlElementFilter.prototype._readPropertyValue = function (el, propertyName) {
                        switch (propertyName.toLocaleLowerCase()) {
                            case 'text':
                                return el.innerText || el.textContent;
                            case 'html':
                                return el.innerHTML;
                            case 'id':
                                return el.id;
                            case 'value':
                                return el.value;
                            default:
                                return el.getAttribute(propertyName);
                        }
                    };
                    HtmlElementFilter.prototype._getDefaultPropertyNameForElement = function (el) {
                        var tagName = el.tagName;
                        var property;
                        switch (tagName.toLocaleLowerCase()) {
                            case 'input':
                                property = 'value';
                                break;
                            default:
                                property = 'text';
                        }
                        return property;
                    };
                    return HtmlElementFilter;
                }());
                filter.HtmlElementFilter = HtmlElementFilter;
            })(filter = macro.filter || (macro.filter = {}));
        })(macro = tagmanager.macro || (tagmanager.macro = {}));
    })(tagmanager = econda.tagmanager || (econda.tagmanager = {}));
})(econda || (econda = {}));