iobroker.schedule-switcher
Version:
Switch states over scheduler
1,180 lines • 94.1 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var VisHtmlTable_exports = {};
__export(VisHtmlTable_exports, {
VisHtmlTable: () => VisHtmlTable
});
module.exports = __toCommonJS(VisHtmlTable_exports);
class VisHtmlTable {
adapter;
delayTimeout;
htmlVal;
stateVal;
lang;
works;
/**
* @param adapter ioBroker
*/
constructor(adapter) {
this.adapter = adapter;
this.htmlVal = {};
this.stateVal = {};
this.delayTimeout = void 0;
this.lang = "de";
this.works = false;
}
/**
* @param id ID
* @param val Value state
*/
async changeEnabled(id, val) {
if (!this.adapter.config.usehtml) {
return;
}
this.adapter.log.debug(`changeEnabled: ${id} - ${JSON.stringify(val)}`);
const value = typeof val === "boolean" ? val : val == null ? void 0 : val.val;
if (value != null) {
this.stateVal[id.replace(".enabled", ".data")].enabled = value;
if (typeof val !== "boolean") {
await this.createHTML();
}
}
}
/**
* @param id ID
* @param val Value state
*/
async changeHTML(id, val) {
if (!this.adapter.config.usehtml) {
return;
}
this.adapter.log.debug(`changeHTML: ${id} - ${JSON.stringify(val)}`);
if (val != null && val.val != null) {
this.htmlVal[id] = val.val;
await this.createHTML();
}
}
/**
* updateHTML
*/
async updateHTML() {
if (!this.adapter.config.usehtml) {
return;
}
await this.createHTML();
}
/**
* @param id ID
* @param val Value State
* @param first boolean
*/
async changeTrigger(id, val, first = true) {
if (!this.adapter.config.usehtml) {
return;
}
this.adapter.log.debug(`changeTrigger: ${id} - ${JSON.stringify(val)} - ${first}`);
const values = typeof val === "string" ? val : val == null ? void 0 : val.val;
if (id != void 0 && values != null) {
const enabled = await this.adapter.getStateAsync(id.replace(".data", ".enabled"));
const value = typeof values === "string" ? JSON.parse(values) : values;
value.enabled = enabled != null && enabled.val != null ? enabled.val : false;
this.stateVal[id] = value;
if (first) {
await this.createHTML();
}
}
}
/**
* Create HTML
*/
async createHTML() {
this.adapter.log.debug(`Start update HTML! ${JSON.stringify(this.stateVal)}`);
if (typeof this.stateVal === "object" && Object.keys(this.stateVal).length === 0) {
return;
}
const id = this.htmlVal;
this.adapter.log.debug(`HTML: ${JSON.stringify(id)}`);
let text = "";
let count = 0;
let countall = 0;
const now = /* @__PURE__ */ new Date();
const today_style = {
0: "",
1: "",
2: "",
3: "",
4: "",
5: "",
6: "",
7: ""
};
today_style[(/* @__PURE__ */ new Date()).getDay()] = " font-weight:bold;";
for (const state in this.stateVal) {
const data = this.stateVal[state];
let devices = "";
let status = "";
const next_event = ["", "", "", "", "", "", ""];
let triggers = "";
let iTag = "";
let iTagEnd = "";
let font_text_color = id.font_color_text_enabled;
if (!data.enabled) {
iTag = `<i>`;
iTagEnd = `</i>`;
font_text_color = id.font_color_text_disabled;
}
let counter = 0;
let nextDateTime = 0;
let nextDateTimeIcon = 0;
let nextaction = "";
const nextName = [];
for (const trigger of data.triggers) {
++countall;
nextDateTimeIcon = nextDateTime;
let change_times = "";
let times = "";
let action = "";
++counter;
const nextNameData = {
getDate: 0,
date: /* @__PURE__ */ new Date(),
action: ""
};
const isodd = counter % 2 != 0 ? id.background_color_even : id.background_color_odd;
let addDate = 0;
if (trigger.type === "TimeTrigger") {
if (trigger.hour === 0 && trigger.minute === 0) {
addDate = 1;
}
const switchTime = /* @__PURE__ */ new Date(
`${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate() + addDate} ${trigger.hour}:${trigger.minute}`
);
if (switchTime >= now && trigger.weekdays.includes(now.getDay())) {
nextDateTime = await this.nextEvent(now.getDay(), nextDateTime);
} else {
const t = await this.nextDateSwitch(/* @__PURE__ */ new Date(), trigger);
nextDateTime = await this.nextEvent(new Date(t).getDay(), nextDateTime);
}
nextNameData.getDate = nextDateTime;
nextNameData.date = switchTime;
times = `${trigger.hour.toString().padStart(2, "0")}:${trigger.minute.toString().padStart(2, "0")}`;
change_times = `<input type="time" id="nexttime${countall}" value="${times}" required /> <input for="nexttime" type="button" value="save" onclick="sendToTime('${this.adapter.namespace}', 'time', '${trigger.id}', '${state}', '${countall}')" /> `;
} else if (trigger.type === "AstroTrigger") {
if (new Date(trigger.todayTrigger.date) >= now) {
nextDateTime = new Date(trigger.todayTrigger.date).getDay();
} else {
nextDateTime = await this.nextEvent(new Date(trigger.todayTrigger.date).getDay(), nextDateTime);
}
nextNameData.getDate = nextDateTime;
nextNameData.date = new Date(trigger.todayTrigger.date);
times = `${trigger.todayTrigger.hour.toString().padStart(2, "0")}:${trigger.todayTrigger.minute.toString().padStart(2, "0")}`;
change_times = `<select id="timeselect${countall}">
<option value="sunrise" ${trigger.astroTime === "sunrise" ? 'selected="selected"' : ""}>
${await this.helper_translator("sunrise")}</option>
<option value="solarNoon" ${trigger.astroTime === "solarNoon" ? 'selected="selected"' : ""}>
${await this.helper_translator("solarNoon")}</option>
<option value="sunset" ${trigger.astroTime === "sunset" ? 'selected="selected"' : ""}>
${await this.helper_translator("sunset")}</option>
<option value="sunriseEnd" ${trigger.astroTime === "sunriseEnd" ? 'selected="selected"' : ""}>
${await this.helper_translator("sunriseEnd")}</option>
<option value="sunsetStart" ${trigger.astroTime === "sunsetStart" ? 'selected="selected"' : ""}>
${await this.helper_translator("sunsetStart")}</option>
<option value="dusk" ${trigger.astroTime === "dusk" ? 'selected="selected"' : ""}>
${await this.helper_translator("dusk")}</option>
<option value="dawn" ${trigger.astroTime === "dawn" ? 'selected="selected"' : ""}>
${await this.helper_translator("dawn")}</option>
<option value="night" ${trigger.astroTime === "night" ? 'selected="selected"' : ""}>
${await this.helper_translator("night")}</option>
<option value="nadir" ${trigger.astroTime === "nadir" ? 'selected="selected"' : ""}>
${await this.helper_translator("nadir")}</option>
<option value="nightEnd" ${trigger.astroTime === "nightEnd" ? 'selected="selected"' : ""}>
${await this.helper_translator("nightEnd")}</option>
<option value="nauticalDusk" ${trigger.astroTime === "nauticalDusk" ? 'selected="selected"' : ""}>
${await this.helper_translator("nauticalDusk")}</option>
<option value="nauticalDawn" ${trigger.astroTime === "nauticalDawn" ? 'selected="selected"' : ""}>
${await this.helper_translator("nauticalDawn")}</option>
<option value="goldenHour" ${trigger.astroTime === "goldenHour" ? 'selected="selected"' : ""}>
${await this.helper_translator("goldenHour")}</option>
<option value="goldenHourEnd" ${trigger.astroTime === "goldenHourEnd" ? 'selected="selected"' : ""}>
${await this.helper_translator("goldenHourEnd")}</option>
</select>
<input size="2px" type="number" id="shift${countall}" min="-120" max="120" step="1" placeholder="00" required value="${trigger.shiftInMinutes}" />
<input for="timeselect${countall}" type="button" value="save" onclick="sendToAstro('${this.adapter.namespace}', 'astro', '${state}', '${trigger.id}', '${countall}')" />`;
} else if (trigger.type === "OneTimeTrigger") {
nextDateTime = await this.nextEvent(new Date(trigger.date).getDay(), nextDateTime);
if (await this.getWeek(new Date(trigger.date)) === await this.getWeek(/* @__PURE__ */ new Date())) {
trigger.weekdays = [(/* @__PURE__ */ new Date()).getDay()];
}
nextNameData.getDate = nextDateTime;
nextNameData.date = new Date(trigger.date);
times = `${new Date(trigger.date).getHours().toString().padStart(2, "0")}:${new Date(trigger.date).getMinutes().toString().padStart(2, "0")}`;
change_times = `<input class="datetime" type="datetime-local" name="datetime" id="datetime${countall}" value="${this.adapter.formatDate(new Date(trigger.date), "YYYY-MM-DD hh:mm")}"min="${this.adapter.formatDate(/* @__PURE__ */ new Date(), "YYYY-MM-DD hh:mm")}"max="${this.adapter.formatDate(new Date((/* @__PURE__ */ new Date()).setFullYear((/* @__PURE__ */ new Date()).getFullYear() + 1)), "YYYY-MM-DD hh:mm")}"required /><input for="datetime${countall}" type="button" value="save" onclick="sendToDateTime('${this.adapter.namespace}', 'datetime', '${trigger.id}', '${state}', '${countall}')" /> `;
}
if (trigger.action && trigger.action.type === "ConditionAction") {
const iconCon = trigger.action.action.name === "On" ? id.icon_true : id.icon_false;
action = ` ${iTag}${trigger.action.condition.constant}${trigger.action.condition.sign}${trigger.action.condition.constant}${iTagEnd} ${iconCon}`;
if (nextDateTimeIcon != nextDateTime) {
nextaction = iconCon;
}
nextNameData.action = iconCon;
}
if (trigger.action && trigger.action.type === "OnOffStateAction") {
const icon = trigger.action.name === "On" ? id.icon_true : id.icon_false;
action = ` ${icon}`;
if (nextDateTimeIcon != nextDateTime) {
nextaction = icon;
}
nextNameData.action = icon;
}
let valueCheck = ` ${trigger.valueCheck ? id.icon_state_check_yes : id.icon_state_check_no}`;
valueCheck = `<button
title="${this.loadTitle(trigger.valueCheck ? "activated" : "disabled")}";
style="border:none; cursor: pointer;
background-color:transparent;"
onClick="changValueCheck('${this.adapter.namespace}', 'valueCheck', '${state}', '${trigger.id}', '${trigger.valueCheck}')">${valueCheck}
</button>`;
triggers += `
<tr style="background-color:${isodd};
color:${font_text_color};
font-weight:"bold";
font-size:${id.header_font_size}px;">
<td style="text-align:${id.column_align_row_01}">
<label for="delete${countall}">${iTag}${trigger.type}${iTagEnd}</label> 
<input type="checkbox" id="delete${countall}" name="delete${countall}" />
<input for="delete${countall}" type="button" value="delete" onclick="deleteTrigger('${this.adapter.namespace}', 'delete-trigger', '${trigger.id}', '${state}', '${countall}')" />
${valueCheck}</td>
<td title="${times}" style="text-align:${id.column_align_row_02}">${change_times}</td>
<td title="${times}" style="text-align:${id.column_align_row_03}">${iTag}${times}${iTagEnd}${action}</td>
<td id="weekday" onClick="changeweekdays('${this.adapter.namespace}', 'week', '${state}', '${trigger.id}', 1, '${trigger.type}')" style="cursor: pointer; text-align:${id.column_align_row_04}; ${today_style[1]} color:${trigger.weekdays && trigger.weekdays.includes(1) ? id.font_color_weekdays_enabled : id.font_color_weekdays_disabled};">${iTag}${id.column_text_04}${iTagEnd}</td>
<td id="weekday" onClick="changeweekdays('${this.adapter.namespace}', 'week', '${state}', '${trigger.id}', 2, '${trigger.type}')" style="cursor: pointer; text-align:${id.column_align_row_05}; ${today_style[2]} color:${trigger.weekdays && trigger.weekdays.includes(2) ? id.font_color_weekdays_enabled : id.font_color_weekdays_disabled};">${iTag}${id.column_text_05}${iTagEnd}</td>
<td id="weekday" onClick="changeweekdays('${this.adapter.namespace}', 'week', '${state}', '${trigger.id}', 3, '${trigger.type}')" style="cursor: pointer; text-align:${id.column_align_row_06}; ${today_style[3]} color:${trigger.weekdays && trigger.weekdays.includes(3) ? id.font_color_weekdays_enabled : id.font_color_weekdays_disabled};">${iTag}${id.column_text_06}${iTagEnd}</td>
<td id="weekday" onClick="changeweekdays('${this.adapter.namespace}', 'week', '${state}', '${trigger.id}', 4, '${trigger.type}')" style="cursor: pointer; text-align:${id.column_align_row_07}; ${today_style[4]} color:${trigger.weekdays && trigger.weekdays.includes(4) ? id.font_color_weekdays_enabled : id.font_color_weekdays_disabled};">${iTag}${id.column_text_07}${iTagEnd}</td>
<td id="weekday" onClick="changeweekdays('${this.adapter.namespace}', 'week', '${state}', '${trigger.id}', 5, '${trigger.type}')" style="cursor: pointer; text-align:${id.column_align_row_08}; ${today_style[5]} color:${trigger.weekdays && trigger.weekdays.includes(5) ? id.font_color_weekdays_enabled : id.font_color_weekdays_disabled};">${iTag}${id.column_text_08}${iTagEnd}</td>
<td id="weekday" onClick="changeweekdays('${this.adapter.namespace}', 'week', '${state}', '${trigger.id}', 6, '${trigger.type}')" style="cursor: pointer; text-align:${id.column_align_row_09}; ${today_style[6]} color:${trigger.weekdays && trigger.weekdays.includes(6) ? id.font_color_weekdays_enabled : id.font_color_weekdays_disabled};">${iTag}${id.column_text_09}${iTagEnd}</td>
<td id="weekday" onClick="changeweekdays('${this.adapter.namespace}', 'week', '${state}', '${trigger.id}', 0, '${trigger.type}')" style="cursor: pointer; text-align:${id.column_align_row_10}; ${today_style[0]} color:${trigger.weekdays && trigger.weekdays.includes(0) ? id.font_color_weekdays_enabled : id.font_color_weekdays_disabled};">${iTag}${id.column_text_10}${iTagEnd}</td>
</tr>`;
nextName.push(nextNameData);
}
if (nextDateTime < 8) {
if (nextDateTime === 7) {
nextDateTime = 0;
}
next_event[nextDateTime] = await this.nextAction(nextDateTime, nextName, nextaction);
}
if (data.onAction && data.onAction.idsOfStatesToSet) {
if (data.onAction.idsOfStatesToSet[0] !== "default.state") {
for (const dev of data.onAction.idsOfStatesToSet) {
if (devices == "") {
devices = dev;
} else {
devices += `<br/>${dev}`;
}
}
}
}
const val_enabled = data.enabled ? false : true;
status = `${data.onAction.onValue}/${data.onAction.offValue} ${data.enabled ? id.icon_true : id.icon_false}`;
const status_icon = data.enabled ? "green" : "red";
text += `
<tr style="background-color:${id.background_color_trigger};
color:${font_text_color};
font-weight:"bold";
font-size:${id.header_font_size}px;">
<td style="text-align:${id.column_align_row_01}">
<button
style="border:none; cursor: pointer;
background-color:transparent;
color:${status_icon};
font-size:${id.column_width_01}px;
text-align:left"
value="${val_enabled}" onclick="setState('${state.replace("data", "enabled")}', this.value)">${id.icon_switch_symbol}
</button>  ${iTag}${data.name} (${count})${iTagEnd}</td>
<td title="${devices}" style="text-align:${id.column_align_row_02}">${iTag}${devices}${iTagEnd}</td>
<td title="${status}" style="text-align:${id.column_align_row_03}">${iTag}${status}${iTagEnd}</td>
<td style="text-align:${id.column_align_row_04};">${next_event[1]}</td>
<td style="text-align:${id.column_align_row_05};">${next_event[2]}</td>
<td style="text-align:${id.column_align_row_06};">${next_event[3]}</td>
<td style="text-align:${id.column_align_row_07};">${next_event[4]}</td>
<td style="text-align:${id.column_align_row_08};">${next_event[5]}</td>
<td style="text-align:${id.column_align_row_09};">${next_event[6]}</td>
<td style="text-align:${id.column_align_row_10};">${next_event[0]}</td>
</tr>`;
text += triggers;
++count;
}
await this.mergeHTML(text, countall, count);
}
/**
* Next switch
*
* @param nextDateTime number
* @param nextName array
* @param nextaction string
* @returns next time
*/
nextAction(nextDateTime, nextName, nextaction) {
const action = nextName.filter((t) => t.getDate === nextDateTime);
if (action && action.length > 0) {
const next = action.sort((a, b) => a.date - b.date);
return next[0].action;
}
return Promise.resolve(nextaction);
}
/**
* get week
*
* @param times Date
* @returns week numbers
*/
getWeek(times) {
const onejan = new Date(times.getFullYear(), 0, 1);
const today = new Date(times.getFullYear(), times.getMonth(), times.getDate());
const dayOfYear = (today - onejan + 864e5) / 864e5;
return Promise.resolve(Math.ceil(dayOfYear / 7));
}
/**
* Next event
*
* @param actual number
* @param next number
* @returns next event
*/
nextEvent(actual, next) {
if (actual === 0) {
actual = 7;
}
if (actual > next) {
return Promise.resolve(actual);
}
return Promise.resolve(next);
}
/**
* Next date
*
* @param now Date
* @param trigger json
* @returns Date as string
*/
async nextDateSwitch(now, trigger) {
let diffDays = 0;
const nextDay = trigger.weekdays.length === 1 ? trigger.weekdays[0] : await this.nextActiveDay(trigger.weekdays, now.getDay());
if (nextDay > now.getDay()) {
diffDays = nextDay - now.getDay();
} else {
diffDays = nextDay + 7 - now.getDay();
}
const next = new Date(now.setDate(now.getDate() + diffDays));
const hour = trigger.hour != null ? trigger.hour : trigger.todayTrigger.hour;
const minute = trigger.minute != null ? trigger.minute : trigger.todayTrigger.minute;
return (/* @__PURE__ */ new Date(
`${next.getFullYear()}-${next.getMonth() + 1}-${next.getDate()} ${hour}:${minute}`
)).toISOString();
}
/**
* Next switch
*
* @param array number
* @param day getDay()
* @returns next getDay
*/
nextActiveDay(array, day) {
array = array.map((val) => {
return val === 0 ? 7 : val;
});
const numChecker = (num) => array.find((v) => v > num);
const next = numChecker(day);
return Promise.resolve(next == void 0 ? 0 : next);
}
/**
* Merge rows with header
*
* @param htmltext string
* @param countall number
* @param count number
*/
async mergeHTML(htmltext, countall, count) {
this.adapter.log.debug(`Start merge HTML code.`);
const id = this.htmlVal;
let div = '<div class="container">';
let div_css = `
div.container {
align-items: center;
justify-content: center;
}`;
let min = "";
if (id.jarvis) {
div = "<div>";
div_css = "";
min = "min-width:100%;";
}
const htmlStart = `
<title>Schedule-Switcher</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<style>
* {
margin: 0;
}
body {
background-color: ${id.background_color_body}; margin: 0 auto;
}
p {
padding-top: 10px; padding-bottom: 10px; text-align: ${id.p_tag_text_algin};
}
#updatetime:hover {
cursor: pointer;
}
#weekday:hover {
cursor: pointer;
background-color: ${id.background_color_weekdays_hover};
}
td {
padding:${id.td_tag_cell}px; border:0px solid ${id.td_tag_border_color};
border-right:${id.td_tag_border_right}px solid ${id.td_tag_border_color};
border-bottom:${id.td_tag_border_bottom}px solid ${id.td_tag_border_color};
}
table {
width: ${id.table_tag_width};
margin: ${id.table_tag_text_align};
border:1px solid ${id.table_tag_border_color};
border-spacing: ${id.table_tag_cell}px;
border-collapse: collapse;
}
${div_css}
thread {
display: table-header-group;
}
tbody {
display: table-row-group;
}
tfoot {
display: table-footer-group
}
</style>
<script>
function deleteTrigger(stateId, command, id, dataid, count) {
var checked = document.getElementById('delete' + count).checked;
if (checked) {
var data = {
"triggerId": id,
"dataId": dataid,
};
this.servConn._socket.emit("sendTo", stateId, command, data);
}
}
function changeweekdays(stateId, command, dataid, id, changeid, type) {
if (type === "OneTimeTrigger") return;
var data = {
"changeid": changeid,
"triggerid": id,
"dataid": dataid
};
this.servConn._socket.emit("sendTo", stateId, command, data);
}
function changValueCheck(stateId, command, dataid, id, value) {
var data = {
"changeval": value,
"triggerid": id,
"dataid": dataid
};
this.servConn._socket.emit("sendTo", stateId, command, data);
}
function updateTrigger(stateId) {
this.servConn._socket.emit("setState", stateId + '.html.update', true);
}
function setState(stateId, value) {
this.servConn._socket.emit("setState", stateId, value == "false" ? false : true);
}
function sendToAstro(stateId, command, dataid, id, count) {
var timeselect = document.getElementById('timeselect' + count).value;
var shift = document.getElementById('shift' + count).value;
var data = {
"astrotime": timeselect,
"shift": shift,
"triggerid": id,
"dataid": dataid
};
this.servConn._socket.emit("sendTo", stateId, command, data);
}
function sendToDateTime(stateId, command, id, dataid, count) {
var value = document.getElementById('datetime' + count).value;
var data = {
"time": value,
"triggerid": id,
"dataid": dataid
};
this.servConn._socket.emit("sendTo", stateId, command, data);
}
function sendToTime(stateId, command, id, dataid, count) {
var value = document.getElementById('nexttime' + count).value;
var data = {
"time": value,
"triggerid": id,
"dataid": dataid
};
this.servConn._socket.emit("sendTo", stateId, command, data);
}
</script>
${div}
<table style="${min} width:${id.header_width};
border:${id.header_border}px; border-color:${id.header_tag_border_color};
font-size:${id.header_font_size}px; font-family:${id.header_font_family};
background-image: linear-gradient(42deg,${id.header_linear_color_2},
${id.header_linear_color_1});">
<thead>
<tr>
<th colspan="10" scope="colgroup">
<p onClick="updateTrigger('${this.adapter.namespace}')"
id="updatetime" style="color:${id.top_text_color}; font-family:${id.top_font_family};
font-size:${id.top_font_size}px; font-weight:${id.top_font_weight}">
${id.top_text}  ${await this.helper_translator("top_last_update")}
${this.adapter.formatDate(/* @__PURE__ */ new Date(), "TT.MM.JJJJ hh:mm:ss")}</p></th>
</tr>
<tr style="color:${id.headline_color}; height:${id.headline_height}px;
font-size: ${id.headline_font_size}px; font-weight: ${id.headline_weight};
border-bottom: ${id.headline_underlined}px solid ${id.headline_underlined_color}">
<th style="text-align:${id.column_align_01}; width:${id.column_width_01}">
${id.column_text_01}
</th>
<th style="text-align:${id.column_align_02}; width:${id.column_width_02}">
${id.column_text_02}
</th>
<th style="text-align:${id.column_align_03}; width:${id.column_width_03}">
${id.column_text_03}
</th>
<th style="text-align:${id.column_align_04}; width:${id.column_width_04}">
${id.column_text_04}
</th>
<th style="text-align:${id.column_align_05}; width:${id.column_width_05}">
${id.column_text_05}
</th>
<th style="text-align:${id.column_align_06}; width:${id.column_width_06}">
${id.column_text_06}
</th>
<th style="text-align:${id.column_align_07}; width:${id.column_width_07}">
${id.column_text_07}
</th>
<th style="text-align:${id.column_align_08}; width:${id.column_width_08}">
${id.column_text_08}
</th>
<th style="text-align:${id.column_align_09}; width:${id.column_width_09}">
${id.column_text_09}
</th>
<th style="text-align:${id.column_align_10}; width:${id.column_width_10}">
${id.column_text_10}
</th>
</tr>
</thead>
<tfoot>
<tr>
<th colspan="10" scope="colgroup">
<p style="color:${id.top_text_color}; font-family:${id.top_font_family};
font-size:${id.top_font_size}px; font-weight:${id.top_font_weight}">
${await this.helper_translator("footerobject")}  ${count}</br>
${await this.helper_translator("footer")}  ${countall}</p></th>
</tr>
</tfoot>
<tbody>
${htmltext}
</tbody>
</table></div>`;
await this.adapter.setState(`html.html_code`, {
val: htmlStart,
ack: true
});
this.adapter.log.debug(`Save HTML code.`);
}
/**
* Translate
*
* @param word string
* @returns word
*/
helper_translator(word) {
const all = {
top_last_update: {
en: "Last update:",
de: "Letzte Aktualisierung:",
ru: "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435:",
pt: "\xDAltima atualiza\xE7\xE3o:",
nl: "Laatste update:",
fr: "Derni\xE8re mise \xE0 jour :",
it: "Ultimo aggiornamento:",
es: "\xDAltima actualizaci\xF3n:",
pl: "Ostatnia aktualizacja",
uk: "\u041E\u0441\u0442\u0430\u043D\u043D\u0454 \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F:",
"zh-cn": "\u4E0A\u6B21\u66F4\u65B0:"
},
footer: {
en: "Total trigger",
de: "Gesamtausl\xF6sung",
ru: "\u041E\u0431\u0449\u0438\u0439 \u0442\u0440\u0438\u0433\u0433\u0435\u0440",
pt: "Total de gatilho",
nl: "Totaal trigger",
fr: "D\xE9clencheur total",
it: "Attacco totale",
es: "Total disparador",
pl: "Wy\u0142\u0105cznik ca\u0142kowity",
uk: "\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0442\u0440\u0438\u0433\u0435\u0440",
"zh-cn": "\u603B\u89E6\u53D1\u6570"
},
footerobject: {
en: "Total objects",
de: "Objekte insgesamt",
ru: "\u0412\u0441\u0435\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432",
pt: "Objetos totais",
nl: "Totaal objecten",
fr: "Total des objets",
it: "Oggetti totali",
es: "Total de objetos",
pl: "Ca\u0142kowita liczba obiekt\xF3w",
uk: "\u0412\u0441\u044C\u043E\u0433\u043E \u043E\u0431'\u0454\u043A\u0442\u0456\u0432",
"zh-cn": "\u76EE\u6807\u5171\u8BA1"
},
sunrise: {
en: "Sunrise",
de: "Sonnenaufgang",
ru: "\u0412\u043E\u0441\u0445\u043E\u0434",
pt: "Nascer do sol",
nl: "zonsopkomst",
fr: "lever du soleil",
it: "Alba",
es: "amanecer",
pl: "wsch\xF3d s\u0142o\u0144ca",
uk: "\u0421\u0445\u0456\u0434 \u0441\u043E\u043D\u0446\u044F",
"zh-cn": "\u65E5\u51FA"
},
sunset: {
en: "Sunset",
de: "Sonnenuntergang",
ru: "\u0417\u0430\u043A\u0430\u0442 \u0441\u043E\u043B\u043D\u0446\u0430",
pt: "P\xF4r do sol",
nl: "Zonsondergang",
fr: "Le coucher du soleil",
it: "Tramonto",
es: "Puesta de sol",
pl: "Zach\xF3d s\u0142o\u0144ca",
uk: "\u0417\u0430\u0445\u0456\u0434 \u0441\u043E\u043D\u0446\u044F",
"zh-cn": "\u65E5\u843D"
},
solarNoon: {
en: "Noon",
de: "Mittag",
ru: "\u041F\u043E\u043B\u0434\u0435\u043D\u044C",
pt: "Meio-dia",
nl: "Middag",
fr: "Le midi",
it: "Mezzogiorno",
es: "Mediod\xEDa",
pl: "Po\u0142udnie",
uk: "\u043F\u043E\u043B\u0443\u0434\u0435\u043D\u044C",
"zh-cn": "\u4E2D\u5348"
},
sunriseEnd: {
en: "Sunrise end",
de: "Ende Sonnenaufgangs",
ru: "\u041A\u043E\u043D\u0435\u0446 \u0432\u043E\u0441\u0445\u043E\u0434\u0430 \u0441\u043E\u043B\u043D\u0446\u0430",
pt: "Fim do nascer do sol",
nl: "Zonsopgang einde",
fr: "Fin du lever du soleil",
it: "Fine dell'alba",
es: "Fin del amanecer",
pl: "Koniec wschodu s\u0142o\u0144ca",
uk: "\u041A\u0456\u043D\u0435\u0446\u044C \u0441\u0445\u043E\u0434\u0443 \u0441\u043E\u043D\u0446\u044F",
"zh-cn": "\u65E5\u51FA\u7ED3\u675F"
},
goldenHourEnd: {
en: "End golden dusk",
de: "Ende goldenen D\xE4mmerung",
ru: "\u041A\u043E\u043D\u0435\u0446 \u0437\u043E\u043B\u043E\u0442\u044B\u0445 \u0441\u0443\u043C\u0435\u0440\u0435\u043A",
pt: "Fim do crep\xFAsculo dourado",
nl: "Einde gouden schemering",
fr: "cr\xE9puscule dor\xE9",
it: "Fine del crepuscolo dorato",
es: "Fin del crep\xFAsculo dorado",
pl: "Koniec z\u0142otego zmierzchu",
uk: "\u041A\u0456\u043D\u0435\u0446\u044C \u0437\u043E\u043B\u043E\u0442\u0438\u0445 \u0441\u0443\u0442\u0456\u043D\u043A\u0456\u0432",
"zh-cn": "\u91D1\u8272\u9EC4\u660F\u7ED3\u675F"
},
goldenHour: {
en: "Start golden dusk",
de: "Beginn goldenen D\xE4mmerung",
ru: "\u041D\u0430\u0447\u0430\u0442\u044C \u0437\u043E\u043B\u043E\u0442\u044B\u0435 \u0441\u0443\u043C\u0435\u0440\u043A\u0438",
pt: "Comece o crep\xFAsculo dourado",
nl: "Begin gouden schemering",
fr: "D\xE9but du cr\xE9puscule dor\xE9",
it: "Inizia il crepuscolo dorato",
es: "Comienza el crep\xFAsculo dorado",
pl: "Rozpocznij z\u0142oty zmierzch",
uk: "\u041F\u043E\u0447\u0430\u0442\u043E\u043A \u0437\u043E\u043B\u043E\u0442\u0438\u0445 \u0441\u0443\u0442\u0456\u043D\u043A\u0456\u0432",
"zh-cn": "\u91D1\u8272\u9EC4\u660F\u4F0A\u59CB"
},
sunsetStart: {
en: "Start sunset",
de: "Sonnenuntergang beginnt",
ru: "\u041D\u0430\u0447\u0430\u0442\u044C \u0437\u0430\u043A\u0430\u0442",
pt: "Come\xE7ar o p\xF4r do sol",
nl: "Begin zonsondergang",
fr: "D\xE9but du coucher du soleil",
it: "Inizio tramonto",
es: "Comienza el atardecer",
pl: "Rozpocznij zach\xF3d s\u0142o\u0144ca",
uk: "\u041F\u043E\u0447\u0430\u0442\u043E\u043A \u0437\u0430\u0445\u043E\u0434\u0443 \u0441\u043E\u043D\u0446\u044F",
"zh-cn": "\u65E5\u843D\u5F00\u59CB"
},
dusk: {
en: "Dusk",
de: "D\xE4mmerung",
ru: "\u0421\u0443\u043C\u0435\u0440\u043A\u0438",
pt: "Crep\xFAsculo",
nl: "Schemering",
fr: "Cr\xE9puscule",
it: "Crepuscolo",
es: "Oscuridad",
pl: "Zmierzch",
uk: "\u0421\u0443\u0442\u0456\u043D\u043A\u0438",
"zh-cn": "\u9EC4\u660F"
},
nauticalDusk: {
en: "Nautical dusk",
de: "Nautische D\xE4mmerung",
ru: "\u041C\u043E\u0440\u0441\u043A\u0438\u0435 \u0441\u0443\u043C\u0435\u0440\u043A\u0438",
pt: "Crep\xFAsculo n\xE1utico",
nl: "Nautische schemering",
fr: "cr\xE9puscule nautique",
it: "Crepuscolo nautico",
es: "Atardecer n\xE1utico",
pl: "Zmierzch morski",
uk: "\u041C\u043E\u0440\u0441\u044C\u043A\u0456 \u0441\u0443\u0442\u0456\u043D\u043A\u0438",
"zh-cn": "\u822A\u6D77\u9EC4\u660F"
},
night: {
en: "Night",
de: "Nacht",
ru: "\u041D\u043E\u0447\u044C",
pt: "Noite",
nl: "Nacht",
fr: "Nuit",
it: "Notte",
es: "Noche",
pl: "Noc",
uk: "\u041D\u0456\u0447",
"zh-cn": "\u591C\u665A"
},
nadir: {
en: "Midnight",
de: "Mitternacht",
ru: "\u041F\u043E\u043B\u043D\u043E\u0447\u044C",
pt: "Meia-noite",
nl: "Middernacht",
fr: "Minuit",
it: "Mezzanotte",
es: "Medianoche",
pl: "P\xF3\u0142noc",
uk: "\u041F\u0456\u0432\u043D\u0456\u0447",
"zh-cn": "\u5348\u591C"
},
nightEnd: {
en: "Night end",
de: "Ende der Nacht",
ru: "\u041A\u043E\u043D\u0435\u0446 \u043D\u043E\u0447\u0438",
pt: "Fim da noite",
nl: "Nacht einde",
fr: "Fin de la nuit",
it: "Fine della notte",
es: "Fin de la noche",
pl: "Koniec nocy",
uk: "\u041A\u0456\u043D\u0435\u0446\u044C \u043D\u043E\u0447\u0456",
"zh-cn": "\u591C\u5E55\u964D\u4E34"
},
nauticalDawn: {
en: "Nautical dawn",
de: "Nautische Morgend\xE4mmerung",
ru: "\u041C\u043E\u0440\u0441\u043A\u043E\u0439 \u0440\u0430\u0441\u0441\u0432\u0435\u0442",
pt: "amanhecer n\xE1utico",
nl: "Nautische dageraad",
fr: "Aube nautique",
it: "Alba nautica",
es: "Amanecer n\xE1utico",
pl: "Morski \u015Bwit",
uk: "\u041C\u043E\u0440\u0441\u044C\u043A\u0438\u0439 \u0441\u0432\u0456\u0442\u0430\u043D\u043E\u043A",
"zh-cn": "\u822A\u6D77\u9ECE\u660E"
},
dawn: {
en: "Dawn",
de: "Morgend\xE4mmerung",
ru: "\u0420\u0430\u0441\u0441\u0432\u0435\u0442",
pt: "Alvorecer",
nl: "Ochtendgloren",
fr: "Aube",
it: "Alba",
es: "Amanecer",
pl: "\u015Awit",
uk: "\u0421\u0432\u0456\u0442\u0430\u043D\u043E\u043A",
"zh-cn": "\u9ECE\u660E"
}
};
return all[word][this.lang];
}
/**
* @param lang Lang
*/
async createStates(lang) {
this.lang = lang;
this.adapter.log.info(`Create HTML states!`);
let common = {};
let val;
common = {
name: "HTML",
desc: "HTML"
};
await this.createDataPoint("html", common, "folder");
common = {
type: "string",
role: "level.color.rgb",
name: {
en: "Heading underlined color",
de: "Heading unterstrichene Farbe",
ru: "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 \u0446\u0432\u0435\u0442",
pt: "Cor sublinhada de cabe\xE7a",
nl: "Vertaling:",
fr: "T\xEAte de couleur soulign\xE9e",
it: "Intestazione colore sottolineato",
es: "Cabeza de color subrayado",
pl: "G\u0142owa podkre\u015Blona koloru",
uk: "\u041F\u043E\u0434\u0430\u0454\u0442\u044C\u0441\u044F \u0437\u0433\u0456\u0434\u043D\u043E \u0437 \u043A\u043E\u043B\u044C\u043E\u0440\u043E\u043C",
"zh-cn": "\u6807\u9898\u7A81\u51FA\u5F3A\u8C03\u989C\u8272"
},
desc: "Heading underlined color",
read: true,
write: true,
def: "#ffffff"
};
await this.createDataPoint("html.headline_underlined_color", common, "state");
val = await this.adapter.getStateAsync("html.headline_underlined_color");
this.htmlVal.headline_underlined_color = val == null ? void 0 : val.val;
common = {
type: "number",
role: "value",
name: {
en: "Heading underlined",
de: "Unterstrichen",
ru: "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442",
pt: "Rubrica sublinhada",
nl: "Ondersteuning",
fr: "Heading underlined",
it: "Denominazione sottolineata",
es: "Encabezamiento subrayado",
pl: "Headlong underlined",
uk: "\u041F\u043E\u0434\u0430\u0454\u0442\u044C\u0441\u044F \u0437\u0433\u0456\u0434\u043D\u043E \u0437",
"zh-cn": "\u6807\u9898\u5F3A\u8C03"
},
desc: "Heading underlined",
read: true,
write: true,
def: 3,
unit: "px"
};
await this.createDataPoint("html.headline_underlined", common, "state");
val = await this.adapter.getStateAsync("html.headline_underlined");
this.htmlVal.headline_underlined = val == null ? void 0 : val.val;
common = {
type: "string",
role: "state",
name: {
en: "Headline font weight",
de: "Headline Schriftst\xE4rke",
ru: "\u0412\u0435\u0441 \u0448\u0440\u0438\u0444\u0442\u0430 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430",
pt: "Peso da fonte do t\xEDtulo",
nl: "Hoofdlettertypegewicht",
fr: "Poids de la police en t\xEAte",
it: "Headline font peso",
es: "Headline font weight",
pl: "Masa czcionki nag\u0142\xF3wka",
uk: "\u0412\u0430\u0433\u0430 \u0448\u0440\u0438\u0444\u0442\u0443",
"zh-cn": "\u5934\u6761\u5B57\u4F53\u91CD\u91CF"
},
desc: "Headline font weight",
read: true,
write: true,
def: "normal",
states: {
normal: "normal",
bold: "bold"
}
};
await this.createDataPoint("html.headline_weight", common, "state");
val = await this.adapter.getStateAsync("html.headline_weight");
this.htmlVal.headline_weight = val == null ? void 0 : val.val;
common = {
type: "number",
role: "value",
name: {
en: "Headline font size",
de: "Headline Schriftgr\xF6\xDFe",
ru: "\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 Headline",
pt: "Tamanho da fonte do t\xEDtulo",
nl: "Hoofdlijn lettertype",
fr: "Headline font size",
it: "Formato del carattere",
es: "Tama\xF1o de la fuente",
pl: "Fontanny",
uk: "\u0420\u043E\u0437\u043C\u0456\u0440 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E \u0448\u0440\u0438\u0444\u0442\u0443",
"zh-cn": "\u5BFC \u8A00"
},
desc: "Headline height",
read: true,
write: true,
def: 16,
unit: "px"
};
await this.createDataPoint("html.headline_font_size", common, "state");
val = await this.adapter.getStateAsync("html.headline_font_size");
this.htmlVal.headline_font_size = val == null ? void 0 : val.val;
common = {
type: "number",
role: "value",
name: {
en: "Headline height",
de: "Kopfh\xF6he",
ru: "\u0412\u044B\u0441\u043E\u0442\u0430 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430",
pt: "Altura do t\xEDtulo",
nl: "Hoofdlijn lengte",
fr: "Hauteur de la t\xEAte",
it: "Altezza della testa",
es: "Altura del t\xEDtulo",
pl: "Headline height",
uk: "\u0412\u0438\u0441\u043E\u0442\u0430 \u043B\u0456\u043D\u0456\u0457",
"zh-cn": "\u6807\u9898\u9AD8"
},
desc: "Headline height",
read: true,
write: true,
def: 35,
unit: "px"
};
await this.createDataPoint("html.headline_height", common, "state");
val = await this.adapter.getStateAsync("html.headline_height");
this.htmlVal.headline_height = val == null ? void 0 : val.val;
common = {
type: "string",
role: "level.color.rgb",
name: {
en: "Headline color",
de: "Kopffarbe",
ru: "\u0426\u0432\u0435\u0442 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430",
pt: "Cor do t\xEDtulo",
nl: "Hoofdlijn kleur",
fr: "Couleur Headline",
it: "Colore della testa",
es: "Color de encabezado",
pl: "Kolor",
uk: "\u041A\u043E\u043B\u0456\u0440 \u043B\u0456\u043D\u0456\u0457",
"zh-cn": "\u6807\u9898"
},
desc: "Headline color",
read: true,
write: true,
def: "#ffffff"
};
await this.createDataPoint("html.headline_color", common, "state");
val = await this.adapter.getStateAsync("html.headline_color");
this.htmlVal.headline_color = val == null ? void 0 : val.val;
common = {
type: "string",
role: "state",
name: {
en: "TOP text",
de: "TOP-Text",
ru: "\u0422\u041E\u041F-\u0442\u0435\u043A\u0441\u0442",
pt: "Texto do TOP",
nl: "Top",
fr: "Texte TOP",
it: "Testo TOP",
es: "Texto de la p\xE1gina",
pl: "Tekst TOP",
uk: "\u0413\u043E\u043B\u043E\u0432\u043D\u0430",
"zh-cn": "\u6848\u6587"
},
desc: "TOP text",
read: true,
write: true,
def: "your text"
};
await this.createDataPoint("html.top_text", common, "state");
val = await this.adapter.getStateAsync("html.top_text");
this.htmlVal.top_text = val == null ? void 0 : val.val;
common = {
type: "string",
role: "state",
name: {
en: "TOP font weight",
de: "TOP Schriftst\xE4rke",
ru: "TOP \u0432\u0435\u0441 \u0448\u0440\u0438\u0444\u0442\u0430",
pt: "Peso da fonte TOP",
nl: "ToP font gewicht",
fr: "Poids de police TOP",
it: "TOP font peso",
es: "TOP font weight",
pl: "TOP",
uk: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0432\u0430\u0433\u0430 \u0448\u0440\u0438\u0444\u0442\u0443",
"zh-cn": "\u6392 \u6743"
},
desc: "TOP font weight",
read: true,
write: true,
def: "normal",
states: {
normal: "normal",
bold: "bold"
}
};
await this.createDataPoint("html.top_font_weight", common, "state");
val = await this.adapter.getStateAsync("html.top_font_weight");
this.htmlVal.top_font_weight = val == null ? void 0 : val.val;
common = {
type: "number",
role: "value",
name: {
en: "TOP font size",
de: "TOP Schriftgr\xF6\xDFe",
ru: "TOP \u0440\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",
pt: "Tamanho da fonte TOP",
nl: "ToP font maat",
fr: "Taille de police TOP",
it: "Dimensione del carattere TOP",
es: "Tama\xF1o de fuente TOP",
pl: "TOP",
uk: "\u0420\u043E\u0437\u043C\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0443",
"zh-cn": "\u6392 \u5EA6"
},
desc: "TOP font size",
read: true,
write: true,
def: 20,
unit: "px"
};
await this.createDataPoint("html.top_font_size", common, "state");
val = await this.adapter.getStateAsync("html.top_font_size");
this.htmlVal.top_font_size = val == null ? void 0 : val.val;
common = {
type: "string",
role: "state",
name: {
en: "TOP font",
de: "TOP Schriftart",
ru: "TOP \u0448\u0440\u0438\u0444\u0442",
pt: "Fonte TOP",
nl: "Top font",
fr: "Police TOP",
it: "TOP font",
es: "Fuente TOP",
pl: "TOP",
uk: "\u0422\u043E\u043F \u0448\u0440\u0438\u0444\u0442",
"zh-cn": "\u4E09\u3001\u7ED3 \u8BBA"
},
desc: "TOP font",
read: true,
write: true,
def: "Helvetica"
};
await this.createDataPoint("html.top_font_family", common, "state");
val = await this.adapter.getStateAsync("html.top_font_family");
this.htmlVal.top_font_family = val == null ? void 0 : val.val;
common = {
type: "string",
role: "level.color.rgb",
name: {
en: "TOP text color",
de: "TOP Textfarbe",
ru: "\u0422\u041E\u041F \u0446\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430",
pt: "Cor de texto TOP",
nl: "Top sms kleur",
fr: "Couleur du texte TOP",
it: "Colore del testo TOP",
es: "Color de texto",
pl: "Ok\u0142adka",
uk: "\u041A\u043E\u043B\u0456\u0440 \u0442\u0435\u043A\u0441\u0442\u0443",
"zh-cn": "\u6848\u6587"
},
desc: "TOP text color",
read: true,
write: true,
def: "#ffffff"
};
await this.createDataPoint("html.top_text_color", common, "state");
val = await this.adapter.getStateAsync("html.top_text_color");
this.htmlVal.top_text_color = val == null ? void 0 : val.val;
common = {
type: "string",
role: "level.color.rgb",
name: {
en: "TAG <table> header linear color 2.",
de: "TAG <table> Header lineare Farbe 2.",
ru: "TAG <table> \u043B\u0438\u043D\u0435\u0439\u043D\u044B\u0439 \u0446\u0432\u0435\u0442 2.",
pt: "Cor linear de cabe\xE7alho TAG <table> 2.",
nl: "Tag <table> hoofd lineaire kleur 2.",
fr: "Couleur lin\xE9aire TAG <table> en-t\xEAte 2.",
it: "TAG <table> intestazione colore lineare 2.",
es: "TAG <table> Header linear color 2.",
pl: "TAG <table> koloru liniowego 2.",
uk: "TAG <table> \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043B\u0456\u043D\u0456\u0439\u043D\u043E\u0433\u043E \u043A\u043E\u043B\u044C\u043E\u0440\u0443 2.",
"zh-cn": "TAG <table>\u5934\u5BF8ar\u989C\u82722."
},
desc: "TAG <table> header linear color 2.",
read: true,
write: true,
def: "#BDBDBD"
};
await this.createDataPoint("html.header_linear_color_2", common, "state");
val = await this.adapter.getStateAsync("html.header_linear_color_2");
this.htmlVal.header_linear_color_2 = val == null ? void 0 : val.val;
common = {
type: "string",
role: "level.color.rgb",
name: {
en: "TAG <table> header linear color 1.",
de: "TAG <table> Header lineare Farbe 1.",
ru: "TAG <table> \u043B\u0438\u043D\u0435\u0439\u043D\u044B\u0439 \u0446\u0432\u0435\u0442 1.",
pt: "Cor linear de cabe\xE7alho TAG <table> 1.",
nl: "Tag <table> hoofd lineaire kleur 1.",
fr: "Couleur lin\xE9aire TAG <table> en-t\xEAte 1.",
it: "TAG <table> intestazione colore lineare 1.",
es: "TAG <table> Header linear color 1.",
pl: "TAG <table> koloru liniowego 1.",
uk: "TAG <table> \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043B\u0456\u043D\u0456\u0439\u043D\u043E\u0433\u043E \u043A\u043E\u043B\u044C\u043E\u0440\u0443 1.",
"zh-cn": "TAG <table>\u5934\u5BF8ar\u989C\u82721."
},
desc: "TAG <table> header linear color 1.",
read: true,
write: true,
def: "#BDBDBD"
};
await this.createDataPoint("html.header_linear_color_1", common, "state");
val = await this.adapter.getStateAsync("html.header_linear_color_1");
this.htmlVal.header_linear_color_1 = val == null ? void 0 : val.val;
common = {
type: "string",
role: "state",
name: {
en: "TAG <table> header font family.",
de: "TAG <table> Header Schriftfamilie.",
ru: "TAG <table> \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0441\u0435\u043C\u0435\u0439\u0441\u0442\u0432\u0430 \u0448\u0440\u0438\u0444\u0442\u043E\u0432.",
pt: "TAG <table> header font family.",
nl: "TAG-lettertypefamil