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 |