UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

196 lines (158 loc) • 6.29 kB
"use strict"; var $ = require("../../core/renderer"), domAdapter = require("../../core/dom_adapter"), windowUtils = require("./window"), window = windowUtils.getWindow(), eventsEngine = require("../../events/core/events_engine"), errors = require("../errors"), inArray = require("./array").inArray, typeUtils = require("./type"), isDefined = typeUtils.isDefined, isRenderer = typeUtils.isRenderer, htmlParser = require("../../core/utils/html_parser"), elementStrategy; var resetActiveElement = function resetActiveElement() { var activeElement = domAdapter.getActiveElement(); if (activeElement && activeElement !== domAdapter.getBody() && activeElement.blur) { activeElement.blur(); } }; var clearSelection = function clearSelection() { var selection = window.getSelection(); if (!selection) return; if (selection.type === "Caret") return; if (selection.empty) { selection.empty(); } else if (selection.removeAllRanges) { // T522811 try { selection.removeAllRanges(); } catch (e) {} } }; var closestCommonParent = function closestCommonParent(startTarget, endTarget) { var $startTarget = $(startTarget), $endTarget = $(endTarget); if ($startTarget[0] === $endTarget[0]) { return $startTarget[0]; } var $startParents = $startTarget.parents(), $endParents = $endTarget.parents(), startingParent = Math.min($startParents.length, $endParents.length); for (var i = -startingParent; i < 0; i++) { if ($startParents.get(i) === $endParents.get(i)) { return $startParents.get(i); } } }; var triggerVisibilityChangeEvent = function triggerVisibilityChangeEvent(eventName) { var VISIBILITY_CHANGE_SELECTOR = ".dx-visibility-change-handler"; return function (element) { var $element = $(element || "body"); var changeHandlers = $element.filter(VISIBILITY_CHANGE_SELECTOR).add($element.find(VISIBILITY_CHANGE_SELECTOR)); for (var i = 0; i < changeHandlers.length; i++) { eventsEngine.triggerHandler(changeHandlers[i], eventName); } }; }; var uniqueId = function () { var counter = 0; return function (prefix) { return (prefix || "") + counter++; }; }(); var dataOptionsAttributeName = "data-options"; var getElementOptions = function getElementOptions(element) { /* jshint evil:true */ var optionsString = $(element).attr(dataOptionsAttributeName) || "", result; if (optionsString.trim().charAt(0) !== "{") { optionsString = "{" + optionsString + "}"; } try { result = new Function("return " + optionsString)(); } catch (ex) { throw errors.Error("E3018", ex, optionsString); } return result; }; var createComponents = function createComponents(elements, componentTypes) { var result = [], selector = "[" + dataOptionsAttributeName + "]"; var $items = elements.find(selector).add(elements.filter(selector)); $items.each(function (index, element) { var $element = $(element), options = getElementOptions(element); for (var componentName in options) { if (!componentTypes || inArray(componentName, componentTypes) > -1) { if ($element[componentName]) { $element[componentName](options[componentName]); result.push($element[componentName]("instance")); } } } }); return result; }; var createMarkupFromString = function createMarkupFromString(str) { if (!window.WinJS) { return $(htmlParser.parseHTML(str)); } var tempElement = $("<div>"); // otherwise WinJS browser strips HTML comments required for KO window.WinJS.Utilities.setInnerHTMLUnsafe(tempElement.get(0), str); return tempElement.contents(); }; var normalizeTemplateElement = function normalizeTemplateElement(element) { var $element = isDefined(element) && (element.nodeType || isRenderer(element)) ? $(element) : $("<div>").html(element).contents(); if ($element.length === 1) { if ($element.is("script")) { $element = normalizeTemplateElement($element.html().trim()); } else if ($element.is("table")) { $element = $element.children("tbody").contents(); } } return $element; }; var toggleAttr = function toggleAttr($target, attr, value) { value ? $target.attr(attr, value) : $target.removeAttr(attr); }; var clipboardText = function clipboardText(event, text) { var clipboard = event.originalEvent && event.originalEvent.clipboardData || window.clipboardData; if (arguments.length === 1) { return clipboard && clipboard.getData("Text"); } clipboard && clipboard.setData("Text", text); }; var contains = function contains(container, element) { if (!element) { return false; } element = domAdapter.isTextNode(element) ? element.parentNode : element; return domAdapter.isDocument(container) ? container.body.contains(element) : container.contains(element); }; var getPublicElement = function getPublicElement($element) { return elementStrategy($element); }; var setPublicElementWrapper = function setPublicElementWrapper(value) { elementStrategy = value; }; setPublicElementWrapper(function (element) { return element && element.get(0); }); exports.setPublicElementWrapper = setPublicElementWrapper; exports.resetActiveElement = resetActiveElement; exports.createMarkupFromString = createMarkupFromString; exports.triggerShownEvent = triggerVisibilityChangeEvent("dxshown"); exports.triggerHidingEvent = triggerVisibilityChangeEvent("dxhiding"); exports.triggerResizeEvent = triggerVisibilityChangeEvent("dxresize"); exports.getElementOptions = getElementOptions; exports.createComponents = createComponents; exports.normalizeTemplateElement = normalizeTemplateElement; exports.clearSelection = clearSelection; exports.uniqueId = uniqueId; exports.closestCommonParent = closestCommonParent; exports.clipboardText = clipboardText; exports.toggleAttr = toggleAttr; exports.contains = contains; exports.getPublicElement = getPublicElement;