@aurigma/design-atoms-model
Version:
Design Atoms is a part of Customer's Canvas SDK which allows for manipulating individual design elements through your code.
662 lines • 26.8 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
import { Exception, ArgumentException } from "../Exception";
import { Uuid } from "../Product/Uuid";
import * as _ from "underscore";
import Environment from "../Utils/Environment";
import { cloneDeep } from "lodash-es";
import { EqualsOfFloatNumbers } from "../Math";
export function mmToPoint(millimeters) { return millimeters * 2.83464567; }
;
export function stringEquals(str1, str2, options) {
var ignoreCase = false;
if (options != null)
ignoreCase = typeof options === "boolean" ?
options
: options.ignoreCase;
str1 = ignoreCase ? str1.toLowerCase() : str1;
str2 = ignoreCase ? str2.toLowerCase() : str2;
return str1 === str2;
}
export function assert(expression, message) {
if (message != null)
message = "Assertion failed";
if (!expression)
throw new Exception(message);
}
export function urlCombine(startUrl) {
var urlParts = [];
for (var _i = 1; _i < arguments.length; _i++) {
urlParts[_i - 1] = arguments[_i];
}
var endUrl = urlParts.pop();
if (urlParts.length === 0 && endUrl === "")
return startUrl;
var separatorChar = "/";
endUrl = endUrl.replace(/^(\/|\s)+/g, "");
startUrl = startUrl.replace(/(\/|\s)+$/g, "");
if (urlParts.length === 0) {
return startUrl + separatorChar + endUrl;
}
else {
var trimedArgs = urlParts.map(function (arg) { return arg.replace(/^(\/|\s)+/g, "").replace(/(\/|\s)+$/g, ""); });
return _.flatten([startUrl, trimedArgs, endUrl]).join(separatorChar);
}
}
export function contains(str1, str2) {
return str1 != null && str2 != null && str1.toLowerCase().indexOf(str2.toLowerCase()) !== -1;
}
;
export function equals(obj1, obj2) {
if (obj1 == null && obj2 == null)
return true;
if ((obj1 == null && obj2 != null) || (obj1 != null && obj2 == null))
return false;
var typeof1 = typeof obj1;
var typeof2 = typeof obj2;
if (typeof1 !== typeof2)
return false;
if (typeof1 === "string" || typeof1 === "boolean")
return obj1 === obj2;
if (typeof1 === "number")
return EqualsOfFloatNumbers(obj1, obj2);
if (Array.isArray(obj1) && Array.isArray(obj2)) {
if (obj1.length !== obj2.length)
return false;
return arrayEquals(obj1, obj2);
}
var equalFunc;
var obj1equalsReady = obj1;
var obj2equalsReady = obj2;
if (typeof obj1equalsReady.equals === "function" && typeof obj2equalsReady.equals === "function")
equalFunc = function (obj1, obj2) { return obj1.equals(obj2); };
else
equalFunc = function (obj1, obj2) { return obj1 == obj2; };
return equalFunc(obj1, obj2);
}
export function arrayEquals(obj1, obj2) {
if (obj1 == null && obj2 == null)
return true;
if (obj1 == null || obj2 == null)
return false;
if (obj1.length !== obj2.length)
return false;
return obj1.reduce(function (result, value, index) {
return result && equals(value, obj2[index]);
}, true);
}
export function arrayReferenceEquals(obj1, obj2) {
if ((obj1 === null || obj1 === void 0 ? void 0 : obj1.length) !== (obj2 === null || obj2 === void 0 ? void 0 : obj2.length))
return false;
return obj1.reduce(function (result, value, index) {
return result && value == obj2[index];
}, true);
}
export function isNullOrEmptyOrWhiteSpace(str) {
if (str == null)
return true;
return str.trim() === "";
}
export function capitalize(word) {
if (word == null || word.length === 0 || /[A-Z]/.test(word[0]))
return word;
return word[0].toUpperCase() + word.substr(1);
}
export function isValidXml(str, fixAmpsEnabled) {
if (fixAmpsEnabled === void 0) { fixAmpsEnabled = true; }
if (isNullOrEmptyOrWhiteSpace(str) || !str.startsWith("<"))
return false;
if (fixAmpsEnabled)
str = fixAmps(str);
var xmlDoc = new DOMParser().parseFromString("<root>" + str + "</root>", "application/xml");
return xmlDoc.querySelector("parsererror") == null;
}
function fixAmps(str) {
if (isNullOrEmptyOrWhiteSpace(str) || !str.startsWith("<"))
return str;
var strParts = [str];
while (true) {
var lastPart = strParts.pop();
var ampIndex = lastPart.indexOf("&");
if (ampIndex === -1) {
strParts.push(lastPart);
break;
}
strParts.push(lastPart.substring(0, ampIndex));
var ampEntity = getAmpEntity(lastPart, ampIndex);
if (ampEntity != null) {
strParts.push(ampEntity.entity);
strParts.push(lastPart.substring(ampIndex + ampEntity.length));
}
else {
strParts.push("&");
strParts.push(lastPart.substring(ampIndex + 1));
}
}
return strParts.join('');
}
function getAmpEntity(str, index) {
var substring4 = str.substring(index, index + 4).toLowerCase();
if (substring4 == "<")
return { entity: "<", length: 4 };
else if (substring4 == ">")
return { entity: ">", length: 4 };
var substring5 = str.substring(index, index + 5).toLowerCase();
if (substring5 == "&")
return { entity: "&", length: 5 };
var substring6 = str.substring(index, index + 6).toLowerCase();
if (substring6 == "'")
return { entity: "'", length: 6 };
if (substring6 == """)
return { entity: """, length: 6 };
var substring7 = str.substring(index, index + 7).toLowerCase();
if (substring7.match(/^&#[\\d]{4};$$/)) { // 
return { entity: substring7, length: 7 };
}
var substring8 = str.substring(index, index + 8);
if (substring8.toLowerCase().match(/^&#x[\\dabcdef]{4};$/)) // «
return { entity: substring8, length: 8 };
return null;
}
export function getTextFromXml(xmlFormattedText, replaceParagraphString) {
var e_1, _a, e_2, _b;
if (replaceParagraphString === void 0) { replaceParagraphString = " "; }
var domParser = new DOMParser();
xmlFormattedText = fixAmps(xmlFormattedText);
var xmlObject = domParser.parseFromString("<root>" + xmlFormattedText + "</root>", "application/xml");
var parseError = xmlObject.querySelector("parsererror");
if (parseError == null) {
try {
for (var _c = __values(Array.from(xmlObject.querySelectorAll("br"))), _d = _c.next(); !_d.done; _d = _c.next()) {
var br = _d.value;
br.textContent = replaceParagraphString;
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_1) throw e_1.error; }
}
var paragraphArray = Array.from(xmlObject.querySelectorAll("p, li"));
if (paragraphArray.length > 1) {
var paragraphArrayWithoutLastElement = _.without(paragraphArray, paragraphArray[paragraphArray.length - 1]);
try {
for (var paragraphArrayWithoutLastElement_1 = __values(paragraphArrayWithoutLastElement), paragraphArrayWithoutLastElement_1_1 = paragraphArrayWithoutLastElement_1.next(); !paragraphArrayWithoutLastElement_1_1.done; paragraphArrayWithoutLastElement_1_1 = paragraphArrayWithoutLastElement_1.next()) {
var el = paragraphArrayWithoutLastElement_1_1.value;
var spaceSpan = document.createElementNS("application/xml", "span");
spaceSpan.textContent = replaceParagraphString;
el.appendChild(spaceSpan);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (paragraphArrayWithoutLastElement_1_1 && !paragraphArrayWithoutLastElement_1_1.done && (_b = paragraphArrayWithoutLastElement_1.return)) _b.call(paragraphArrayWithoutLastElement_1);
}
finally { if (e_2) throw e_2.error; }
}
}
return xmlObject.querySelector("root").textContent;
}
else {
console.warn("Bad value xmlObject", xmlObject, parseError.innerHTML);
return escapeXml(xmlFormattedText);
}
}
export function unescapeXml(str) {
var stringForParse = "<span>" + str + "</span>";
if (isValidXml(stringForParse, false)) {
var xmlDoc = new DOMParser().parseFromString(stringForParse, "application/xml");
var span = xmlDoc.querySelector("span");
return span.textContent;
}
else {
return str;
}
}
export function escapeXml(str) {
var xmlDoc = new DOMParser().parseFromString("<span></span>", "application/xml");
var span = xmlDoc.querySelector("span");
span.textContent = str;
var escapedString = (new XMLSerializer()).serializeToString(xmlDoc);
escapedString = escapedString.replace("<span>", "").replace("</span>", "").replace("<span/>", "").replace("<span />", "");
return escapedString;
}
export function stringFormat(str) {
var args = Array.prototype.slice.call(arguments);
args.splice(0, 1);
return str.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
}
export function pushArray(array, pushValues) {
Array.prototype.push.apply(array, pushValues);
}
export function getCurrentLineInTextArea(element) {
var textLines = element.value.split("\n");
var selectionStart = element.selectionStart;
var lineInitialPosition = 0;
for (var i = 0; i < textLines.length; i++) {
if (lineInitialPosition + textLines[i].length >= selectionStart) {
return textLines[i];
}
lineInitialPosition += textLines[i].length + 1;
}
}
export function flatten(nestedCollec) {
var e_3, _a;
var flattentArray = [];
if (nestedCollec instanceof Array)
try {
for (var nestedCollec_1 = __values(nestedCollec), nestedCollec_1_1 = nestedCollec_1.next(); !nestedCollec_1_1.done; nestedCollec_1_1 = nestedCollec_1.next()) {
var innerArray = nestedCollec_1_1.value;
flattentArray.push.apply(flattentArray, __spread(innerArray));
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (nestedCollec_1_1 && !nestedCollec_1_1.done && (_a = nestedCollec_1.return)) _a.call(nestedCollec_1);
}
finally { if (e_3) throw e_3.error; }
}
return flattentArray;
}
export function createCssDataUri(css) {
return "data:text/css," + encodeURI(css);
}
//function and css class are from bootstrap library
export function measureScrollbar() {
var scrollDiv = document.createElement('div');
scrollDiv.className = 'modal-scrollbar-measure';
document.body.appendChild(scrollDiv);
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
}
export function getHiddenElemenHeight(el) {
var hiddenElement = el.cloneNode();
document.body.appendChild(hiddenElement);
var style = getComputedStyle(hiddenElement);
var height = hiddenElement.offsetHeight + parseFloat(style.marginTop) + parseFloat(style.marginBottom);
hiddenElement.remove();
return height;
}
;
/**
* @param element Element contains twitter bootstrap dropdown
* @param getFocusElement Function returns element to be focused after dropdown expand
*/
export function enableMoveDropDownFocus(element, getFocusElement) {
element.querySelectorAll('[data-toggle="dropdown"]').forEach(function (element) {
element.parentElement.addEventListener("shown.bs.dropdown", function () {
getFocusElement().focus();
});
});
}
export function timeout(delay) {
if (delay == null)
delay = 0;
return new Promise(function (resolve) { return setTimeout(resolve, delay); });
}
export var delay = timeout;
var objectUniqueIdsMap = new Map();
export function getUniqueId(object) {
if (object == null)
return null;
if (!objectUniqueIdsMap.has(object))
objectUniqueIdsMap.set(object, new Uuid().value);
return objectUniqueIdsMap.get(object);
}
export function getFontNames(text) {
var fontNames = [];
text = fixAmps(text);
if (isValidXml(text, false)) {
try {
if (text != null)
walkNodes(text, ["span", "ol", "ul"], parseSizeableNode);
}
catch (ex) {
console.error("Unexpected exception while parsing item text");
console.error(ex);
}
}
return _.unique(fontNames);
//#region local funcs
function parseSizeableNode(element) {
var style = parseXmlStyle(element);
if (style != null && style.has("font-name"))
fontNames.push(style.get("font-name"));
}
function parseXmlStyle(element) {
var e_4, _a;
var styleAttr = element.attributes.getNamedItem("style");
if (styleAttr == null || styleAttr.value == null)
return null;
var nodeStyleParts = styleAttr.value.split(";");
var styleMap = new Map();
try {
for (var nodeStyleParts_1 = __values(nodeStyleParts), nodeStyleParts_1_1 = nodeStyleParts_1.next(); !nodeStyleParts_1_1.done; nodeStyleParts_1_1 = nodeStyleParts_1.next()) {
var stylePart = nodeStyleParts_1_1.value;
stylePart = stylePart.trim();
if (stylePart == null || stylePart === "")
continue;
var content = stylePart.split(":");
var key = content[0].trim();
var value = content[1].trim();
styleMap.set(key, value);
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (nodeStyleParts_1_1 && !nodeStyleParts_1_1.done && (_a = nodeStyleParts_1.return)) _a.call(nodeStyleParts_1);
}
finally { if (e_4) throw e_4.error; }
}
return styleMap;
}
function walkNodes(gmXml, nodeNames, parseNode) {
var xmlDoc = new DOMParser().parseFromString("<body>" + gmXml + "</body>", "application/xml");
var filter = {
acceptNode: function (node) {
var nodeName = node.nodeName.toLowerCase();
return nodeNames.includes(nodeName) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
}
};
if (Environment.IsIE())
filter = makeIeCompatible(filter);
var walker = document.createTreeWalker(xmlDoc.childNodes[0], NodeFilter.SHOW_ELEMENT, filter, false);
while (walker.nextNode()) {
var node = walker.currentNode;
parseNode(node);
}
function makeIeCompatible(filter) {
return filter.acceptNode;
}
}
//#endregion
}
export function assign(target, sources, options) {
options = normalize(options);
if (options.ignoreNull) {
for (var i = 0; i < sources.length; i++) {
var source = cloneDeep(sources[i]);
//$.extend ignores undefined in the source, but not null
removeNulls(source);
sources[i] = source;
}
}
return options.deep
? deepExtend.apply(void 0, __spread([target], sources)) : Object.assign.apply(Object, __spread([target], sources));
function deepExtend(target) {
var sources = [];
for (var _i = 1; _i < arguments.length; _i++) {
sources[_i - 1] = arguments[_i];
}
var extendedObj = target;
var sourceObj = __spread(sources);
var merge = function (obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (typeof obj[prop] === "object" && extendedObj[prop] != null) {
if (typeof extendedObj[prop] === "object")
extendedObj[prop] = deepExtend(extendedObj[prop], obj[prop]);
else
extendedObj = obj[prop];
}
else {
extendedObj[prop] = obj[prop];
}
}
}
};
for (var i = 0; i < sourceObj.length; i++) {
var obj = sourceObj[i];
merge(obj);
}
return extendedObj;
}
;
function normalize(op) {
if (op == null)
op = {};
_.defaults(op, { deep: false, ignoreNull: true });
return op;
}
function removeNulls(source) {
var e_5, _a;
try {
for (var _b = __values(Object.keys(source)), _c = _b.next(); !_c.done; _c = _b.next()) {
var propName = _c.value;
var property = source[propName];
if (property === null) {
if (source.hasOwnProperty(propName))
delete source[propName];
else
source[propName] = undefined;
}
else if (typeof property === "object") {
removeNulls(property);
}
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_5) throw e_5.error; }
}
}
}
export function assignProperties(target, propObject) {
return assign(target, [propObject], { deep: true });
}
export function normalize(paramObject, defaults) {
if (paramObject == null)
paramObject = {};
_.defaults(paramObject, defaults);
return paramObject;
}
export function toDashedStyle(camleCase) {
return camleCase.replace(/([A-Z])/g, function (segment) { return "-" + segment.toLowerCase(); });
}
export function getStringEnumValue(enumObject, enumValue) {
var propertyNames = Object.getOwnPropertyNames(enumObject);
return propertyNames[propertyNames
.map(function (i) { return enumObject[i].toString().toLowerCase(); })
.indexOf(enumValue.toLowerCase())];
}
export function strToInt(str) {
var value = parseInt(str);
if (_.isEmpty(str) || isNaN(value) || !isFinite(value))
return null;
return value;
}
export function localStorageEnabled() {
var test = "test";
try {
localStorage.setItem(test, test);
localStorage.removeItem(test);
return true;
}
catch (e) {
return false;
}
}
/**
* @deprecated The method should not be used. User ImageUtils.getImageSizeByUrl from design-atoms module.
*/
export function getImageSize(imageUrl) {
return __awaiter(this, void 0, void 0, function () {
function toImageElement(url) {
return new Promise(function (resolve, reject) {
var img = new Image();
img.crossOrigin = "anonymous";
img.src = url;
img.onload = function () { return resolve(img); };
img.onerror = function (e) { return resolve(null); };
return img;
});
}
var imgElement;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, toImageElement(imageUrl)];
case 1:
imgElement = _a.sent();
return [2 /*return*/, { width: imgElement.width, height: imgElement.height }];
}
});
});
}
// export function pick<T, K extends keyof T>(o: T, ...keys: K[]): Pick<T, K> {
// const t = _.pick(o, ...keys);
// return t;
// }
export function stripForJson(obj, omitProperties) {
if (omitProperties == null)
omitProperties = [];
else if (typeof omitProperties === "string")
omitProperties = [omitProperties];
var objectKeys = [];
// ReSharper disable once MissingHasOwnPropertyInForeach
for (var key in obj)
objectKeys.push(key);
var allowedKeys = objectKeys.filter(function (key) {
var e_6, _a;
try {
for (var _b = __values(["_", "$$"]), _c = _b.next(); !_c.done; _c = _b.next()) {
var forbiddenPrefix = _c.value;
if (key.startsWith(forbiddenPrefix))
return false;
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_6) throw e_6.error; }
}
if (omitProperties.some(function (p) { return p === key; }))
return false;
if (typeof obj[key] === "function")
return false;
return true;
});
return allowedKeys.reduce(function (strippedObject, currentKey) {
strippedObject[currentKey] = obj[currentKey];
return strippedObject;
}, {});
}
export function isFocused(element, _a) {
var _b = (_a === void 0 ? {} : _a).checkDocumentFocus, checkDocumentFocus = _b === void 0 ? false : _b;
var focused = document.activeElement === element;
return focused && (checkDocumentFocus ? document.hasFocus() : true);
}
export function getExtension(fileName) {
var nameParts = fileName.split(".");
return nameParts.length > 1 ? nameParts[nameParts.length - 1] : "";
}
export function getNameWithoutExtension(fileName) {
return fileName.split(".")[0];
}
export function applyNullableValue(actual, redefined) {
return redefined != null
? redefined
: actual;
}
export function applyUndefinedValue(actual, redefined) {
return redefined !== undefined
? redefined
: actual;
}
export function getLastPathSegment(path) {
if (isNullOrEmptyOrWhiteSpace(path))
return path;
if (!path.includes("/"))
return path;
var segments = path.split("/");
return _.last(segments);
}
export function parsePercentOrPointValue(point, printAreaSize) {
var result = null;
if (typeof point === "string" && /%$/.test(point)) {
var percent = Number(point.split(/%/)[0]);
result = printAreaSize * percent / 100;
}
else {
result = Number(point);
}
if (typeof result !== "number" || isNaN(result))
throw new ArgumentException("'" + point + "' is not a number or percent string");
return result;
}
//# sourceMappingURL=Utils.js.map