mirror of
https://github.com/Karaka-Management/jsOMS.git
synced 2026-02-14 00:18:40 +00:00
cleanup and tests added for ci/cd
This commit is contained in:
parent
fd791cca05
commit
da4032f5d6
|
|
@ -15,8 +15,8 @@ import { AssetManager } from './Asset/AssetManager.js';
|
||||||
*/
|
*/
|
||||||
export const Autoloader = {};
|
export const Autoloader = {};
|
||||||
|
|
||||||
Autoloader.loaded = [];
|
Autoloader.loaded = [];
|
||||||
Autoloader.namespaced = [];
|
Autoloader.namespaced = [];
|
||||||
Autoloader.assetLoader = new AssetManager();
|
Autoloader.assetLoader = new AssetManager();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.chart.grid = {
|
this.chart.grid = {
|
||||||
x: {
|
x: {
|
||||||
visible: true
|
visible: true
|
||||||
},
|
},
|
||||||
|
|
@ -57,6 +57,7 @@
|
||||||
visible: true
|
visible: true
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.chart.subtype = 'candlestick';
|
this.chart.subtype = 'candlestick';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -105,7 +106,7 @@
|
||||||
.attr("y", function(d) { return y(Math.max(d.open, d.close)); })
|
.attr("y", function(d) { return y(Math.max(d.open, d.close)); })
|
||||||
.attr("height", function(d) { return Math.max(1, y(Math.min(d.open, d.close)) - y(Math.max(d.open, d.close)));})
|
.attr("height", function(d) { return Math.max(1, y(Math.min(d.open, d.close)) - y(Math.max(d.open, d.close)));})
|
||||||
.attr("width", function(d) { return 0.5 * mm; })
|
.attr("width", function(d) { return 0.5 * mm; })
|
||||||
.attr("fill",function(d) { return d.open > d.close ? "red" : "green" ;});
|
.attr("fill",function(d) { return d.open > d.close ? "red" : "green"; });
|
||||||
} else {
|
} else {
|
||||||
let datapoint = svg.selectAll("rect")
|
let datapoint = svg.selectAll("rect")
|
||||||
.data(this.chart.dataset[0].points)
|
.data(this.chart.dataset[0].points)
|
||||||
|
|
@ -116,14 +117,14 @@
|
||||||
.attr("y", function(d) {return y(d.open);})
|
.attr("y", function(d) {return y(d.open);})
|
||||||
.attr("height", function(d) { return 1;})
|
.attr("height", function(d) { return 1;})
|
||||||
.attr("width", function(d) { return 0.25 * mm / 2; })
|
.attr("width", function(d) { return 0.25 * mm / 2; })
|
||||||
.attr("fill",function(d) { return d.open > d.close ? "red" : "green" ;});
|
.attr("fill",function(d) { return d.open > d.close ? "red" : "green"; });
|
||||||
|
|
||||||
datapoint.append("svg:rect")
|
datapoint.append("svg:rect")
|
||||||
.attr("x", function(d) { return x(d.x); })
|
.attr("x", function(d) { return x(d.x); })
|
||||||
.attr("y", function(d) {return y(d.close);})
|
.attr("y", function(d) {return y(d.close);})
|
||||||
.attr("height", function(d) { return 1;})
|
.attr("height", function(d) { return 1;})
|
||||||
.attr("width", function(d) { return 0.25 * mm / 2; })
|
.attr("width", function(d) { return 0.25 * mm / 2; })
|
||||||
.attr("fill",function(d) { return d.open > d.close ? "red" : "green" ;});
|
.attr("fill",function(d) { return d.open > d.close ? "red" : "green"; });
|
||||||
}
|
}
|
||||||
|
|
||||||
svg.selectAll("line.stem")
|
svg.selectAll("line.stem")
|
||||||
|
|
|
||||||
|
|
@ -413,9 +413,9 @@
|
||||||
|
|
||||||
if (!this.defined.text.footer) {
|
if (!this.defined.text.footer) {
|
||||||
this.position.footer.top = temp.node().getBoundingClientRect().height;
|
this.position.footer.top = temp.node().getBoundingClientRect().height;
|
||||||
this.margin.bottom += temp.node().getBoundingClientRect().height + 10;
|
this.margin.bottom += temp.node().getBoundingClientRect().height + 10;
|
||||||
this.defined.text.footer = true;
|
this.defined.text.footer = true;
|
||||||
this.shouldRedraw = true;
|
this.shouldRedraw = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@
|
||||||
{
|
{
|
||||||
return x(d.x) + x.rangeBand() / self.chart.dataset.length * j;
|
return x(d.x) + x.rangeBand() / self.chart.dataset.length * j;
|
||||||
})
|
})
|
||||||
.attr("width", x.rangeBand() /self.chart.dataset.length)
|
.attr("width", x.rangeBand() / self.chart.dataset.length)
|
||||||
.transition()
|
.transition()
|
||||||
.attr("y", function (d)
|
.attr("y", function (d)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@
|
||||||
- Math.max(this.chart.margin.right + this.chart.margin.left,
|
- Math.max(this.chart.margin.right + this.chart.margin.left,
|
||||||
this.chart.margin.top + this.chart.margin.bottom)
|
this.chart.margin.top + this.chart.margin.bottom)
|
||||||
),
|
),
|
||||||
innerRadius = radius - radius*self.chart.dataSettings.style.strokewidth,
|
innerRadius = radius - radius * self.chart.dataSettings.style.strokewidth,
|
||||||
arc = d3.svg.arc()
|
arc = d3.svg.arc()
|
||||||
.outerRadius(function() { return radius; })
|
.outerRadius(function() { return radius; })
|
||||||
.innerRadius(function() { return innerRadius; });
|
.innerRadius(function() { return innerRadius; });
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
visible: true
|
visible: true
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.chart.subtype = 'waterfall';
|
this.chart.subtype = 'waterfall';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -136,7 +137,7 @@
|
||||||
.tickFormat("");
|
.tickFormat("");
|
||||||
|
|
||||||
x.domain(this.chart.dataset[0].points.map(function(d) { return d.name; }));
|
x.domain(this.chart.dataset[0].points.map(function(d) { return d.name; }));
|
||||||
y.domain([0, d3.max(this.chart.dataset[0].points, function(d) { return d.y*1.05; })]);
|
y.domain([0, d3.max(this.chart.dataset[0].points, function(d) { return d.y * 1.05; })]);
|
||||||
|
|
||||||
svg = this.chart.chartSelect.append("svg")
|
svg = this.chart.chartSelect.append("svg")
|
||||||
.attr("width", this.chart.dimension.width)
|
.attr("width", this.chart.dimension.width)
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@
|
||||||
visible: true
|
visible: true
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.chart.subtype = 'scatterplot';
|
this.chart.subtype = 'scatterplot';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -103,11 +103,11 @@ export class EventManager {
|
||||||
{
|
{
|
||||||
if (this.callbacks.hasOwnProperty(group)) {
|
if (this.callbacks.hasOwnProperty(group)) {
|
||||||
return this.triggerSingleEvent(group, id, data);
|
return this.triggerSingleEvent(group, id, data);
|
||||||
}
|
}p
|
||||||
|
|
||||||
const allGroups = Object.keys(this.callbacks),
|
const allGroups = Object.keys(this.callbacks),
|
||||||
regex = new RegExp(group),
|
regex = new RegExp(group),
|
||||||
length = allGroups.length;
|
length = allGroups.length;
|
||||||
|
|
||||||
let result = false;
|
let result = false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ export function domGetValue (action, callback, id)
|
||||||
{
|
{
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const e = action.base === 'self' ? (action.selector === '' || typeof action.selector === 'undefined' ? [document.getElementById(id)] : document.getElementById(id).querySelectorAll(action.selector)) : document.querySelectorAll(action.selector);
|
const e = action.base === 'self' ? (action.selector === '' || typeof action.selector === 'undefined' ? [document.getElementById(id)] : document.getElementById(id).querySelectorAll(action.selector)) : document.querySelectorAll(action.selector);
|
||||||
let value = {};
|
let value = {};
|
||||||
|
|
||||||
for (let i in e) {
|
for (let i in e) {
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,13 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
jsOMS.Client = function (ip, port, protocol) {
|
jsOMS.Client = function (ip, port, protocol) {
|
||||||
this.port = port;
|
this.port = port;
|
||||||
this.ip = ip;
|
this.ip = ip;
|
||||||
this.protocol = protocol;
|
this.protocol = protocol;
|
||||||
this.connection = null;
|
this.connection = null;
|
||||||
this.messages = [];
|
this.messages = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
jsOMS.Client.prototype.setMessage = function(id, callback) {
|
jsOMS.Client.prototype.setMessage = function(id, callback) {
|
||||||
this.messages[id] = callback;
|
this.messages[id] = callback;
|
||||||
};
|
};
|
||||||
|
|
@ -25,7 +26,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
jsOMS.Client.prototype.connect = function() {
|
jsOMS.Client.prototype.connect = function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.connection = new WebSocket(this.ip, this.protocol);
|
this.connection = new WebSocket(this.ip, this.protocol);
|
||||||
|
|
||||||
this.connection.onmessage = function(event) {
|
this.connection.onmessage = function(event) {
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
jsOMS.Spreadsheet.Cell = function(id, raw)
|
jsOMS.Spreadsheet.Cell = function(id, raw)
|
||||||
{
|
{
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.raw = raw;
|
this.raw = raw;
|
||||||
this.formatting = raw.formatting;
|
this.formatting = raw.formatting;
|
||||||
};
|
};
|
||||||
}(window.jsOMS = window.jsOMS || {}));
|
}(window.jsOMS = window.jsOMS || {}));
|
||||||
|
|
@ -122,7 +122,7 @@ export class AdvancedInput {
|
||||||
remoteCallback(self, data)
|
remoteCallback(self, data)
|
||||||
{
|
{
|
||||||
console.log(data);
|
console.log(data);
|
||||||
data = JSON.parse(data.response)[0];
|
data = JSON.parse(data.response)[0];
|
||||||
const dataLength = data.length;
|
const dataLength = data.length;
|
||||||
|
|
||||||
console.table(data);
|
console.table(data);
|
||||||
|
|
|
||||||
|
|
@ -27,16 +27,16 @@ export class AdvancedSelect {
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
constructor(e) {
|
constructor(e) {
|
||||||
this.id = e.id;
|
this.id = e.id;
|
||||||
this.selectComponent = e;
|
this.selectComponent = e;
|
||||||
this.selectField = this.selectComponent.getElementsByClassName('input')[0];
|
this.selectField = this.selectComponent.getElementsByClassName('input')[0];
|
||||||
this.dropdownElement = document.getElementById(this.id + '-dropdown');
|
this.dropdownElement = document.getElementById(this.id + '-dropdown');
|
||||||
this.tagElement = document.getElementById(this.id + '-tags');
|
this.tagElement = document.getElementById(this.id + '-tags');
|
||||||
this.dataList = this.dropdownElement.getElementsByTagName('table')[0];
|
this.dataList = this.dropdownElement.getElementsByTagName('table')[0];
|
||||||
this.dataListBody = this.dataList.getElementsByTagName('tbody')[0];
|
this.dataListBody = this.dataList.getElementsByTagName('tbody')[0];
|
||||||
this.dataTpl = document.getElementById(this.id + '-rowElement');
|
this.dataTpl = document.getElementById(this.id + '-rowElement');
|
||||||
this.tagTpl = this.tagElement.getElementsByTagName('template')[0];
|
this.tagTpl = this.tagElement.getElementsByTagName('template')[0];
|
||||||
this.src = this.selectField.getAttribute('data-src');
|
this.src = this.selectField.getAttribute('data-src');
|
||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
this.selectField.addEventListener('focusout', function (e) {
|
this.selectField.addEventListener('focusout', function (e) {
|
||||||
|
|
@ -128,7 +128,7 @@ export class AdvancedSelect {
|
||||||
*/
|
*/
|
||||||
remoteCallback(self, data) {
|
remoteCallback(self, data) {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
data = JSON.parse(data.response)[0];
|
data = JSON.parse(data.response)[0];
|
||||||
const dataLength = data.length;
|
const dataLength = data.length;
|
||||||
|
|
||||||
console.table(data);
|
console.table(data);
|
||||||
|
|
@ -141,8 +141,8 @@ export class AdvancedSelect {
|
||||||
|
|
||||||
for (let i = 0; i < dataLength; ++i) {
|
for (let i = 0; i < dataLength; ++i) {
|
||||||
// set readable value
|
// set readable value
|
||||||
const newRow = self.dataTpl.content.cloneNode(true);
|
const newRow = self.dataTpl.content.cloneNode(true);
|
||||||
let fields = newRow.querySelectorAll('[data-tpl-text]');
|
let fields = newRow.querySelectorAll('[data-tpl-text]');
|
||||||
let fieldLength = fields.length;
|
let fieldLength = fields.length;
|
||||||
|
|
||||||
for (let j = 0; j < fieldLength; ++j) {
|
for (let j = 0; j < fieldLength; ++j) {
|
||||||
|
|
@ -154,7 +154,7 @@ export class AdvancedSelect {
|
||||||
}
|
}
|
||||||
|
|
||||||
// set internal value
|
// set internal value
|
||||||
fields = newRow.querySelectorAll('[data-tpl-value]');
|
fields = newRow.querySelectorAll('[data-tpl-value]');
|
||||||
fieldLength = fields.length;
|
fieldLength = fields.length;
|
||||||
|
|
||||||
for (let j = 0; j < fieldLength; ++j) {
|
for (let j = 0; j < fieldLength; ++j) {
|
||||||
|
|
@ -249,10 +249,10 @@ export class AdvancedSelect {
|
||||||
const newTag = self.tagTpl.content.cloneNode(true);
|
const newTag = self.tagTpl.content.cloneNode(true);
|
||||||
|
|
||||||
// set internal value
|
// set internal value
|
||||||
let fields = newTag.querySelectorAll('[data-tpl-value]');
|
let fields = newTag.querySelectorAll('[data-tpl-value]');
|
||||||
let fieldLength = fields.length;
|
let fieldLength = fields.length;
|
||||||
let uuid = '';
|
let uuid = '';
|
||||||
let value = '';
|
let value = '';
|
||||||
|
|
||||||
for (let j = 0; j < fieldLength; ++j) {
|
for (let j = 0; j < fieldLength; ++j) {
|
||||||
value = document.activeElement.querySelectorAll('[data-tpl-value="' + fields[j].getAttribute('data-tpl-value') + '"]')[0].getAttribute('data-value');
|
value = document.activeElement.querySelectorAll('[data-tpl-value="' + fields[j].getAttribute('data-tpl-value') + '"]')[0].getAttribute('data-value');
|
||||||
|
|
@ -270,7 +270,7 @@ export class AdvancedSelect {
|
||||||
newTag.firstElementChild.setAttribute('data-tpl-uuid', uuid);
|
newTag.firstElementChild.setAttribute('data-tpl-uuid', uuid);
|
||||||
|
|
||||||
// set readable text
|
// set readable text
|
||||||
fields = newTag.querySelectorAll('[data-tpl-text]');
|
fields = newTag.querySelectorAll('[data-tpl-text]');
|
||||||
fieldLength = fields.length;
|
fieldLength = fields.length;
|
||||||
|
|
||||||
for (let j = 0; j < fieldLength; ++j) {
|
for (let j = 0; j < fieldLength; ++j) {
|
||||||
|
|
|
||||||
|
|
@ -141,19 +141,19 @@ export class Form {
|
||||||
}
|
}
|
||||||
|
|
||||||
const removable = this.forms[id].getRemove();
|
const removable = this.forms[id].getRemove();
|
||||||
length = removable === null ? 0 : removable.length;
|
length = removable === null ? 0 : removable.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.bindRemovable(removable[i], id);
|
this.bindRemovable(removable[i], id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const addable = this.forms[id].getAdd();
|
const addable = this.forms[id].getAdd();
|
||||||
length = addable === null ? 0 : addable.length;
|
length = addable === null ? 0 : addable.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.bindAddInline(addable[i], id);
|
this.bindAddInline(addable[i], id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const save = this.forms[id].getSave();
|
const save = this.forms[id].getSave();
|
||||||
length = save === null ? 0 : save.length;
|
length = save === null ? 0 : save.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.bindSaveInline(save[i], id);
|
this.bindSaveInline(save[i], id);
|
||||||
}
|
}
|
||||||
|
|
@ -163,19 +163,19 @@ export class Form {
|
||||||
}
|
}
|
||||||
|
|
||||||
const cancel = this.forms[id].getCancel();
|
const cancel = this.forms[id].getCancel();
|
||||||
length = cancel === null ? 0 : cancel.length;
|
length = cancel === null ? 0 : cancel.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.bindCancelInline(cancel[i], id);
|
this.bindCancelInline(cancel[i], id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const update = this.forms[id].getUpdate();
|
const update = this.forms[id].getUpdate();
|
||||||
length = update === null ? 0 : update.length;
|
length = update === null ? 0 : update.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.bindUpdatable(update[i], id);
|
this.bindUpdatable(update[i], id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const imgPreviews = this.forms[id].getImagePreviews();
|
const imgPreviews = this.forms[id].getImagePreviews();
|
||||||
length = imgPreviews === null ? 0 : imgPreviews.length;
|
length = imgPreviews === null ? 0 : imgPreviews.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.bindImagePreview(imgPreviews[i], id);
|
this.bindImagePreview(imgPreviews[i], id);
|
||||||
}
|
}
|
||||||
|
|
@ -196,9 +196,9 @@ export class Form {
|
||||||
|
|
||||||
imageUpload.addEventListener('change', function () {
|
imageUpload.addEventListener('change', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = document.getElementById(id);
|
||||||
const preview = formElement.querySelector('img#preview-' + imageUpload.getAttribute('name'));
|
const preview = formElement.querySelector('img#preview-' + imageUpload.getAttribute('name'));
|
||||||
|
|
||||||
preview.src = window.URL.createObjectURL(imageUpload.files[0]);
|
preview.src = window.URL.createObjectURL(imageUpload.files[0]);
|
||||||
preview.onload = function () {
|
preview.onload = function () {
|
||||||
window.URL.revokeObjectURL(this.src);
|
window.URL.revokeObjectURL(this.src);
|
||||||
}
|
}
|
||||||
|
|
@ -322,9 +322,9 @@ export class Form {
|
||||||
console.log(xhr.response);
|
console.log(xhr.response);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const o = JSON.parse(xhr.response)[0],
|
const o = JSON.parse(xhr.response)[0],
|
||||||
response = new Response(o);
|
response = new Response(o);
|
||||||
let successInject = null;
|
let successInject = null;
|
||||||
|
|
||||||
if ((successInject = form.getSuccess()) !== null) {
|
if ((successInject = form.getSuccess()) !== null) {
|
||||||
successInject(response);
|
successInject(response);
|
||||||
|
|
@ -396,18 +396,18 @@ export class Form {
|
||||||
|
|
||||||
this.app.uiManager.getFormManager().get(createForm).injectSubmit(function () {
|
this.app.uiManager.getFormManager().get(createForm).injectSubmit(function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = document.getElementById(id);
|
||||||
const subMain = formElement.getAttribute('data-ui-content').charAt(0) === '#'
|
const subMain = formElement.getAttribute('data-ui-content').charAt(0) === '#'
|
||||||
? document.querySelector(formElement.getAttribute('data-ui-content'))
|
? document.querySelector(formElement.getAttribute('data-ui-content'))
|
||||||
: formElement.querySelector(formElement.getAttribute('data-ui-content'));
|
: formElement.querySelector(formElement.getAttribute('data-ui-content'));
|
||||||
|
|
||||||
// todo: [0/1] is no longer working because of arbitrary templates for inline editing
|
// todo: [0/1] is no longer working because of arbitrary templates for inline editing
|
||||||
const newEle = subMain.getElementsByTagName('template')[0].content.cloneNode(true);
|
const newEle = subMain.getElementsByTagName('template')[0].content.cloneNode(true);
|
||||||
|
|
||||||
// set internal value
|
// set internal value
|
||||||
let fields = newEle.querySelectorAll('[data-tpl-value]');
|
let fields = newEle.querySelectorAll('[data-tpl-value]');
|
||||||
let fieldLength = fields.length;
|
let fieldLength = fields.length;
|
||||||
let uuid = '';
|
let uuid = '';
|
||||||
let value = '';
|
let value = '';
|
||||||
|
|
||||||
for (let j = 0; j < fieldLength; ++j) {
|
for (let j = 0; j < fieldLength; ++j) {
|
||||||
value = document.querySelectorAll(
|
value = document.querySelectorAll(
|
||||||
|
|
@ -429,7 +429,7 @@ export class Form {
|
||||||
newEle.firstElementChild.setAttribute('data-tpl-uuid', uuid);
|
newEle.firstElementChild.setAttribute('data-tpl-uuid', uuid);
|
||||||
|
|
||||||
// set readable text
|
// set readable text
|
||||||
fields = newEle.querySelectorAll('[data-tpl-text]');
|
fields = newEle.querySelectorAll('[data-tpl-text]');
|
||||||
fieldLength = fields.length;
|
fieldLength = fields.length;
|
||||||
|
|
||||||
for (let j = 0; j < fieldLength; ++j) {
|
for (let j = 0; j < fieldLength; ++j) {
|
||||||
|
|
@ -472,16 +472,16 @@ export class Form {
|
||||||
|
|
||||||
createForm.addEventListener('click', function () {
|
createForm.addEventListener('click', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = document.getElementById(id);
|
||||||
const subMain = formElement.getAttribute('data-ui-content').charAt(0) === '#'
|
const subMain = formElement.getAttribute('data-ui-content').charAt(0) === '#'
|
||||||
? document.querySelector(formElement.getAttribute('data-ui-content'))
|
? document.querySelector(formElement.getAttribute('data-ui-content'))
|
||||||
: formElement.querySelector(formElement.getAttribute('data-ui-content'));
|
: formElement.querySelector(formElement.getAttribute('data-ui-content'));
|
||||||
|
|
||||||
// todo: [0/1] is no longer working because of arbitrary templates for inline editing
|
// todo: [0/1] is no longer working because of arbitrary templates for inline editing
|
||||||
const newEle = subMain.getElementsByTagName('template')[1].content.cloneNode(true);
|
const newEle = subMain.getElementsByTagName('template')[1].content.cloneNode(true);
|
||||||
const eleId = 'f' + Math.random().toString(36).substring(7);
|
const eleId = 'f' + Math.random().toString(36).substring(7);
|
||||||
// todo: check if random id doesn't already exist
|
// todo: check if random id doesn't already exist
|
||||||
|
|
||||||
newEle.firstElementChild.id = eleId;
|
newEle.firstElementChild.id = eleId;
|
||||||
newEle.firstElementChild.getElementsByTagName('form')[0].id = eleId + '-form';
|
newEle.firstElementChild.getElementsByTagName('form')[0].id = eleId + '-form';
|
||||||
|
|
||||||
const fields = newEle.firstElementChild.querySelectorAll('[data-form="' + id + '"]');
|
const fields = newEle.firstElementChild.querySelectorAll('[data-form="' + id + '"]');
|
||||||
|
|
@ -575,7 +575,7 @@ export class Form {
|
||||||
values = values.concat(
|
values = values.concat(
|
||||||
parents[i].hasAttribute('data-tpl-value') ? parents[i] : Array.prototype.slice.call(parents[i].querySelectorAll('[data-tpl-value]'))
|
parents[i].hasAttribute('data-tpl-value') ? parents[i] : Array.prototype.slice.call(parents[i].querySelectorAll('[data-tpl-value]'))
|
||||||
);
|
);
|
||||||
text = text.concat(
|
text = text.concat(
|
||||||
parents[i].hasAttribute('data-tpl-text') ? parents[i] : Array.prototype.slice.call(parents[i].querySelectorAll('[data-tpl-text]'))
|
parents[i].hasAttribute('data-tpl-text') ? parents[i] : Array.prototype.slice.call(parents[i].querySelectorAll('[data-tpl-text]'))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -668,13 +668,13 @@ export class Form {
|
||||||
jsOMS.addClass(this, 'hidden');
|
jsOMS.addClass(this, 'hidden');
|
||||||
|
|
||||||
const saveButtons = self.forms[id].getSave();
|
const saveButtons = self.forms[id].getSave();
|
||||||
length = saveButtons.length;
|
length = saveButtons.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
jsOMS.removeClass(saveButtons[i], 'hidden');
|
jsOMS.removeClass(saveButtons[i], 'hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
const cancelButtons = self.forms[id].getCancel();
|
const cancelButtons = self.forms[id].getCancel();
|
||||||
length = cancelButtons.length;
|
length = cancelButtons.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
jsOMS.removeClass(cancelButtons[i], 'hidden');
|
jsOMS.removeClass(cancelButtons[i], 'hidden');
|
||||||
}
|
}
|
||||||
|
|
@ -717,21 +717,21 @@ export class Form {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
save.addEventListener('click', function () {
|
save.addEventListener('click', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = document.getElementById(id);
|
||||||
const parentsTpl = [];
|
const parentsTpl = [];
|
||||||
const parentsContent = [];
|
const parentsContent = [];
|
||||||
const selectors = formElement.getAttribute('data-ui-element').split(','),
|
const selectors = formElement.getAttribute('data-ui-element').split(','),
|
||||||
selectorLength = selectors.length;
|
selectorLength = selectors.length;
|
||||||
|
|
||||||
let values = [];
|
let values = [];
|
||||||
let text = [];
|
let text = [];
|
||||||
|
|
||||||
for (let i = 0; i < selectorLength; ++i) {
|
for (let i = 0; i < selectorLength; ++i) {
|
||||||
// todo: similar logic is in updatable Inline and probably in External... pull out?
|
// todo: similar logic is in updatable Inline and probably in External... pull out?
|
||||||
// this handles selectors such as 'ancestor > child/or/sibling' and many more
|
// this handles selectors such as 'ancestor > child/or/sibling' and many more
|
||||||
// todo: maybe move this to the library as an advanced ancestor function?
|
// todo: maybe move this to the library as an advanced ancestor function?
|
||||||
let selector = selectors[i].trim(' ').split(' ');
|
let selector = selectors[i].trim(' ').split(' ');
|
||||||
let closest = selector[0].trim();
|
let closest = selector[0].trim();
|
||||||
|
|
||||||
// template elements
|
// template elements
|
||||||
let subSelector = '';
|
let subSelector = '';
|
||||||
|
|
@ -747,8 +747,8 @@ export class Form {
|
||||||
);
|
);
|
||||||
|
|
||||||
// content elements
|
// content elements
|
||||||
selector = selectors[i].trim(' ').split(' ');
|
selector = selectors[i].trim(' ').split(' ');
|
||||||
closest = selector[0].trim();
|
closest = selector[0].trim();
|
||||||
subSelector = '';
|
subSelector = '';
|
||||||
if (selector.length !== 0) {
|
if (selector.length !== 0) {
|
||||||
selector.shift();
|
selector.shift();
|
||||||
|
|
@ -764,7 +764,7 @@ export class Form {
|
||||||
values = values.concat(
|
values = values.concat(
|
||||||
parentsTpl[i].hasAttribute('data-tpl-value') ? parentsTpl[i] : Array.prototype.slice.call(parentsTpl[i].querySelectorAll('[data-tpl-value]'))
|
parentsTpl[i].hasAttribute('data-tpl-value') ? parentsTpl[i] : Array.prototype.slice.call(parentsTpl[i].querySelectorAll('[data-tpl-value]'))
|
||||||
);
|
);
|
||||||
text = text.concat(
|
text = text.concat(
|
||||||
parentsTpl[i].hasAttribute('data-tpl-text') ? parentsTpl[i] : Array.prototype.slice.call(parentsTpl[i].querySelectorAll('[data-tpl-text]'))
|
parentsTpl[i].hasAttribute('data-tpl-text') ? parentsTpl[i] : Array.prototype.slice.call(parentsTpl[i].querySelectorAll('[data-tpl-text]'))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -818,13 +818,13 @@ export class Form {
|
||||||
*/
|
*/
|
||||||
removeEditTemplate(ele, id)
|
removeEditTemplate(ele, id)
|
||||||
{
|
{
|
||||||
const formElement = document.getElementById(id);
|
const formElement = document.getElementById(id);
|
||||||
const selectors = formElement.getAttribute('data-ui-element').split(','),
|
const selectors = formElement.getAttribute('data-ui-element').split(','),
|
||||||
selectorLength = selectors.length;
|
selectorLength = selectors.length;
|
||||||
|
|
||||||
for (let i = 0; i < selectorLength; ++i) {
|
for (let i = 0; i < selectorLength; ++i) {
|
||||||
let selector = selectors[i].trim(' ').split(' ');
|
let selector = selectors[i].trim(' ').split(' ');
|
||||||
let closest = selector[0].trim();
|
let closest = selector[0].trim();
|
||||||
|
|
||||||
let subSelector = '';
|
let subSelector = '';
|
||||||
if (selector.length !== 0) {
|
if (selector.length !== 0) {
|
||||||
|
|
@ -832,8 +832,8 @@ export class Form {
|
||||||
subSelector = selector.join(' ').trim();
|
subSelector = selector.join(' ').trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
let content = selector.length === 0 ? ele.closest(closest) : ele.closest(closest).querySelector(subSelector);
|
let content = selector.length === 0 ? ele.closest(closest) : ele.closest(closest).querySelector(subSelector);
|
||||||
const tpls = content.parentNode.querySelectorAll('[data-marker=tpl]'),
|
const tpls = content.parentNode.querySelectorAll('[data-marker=tpl]'),
|
||||||
tplsLength = tpls.length;
|
tplsLength = tpls.length;
|
||||||
|
|
||||||
for (let j = 0; j < tplsLength; ++j) {
|
for (let j = 0; j < tplsLength; ++j) {
|
||||||
|
|
@ -845,19 +845,19 @@ export class Form {
|
||||||
}
|
}
|
||||||
|
|
||||||
const saveButtons = this.forms[id].getSave();
|
const saveButtons = this.forms[id].getSave();
|
||||||
let length = saveButtons.length;
|
let length = saveButtons.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
jsOMS.addClass(saveButtons[i], 'hidden');
|
jsOMS.addClass(saveButtons[i], 'hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
const cancelButtons = this.forms[id].getCancel();
|
const cancelButtons = this.forms[id].getCancel();
|
||||||
length = cancelButtons.length;
|
length = cancelButtons.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
jsOMS.addClass(cancelButtons[i], 'hidden');
|
jsOMS.addClass(cancelButtons[i], 'hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
const update = this.forms[id].getUpdate();
|
const update = this.forms[id].getUpdate();
|
||||||
length = update === null ? 0 : update.length;
|
length = update === null ? 0 : update.length;
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
jsOMS.removeClass(update[i], 'hidden');
|
jsOMS.removeClass(update[i], 'hidden');
|
||||||
}
|
}
|
||||||
|
|
@ -879,13 +879,13 @@ export class Form {
|
||||||
|
|
||||||
update.addEventListener('click', function () {
|
update.addEventListener('click', function () {
|
||||||
const formElement = document.getElementById(id);
|
const formElement = document.getElementById(id);
|
||||||
const parent = this.closest(formElement.getAttribute('data-ui-element'));
|
const parent = this.closest(formElement.getAttribute('data-ui-element'));
|
||||||
const formId = formElement.getAttribute('data-ui-form');
|
const formId = formElement.getAttribute('data-ui-form');
|
||||||
const values = parent.querySelectorAll('[data-tpl-value]');
|
const values = parent.querySelectorAll('[data-tpl-value]');
|
||||||
const text = parent.querySelectorAll('[data-tpl-text]');
|
const text = parent.querySelectorAll('[data-tpl-text]');
|
||||||
|
|
||||||
const fields = document.getElementById(formId).querySelectorAll('[data-form="' + id + '"]');
|
const fields = document.getElementById(formId).querySelectorAll('[data-form="' + id + '"]');
|
||||||
let length = fields.length;
|
let length = fields.length;
|
||||||
|
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
fields[i].setAttribute('data-form', eleId);
|
fields[i].setAttribute('data-form', eleId);
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ export class Tab {
|
||||||
this.bindElement(e);
|
this.bindElement(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const tabs = document.getElementsByClassName('tabview'),
|
const tabs = document.getElementsByClassName('tabview');
|
||||||
length = !tabs ? 0 : tabs.length;
|
const length = !tabs ? 0 : tabs.length;
|
||||||
|
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.bindElement(tabs[i]);
|
this.bindElement(tabs[i]);
|
||||||
|
|
@ -59,7 +59,7 @@ export class Tab {
|
||||||
bindElement (e)
|
bindElement (e)
|
||||||
{
|
{
|
||||||
const nodes = e.querySelectorAll('.tab-links li'),
|
const nodes = e.querySelectorAll('.tab-links li'),
|
||||||
length = nodes.length;
|
length = nodes.length;
|
||||||
|
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
nodes[i].addEventListener('click', function (evt)
|
nodes[i].addEventListener('click', function (evt)
|
||||||
|
|
@ -122,7 +122,7 @@ export class Tab {
|
||||||
{
|
{
|
||||||
const fragmentString = window.location.href.includes('#') ? Http.parseUrl(window.location.href).fragment : '';
|
const fragmentString = window.location.href.includes('#') ? Http.parseUrl(window.location.href).fragment : '';
|
||||||
const fragments = fragmentString.split(','),
|
const fragments = fragmentString.split(','),
|
||||||
fragLength = fragments.length;
|
fragLength = fragments.length;
|
||||||
|
|
||||||
if (fragLength > 0 && fragmentString !== '') {
|
if (fragLength > 0 && fragmentString !== '') {
|
||||||
for (let i = 0; i < fragLength; ++i) {
|
for (let i = 0; i < fragLength; ++i) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ export class Table {
|
||||||
*/
|
*/
|
||||||
constructor(app)
|
constructor(app)
|
||||||
{
|
{
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
|
||||||
/** @var {Object <string, TableView>} */
|
/** @var {Object <string, TableView>} */
|
||||||
this.tables = {};
|
this.tables = {};
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ export class GeneralUI {
|
||||||
*/
|
*/
|
||||||
bindInput (e)
|
bindInput (e)
|
||||||
{
|
{
|
||||||
e = e !== null ? [e] : document.getElementsByClassName('advancedInput');
|
e = e !== null ? [e] : document.getElementsByClassName('advancedInput');
|
||||||
const length = e.length;
|
const length = e.length;
|
||||||
|
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,7 @@ export class UriFactory {
|
||||||
|
|
||||||
// unique fragments
|
// unique fragments
|
||||||
const fragments = url.match(/\#[a-zA-Z0-9\-,]+/g),
|
const fragments = url.match(/\#[a-zA-Z0-9\-,]+/g),
|
||||||
fragLength = fragments !== null ? fragments.length : 0;
|
fragLength = fragments !== null ? fragments.length : 0;
|
||||||
|
|
||||||
for (let i = 0; i < fragLength - 1; ++i) {
|
for (let i = 0; i < fragLength - 1; ++i) {
|
||||||
// remove all from old url
|
// remove all from old url
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
var visited = [];
|
var visited = [];
|
||||||
var findings = {};
|
var findings = {};
|
||||||
var cssSelectors = {},
|
var cssSelectors = {},
|
||||||
cssSelectorsLength = 0;
|
cssSelectorsLength = 0;
|
||||||
const cssFiles = ['http://127.0.0.1/cssOMS/styles.css'];
|
const cssFiles = ['http://127.0.0.1/cssOMS/styles.css'];
|
||||||
const cssFilesLength = cssFiles.length;
|
const cssFilesLength = cssFiles.length;
|
||||||
const domain = window.location.hostname;
|
const domain = window.location.hostname;
|
||||||
const pageLimit = 10;
|
const pageLimit = 10;
|
||||||
|
|
||||||
var cssRequest = new XMLHttpRequest();
|
var cssRequest = new XMLHttpRequest();
|
||||||
cssRequest.onreadystatechange = function()
|
cssRequest.onreadystatechange = function()
|
||||||
{
|
{
|
||||||
if (cssRequest.readyState == 4 && cssRequest.status == 200) {
|
if (cssRequest.readyState == 4 && cssRequest.status == 200) {
|
||||||
const cssText = this.responseText;
|
const cssText = this.responseText;
|
||||||
const result = cssText.match(/[a-zA-Z0-9\ :>~\.\"'#,\[\]=\-\(\)\*]+{/g),
|
const result = cssText.match(/[a-zA-Z0-9\ :>~\.\"'#,\[\]=\-\(\)\*]+{/g),
|
||||||
resultLength = result.length;
|
resultLength = result.length;
|
||||||
|
|
||||||
for (let i = 1; i < resultLength; ++i) {
|
for (let i = 1; i < resultLength; ++i) {
|
||||||
|
|
@ -41,7 +41,7 @@ validatePage = function(url)
|
||||||
findings[url] = {};
|
findings[url] = {};
|
||||||
|
|
||||||
// web request
|
// web request
|
||||||
var webRequest = new XMLHttpRequest();
|
var webRequest = new XMLHttpRequest();
|
||||||
webRequest.onreadystatechange = function()
|
webRequest.onreadystatechange = function()
|
||||||
{
|
{
|
||||||
if (webRequest.readyState == 4 && webRequest.status == 200) {
|
if (webRequest.readyState == 4 && webRequest.status == 200) {
|
||||||
|
|
@ -51,45 +51,45 @@ validatePage = function(url)
|
||||||
document.close();
|
document.close();
|
||||||
|
|
||||||
// analyze img alt attribute
|
// analyze img alt attribute
|
||||||
let imgAlt = document.querySelectorAll('img:not([alt]), img[alt=""], img[alt=" "]');
|
let imgAlt = document.querySelectorAll('img:not([alt]), img[alt=""], img[alt=" "]');
|
||||||
findings[url]['img_alt'] = imgAlt.length;
|
findings[url]['img_alt'] = imgAlt.length;
|
||||||
|
|
||||||
// analyze img src
|
// analyze img src
|
||||||
let imgSrc = document.querySelectorAll('img:not([src]), img[src=""], img[src=" "]');
|
let imgSrc = document.querySelectorAll('img:not([src]), img[src=""], img[src=" "]');
|
||||||
findings[url]['img_src'] = imgSrc.length;
|
findings[url]['img_src'] = imgSrc.length;
|
||||||
|
|
||||||
// analyze empty link
|
// analyze empty link
|
||||||
let aHref = document.querySelectorAll('a:not([alt]), a[href=""], a[href=" "], a[href="#"]');
|
let aHref = document.querySelectorAll('a:not([alt]), a[href=""], a[href=" "], a[href="#"]');
|
||||||
findings[url]['href_empty'] = aHref.length;
|
findings[url]['href_empty'] = aHref.length;
|
||||||
|
|
||||||
// analyze inline on* function
|
// analyze inline on* function
|
||||||
let onFunction = document.querySelectorAll('[onafterprint], [onbeforeprint], [onbeforeunload], [onerror], [onhaschange], [onload], [onmessage], [onoffline], [ononline], [onpagehide], [onpageshow], [onpopstate], [onredo], [onresize], [onstorage], [onundo], [onunload], [onblur], [onchage], [oncontextmenu], [onfocus], [onformchange], [onforminput], [oninput], [oninvalid], [onreset], [onselect], [onsubmit], [onkeydown], [onkeypress], [onkeyup], [onclick], [ondblclick], [ondrag], [ondragend], [ondragenter], [ondragleave], [ondragover], [ondragstart], [ondrop], [onmousedown], [onmousemove], [onmouseout], [onmouseover], [onmouseup], [onmousewheel], [onscroll], [onabort], [oncanplay], [oncanplaythrough], [ondurationchange], [onemptied], [onended], [onerror], [onloadeddata], [onloadedmetadata], [onloadstart], [onpause], [onplay], [onplaying], [onprogress], [onratechange], [onreadystatechange], [onseeked], [onseeking], [onstalled], [onsuspend], [ontimeupdate], [onvolumechange], [onwaiting]');
|
let onFunction = document.querySelectorAll('[onafterprint], [onbeforeprint], [onbeforeunload], [onerror], [onhaschange], [onload], [onmessage], [onoffline], [ononline], [onpagehide], [onpageshow], [onpopstate], [onredo], [onresize], [onstorage], [onundo], [onunload], [onblur], [onchage], [oncontextmenu], [onfocus], [onformchange], [onforminput], [oninput], [oninvalid], [onreset], [onselect], [onsubmit], [onkeydown], [onkeypress], [onkeyup], [onclick], [ondblclick], [ondrag], [ondragend], [ondragenter], [ondragleave], [ondragover], [ondragstart], [ondrop], [onmousedown], [onmousemove], [onmouseout], [onmouseover], [onmouseup], [onmousewheel], [onscroll], [onabort], [oncanplay], [oncanplaythrough], [ondurationchange], [onemptied], [onended], [onerror], [onloadeddata], [onloadedmetadata], [onloadstart], [onpause], [onplay], [onplaying], [onprogress], [onratechange], [onreadystatechange], [onseeked], [onseeking], [onstalled], [onsuspend], [ontimeupdate], [onvolumechange], [onwaiting]');
|
||||||
findings[url]['js_on'] = onFunction.length;
|
findings[url]['js_on'] = onFunction.length;
|
||||||
|
|
||||||
// analyze missing form element attributes
|
// analyze missing form element attributes
|
||||||
let formElements = document.querySelectorAll('input:not([id]), input[type=""], select:not([id]), textarea:not([id]), label:not([for]), label[for=""], label[for=" "], input:not([name]), select:not([name]), textarea:not([name]), form:not([id]), form:not([action]), form[action=""], form[action=" "], form[action="#"]');
|
let formElements = document.querySelectorAll('input:not([id]), input[type=""], select:not([id]), textarea:not([id]), label:not([for]), label[for=""], label[for=" "], input:not([name]), select:not([name]), textarea:not([name]), form:not([id]), form:not([action]), form[action=""], form[action=" "], form[action="#"]');
|
||||||
findings[url]['form_elements'] = formElements.length;
|
findings[url]['form_elements'] = formElements.length;
|
||||||
|
|
||||||
// analyze invalid container-children relationship (e.g. empty containers, invalid children)
|
// analyze invalid container-children relationship (e.g. empty containers, invalid children)
|
||||||
let invalidContainerChildren = document.querySelectorAll(':not(tr) > td, :not(tr) > th, colgroup *:not(col), :not(colgroup) > col, tr > :not(td):not(th), optgroup > :not(option), :not(select) > option, :not(fieldset) > legend, select > :not(option):not(optgroup), :not(select):not(optgroup) > option, table > *:not(thead):not(tfoot):not(tbody):not(tr):not(colgroup):not(caption)');
|
let invalidContainerChildren = document.querySelectorAll(':not(tr) > td, :not(tr) > th, colgroup *:not(col), :not(colgroup) > col, tr > :not(td):not(th), optgroup > :not(option), :not(select) > option, :not(fieldset) > legend, select > :not(option):not(optgroup), :not(select):not(optgroup) > option, table > *:not(thead):not(tfoot):not(tbody):not(tr):not(colgroup):not(caption)');
|
||||||
findings[url]['invalid_container_children'] = invalidContainerChildren.length;
|
findings[url]['invalid_container_children'] = invalidContainerChildren.length;
|
||||||
|
|
||||||
// has inline styles
|
// has inline styles
|
||||||
let hasInlineStyles = document.querySelectorAll('*[style]');
|
let hasInlineStyles = document.querySelectorAll('*[style]');
|
||||||
findings[url]['form_elements'] = hasInlineStyles.length;
|
findings[url]['form_elements'] = hasInlineStyles.length;
|
||||||
|
|
||||||
// analyze css usage
|
// analyze css usage
|
||||||
let cssFound;
|
let cssFound;
|
||||||
for (let i in cssSelectors) {
|
for (let i in cssSelectors) {
|
||||||
try {
|
try {
|
||||||
cssFound = document.querySelectorAll(i.replace(/:hover|:active/gi, ''));
|
cssFound = document.querySelectorAll(i.replace(/:hover|:active/gi, ''));
|
||||||
cssSelectors[i] = cssFound === null ? 0 : cssFound.length
|
cssSelectors[i] = cssFound === null ? 0 : cssFound.length
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check other pages
|
// check other pages
|
||||||
let links = document.querySelectorAll('a'),
|
let links = document.querySelectorAll('a'),
|
||||||
linkLength = links.length;
|
linkLength = links.length;
|
||||||
|
|
||||||
for (let i = 0; i < linkLength; ++i) {
|
for (let i = 0; i < linkLength; ++i) {
|
||||||
if (visited.includes(links[i].href) ||
|
if (visited.includes(links[i].href) ||
|
||||||
|
|
|
||||||
|
|
@ -96,8 +96,8 @@
|
||||||
return (str.length + 1);
|
return (str.length + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
let n = 0,
|
let n = 0,
|
||||||
pos = 0;
|
pos = 0;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
pos = str.indexOf(substr, pos);
|
pos = str.indexOf(substr, pos);
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
event.eventName = eventName;
|
event.eventName = eventName;
|
||||||
element.dispatchEvent(event);
|
element.dispatchEvent(event);
|
||||||
} else {
|
} else {
|
||||||
event = document.createEventObject();
|
event = document.createEventObject();
|
||||||
event.eventName = eventName;
|
event.eventName = eventName;
|
||||||
event.eventType = eventName;
|
event.eventType = eventName;
|
||||||
element.fireEvent(event.eventType, event);
|
element.fireEvent(event.eventType, event);
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
event.eventName = eventName;
|
event.eventName = eventName;
|
||||||
element.dispatchEvent(event);
|
element.dispatchEvent(event);
|
||||||
} else {
|
} else {
|
||||||
event = document.createEventObject();
|
event = document.createEventObject();
|
||||||
event.eventName = eventName;
|
event.eventName = eventName;
|
||||||
event.eventType = eventName;
|
event.eventType = eventName;
|
||||||
element.fireEvent(event.eventType, event);
|
element.fireEvent(event.eventType, event);
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ export class TableView {
|
||||||
serialize()
|
serialize()
|
||||||
{
|
{
|
||||||
const table = document.getElementById(this.id);
|
const table = document.getElementById(this.id);
|
||||||
let data = {
|
let data = {
|
||||||
caption: null,
|
caption: null,
|
||||||
header: [],
|
header: [],
|
||||||
rows: []
|
rows: []
|
||||||
|
|
@ -48,20 +48,20 @@ export class TableView {
|
||||||
|
|
||||||
data.caption = table.getElementsByTagName('caption')[0].innerText;
|
data.caption = table.getElementsByTagName('caption')[0].innerText;
|
||||||
|
|
||||||
const header = table.querySelectorAll('thead tr td, thead tr th'),
|
const header = table.querySelectorAll('thead tr td, thead tr th'),
|
||||||
headerLength = header.length;
|
headerLength = header.length;
|
||||||
|
|
||||||
for (let i = 0; i < headerLength; ++i) {
|
for (let i = 0; i < headerLength; ++i) {
|
||||||
data.header.push(header[i].innerText);
|
data.header.push(header[i].innerText);
|
||||||
}
|
}
|
||||||
|
|
||||||
const rows = table.querySelectorAll('tbody tr'),
|
const rows = table.querySelectorAll('tbody tr'),
|
||||||
rowsLength = rows.length;
|
rowsLength = rows.length;
|
||||||
|
|
||||||
for (let i = 0; i < rowsLength; ++i) {
|
for (let i = 0; i < rowsLength; ++i) {
|
||||||
data.rows[i] = [];
|
data.rows[i] = [];
|
||||||
|
|
||||||
const columns = rows[i].querySelectorAll('td, th'),
|
const columns = rows[i].querySelectorAll('td, th'),
|
||||||
columnLength = columns.length;
|
columnLength = columns.length;
|
||||||
|
|
||||||
for (let j = 0; j < columnLength; ++j) {
|
for (let j = 0; j < columnLength; ++j) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user