430 lines
18 KiB
Plaintext
430 lines
18 KiB
Plaintext
import { h } from './core-800e68f4.js';
|
|
import { TiUtils } from '../ti-core-assets/lib/TiUtils';
|
|
import '../ti-core-assets/lib/TiFiles';
|
|
import { TiConsole } from '../ti-core-assets/lib/TiConsole';
|
|
import { TiLocalStorage } from '../ti-core-assets/lib/TiLocalStorage';
|
|
|
|
const style = document.createElement('style');
|
|
style.innerHTML = `
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: normal;
|
|
font-weight: 300;
|
|
src: local('Roboto Light'), local('Roboto-Light'), url(components/assets/fonts/font-roboto/Roboto_300_normal.woff) format('woff');
|
|
}
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: normal;
|
|
font-weight: 400;
|
|
src: local('Roboto'), local('Roboto-Regular'), url(components/assets/fonts/font-roboto/Roboto_400_normal.woff) format('woff');
|
|
}
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: normal;
|
|
font-weight: 500;
|
|
src: local('Roboto Medium'), local('Roboto-Medium'), url(components/assets/fonts/font-roboto/Roboto_500_normal.woff) format('woff');
|
|
}
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: normal;
|
|
font-weight: 700;
|
|
src: local('Roboto Bold'), local('Roboto-Bold'), url(components/assets/fonts/font-roboto/Roboto_700_normal.woff) format('woff');
|
|
}
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: italic;
|
|
font-weight: 300;
|
|
src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(components/assets/fonts/font-roboto/Roboto_300_italic.woff) format('woff');
|
|
}
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: italic;
|
|
font-weight: 400;
|
|
src: local('Roboto Italic'), local('Roboto-Italic'), url(components/assets/fonts/font-roboto/Roboto_400_italic.woff) format('woff');
|
|
}
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: italic;
|
|
font-weight: 500;
|
|
src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(components/assets/fonts/font-roboto/Roboto_500_italic.woff) format('woff');
|
|
}
|
|
@font-face {
|
|
font-family: 'Roboto';
|
|
font-style: italic;
|
|
font-weight: 700;
|
|
src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(components/assets/fonts/font-roboto/Roboto_700_italic.woff) format('woff');
|
|
}
|
|
`;
|
|
document.head.appendChild(style);
|
|
|
|
/**
|
|
* Copyright (c) 2019, Texas Instruments Incorporated
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of Texas Instruments Incorporated nor the names of
|
|
* its contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
/**
|
|
* Theme css switching using MutationObserver to the body attribute change.
|
|
* Only loaded once when added to the dom.
|
|
*/
|
|
//create ti-widget-theme-stylesheet on load, append to document
|
|
const style$1 = document.createElement('style');
|
|
style$1.setAttribute('title', 'ti-widget-theme-stylesheet');
|
|
const element = document.head || document.body;
|
|
element.appendChild(style$1);
|
|
style$1.sheet.insertRule('html {}', 0);
|
|
const styleSheet = style$1.sheet.cssRules[0].style;
|
|
// modify stylesheet/css variables on theme attribute change in body
|
|
const observer = new MutationObserver((mutations) => {
|
|
mutations.forEach(function (mutation) {
|
|
switch (document.body.getAttribute('theme')) {
|
|
case 'ti-theme':
|
|
styleSheet.setProperty('--theme-primary-color', '#cc0000');
|
|
styleSheet.setProperty('--theme-secondary-color', '#115566');
|
|
styleSheet.setProperty('--theme-alternative-color', '#990000');
|
|
styleSheet.setProperty('--theme-background-color', '#fff');
|
|
styleSheet.setProperty('--theme-font-color', '#231F20');
|
|
styleSheet.setProperty('--theme-header-font-color', '#231F20');
|
|
break;
|
|
case 'ti-dark':
|
|
styleSheet.setProperty('--theme-primary-color', '#990000');
|
|
styleSheet.setProperty('--theme-secondary-color', '#115566');
|
|
styleSheet.setProperty('--theme-alternative-color', '#990000');
|
|
styleSheet.setProperty('--theme-background-color', '#2f2f2f');
|
|
styleSheet.setProperty('--theme-font-color', '#f2f2f2');
|
|
styleSheet.setProperty('--theme-header-font-color', '#f2f2f2');
|
|
break;
|
|
}
|
|
});
|
|
});
|
|
observer.observe(document.body, {
|
|
attributes: true,
|
|
attributeFilter: ['theme']
|
|
});
|
|
|
|
/**
|
|
* Copyright (c) 2019-2020, Texas Instruments Incorporated
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of Texas Instruments Incorporated nor the names of
|
|
* its contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
/**
|
|
* `TiElementBase` provides the base implementation for TI elements.
|
|
*
|
|
* @customElement
|
|
* @isHidden
|
|
*/
|
|
class TiElementBase {
|
|
constructor(parent) {
|
|
this.parent = parent;
|
|
}
|
|
/**
|
|
* Returns true if the element is hosted in the designer, otherwise false.
|
|
*
|
|
* @return {boolean}
|
|
*/
|
|
isDesignerHosted() {
|
|
return !!TiUtils.rootWin.TIDesigner;
|
|
}
|
|
/**
|
|
* Parse the delimited string into an array.
|
|
*
|
|
* @param {undefined|string|Array<string>} text the input text
|
|
* @param delimiter the delimiter character
|
|
* @return {Array<string>} the array
|
|
*/
|
|
parseArray(text, delimiter) {
|
|
text = text || '';
|
|
// support arrays as well
|
|
if (text instanceof Array) {
|
|
return text;
|
|
}
|
|
// support using terminating character as a delimiter if one of [,;|].
|
|
// this means that if you want a blank element at the end of the list, you have to use a double terminator; for example, A|B|C||
|
|
if (!delimiter && text.length > 1) {
|
|
const lastCharacter = text.charAt(text.length - 1);
|
|
if (lastCharacter === '|' || lastCharacter === ',' || lastCharacter === ';') {
|
|
delimiter = lastCharacter;
|
|
text = text.substring(0, text.length - 1);
|
|
}
|
|
}
|
|
// support comma-separated values, semi-colon separated, or | separated fields.
|
|
let fields = text.split(delimiter || '|');
|
|
if (!delimiter) {
|
|
let altFields = text.split(';');
|
|
if (altFields.length > fields.length) {
|
|
fields = altFields;
|
|
}
|
|
altFields = text.split(',');
|
|
if (altFields.length > fields.length && (altFields.length !== fields.length + 1 || fields.length === 1)) {
|
|
fields = altFields;
|
|
}
|
|
}
|
|
for (let i = fields.length; i-- > 0;) {
|
|
fields[i] = fields[i].trim();
|
|
}
|
|
if (fields.length === 1 && fields[0].length === 0) {
|
|
return [];
|
|
}
|
|
return fields;
|
|
}
|
|
/**
|
|
* Returns the cookie value.
|
|
*
|
|
* @param {string} name the name of the cookie
|
|
* @return {string} the cookie value
|
|
*/
|
|
static getCookie(name) {
|
|
const value = '; ' + document.cookie;
|
|
const parts = value.split('; ' + name + '=');
|
|
if (parts.length === 2) {
|
|
const item = parts.pop();
|
|
if (item !== null) {
|
|
return item.split(';').shift() || '';
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
/**
|
|
* Helper method to log trace message to the console.
|
|
*
|
|
* @param {string} logtype trace type, can be log|info|warn|debug
|
|
* @param {function|string} message the message to log
|
|
*/
|
|
trace(logType, message) {
|
|
const output = typeof message === 'object' ? JSON.stringify(message) : message;
|
|
const id = this.element.id ? this.element.id : 'no-id';
|
|
switch (logType) {
|
|
case 'error':
|
|
TiConsole.error('[' + this.element.localName + ': ' + id + ']', output);
|
|
break;
|
|
case 'warning':
|
|
TiConsole.warning('[' + this.element.localName + ': ' + id + ']', output);
|
|
break;
|
|
case 'info':
|
|
TiConsole.info('[' + this.element.localName + ': ' + id + ']', output);
|
|
break;
|
|
case 'log':
|
|
TiConsole.log('[' + this.element.localName + ': ' + id + ']', output);
|
|
break;
|
|
case 'debug':
|
|
TiConsole.debug('[' + this.element.localName + ': ' + id + ']', output);
|
|
break;
|
|
}
|
|
}
|
|
/**
|
|
* Saves the setting to local storage.
|
|
*
|
|
* @param {string} name the setting name
|
|
* @param {string} value the value
|
|
*/
|
|
saveSetting(name, value) {
|
|
const id = this.element.tagName.toLowerCase();
|
|
const root = JSON.parse(TiLocalStorage.getItem(TiElementBase.STORAGE_ROOT) || '{}');
|
|
if (!root[id]) {
|
|
root[id] = {};
|
|
}
|
|
root[id][name] = value;
|
|
TiLocalStorage.setItem(TiElementBase.STORAGE_ROOT, JSON.stringify(root));
|
|
}
|
|
/**
|
|
* Loads the setting from local storage.
|
|
*
|
|
* @param {string} name the setting name
|
|
* @return {object} the setting JSON object
|
|
*/
|
|
loadSetting(name) {
|
|
const id = this.element.tagName.toLowerCase();
|
|
const root = JSON.parse(TiLocalStorage.getItem(TiElementBase.STORAGE_ROOT) || '{}');
|
|
const element = root[id] || {};
|
|
return element[name];
|
|
}
|
|
}
|
|
TiElementBase.STORAGE_ROOT = 'GC-SETTINGS';
|
|
|
|
/**
|
|
* Copyright (c) 2019-2020, Texas Instruments Incorporated
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of Texas Instruments Incorporated nor the names of
|
|
* its contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
/**
|
|
* `TiWidgetBase` provides the base implementation for TI widgets.
|
|
*/
|
|
class TiWidgetBase extends TiElementBase {
|
|
constructor(parent) {
|
|
super(parent);
|
|
this.parent = parent;
|
|
}
|
|
/* Widget that response to CSS property change should override this method to re-render */
|
|
onCSSPropertyChanged(name, value) { }
|
|
;
|
|
renderInfoText(infoText) {
|
|
if (infoText) {
|
|
// JSXON
|
|
return (h("div", { class: "help-text icon" },
|
|
h("ti-widget-tooltip", { text: infoText },
|
|
h("ti-widget-icon", { appearance: "secondary", icon: "help", size: "s" }))));
|
|
// JSXOFF
|
|
}
|
|
else {
|
|
return null;
|
|
}
|
|
}
|
|
render(element, options) {
|
|
if (options && (options.caption || options.infoText)) {
|
|
// JSXON
|
|
return (h("div", { class: "root-container", onClick: (e) => this.onClickHandler(e, e.target) },
|
|
(options === null || options === void 0 ? void 0 : options.caption) ? h("div", { class: "header-container top" },
|
|
(options === null || options === void 0 ? void 0 : options.caption) ? h("div", { class: "caption" }, options.caption) : null,
|
|
this.renderInfoText(options === null || options === void 0 ? void 0 : options.infoText)) : null,
|
|
this.parent.tooltip ? (h("div", { id: "elementWrapper" },
|
|
element,
|
|
h("ti-widget-tooltip", { class: "tooltip", text: this.parent.tooltip, anchorId: "elementWrapper" }))) : h("div", { id: "elementWrapper" }, element),
|
|
(options === null || options === void 0 ? void 0 : options.infoText) && !(options === null || options === void 0 ? void 0 : options.caption) ? h("div", { class: "header-container side" }, this.renderInfoText(options === null || options === void 0 ? void 0 : options.infoText)) : null));
|
|
// JSXOFF
|
|
}
|
|
else {
|
|
// JSXON
|
|
return (h("div", { id: "elementWrapper" },
|
|
element,
|
|
this.parent.tooltip ? h("ti-widget-tooltip", { class: "tooltip", text: this.parent.tooltip, anchorId: "elementWrapper" }) : null));
|
|
// JSXOFF
|
|
}
|
|
}
|
|
onClickHandler(event, element) {
|
|
if (element) {
|
|
const parent = element.parentElement;
|
|
if (parent && parent.id === 'elementWrapper') {
|
|
return;
|
|
}
|
|
else if (!element.classList.contains('root-container')) {
|
|
this.onClickHandler(event, element.parentElement);
|
|
}
|
|
else {
|
|
event.stopPropagation();
|
|
}
|
|
}
|
|
}
|
|
fire(eventName, detail) {
|
|
const obj = this.parent;
|
|
for (const x in obj) {
|
|
if (TiUtils.camelToDashCase(x) === eventName) {
|
|
return obj[x].emit(detail);
|
|
}
|
|
}
|
|
}
|
|
setCSSProperty(name, value) {
|
|
value = value.replace(/^[ ]+|[ ]+$/g, '');
|
|
this.element.style.setProperty(name, value);
|
|
this.parent.cssPropertyChanged.emit({ name: name, value: value });
|
|
}
|
|
getCSSProperty(name) {
|
|
return getComputedStyle(this.element).getPropertyValue(name);
|
|
}
|
|
refresh() {
|
|
return this.element['forceUpdate']();
|
|
}
|
|
/**
|
|
* Add the class name to the element.
|
|
*
|
|
* @param {string} name the class name
|
|
* @param {HTMLElement} element the element
|
|
* @protected
|
|
*/
|
|
addClassName(name, element) {
|
|
this.modifyClassName(true, name, element);
|
|
}
|
|
/**
|
|
* Remove the class name from the element.
|
|
*
|
|
* @param {string} name the class name
|
|
* @param {HTMLElement} element the element
|
|
* @protected
|
|
*/
|
|
removeClassName(name, element) {
|
|
this.modifyClassName(false, name, element);
|
|
}
|
|
modifyClassName(isAdd, name, element = this.element) {
|
|
if (element.className.indexOf(name) < 0) {
|
|
if (isAdd) {
|
|
// add because it doesn't exist yet and should
|
|
element.className = (element.className + ' ' + name).trim();
|
|
}
|
|
}
|
|
else if (!isAdd) {
|
|
// remove because it does exist and shouldn't
|
|
element.className = element.className.replace(name, '').trim();
|
|
}
|
|
}
|
|
}
|
|
|
|
export { TiWidgetBase as T };
|
|
|
|
//# sourceMappingURL=ti-widget-base-fe722328.js.map |