Commit 424a2e65 authored by Roque's avatar Roque

Jexcel web table app

Integrate Jexcel editor to Web Table app

See merge request nexedi/erp5!1207
parents 9a064fec fc017c37
Pipeline #11409 failed with stage
in 0 seconds
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5_jexcel_editor</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>ERP5 Jexcel Editor</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
url_list = [
"renderjs.js",
"rsvp.js",
"jio.js",
"domsugar.js",
"jsuites/jsuites.js",
"jsuites/jsuites.css",
"jexcel/jexcel.js",
"jexcel/jexcel.css",
"jexcel.gadget.html",
"jexcel.gadget.js",
"complements.css",
"fx.png",
"fonts.ttf",
"icons.css",
]
return url_list
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSection_getJexcelEditorPrecacheManifestList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
div.jexcel_formula img{
display: inline-block;
width: 12px;
height: 12px;
margin-left: 4px;
margin-right: 4px;
}
input.jexcel_formula {
margin-left: 2px;
width: calc(100% - 77px);
position:sticky;
top:0px;
z-index:0;
display: inline-block;
}
div.jexcel-filter > * {
display: inline-block;
}
input.cell_input {
display: inline-block;
width: 35px;
}
input.jexcel_search {
width: 40px;
}
.jexcel_toolbar select.minimize {
width: 90px;
}
td {
cursor: cell;
}
div.jexcel_toolbar div.jcolor-content td {
cursor: crosshair;
}
input.readonly {
cursor: not-allowed;
}
body > div.spreadsheet.jexcel_tabs > div:nth-child(1) {
position : absolute;
bottom: 0;
}
.add_delete {
position : absolute;
bottom : 3px;
right : 10px;
}
.add_delete > i {
cursor : pointer;
margin-left : 10px;
}
.jexcel_tab.jexcel_container.fullscreen.with-toolbar {
position: absolute;
top: 0;
}
.jexcel_tabs .jexcel_tab_link, .jexcel_filter > div {
font-family: arial;
}
.jexcel_tab_link.selected {
cursor: alias;
}
:focus {
outline: none;
}
@media (max-width: 1150px){
div.jexcel_filter {
display: none;
}
}
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>complements.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>fonts.ttf</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>font/ttf</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>fx.png</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: url(fonts.ttf) format('truetype');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
}
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>icons.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Jexcel</title>
<script src="rsvp.js"></script>
<script src="renderjs.js"></script>
<script src="jio.js"></script>
<script src="domsugar.js"></script>
<script src="jexcel/jexcel.js"></script>
<script src="jsuites/jsuites.js"></script>
<link rel="stylesheet" href="jexcel/jexcel.css" type="text/css" />
<link rel="stylesheet" href="jsuites/jsuites.css" type="text/css" />
<link rel="stylesheet" href="complements.css" type="text/css" />
<link rel="stylesheet" href="icons.css" type="text/css" />
<script src="jexcel.gadget.js"></script>
</head>
<body>
<div class="spreadsheet"></div>
</body>
</html>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>jexcel.gadget.html</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/*jslint nomen: true, indent: 2, maxlen: 80, unparam: true */
/*global window, rJS, RSVP, jexcel, domsugar, document, alert,
prompt, confirm, navigator*/
(function (window, rJS, jexcel, domsugar, document, alert,
prompt, confirm, navigator) {
"use strict";
function isMobileDevice() {
return (window.orientation !== undefined) ||
(navigator.userAgent.indexOf('IEMobile') !== -1);
}
function format(node, level) {
var indentBefore = new Array(level + 2).join(' '),
indentAfter,
textNode,
i;
level += 1;
indentAfter = new Array(level - 1).join(' ');
for (i = 0; i < node.children.length; i += 1) {
textNode = document.createTextNode('\n' + indentBefore);
node.insertBefore(textNode, node.children[i]);
format(node.children[i], level);
if (node.lastElementChild === node.children[i]) {
textNode = document.createTextNode('\n' + indentAfter);
node.appendChild(textNode);
}
}
return node;
}
function beautifyHTMLString(str) {
var div = domsugar("div", {html: str.trim()});
return format(div, 0).innerHTML;
}
function createElementFromHTML(html_string) {
var div = domsugar("div", {html: html_string.trim()});
return div.children;
}
function columnLetterToNumber(str) {
// convert a column letter to its corresponding column number :
// A -> 0, B -> 1, AA -> 26, AB -> 27 ...
var out = 0, len = str.length, pos = len;
while (--pos > -1) {
out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - 1 - pos);
}
return out - 1;
}
function numberToColumnLetter(i) {
// convert a column number to its corresponding column letter :
// 0 -> A, 1 -> B, 26 -> AA, 27 -> AB ...
return (i >= 26 ? numberToColumnLetter((i / 26 >> 0) - 1) : '') +
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26 >> 0];
}
function getCoordinatesFromCell(cell) {
var x = Number(cell.dataset.x),
y = Number(cell.dataset.y) + 1;
return numberToColumnLetter(x) + y.toString();
}
function fireDoubleClick(element) {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent('dblclick', true, true);
element.dispatchEvent(clickEvent);
}
function getCurrentSheet(gadget) {
var worksheet = gadget.element.querySelector('.selected')
.getAttribute('data-spreadsheet');
return gadget.element.querySelector('.spreadsheet').jexcel[worksheet];
}
function buildSelectOptions() {
var frag = document.createDocumentFragment(),
formulas;
formulas = ["SUM", "MIN", "MAX", "COUNT", "AVERAGE", "FLOOR", "ABS",
"SQRT", "ISEVEN", "ISODD", "TODAY", "UPPER", "LOWER", "TRUNC",
"TYPE", "TRIM", "SIN", "COS", "TAN", "ARCSIN", "ARCCOS",
"ARCTAN", "ROUND", "RAND", "RANDBETWEEN", "RADIANS", "POWER",
"PI", "PHI", "MOD", "LEN", "LN", "LOG", "LOG10", "FACT", "TRUE",
"FALSE", "AND", "OR", "XOR", "EVEN", "ODD", "EXP",
"CONCATENATE", "BITAND", "BITOR", "BIN2DEC", "BIN2HEX",
"BIN2OCT", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN",
"HEX2DEC", "HEX2OCT", "NOT", "OCT2BIN", "OCT2DEC", "OCT2HEX",
"PRODUCT", "QUOTIENT", "COLUMN", "ROW", "CELL"].sort();
frag.appendChild(
domsugar("option", {text: "FORMULA", "class": "formula_option"})
);
formulas.forEach(function (value) {
frag.appendChild(
domsugar("option",
{"class": "formula_option", text: value + "()", value: value}
)
);
});
return frag;
}
function setupTable(gadget, element) {
var filter = element.querySelector(".jexcel_filter"),
formula_div = domsugar("div", {"class": "jexcel_formula"}),
img = domsugar("img", {src: "fx.png"}),
formula_input = domsugar("input", {"class": "jexcel_formula"}),
cell_input = domsugar("input", {"class": "cell_input"}),
options = buildSelectOptions(),
select = domsugar("select", {"class": "minimize"}),
buttons;
element.querySelector("table.jexcel tr").childNodes.forEach(function (td) {
td.style.textAlign = "center";
});
element.querySelector(".jexcel_toolbar").appendChild(filter);
element.querySelector("select.jexcel_toolbar_item")
.classList.add("minimize");
formula_div.appendChild(img);
formula_div.appendChild(formula_input);
element.querySelector("div.jexcel_toolbar").parentNode
.insertBefore(formula_div,
element.querySelector("div.jexcel_toolbar").nextSibling);
formula_input.onfocus = gadget.triggerOnFocusFormulaInput.bind(gadget);
formula_input.oninput = function () {
return gadget.triggerOnInputFormulaInput(cell_input, this);
};
cell_input.onfocus = gadget.triggerOnFocusCellInput.bind(gadget);
cell_input.onkeypress = function (event) {
return gadget.triggerOnKeyPressCellInput(event, cell_input);
};
formula_div.insertBefore(cell_input, img);
select.appendChild(options);
select.onchange = function () {
var dropdown = this;
return gadget.triggerOnChangeSelect(dropdown, formula_input);
};
element.querySelector(".jexcel_toolbar").insertBefore(select, filter);
gadget.element.querySelectorAll(".jexcel_tab_link")
.forEach(function (tab, i) {
if (i === 0) {
gadget.state.selectedTabLink = tab;
}
tab.title = "Click to rename when selected";
});
buttons = domsugar("div", {"class": "add_delete"});
buttons.appendChild(element.querySelector("i[title='Add table']"));
buttons.appendChild(element.querySelector("i[title='Delete table']"));
gadget.element.querySelector(".spreadsheet.jexcel_tabs")
.appendChild(buttons);
gadget.state.newSheet = false;
}
function bindEvents(gadget, sheet) {
sheet.onevent = gadget.triggerOnEventSheet.bind(gadget);
sheet.onselection = gadget.triggerOnSelectionSheet.bind(gadget);
sheet.oneditionend = gadget.triggerOnEditionEndSheet.bind(gadget);
return sheet;
}
function getConfigListFromTables(gadget, list) {
var configs = [],
dict,
tmp;
list.forEach(function (table, i) {
dict = {};
dict = Object.assign(jexcel.createFromTable(table),
gadget.state.template);
if (table.classList.contains("jexcel") &&
!table.classList.contains("jSheet")) {
if (Array.from(table.querySelectorAll("td")).filter(function (td) {
return td.hasAttribute("cache");
}).length === 0) {
tmp = JSON.parse(table.dataset.config);
dict.columns = tmp.columns;
dict.data = tmp.data;
}
}
dict.sheetName = table.title || "Sheet " + (i + 1);
configs.push(dict);
});
return configs;
}
function getTemplate(gadget) {
var toolbar_dict = gadget.state.toolbar_dict,
list = [],
dict,
res;
dict = {
options: gadget.state.options,
undo: {
type: 'i',
content: 'undo',
onclick: gadget.triggerUndo.bind(gadget),
tooltip: "Undo"
},
redo: {
type: 'i',
content: 'redo',
onclick: gadget.triggerRedo.bind(gadget),
tooltip: "Redo"
},
merge: {
type: 'i',
content: 'table_chart',
onclick: gadget.triggerMerge.bind(gadget),
tooltip: "Merge"
},
unmerge: {
type: 'i',
content: 'close',
onclick: gadget.triggerUnmerge.bind(gadget),
tooltip: "Unmerge"
},
destroy_merge: {
type: 'i',
content: 'cancel',
onclick: gadget.triggerDestroyMerge.bind(gadget),
tooltip: "Unmerge all"
},
font_style: {
type: 'select',
k: 'font-family',
v: ['Arial', 'Comic Sans MS', 'Verdana', 'Calibri', 'Tahoma',
'Helvetica', 'DejaVu Sans', 'Times New Roman', 'Georgia',
'Antiqua']
},
font_size: {
type: 'select',
k: 'font-size',
v: ['8px', '10px', '12px', '14px', '16px', '18px', '20px',
'22px', '24px', '26px', '28px', '30px', '34px', '38px',
'42px', '46px', '50px']
},
text_align_left: {
type: 'i',
content: 'format_align_left',
k: 'text-align',
v: 'left',
tooltip: "Align left"
},
text_align_center: {
type: 'i',
content: 'format_align_center',
k: 'text-align',
v: 'center',
tooltip: "Align center"
},
text_align_right: {
type: 'i',
content: 'format_align_right',
k: 'text-align',
v: 'right',
tooltip: "Align right"
},
text_align_justify: {
type: 'i',
content: 'format_align_justify',
k: 'text-align',
v: 'justify',
tooltip: "Align justify"
},
vertical_align_top: {
type: 'i',
content: 'vertical_align_top',
k: 'vertical-align',
v: 'top',
tooltip: "Align top"
},
vertical_align_middle: {
type: 'i',
content: 'vertical_align_center',
k: 'vertical-align',
v: 'middle',
tooltip: "Align center"
},
vertical_align_bottom: {
type: 'i',
content: 'vertical_align_bottom',
k: 'vertical-align',
v: 'bottom',
tooltip: "Align bottom"
},
style_bold: {
type: 'i',
content: 'format_bold',
k: 'font-weight',
v: 'bold',
tooltip: "Bold"
},
style_underlined: {
type: 'i',
content: 'format_underlined',
k: 'text-decoration',
v: 'underline',
tooltip: "Underline"
},
style_italic: {
type: 'i',
content: 'format_italic',
k: 'font-style',
v: 'italic',
tooltip: "Italic"
},
text_color: {
type: 'color',
content: 'format_color_text',
k: 'color',
tooltip: "Text color"
},
background_color: {
type: 'color',
content: 'format_color_fill',
k: 'background-color',
tooltip: "Background color"
},
add: {
type: "i",
content: "add",
onclick: gadget.triggerAddSheet.bind(gadget),
tooltip: "Add table"
},
remove: {
type: "i",
content: "delete",
onclick: gadget.triggerDeleteSheet.bind(gadget),
tooltip: "Delete table"
},
add_row: {
type: "i",
content: "playlist_add",
onclick: gadget.triggerAddRow.bind(gadget),
tooltip: "Add row at the end"
},
delete_row: {
type: "i",
content: "delete_sweep",
onclick: gadget.triggerDeleteRow.bind(gadget),
tooltip: "Delete last row"
},
add_column: {
type: "i",
content: "exposure_plus_1",
onclick: gadget.triggerAddColumn.bind(gadget),
tooltip: "Add column at the end"
},
delete_column: {
type: "i",
content: "exposure_neg_1",
onclick: gadget.triggerDeleteColumn.bind(gadget),
tooltip: "Delete last column"
},
dimensions: {
type: "i",
content: "photo_size_select_small",
onclick: gadget.triggerNewDimensions.bind(gadget),
tooltip: "Resize table"
},
contextMenu: function (obj, x, y) {
var items = [];
gadget.state.obj = obj;
gadget.state.x = x;
gadget.state.y = y;
if (y === null) {
// Insert a new column
items.push({
title: obj.options.text.insertANewColumnBefore,
onclick: gadget.triggerInsertNewColumnBefore.bind(gadget)
});
items.push({
title: obj.options.text.insertANewColumnAfter,
onclick: gadget.triggerInsertNewColumnAfter.bind(gadget)
});
// Delete a column
items.push({
title: obj.options.text.deleteSelectedColumns,
onclick: gadget.triggerDeleteSelectedColumns.bind(gadget)
});
// Rename column
items.push({
title: obj.options.text.renameThisColumn,
onclick: gadget.triggerRenameColumn.bind(gadget)
});
// Sorting
items.push({ type: 'line' });
items.push({
title: obj.options.text.orderAscending,
onclick: gadget.triggerOrderAscending.bind(gadget)
});
items.push({
title: obj.options.text.orderDescending,
onclick: gadget.triggerOrderDescending.bind(gadget)
});
} else {
// Insert new row
items.push({
title: obj.options.text.insertANewRowBefore,
onclick: gadget.triggerInsertNewRowBefore.bind(gadget)
});
items.push({
title: obj.options.text.insertANewRowAfter,
onclick: gadget.triggerInsertNewRowAfter.bind(gadget)
});
items.push({
title: obj.options.text.deleteSelectedRows,
onclick: gadget.triggerDeleteSelectedRows.bind(gadget)
});
}
if (x) {
items.push({type: 'line'});
items.push({
title: "Set column type: Text",
onclick: function () {
return gadget.triggerChangeType("text");
}
});
items.push({
title: "Set column type: Image",
onclick: function () {
return gadget.triggerChangeType("image");
}
});
items.push({
title: "Set column type: HTML",
onclick: function () {
return gadget.triggerChangeType("html");
}
});
items.push({
title: "Set column type: Checkbox",
onclick: function () {
var child = domsugar("input", {type: "checkbox", name: "c" + x});
return gadget.triggerChangeType("checkbox", child);
}
});
items.push({
title: "Set column type: Calendar",
onclick: function () {
return gadget.triggerChangeType("calendar");
}
});
items.push({
title: "Set column type: Color",
onclick: function () {
return gadget.triggerChangeType("color", null, "square");
}
});
}
return items;
}
};
if (toolbar_dict.hasOwnProperty("undo_redo") && toolbar_dict.undo_redo) {
list.push(dict.undo, dict.redo);
}
if (toolbar_dict.hasOwnProperty("add") && toolbar_dict.add) {
list.push(dict.add, dict.remove);
}
if (toolbar_dict.hasOwnProperty("merge") && toolbar_dict.merge) {
list.push(dict.merge, dict.unmerge, dict.destroy_merge);
}
if (toolbar_dict.hasOwnProperty("text_font") && toolbar_dict.text_font) {
list.push(dict.font_style, dict.font_size, dict.style_bold,
dict.style_italic, dict.style_underlined);
}
if (toolbar_dict.hasOwnProperty("text_position") &&
toolbar_dict.text_position) {
list.push(dict.text_align_left, dict.text_align_center,
dict.text_align_right, dict.text_align_justify,
dict.vertical_align_top, dict.vertical_align_middle,
dict.vertical_align_bottom);
}
if (toolbar_dict.hasOwnProperty("color_picker") &&
toolbar_dict.color_picker) {
list.push(dict.text_color, dict.background_color);
}
if (isMobileDevice()) {
list.push({
type: "i",
content: "photo_library",
onclick: function (sheet, instance) {
return gadget.triggerChangeTypeInToolbar(sheet, instance, "image");
}
});
list.push({
type: "i",
content: "format_size",
onclick: function (sheet, instance) {
return gadget.triggerChangeTypeInToolbar(sheet, instance, "text");
}
});
list.push({
type: "i",
content: "format_paint",
onclick: function (sheet, instance) {
return gadget.triggerChangeTypeInToolbar(sheet, instance,
"color", null, "square");
}
});
list.push({
type: "i",
content: "format_list_bulleted",
onclick: function (sheet, instance) {
return gadget.triggerChangeTypeInToolbar(sheet, instance, "html");
}
});
list.push({
type: "i",
content: "calendar_today",
onclick: function (sheet, instance) {
return gadget.triggerChangeTypeInToolbar(sheet, instance, "calendar");
}
});
list.push({
type: "i",
content: "check_box",
onclick: function (sheet, instance) {
var child = domsugar("input", {type: "checkbox"});
return gadget.triggerChangeTypeInToolbar(sheet, instance,
"checkbox", child);
}
});
}
if (toolbar_dict.hasOwnProperty("add_delete_row_column") &&
toolbar_dict.add_delete_row_column) {
list.push(dict.add_row, dict.delete_row,
dict.add_column, dict.delete_column, dict.dimensions);
}
res = Object.assign({}, dict.options);
res.toolbar = list;
res.contextMenu = dict.contextMenu;
return res;
}
function setHistoryType(instance, action, column, old_type, new_type) {
instance.setHistory({
action: action,
column: column,
oldType: old_type,
newType: new_type
});
}
rJS(window)
.setState({
saveConfig: false,
newSheet: false,
updateSelection: true,
toolbar_dict: {
undo_redo: true,
add: true,
merge: true,
text_font: true,
text_position: true,
color_picker: true,
add_delete_row_column: true
},
options: {
minDimensions: [26, 100],
defaultColWidth: 100,
defaultColAlign: "left",
allowExport: true,
columnSorting: true,
columnDrag: true,
columnResize: true,
rowResize: true,
rowDrag: true,
editable: true,
allowInsertRow: true,
allowManualInsertRow: true,
allowInsertColumn: true,
allowManualInsertColumn: true,
allowDeleteRow: true,
allowRenameColumn: true,
selectionCopy: true,
search: true,
fullscreen: true,
autoIncrement: true,
parseFormulas: true,
wordWrap: true
}
})
.declareAcquiredMethod("notifyChange", "notifyChange")
.declareMethod("render", function (options) {
return this.changeState(options);
})
.declareMethod('getContent', function () {
var gadget = this,
form_data = {},
res = "",
sheets = gadget.element.querySelector('.spreadsheet').jexcel,
tab_links = gadget.element.querySelectorAll('.jexcel_tab_link');
if (this.state.editable) {
sheets.forEach(function (sheet, i) {
var table = sheet.el.querySelector("table.jexcel").cloneNode(true),
config = sheet.getConfig(),
dict;
dict = {
columns: config.columns,
data: config.data
};
table.dataset.config = JSON.stringify(dict);
table.title = tab_links[i].textContent;
table.border = "1px";
table.querySelector("colgroup col").remove();
table.querySelector("tr").remove();
table.querySelectorAll("td.jexcel_row").forEach(function (td) {
td.remove();
});
table.querySelectorAll('tr').forEach(function (tr, y) {
tr.childNodes.forEach(function (td, x) {
if (td.textContent !== "") {
var value = sheet.getValueFromCoords(x, y);
if (value[0] === "=") {
td.dataset.formula = value;
td.setAttribute('formula', value);
}
}
});
});
res += table.outerHTML;
});
form_data[this.state.key] = beautifyHTMLString(res);
}
return form_data;
})
.onStateChange(function (modification_dict) {
var gadget = this, tabs, i,
toolbar_config,
toolbar_events_config,
nodes,
data_list,
selected;
if (modification_dict.hasOwnProperty('newSheet') &&
modification_dict.newSheet) {
tabs = (gadget.element.querySelectorAll(".jexcel_container"));
return setupTable(gadget, tabs[tabs.length - 1]);
}
if (modification_dict.hasOwnProperty('value')) {
toolbar_config = getTemplate(gadget);
toolbar_events_config = bindEvents(gadget, toolbar_config);
if (gadget.state.value === "") {
toolbar_events_config.sheetName = "Table 1";
jexcel.tabs(gadget.element.querySelector(".spreadsheet"),
[toolbar_events_config]
);
gadget.state.tables =
[gadget.element.querySelector("div.jexcel_content > table")];
gadget.element
.querySelectorAll(".jexcel_container")
.forEach(function (tab) {
return setupTable(gadget, tab);
});
} else {
gadget.state.tables = [];
nodes = createElementFromHTML(gadget.state.value);
for (i = 0; i < nodes.length; i += 1) {
gadget.state.tables[i] = nodes[i];
}
data_list = getConfigListFromTables(gadget, gadget.state.tables);
data_list.forEach(function (dict) {
Object.assign(dict, toolbar_events_config);
});
jexcel.tabs(gadget.element.querySelector(".spreadsheet"), data_list);
gadget.element.querySelectorAll(".jexcel_container")
.forEach(function (tab) {
return setupTable(gadget, tab);
});
selected = gadget.element
.querySelector('.jexcel_tab_link.selected');
selected.classList.remove("selected");
gadget.element.querySelector('.jexcel_tab_link')
.classList.add("selected");
gadget.element.querySelectorAll(".jexcel_container")
.forEach(function (tab, i) {
if (i === 0) {
tab.style.display = "block";
} else {
tab.style.display = "none";
}
});
}
}
})
.declareJob("deferNotifyChange", function () {
return this.notifyChange();
})
.declareJob("triggerAddRow", function (sheet, instance) {
instance.insertRow();
})
.declareJob("triggerDeleteRow", function (sheet, instance) {
instance.deleteRow(instance.options.data.length - 1, 1);
})
.declareJob("triggerInsertNewColumnBefore", function () {
var state = this.state;
state.obj.insertColumn(1, parseInt(state.x, 10), 1);
})
.declareJob("triggerInsertNewColumnAfter", function () {
var state = this.state;
state.obj.insertColumn(1, parseInt(state.x, 10), 0);
})
.declareJob("triggerDeleteSelectedColumns", function () {
var state = this.state;
state.obj.deleteColumn(state.obj.getSelectedColumns().length ?
undefined : parseInt(state.x, 10));
})
.declareJob("triggerRenameColumn", function () {
var state = this.state;
state.obj.setHeader(state.x);
})
.declareJob("triggerOrderAscending", function () {
var state = this.state;
state.obj.orderBy(state.x, 0);
})
.declareJob("triggerOrderDescending", function () {
var state = this.state;
state.obj.orderBy(state.x, 1);
})
.declareJob("triggerInsertNewRowBefore", function () {
var state = this.state;
state.obj.insertRow(1, parseInt(state.y, 10), 1);
})
.declareJob("triggerInsertNewRowAfter", function () {
var state = this.state;
state.obj.insertRow(1, parseInt(state.y, 10));
})
.declareJob("triggerDeleteSelectedRows", function () {
var state = this.state;
state.obj.deleteRow(state.obj.getSelectedRows().length ?
undefined : parseInt(state.y, 10));
})
.declareJob("triggerAddColumn", function (sheet, instance) {
instance.insertColumn();
})
.declareJob("triggerDeleteColumn", function (sheet, instance) {
instance.deleteColumn(instance.options.columns.length - 1, 1);
})
.declareJob("triggerUndo", function (sheet, instance) {
instance.undo();
})
.declareJob("triggerRedo", function (sheet, instance) {
instance.redo();
})
.declareJob("triggerMerge", function (sheet, instance) {
var cell = sheet.querySelector("td.highlight"),
selected = instance.getJson(true),
colspan = Object.keys(selected[0]).length,
rowspan = selected.length,
coor = getCoordinatesFromCell(cell);
instance.setMerge(coor, colspan, rowspan);
})
.declareJob("triggerUnmerge", function (sheet, instance) {
var cell = document.querySelector("td.highlight-selected"),
coor = getCoordinatesFromCell(cell);
instance.removeMerge(coor);
})
.declareJob("triggerDestroyMerge", function (sheet, instance) {
instance.destroyMerged();
})
.declareJob("triggerChangeType", function (type, child, render) {
var state = this.state,
x = parseInt(state.x, 10),
y = state.y !== null ? parseInt(state.y, 10) : 0,
cell,
column,
array;
state.obj.updateSelectionFromCoords(x, y, x, y);
cell = state.obj.el.querySelector("td.highlight-selected");
if (state.obj.options.columns[x].type !== type) {
column = state.obj.el
.querySelectorAll("td[data-x='" + x + "']");
array = Array.from(column);
array.shift();
setHistoryType(state.obj, "beginChangeType",
x,
state.obj.options.columns[x].type,
type);
array.forEach(function (cell) {
state.obj.setValue(getCoordinatesFromCell(cell), "");
cell.innerHTML = "";
if (child) {
cell.appendChild(child.cloneNode());
}
});
setHistoryType(state.obj, "endChangeType",
x,
state.obj.options.columns[x].type,
type);
state.obj.options.columns[x].type = type;
if (render) {
state.obj.options.columns[x].render = render;
}
fireDoubleClick(cell);
}
})
.declareJob("triggerChangeTypeInToolbar",
function (sheet, instance, type, child, render) {
var cell = sheet.querySelector("td.highlight-selected"),
x,
column,
array;
x = cell ? parseInt(cell.dataset.x, 10) : null;
if (cell && instance.options.columns[x].type !== type) {
column = sheet.querySelectorAll("td[data-x='" + x + "']");
array = Array.from(column);
array.shift();
setHistoryType(instance, "beginChangeType",
x,
instance.options.columns[x].type,
type);
array.forEach(function (cell) {
instance.setValue(getCoordinatesFromCell(cell), "");
cell.innerHTML = "";
if (child) {
cell.appendChild(child.cloneNode());
}
});
setHistoryType(instance, "endChangeType",
x,
instance.options.columns[x].type,
type);
instance.options.columns[x].type = type;
if (render) {
instance.options.columns[x].render = render;
}
fireDoubleClick(cell);
}
})
.declareJob("triggerNewDimensions", function (sheet, instance) {
var r = prompt("Number of rows :", instance.options.data.length),
c = prompt("Number of columns :", instance.options.columns.length);
if (c > 0 && r > 0) {
instance.setHistory({action: "beginResizeTable"});
if (c > instance.options.columns.length) {
while (instance.options.columns.length < c) {
instance.insertColumn();
}
} else {
while (instance.options.columns.length > c) {
instance.deleteColumn(instance.options.columns.length - 1, 1);
}
}
if (r > instance.options.data.length) {
while (instance.options.data.length < r) {
instance.insertRow();
}
} else {
while (instance.options.data.length > r) {
instance.deleteRow(instance.options.data.length - 1, 1);
}
}
instance.setHistory({action: "endResizeTable"});
}
})
.declareJob("triggerAddSheet", function () {
var gadget = this,
tabs = gadget.element.querySelectorAll(".jexcel_tab_link"),
dict1,
dict2;
if (tabs.length === 16) {
alert("Can't add tables anymore.");
} else {
dict1 = getTemplate(gadget);
dict1.sheetName = "Table " +
(gadget.element.querySelector('.spreadsheet').jexcel.length + 1);
dict2 = bindEvents(gadget, dict1);
jexcel.tabs(gadget.element.querySelector(".spreadsheet"), [dict2]);
gadget.element
.querySelectorAll('.jexcel_container')[gadget.element.querySelector('.spreadsheet').jexcel.length - 1]
.querySelectorAll("td[data-x][data-y]")
.forEach(function (td) {
td.style.textAlign = "left";
});
gadget.deferNotifyChange();
return gadget.changeState({newSheet: true})
.push(function () {
gadget.state.selectedTabLink = gadget.element
.querySelector(".jexcel_tab_link.selected");
});
}
})
.declareJob("triggerDeleteSheet", function (sheet, instance) {
var gadget = this,
tab_link = gadget.element
.querySelector('.jexcel_tab_link.selected'),
index = tab_link.getAttribute("data-spreadsheet"),
to_remove,
sheets;
if (confirm("Delete this table ?")) {
if (gadget.element.querySelector('.spreadsheet').jexcel.length > 1) {
tab_link.remove();
gadget.element.querySelectorAll(".jexcel_container")
.forEach(function (tab) {
if (tab.style.display === "block") {
to_remove = tab;
}
});
to_remove.remove();
gadget.element.querySelector('.spreadsheet').jexcel.splice(index, 1);
sheets = gadget.element.querySelectorAll('.jexcel_container');
sheets[sheets.length - 1].style.display = "block";
gadget.element.querySelectorAll('.jexcel_tab_link')
.forEach(function (tab, i) {
if (i === sheets.length - 1) {
tab.classList.add("selected");
}
tab.dataset.spreadsheet = i;
tab.textContent = tab.textContent.substring(0, 5) === "Table" ?
"Table " + (i + 1) : tab.textContent;
});
} else {
gadget.element.querySelector('.jexcel_tab_link')
.textContent = "Table 1";
sheet.querySelector("input.jexcel_formula").value = "";
instance.setData(new Array(instance.options.columns.length)
.fill(0, instance.options.columns.length - 1,
new Array(instance.options.data.length)
.fill(0, instance.options.data.length - 1, "")));
instance.options.columns.forEach(function (column) {
column.type = "text";
});
}
gadget.deferNotifyChange();
gadget.state.selectedTabLink = gadget.element
.querySelector(".jexcel_tab_link.selected");
}
})
.declareJob("triggerOnFocusFormulaInput", function () {
var gadget = this,
worksheet = gadget.element.querySelector('.selected')
.getAttribute('data-spreadsheet');
gadget.element.querySelector('.spreadsheet').jexcel[worksheet]
.resetSelection(true);
})
.declareJob("triggerOnInputFormulaInput",
function (cell_input, formula_input) {
var gadget = this,
worksheet = gadget.element.querySelector('.selected')
.getAttribute('data-spreadsheet'),
instance = gadget.element.querySelector('.spreadsheet')
.jexcel[worksheet],
e = formula_input.value,
numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
if (e[0] === "=" && e[e.length - 1] !== ")") {
if (numbers.includes(e[e.length - 1])) {
instance.setValue(cell_input.value, e);
}
} else {
instance.setValue(cell_input.value, e);
}
})
.declareJob("triggerOnFocusCellInput", function () {
var gadget = this,
worksheet = gadget.element.querySelector('.selected')
.getAttribute('data-spreadsheet');
gadget.element.querySelector('.spreadsheet').jexcel[worksheet]
.resetSelection(true);
})
.declareJob("triggerOnKeyPressCellInput", function (event, input) {
var gadget = this,
worksheet,
x,
y,
ys;
if (event.keyCode === 13) {
worksheet = gadget.element.querySelector('.selected')
.getAttribute('data-spreadsheet');
y = input.value.match(/(\d+)/)[0];
x = columnLetterToNumber(input.value
.substring(0, input.value.length - y.length)
);
ys = parseInt(y, 10) - 1;
gadget.element.querySelector('.spreadsheet').jexcel[worksheet]
.updateSelectionFromCoords(x, ys, x, ys);
}
})
.declareJob("triggerOnChangeSelect", function (dropdown, formula_input) {
var gadget = this,
sheet = getCurrentSheet(gadget),
cell = sheet.el.querySelector("td.highlight-selected"),
x,
y,
value,
currentValue;
if (cell && sheet.options.columns[Number(cell.dataset.x)]
.type === "text") {
x = Number(cell.dataset.x);
y = Number(cell.dataset.y);
currentValue = sheet.getValueFromCoords(x, y);
if (currentValue === "" || currentValue[0] !== "=") {
value = "=" +
dropdown.options[dropdown.selectedIndex].value +
"(" + currentValue + ")";
} else {
value = "=" +
dropdown.options[dropdown.selectedIndex].value +
"(" + currentValue.substring(1, currentValue.length) + ")";
}
sheet.setValueFromCoords(x, y, value);
formula_input.value = value;
}
dropdown.selectedIndex = 0;
})
.declareJob("triggerOnEventSheet", function (event) {
var gadget = this,
exluded_events = ["onload", "onfocus", "onblur", "onselection"];
if (!exluded_events.includes(event)) {
if ((["onchangestyle", "onchange", "onbeforechange"].includes(event) &&
gadget.state.saveConfig) ||
!["onchangestyle", "onchange", "onbeforechange"].includes(event)) {
gadget.deferNotifyChange();
}
}
})
.declareJob("triggerOnSelectionSheet", function () {
var gadget = this,
instance = getCurrentSheet(gadget),
tab = gadget.element
.querySelectorAll(".jexcel_container")[gadget.element
.querySelector("div.jexcel_tab_link.selected")
.getAttribute("data-spreadsheet")],
cell = tab.querySelector("td.highlight-selected"),
cell_input = tab.querySelector("input.cell_input"),
formula = tab.querySelector("input.jexcel_formula"),
x,
y;
cell_input.value = getCoordinatesFromCell(cell);
x = Number(cell.dataset.x);
y = Number(cell.dataset.y);
formula.value = ["text", "calendar", "checkbox", "color"]
.includes(instance.options.columns[x].type) ?
instance.getValueFromCoords(x, y) : "";
if (instance.options.columns[x].type === "text") {
formula.readOnly = false;
formula.classList.remove("readonly");
} else {
formula.readOnly = true;
formula.classList.add("readonly");
}
})
.declareJob("triggerOnEditionEndSheet", function (cell, x, y, value) {
var gadget = this,
numbers,
worksheet,
tab;
if (value) {
if (value[0] === "=" && value[value.length - 1] !== ")") {
numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
if (numbers.includes(value[value.length - 1])) {
worksheet = gadget.element.querySelector('.selected')
.getAttribute('data-spreadsheet');
tab = gadget.element.querySelector('.spreadsheet')
.jexcel[worksheet];
tab.setValueFromCoords(x, y, value);
} else {
cell.textContent = value;
}
}
}
})
.onEvent("input", function (ev) {
var gadget = this, sheet, formula, td;
sheet = getCurrentSheet(gadget);
td = sheet.el.querySelector("td.highlight-selected");
if (td && ev.target === td.childNodes[0]) {
formula = sheet.el.querySelector("input.jexcel_formula");
formula.value = ev.target.value;
}
}, false, false)
.onEvent("click", function (ev) {
var gadget = this, name;
gadget.state.saveConfig = true;
if (ev.target.classList.contains("jexcel_tab_link")) {
if (ev.target === gadget.state.selectedTabLink) {
name = prompt("Table name :", ev.target.textContent);
gadget.state.selectedTabLink.textContent = name !== null ?
name : gadget.state.selectedTabLink.textContent;
gadget.deferNotifyChange();
}
gadget.state.selectedTabLink = ev.target;
}
}, false, false);
}(window, rJS, jexcel, domsugar, document, alert, prompt, confirm, navigator));
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>jexcel.gadget.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>jexcel</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
:root {
--jexcel-border-color:#000;
}
.jexcel_container {
display:inline-block;
padding-right:2px;
box-sizing: border-box;
overscroll-behavior: contain;
padding-bottom: 33px;
}
.jexcel_container.fullscreen {
position:fixed;
top:38px;
left:0px;
width:100%;
height:100%;
z-index:21;
}
.jexcel_container.fullscreen .jexcel_content {
overflow:auto;
width:100%;
height:96.5%;
background-color:#ffffff;
}
.jexcel_container.fullscreen.with-toolbar {
height: calc(100% - 46px);
}
.jexcel_content {
display:inline-block;
box-sizing: border-box;
padding-right:3px;
padding-bottom:3px;
position:relative;
scrollbar-width: thin;
scrollbar-color: #666 transparent;
}
@supports (-moz-appearance:none) {
.jexcel_content { padding-right:10px; }
}
.jexcel_content::-webkit-scrollbar {
width: 5px;
height: 5px;
}
.jexcel_content::-webkit-scrollbar-track {
background: #eee;
}
.jexcel_content::-webkit-scrollbar-thumb {
background: #666;
}
.jexcel {
border-collapse: separate;
table-layout: fixed;
white-space: nowrap;
empty-cells: show;
border: 0px;
background-color: #fff;
width: 0;
/*border-top: 1px solid transparent;
border-left: 1px solid transparent;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;*/
}
.jexcel > thead > tr > td
{
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
border-right: 1px solid transparent;
border-bottom: 1px solid transparent;
background-color: #f3f3f3;
padding: 2px;
cursor: pointer;
box-sizing: border-box;
overflow: hidden;
position: -webkit-sticky;
position: sticky;
top: 0;
z-index:2;
}
.with-toolbar .jexcel > thead > tr > td
{
/**top:42px;**/
}
.jexcel > thead > tr > td.dragging
{
background-color:#fff;
opacity:0.5;
}
.jexcel > thead > tr > td.selected
{
background-color:#dcdcdc;
}
.jexcel > thead > tr > td.arrow-up
{
background-repeat:no-repeat;
background-position:center right 5px;
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 14l5-5 5 5H7z' fill='gray'/%3E%3C/svg%3E");
text-decoration:underline;
}
.jexcel > thead > tr > td.arrow-down
{
background-repeat:no-repeat;
background-position:center right 5px;
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E");
text-decoration:underline;
}
.jexcel > tbody > tr > td:first-child
{
position:sticky;
left:0;
background-color:#f3f3f3;
text-align:center;
}
.jexcel > tbody.resizable > tr > td:first-child::before
{
content:'\00a0';
width:100%;
height:3px;
position:absolute;
bottom:0px;
left:0px;
cursor:row-resize;
}
.jexcel > tbody.draggable > tr > td:first-child::after
{
content:'\00a0';
width:3px;
height:100%;
position:absolute;
top:0px;
right:0px;
cursor:move;
}
.jexcel > tbody > tr.dragging > td
{
background-color:#eee;
opacity:0.5;
}
.jexcel > tbody > tr > td
{
border-top:1px solid #ccc;
border-left:1px solid #ccc;
border-right:1px solid transparent;
border-bottom:1px solid transparent;
padding:4px;
white-space: nowrap;
box-sizing: border-box;
line-height:1em;
}
.jexcel > tbody > tr > td:last-child
{
overflow:hidden;
}
.jexcel > tbody > tr > td > img
{
display:inline-block;
max-width:100px;
}
.jexcel > tbody > tr > td.readonly
{
color:rgba(0,0,0,0.3)
}
.jexcel > tbody > tr.selected > td:first-child
{
background-color:#dcdcdc;
}
.jexcel > tbody > tr > td > select,
.jexcel > tbody > tr > td > input,
.jexcel > tbody > tr > td > textarea
{
border:0px;
border-radius:0px;
outline:0px;
width:100%;
margin:0px;
padding:0px;
background-color:transparent;
box-sizing: border-box;
}
.jexcel > tbody > tr > td > textarea
{
resize: none;
padding-top:6px !important;
}
.jexcel > tbody > tr > td > input[type=checkbox]
{
width:12px;
margin-top:2px;
}
.jexcel > tbody > tr > td > input[type=radio]
{
width:12px;
margin-top:2px;
}
.jexcel > tbody > tr > td > select
{
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-repeat: no-repeat;
background-position-x: 100%;
background-position-y: 40%;
background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+);
}
.jexcel > tbody > tr > td.jexcel_dropdown
{
background-repeat: no-repeat;
background-position:top 50% right 5px;
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E");
text-overflow: ellipsis;
overflow-x:hidden;
}
.jexcel > tbody > tr > td.jexcel_dropdown.jexcel_comments
{
background:url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E") top 50% right 5px no-repeat, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=') top right no-repeat;
}
.jexcel > tbody > tr > td > .color
{
width:90%;
height:10px;
margin:auto;
}
.jexcel > tbody > tr > td > a {
text-decoration: underline;
}
.jexcel > tbody > tr > td.highlight > a {
color: blue;
cursor: pointer;
}
.jexcel > tfoot > tr > td
{
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
border-right: 1px solid transparent;
border-bottom: 1px solid transparent;
background-color: #f3f3f3;
padding: 2px;
cursor: pointer;
box-sizing: border-box;
overflow: hidden;
}
.jexcel .highlight {
background-color:rgba(0,0,0,0.05);
}
.jexcel .highlight-top {
border-top:1px solid #000; /* var(--jexcel-border-color);*/
box-shadow: 0px -1px #ccc;
}
.jexcel .highlight-left {
border-left:1px solid #000; /* var(--jexcel-border-color);*/
box-shadow: -1px 0px #ccc;
}
.jexcel .highlight-right {
border-right:1px solid #000; /* var(--jexcel-border-color);*/
}
.jexcel .highlight-bottom {
border-bottom:1px solid #000; /* var(--jexcel-border-color);*/
}
.jexcel .highlight-top.highlight-left {
box-shadow: -1px -1px #ccc;
-webkit-box-shadow: -1px -1px #ccc;
-moz-box-shadow: -1px -1px #ccc;
}
.jexcel .highlight-selected
{
background-color:rgba(0,0,0,0.0);
}
.jexcel .selection
{
background-color:rgba(0,0,0,0.05);
}
.jexcel .selection-left
{
border-left:1px dotted #000;
}
.jexcel .selection-right
{
border-right:1px dotted #000;
}
.jexcel .selection-top
{
border-top:1px dotted #000;
}
.jexcel .selection-bottom
{
border-bottom:1px dotted #000;
}
.jexcel_corner
{
position:absolute;
background-color: rgb(0, 0, 0);
height: 1px;
width: 1px;
border: 1px solid rgb(255, 255, 255);
top:-2000px;
left:-2000px;
cursor:crosshair;
box-sizing: initial;
z-index:30;
padding: 2px;
}
.jexcel .editor
{
outline:0px solid transparent;
overflow:visible;
white-space: nowrap;
text-align:left;
padding:0px;
box-sizing: border-box;
overflow:visible !important;
}
.jexcel .editor > input
{
padding-left:4px;
}
.jexcel .editor .jupload
{
position:fixed;
top:100%;
z-index:40;
user-select:none;
-webkit-font-smoothing: antialiased;
font-size: .875rem;
letter-spacing: .2px;
-webkit-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
padding:10px;
background-color:#fff;
width:300px;
min-height:225px;
margin-top:2px;
}
.jexcel .editor .jupload img
{
width:100%;
height:auto;
}
.jexcel .editor .jexcel_richtext
{
position:fixed;
top:100%;
z-index:40;
user-select:none;
-webkit-font-smoothing: antialiased;
font-size: .875rem;
letter-spacing: .2px;
-webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
padding:10px;
background-color:#fff;
min-width:280px;
max-width:310px;
margin-top:2px;
text-align:left;
}
.jexcel .editor .jclose:after
{
position:absolute;
top:0;
right:0;
margin:10px;
content:'close';
font-family:'Material icons';
font-size:24px;
width:24px;
height:24px;
line-height:24px;
cursor:pointer;
text-shadow: 0px 0px 5px #fff;
}
.jexcel, .jexcel td, .jexcel_corner
{
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-user-drag: none;
-khtml-user-drag: none;
-moz-user-drag: none;
-o-user-drag: none;
user-drag: none;
}
.jexcel_textarea
{
position:absolute;
top:-999px;
left:-999px;
width:1px;
height:1px;
}
.jexcel .dragline
{
position:absolute;
}
.jexcel .dragline div
{
position:relative;
top:-6px;
height:5px;
width:22px;
}
.jexcel .dragline div:hover
{
cursor:move;
}
.jexcel .onDrag
{
background-color:rgba(0,0,0,0.6);
}
.jexcel .error
{
border:1px solid red;
}
.jexcel thead td.resizing
{
border-right-style:dotted !important;
border-right-color:red !important;
}
.jexcel tbody tr.resizing > td
{
border-bottom-style:dotted !important;
border-bottom-color:red !important;
}
.jexcel tbody td.resizing
{
border-right-style:dotted !important;
border-right-color:red !important;
}
.jexcel .jdropdown-header
{
border:0px !important;
outline:none !important;
width:100% !important;
height:100% !important;
padding:0px !important;
padding-left:8px !important;
}
.jexcel .jdropdown-container
{
margin-top:1px;
}
.jexcel .jdropdown-container-header {
padding: 0px;
margin: 0px;
height: inherit;
}
.jexcel .jdropdown-picker
{
border:0px !important;
padding:0px !important;
width:inherit;
height:inherit;
}
.jexcel .jexcel_comments
{
background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=');
background-repeat: no-repeat;
background-position: top right;
}
.jexcel .sp-replacer
{
margin: 2px;
border:0px;
}
.jexcel > thead > tr.jexcel_filter > td > input
{
border:0px;
width:100%;
outline:none;
}
.jexcel_about {
float: right;
font-size: 0.7em;
padding: 2px;
text-transform: uppercase;
letter-spacing: 1px;
display: none;
}
.jexcel_about a {
color: #ccc;
text-decoration: none;
}
.jexcel_about img {
display: none;
}
.jexcel_filter
{
display:flex;
justify-content:space-between;
/**margin-bottom:4px;**/
}
.jexcel_filter > div
{
padding:4px;
align-items:center;
}
.jexcel_pagination
{
display:flex;
justify-content:space-between;
align-items:center;
}
.jexcel_pagination > div
{
display:flex;
padding:10px;
}
.jexcel_pagination > div:last-child
{
padding-right:10px;
padding-top:10px;
}
.jexcel_pagination > div > div
{
text-align:center;
width:36px;
height:36px;
line-height:34px;
border:1px solid #ccc;
box-sizing: border-box;
margin-left:2px;
cursor:pointer;
}
.jexcel_page
{
font-size:0.8em;
}
.jexcel_page_selected
{
font-weight:bold;
background-color:#f3f3f3;
}
.jexcel_toolbar
{
display:flex;
background-color:#f3f3f3;
border:1px solid #ccc;
padding:4px;
margin:0px 2px 1px 1px;
position:sticky;
top:0px;
z-index:21;
}
.jexcel_toolbar:empty
{
display:none;
}
.jexcel_toolbar i.jexcel_toolbar_item
{
width:24px;
height:24px;
padding:4px;
cursor:pointer;
display:inline-block;
}
.jexcel_toolbar i.jexcel_toolbar_item:hover
{
background-color:#ddd;
}
.jexcel_toolbar select.jexcel_toolbar_item
{
margin-left:2px;
margin-right:2px;
display:inline-block;
border:0px;
background-color:transparent;
padding-right:10px;
}
.jexcel .dragging-left
{
background-repeat: no-repeat;
background-position:top 50% left 0px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M14 7l-5 5 5 5V7z'/%3E%3Cpath fill='none' d='M24 0v24H0V0h24z'/%3E%3C/svg%3E");
}
.jexcel .dragging-right
{
background-repeat: no-repeat;
background-position:top 50% right 0px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 17l5-5-5-5v10z'/%3E%3Cpath fill='none' d='M0 24V0h24v24H0z'/%3E%3C/svg%3E");
}
.jexcel_tabs .jexcel_tab
{
display:none;
}
.jexcel_tabs .jexcel_tab_link
{
display:inline-block;
padding:5px;
margin-right:2px;
margin-bottom:2px;
background-color:#f3f3f3;
cursor:pointer;
}
.jexcel_tabs .jexcel_tab_link.selected
{
background-color:#ddd;
}
.jexcel_hidden_index > tbody > tr > td:first-child,
.jexcel_hidden_index > thead > tr > td:first-child,
.jexcel_hidden_index > colgroup > col:first-child
{
display:none;
}
.jexcel .jrating {
display: inline-flex;
}
.jexcel .jrating > div {
zoom: 0.55;
}
.jexcel .copying-top {
border-top:1px dashed #000;
}
.jexcel .copying-left {
border-left:1px dashed #000;
}
.jexcel .copying-right {
border-right:1px dashed #000;
}
.jexcel .copying-bottom {
border-bottom:1px dashed #000;
}
.jexcel .jexcel_column_filter {
background-repeat: no-repeat;
background-position: top 50% right 5px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='gray' width='18px' height='18px'%3E%3Cpath d='M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
text-overflow: ellipsis;
overflow: hidden;
padding: 0px;
padding-left: 6px;
padding-right: 20px;
}
.jexcel thead .jexcel_freezed {
left: 0px;
z-index: 3 !important;
box-shadow: 2px 0px 2px 0.2px #ccc !important;
-webkit-box-shadow: 2px 0px 2px 0.2px #ccc !important;
-moz-box-shadow: 2px 0px 2px 0.2px #ccc !important;
}
.jexcel tbody .jexcel_freezed {
position: relative;
background-color: #fff;
box-shadow: 1px 1px 1px 1px #ccc !important;
-webkit-box-shadow: 2px 4px 4px 0.1px #ccc !important;
-moz-box-shadow: 2px 4px 4px 0.1px #ccc !important;
}
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>jexcel.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>jexcel.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
  • @romain shouldn't we set a cache manager set by default ? do we have a "rule" for that ?

    Usually I used ERP5Site_setSkinCache which uses http_cache but I think recently you are using must_revalidate_http_cache

  • must_revalidate_http_cache is required to correctly control the service worker logic.

    @rporchetto could you please set it to all jexcel files?

  • Please find this change in this MR: !1261 (merged)

    must_revalidate_http_cache is required to correctly control the service worker logic.

    Then the cache policy should be set in all officejs app skin folders files? Like forms and scripts?

Please register or sign in to reply
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>jsuites</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/**
* (c) jSuites Javascript Web Components
*
* Author: Paul Hodel <paul.hodel@gmail.com>
* Website: https://bossanova.uk/jsuites/
* Description: Create amazing web based applications.
*
* MIT License
*
*/
/** General **/
:root {
--button-color: #298BA8;
--active-color: #007aff;
}
.jdragging {
opacity:0.2;
filter: alpha(opacity=20);
}
.jupload {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7emlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMTItMzFUMjI6NDM6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDEtMDFUMjA6MDM6MjNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0wMVQyMDowMzoyM1o8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowZmM3MWQxMi04NTBlLWNhNDUtOTMxOC1kYWIyOWFmYTJkODI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMTItMzFUMjI6NDM6MzBaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk2MTA5Y2Y0LTEwM2ItNTc0Ny1hZWE3LWI5NDMxOWY0NWFkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wMS0wMVQyMDowMjoyMFo8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTAxVDIwOjAzOjIzWjwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tc8AsgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAGjUlEQVR42uycW2xURRjHf91SoEIBUQpYI8VSVBDExniLERNUJBpQVEDFqE1AEYkX0JCC0YjgBdEYDOIFeVEEFRBilKBogg+KiQoV5Q6Khla8lrZRBLo+zLdazs7ZM2d3zsJu55/sy3dmz5797Vy+y8wWxONxnNJXzCFwAB1AB9ABdHIAHUAH0AF0Cq929fX1ufbMA4HLgSqgHOgPdJJrfwPbgb3AJuBD4KsoH6agrq4uF6CVAncC4wVYGP0ALAVeAva0NYDFwOPARKBzhvc6ArwG1AC/toU5cDSwFXjAAjyAQmACsAOozneATwLLgdMM2/8jLxN1AxYBC/J1CL8F3BjQZhOwCqgFvgd+AuJAT6ACOBMYCVwUcJ91siDlDcC3gRtSXF8IzAe+M7xfOXC3TAOFPm3WA0NzAeDp8oUGASeKrUF60R6Zn6an6CnTgI1pfnYFMAcY43N9GTDueAR4sQylK8RvS0dzgYcsPc9U4Bmfa9XA4uMF4GXypUdkeJ8Z0nNs6hbgdZ9rPcK6OLZX4XbisH5iAd68COABvAHc63NtwbHsgf2B94BKC/faAFwY8Zy8ErhWYx8EbM42wAuAj4ETAtptllh1N9AiC0t/YLCnXV9xT6JUJ6AOKPHYX5HIJ2sAK4BvgQ4+17fJ5LxKIgudzgBGySS/3sAPtKWZwCyPrQk4ydQxtwFwH9BbY4/LIvBEyF5RIF8iG+oC/K7xEUfLEI98EVnsA28/MCQkPIDmLMIDOCDOu1fXZGMVrgJu19gbZCKuJTek62mV2QD4XIoFZT+5o10a2ylRA6wCLtXYp8uikUv6Webr1uoOdIwS4HiNbS/wFLmnZuCgx9Y+hVdhBeBwjW1+BF9uFvBqFiDGDW3a0Cus+gADPLYWVB7PpiaJn5YYZjMigles6W2NskJH0gN1RZ1EJcyWJnvi0hpUbSQK9dRwaDGIqtIGeLbG9o3lnveCT2YmCogVPqvwdpOIKB2A7TU2W+XCiQEZkSggTvGxl8m0NNc2wDKNrcXCF5mASoUFaQYw2xK8Iv4vyvtpmsTxGQHsLPPQLp9frI+FYftyiPY1liAeBs5DZYNS/XgjgTXpApwq4Gaj0k86DbK4YISBmOlwjreaw+8CzvEDJa7bojAATwU+QtUQSg0Wlr4WFwxT2Z4Ta1GZ9Md8rlcDY00ADpFfZViID7/D8oJxrCACPCIjQ6elqOK8ryM9GPg64AM+B1YAW1BJ0r9M/aaQC0YYiAWWne0FQFf0dZnngdsgOaHaXVySLj43XSY3zCRVNclSz9NpTgQRywfAVRr7WcDWmKaxDl4TKuU+LkN4kyOEF1XEMk5GmFf3eOfAKcD5moY/ypy4OsMHeTjDBSPMcF5o8X4NPs70eKAoMYSLJIDuoOl5AwRiJroJWIIq1BwM8DcLDFyPpoAESTEqN/m0aVYlQF1RtRPviB2ZWEQeRJ//Gm0BHqhttieTutJVgkrGBu0FbEbtvmoMgNjLErxEL3yH5L01oxIA79O8aTVqj7ENmWSpGw1DwhZUJTBIf1ieGlZoAFbGxG3pESLIjkolBsMXaVNC9qWrnZTFZJh69SV283v5oHrNlNA9JvGfV0scL+3cm1Q7iaFPKNY6XimTD0fFwuWaRrscqyR11Hgqh2IkZ5gPy7LtdLRKNX7gnzHgkMdYGDIx0FZUrrHVxVBHBLzDup/jlaSrNbbdMWCn5sIAxyspsrlZY18TQ3/mYoxjdpQmkFx8OgKsjAHvat4wlFZZVyce1diWA80x4DOf7Ma8LD+kaYhmGvLZ0ovoa0LP0mpZ1qXXq4Fzs/igiSRBY8BrH3bq0Ca6HlWt82od6iTBfyn9Lj6+Xx2q2nYwSz3Q9FhrE/ZSVX66BPjU51q/RLCR6IEH0KfCe8sQL85SmNRo+Ioa3tgU8Ga2jtS8RaUdPj7gTtQRqS/yfLHogErf+6Xykk52ekOTESm67AbUrvuyPARXAtyPSvz6wduK5myx7pzIcPy3N4D6Z4w3pc0O1IbybAwrWyqSubZUOsYw4DrU4Ro/bUEd3m4wAZjoie8bPtARVNkvVwAWypxu6gqtRW0u0i6kqU4qDUEVUirasANdQ8BhoVSbizai/uRmbhsEtxp1lCPwpJXpWbmBqD++uTWPQ7xm1NaVJeIomzmvIQ8bdpO0zpWozea9Aibf41WHgd9QhaJtqAPia4FfQnv/7l98M5P79zYH0AF0AB1AJwfQAXQAHUCnNPTvAKemiFU6nb96AAAAAElFTkSuQmCC);
background-repeat: no-repeat;
background-size: 100px;
background-position: center;
background-color: rgba(230, 230, 230, 0.1);
border: 1px dotted #eee;
cursor: pointer;
box-sizing: border-box;
width:100%;
min-height:180px;
}
.jremove {
opacity: 0.2;
filter: alpha(opacity=20);
}
/** Animations **/
.fade-in {
animation: fade-in 2s forwards;
}
.fade-out {
animation: fade-out 1s forwards;
}
.slide-left-in {
animation: slide-left-in 0.4s forwards;
}
.slide-left-out {
animation: slide-left-out 0.4s forwards;
}
.slide-right-in {
animation: slide-right-in 0.4s forwards;
}
.slide-right-out {
animation: slide-right-out 0.4s forwards;
}
.slide-top-in {
animation: slide-top-in 0.4s forwards;
}
.slide-top-out {
animation: slide-top-out 0.2s forwards;
}
.slide-bottom-in {
animation: slide-bottom-in 0.4s forwards;
}
.slide-bottom-out {
animation: slide-bottom-out 0.1s forwards;
}
/** Fadein and Fadeout **/
@keyframes fade-in {
0% { opacity: 0; }
100% { opacity: 100; }
}
@-webkit-keyframes fade-in {
0% { opacity: 0; }
100% { opacity: 100; }
}
@keyframes fade-out {
0% { opacity: 100; }
100% { opacity: 0; }
}
@-webkit-keyframes fade-out {
0% { opacity: 100; }
100% { opacity: 0; }
}
/** Keyframes Left to Right **/
@keyframes slide-left-in {
0% { transform: translateX(-100%); }
100% { transform: translateX(0%); }
}
@-webkit-keyframes slide-left-in {
0% { transform: translateX(-100%); }
100% { -webkit-transform: translateX(0%); }
}
@keyframes slide-left-out {
0% { transform: translateX(0%); }
100% { transform: translateX(-100%); }
}
@-webkit-keyframes slide-left-out {
0% { -webkit-transform: translateX(0%); }
100% { -webkit-transform: translateX(-100%); }
}
/** Keyframes Right to Left **/
@keyframes slide-right-in {
0% { transform: translateX(100%); }
100% { transform: translateX(0%); }
}
@-webkit-keyframes slide-right-in
{
0% { transform: translateX(100%); }
100% { -webkit-transform: translateX(0%); }
}
@keyframes slide-right-out {
0% { transform: translateX(0%); }
100% { transform: translateX(100%); }
}
@-webkit-keyframes slide-right-out {
0% { -webkit-transform: translateX(0%); }
100% { -webkit-transform: translateX(100%); }
}
/** Keyframes Top to Bottom **/
@keyframes slide-top-in {
0% { transform: translateY(-100%); }
100% { transform: translateY(0%); }
}
@-webkit-keyframes slide-top-in {
0% { transform: translateY(-100%); }
100% { -webkit-transform: translateY(0%); }
}
@keyframes slide-top-out {
0% { transform: translateY(0%); }
100% { transform: translateY(-100%); }
}
@-webkit-keyframes slide-top-out {
0% { -webkit-transform: translateY(0%); }
100% { -webkit-transform: translateY(-100%); }
}
/** Keyframes Bottom to Top **/
@keyframes slide-bottom-in {
0% { transform: translateY(100%); }
100% { transform: translateY(0%); }
}
@-webkit-keyframes slide-bottom-in {
0% { transform: translateY(100%); }
100% { -webkit-transform: translateY(0%); }
}
@keyframes slide-bottom-out {
0% { transform: translateY(0%); }
100% { transform: translateY(100%); }
}
@-webkit-keyframes slide-bottom-out {
0% { -webkit-transform: translateY(0%); }
100% { -webkit-transform: translateY(100%); }
}
@supports (-webkit-overflow-scrolling: touch) {
.app .options input:checked:before {
top:-12px;
}
}
@-webkit-keyframes spin {
from {
-webkit-transform:rotate(0deg);
}
to {
-webkit-transform:rotate(360deg);
}
}
@keyframes spin {
from {
transform:rotate(0deg);
}
to {
transform:rotate(360deg);
}
}
.unselectable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.jbutton {
padding:4px;
padding-left:10px;
padding-right:20px;
border:1px solid #ddd;
display:inline-flex;
border-radius:4px;
cursor:pointer;
line-height: 24px;
-webkit-font-smoothing: antialiased;
}
.jbutton.blue {
border:1px solid transparent;
color:#fff;
background-color:#1a73e8;
}
.jbutton::before {
content: attr(data-icon);
width: 24px;
height: 24px;
font-size: 24px;
line-height: 24px;
font-family: 'Material icons';
color: #999;
margin-right:2px;
}
.jbutton.blue::before {
color: #fff;
}
.jbutton:hover {
background-color: #eee;
}
.jbutton.blue:hover {
background-color: #1a73e8;
opacity: 0.8;
}
/**
* Date & Datetime picker v1.0.1
* Author: paul.hodel@gmail.com
* https://github.com/paulhodel/jtools
*/
.jcalendar {
position:relative;
z-index:9000;
display:none;
box-sizing:border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: transparent;
min-width:280px;
}
.jcalendar-focus {
display:block;
}
.jcalendar-backdrop {
position:fixed;
top:0px;
left:0px;
z-index:9000;
min-width:100%;
min-height:100%;
background-color:rgba(0,0,0,0.5);
border:0px;
padding:0px;
display:none;
}
.jcalendar-container {
position:relative;
box-sizing:border-box;
}
.jcalendar-content {
position:absolute;
z-index:9001;
-webkit-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);
-moz-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);
box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);
background-color:#fff;
}
.jcalendar-table > table {
width:100%;
background-color:#fff;
}
.jcalendar-table > table > tbody td {
box-sizing:border-box;
cursor:pointer;
padding:9px;
font-size:0.9em;
}
.jcalendar-table > table > thead {
cursor:pointer;
}
.jcalendar-header {
text-align:center;
}
.jcalendar-header span {
margin-right:4px;
font-size:1.1em;
font-weight:bold;
}
.jcalendar-prev {
cursor:pointer;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z' fill='%23000' /%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3C/svg%3E");
background-position:center;
background-repeat:no-repeat;
}
.jcalendar-next {
cursor:pointer;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z' fill='%23000' /%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3C/svg%3E");
background-position:center;
background-repeat:no-repeat;
}
.jcalendar-weekday {
font-weight: 600;
background-color: #fcfcfc;
padding: 14px;
}
.jcalendar thead td {
padding:10px;
height:40px;
}
.jcalendar tfoot td {
padding:10px;
}
.jcalendar-months td, .jcalendar-years td {
height:24px;
}
.jcalendar-input {
padding-right:18px;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E");
background-position:top 50% right 5px;
background-repeat:no-repeat;
box-sizing: border-box;
}
.jcalendar-done {
-webkit-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);
-moz-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);
box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.39);
background-color:#fff;
}
.jcalendar-update {
border:1px solid #ccc;
background-color:#fff;
border-radius:4px;
padding:5px;
width:100%;
}
.jcalendar select {
width:55px;
display:inline-block;
border:0px;
padding:4px;
text-align:center;
font-size:1.1em;
user-select:none;
margin-right:10px;
}
.jcalendar select:first-child
{
margin-right:2px;
}
.jcalendar-selected {
background-color:#eee;
}
.jcalendar-reset, .jcalendar-confirm {
text-transform:uppercase;
cursor:pointer;
color: var(--active-color);
}
.jcalendar-controls {
padding:15px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
vertical-align:middle;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex-flow: row wrap;
justify-content: space-between;
align-items:center;
border-bottom:1px solid #ddd;
}
.jcalendar-controls div {
font-weight:bold;
}
.jcalendar-fullsize {
position:fixed;
width:100%;
top:0px;
left:0px;
}
.jcalendar-fullsize .jcalendar-content
{
position:fixed;
width:100%;
left:0px;
bottom:0px;
}
.jcalendar-focus.jcalendar-fullsize .jcalendar-backdrop {
display:block;
}
.jcalendar-sunday {
color: red;
}
.jcalendar-disabled {
color: #ccc;
}
.jcolor {
position: absolute;
display: none;
outline: none;
}
.jcolor-content {
position: absolute;
left: 0px;
z-index: 9000;
user-select: none;
-webkit-font-smoothing: antialiased;
font-size: .875rem;
letter-spacing: .2px;
-webkit-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
background-color:#fff;
box-sizing: border-box;
}
.jcolor-content table {
padding: 7px;
box-sizing: border-box;
}
.jcolor-focus {
display:block;
}
.jcolor table {
width:100%;
height:100%;
}
.jcolor td {
border:2px solid #fff;
}
.jcolor-selected {
border:2px solid #000 !important;
background-repeat:no-repeat;
background-size: cover;
background-position:0 0;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z' fill='white'/%3E%3C/svg%3E");
}
.jcolor-fullscreen {
position: fixed;
bottom: 0px;
width:100%;
max-height:250px;
border-radius: 0px;
box-sizing: border-box;
}
.jcolor-close {
display: none;
font-size: 1em;
color: var(--active-color);
text-transform: uppercase;
text-align: right;
padding: 15px;
font-weight: bold;
-webkit-box-shadow: 1px 0px 1px 0px rgba(0,0,0,0.39);
-moz-box-shadow: 1px 0px 1px 0px rgba(0,0,0,0.39);
box-shadow: 1px 0px 1px 0px rgba(0,0,0,0.39);
width: 100%;
box-sizing: border-box;
}
.jcolor-fullscreen .jcolor-close {
display: block;
}
.jcolor-backdrop {
position: fixed;
top: 0px;
left: 0px;
min-width: 100%;
min-height: 100%;
background-color: rgba(0,0,0,0.5);
border: 0px;
padding: 0px;
z-index: 8000;
display: none;
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently
supported by Chrome and Opera */
}
/**
* Contextmenu v1.0.1
* Author: paul.hodel@gmail.com
* https://github.com/paulhodel/jsuites
*/
.jcontextmenu {
position:fixed;
z-index:10000;
background:#fff;
color: #555;
font-size: 11px;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
-webkit-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
-moz-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1);
border: 1px solid #C6C6C6;
padding: 0px;
padding-top:4px;
padding-bottom:4px;
margin:0px;
outline:none;
display:none;
}
.jcontextmenu.jcontextmenu-focus {
display:inline-block;
}
.jcontextmenu > div {
box-sizing: border-box;
display: block;
padding: 8px 8px 8px 28px;
width: 250px;
position: relative;
cursor: default;
font-size: 11px;
font-family:sans-serif;
}
.jcontextmenu > div a {
color: #555;
text-decoration: none;
}
.jcontextmenu > div span {
float: right;
margin-right:10px;
}
.jcontextmenu .contextmenu-disabled {
color: #a1a192;
}
.jcontextmenu > div:not(.contextmenu-line):hover {
background: #ebebeb;
}
.jcontextmenu > div.contextmenu-line {
border-top: 1px solid #e9e9e9;
margin-top:5px;
padding:2px;
}
.jcontextmenu hr {
border: 1px solid #e9e9e9;
border-bottom: 0;
margin-top:5px;
margin-bottom:5px;
}
/**
* Dialog v1.0.1
* Author: paul.hodel@gmail.com
* https://github.com/paulhodel/jtools
*/
.jdialog
{
position:fixed;
left: 0;
top: 0;
width: 100%;
min-height:100%;
z-index:10000;
background-color:rgba(0,0,0,0.5);
-webkit-transition-duration: .1s;
transition-duration: .1s;
display: flex;
-ms-flex-align: center;
-webkit-align-items: center;
-webkit-box-align: center;
align-items: center;
}
.jdialog .jdialog-container
{
width:100%;
max-width:280px;
box-sizing: border-box;
margin:0 auto;
vertical-align:middle;
background-color:#fff;
border-radius:10px;
opacity: 0;
transition: opacity .2s;
-webkit-transition: opacity .2s;
}
.jdialog .jdialog-header
{
padding:10px;
text-align:center;
}
.jdialog .jdialog-header .jdialog-title
{
font-size:1em;
font-weight:bold;
padding:8px;
}
.jdialog .jdialog-header .jdialog-message
{
padding: 4px;
}
.jdialog .jdialog-footer
{
border-top: 1px solid #ccc;
display: flex;
flex-wrap: wrap;
align-content: stretch;
align-items: center;
text-align: center;
}
.jdialog .jdialog-footer > div
{
padding:4px;
border-left:1px solid #ccc;
text-align:center;
width:100%;
}
.jdialog .jdialog-footer > div:first-child
{
border-left:0px;
}
.jdialog .jdialog-footer input
{
border: 0px;
margin: 0px;
background-color: transparent;
color: var(--active-color);
width: 100%;
outline: none;
}
/**
* (c) 2013 jDropdown
* http://www.github.com/paulhodel/jdropdown
*
* @author: Paul Hodel <paul.hodel@gmail.com>
* @description: Custom dropdowns
*/
.jdropdown
{
cursor:pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
box-sizing: border-box;
background:#fff;
-webkit-tap-highlight-color: transparent;
display: inline-block;
}
.jdropdown-header::placeholder
{
color:#000;
}
.jdropdown-backdrop
{
position:fixed;
top:0px;
left:0px;
min-width:100%;
min-height:100%;
background-color:rgba(0,0,0,0.5);
border:0px;
padding:0px;
z-index:8000;
display:none;
}
.jdropdown-focus
{
position:relative;
}
.jdropdown-focus .jdropdown-container
{
transform: translate3d(0,0,0);
}
.jdropdown-focus .jdropdown-header
{
outline:auto 5px -webkit-focus-ring-color;
}
.jdropdown-container-header
{
padding:0px;
margin:0px;
position:relative;
}
.jdropdown-header
{
width:100%;
appearance: none;
background-repeat: no-repeat;
background-position:top 50% right 5px;
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E");
text-overflow: ellipsis;
cursor:pointer;
box-sizing: border-box;
-webkit-appearance: none;
-moz-appearance: none;
padding-right:24px;
}
.jdropdown-insert-button
{
font-size: 1.4em;
text-transform: uppercase;
position:absolute;
right: 30px;
top: 4px;
display:none;
}
.jdropdown-container
{
min-width: inherit;
transform: translate3d(-10000px,0,0);
position:absolute;
z-index:9001;
}
.jdropdown-close
{
display:none;
font-size:1em;
color: var(--active-color);
text-transform:uppercase;
text-align:right;
padding:15px;
font-weight:bold;
}
.jdropdown-content
{
min-width:inherit;
margin:0px;
box-sizing:border-box;
}
.jdropdown-content:empty
{
}
.jdropdown-item
{
white-space: nowrap;
text-align: left;
text-overflow: ellipsis;
overflow-x: hidden;
color: #000;
display: flex;
align-items: center;
}
.jdropdown-image
{
margin-right:10px;
width: 32px;
height: 32px;
border-radius:20px;
}
.jdropdown-image-small
{
width:24px;
height:24px;
}
.jdropdown-title
{
font-size: 0.7em;
text-overflow: ellipsis;
overflow-x: hidden;
display: block;
}
/** Default visual **/
.jdropdown-default .jdropdown-header
{
border:1px solid #ccc;
padding:5px;
padding-left:10px;
padding-right:16px;
}
.jdropdown-default .jdropdown-container
{
background-color:#fff;
}
.jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-header {
padding-right:50px;
}
.jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-insert-button {
display:block;
}
.jdropdown-default .jdropdown-content
{
min-width:inherit;
border:1px solid #8fb1e3;
margin:0px;
background-color:#fff;
box-sizing:border-box;
min-height:10px;
max-height:215px;
overflow-y:auto;
}
.jdropdown-default .jdropdown-item
{
padding:4px;
padding-left:8px;
padding-right:40px;
}
.jdropdown-default .jdropdown-item:hover
{
background-color:#1f93ff;
color:#fff;
}
.jdropdown-default .jdropdown-cursor
{
background-color:#1f93ff;
color:#fff;
}
.jdropdown-default .jdropdown-selected
{
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPgo=');
background-repeat:no-repeat;
background-position:top 50% right 5px;
background-color:#1f93ff;
color:#fff;
}
.jdropdown-default .jdropdown-group
{
margin-top:5px;
}
.jdropdown-default .jdropdown-group .jdropdown-item
{
padding-left:16px;
}
.jdropdown-default .jdropdown-group-name
{
padding-left:8px;
font-weight:bold;
}
/** Default render for mobile **/
.jdropdown-picker.jdropdown-focus .jdropdown-header {
outline: none;
}
.jdropdown-picker.jdropdown-focus .jdropdown-backdrop {
display:block;
}
.jdropdown-picker .jdropdown-container
{
position:fixed;
bottom:0px;
left:0px;
border-bottom:1px solid #e6e6e8;
width:100%;
background-color:#fff;
box-sizing: border-box;
}
.jdropdown-picker .jdropdown-close
{
-webkit-box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.39);
-moz-box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.39);
box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.39);
background-color:#fff;
display:block;
}
.jdropdown-picker .jdropdown-content
{
overflow-y:scroll;
height:280px;
background-color:#fafafa;
border-top:1px solid #e6e6e8;
}
.jdropdown-picker .jdropdown-group-name
{
font-size: 1em;
text-transform: uppercase;
padding-top:10px;
padding-bottom:10px;
display: block;
border-bottom: 1px solid #e6e6e8;
padding-left:20px;
padding-right:20px;
text-align:center;
font-weight:bold;
}
.jdropdown-picker .jdropdown-item
{
font-size: 1em;
text-transform: uppercase;
padding-top:10px;
padding-bottom:10px;
border-bottom: 1px solid #e6e6e8;
padding-left:20px;
padding-right:20px;
}
.jdropdown-picker .jdropdown-selected
{
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPgo=');
background-repeat:no-repeat;
background-position:top 50% right 15px;
background-color:#1f93ff;
color:#fff;
}
.jdropdown-picker .jdropdown-cursor
{
background-color:#1f93ff;
color:#fff;
}
/** Default render for mobile searchbar **/
.jdropdown-searchbar.jdropdown-focus
{
position:fixed;
top:0px;
left:0px;
width:100%;
height:100%;
background-color:#fafafa;
padding:0px;
z-index:9001;
overflow-y:scroll;
}
.jdropdown-searchbar.jdropdown-focus .jdropdown-container-header
{
padding:10px;
background-color:#fff;
box-shadow: 0 1px 2px rgba(0,0,0,.1);
}
.jdropdown-searchbar.jdropdown-focus .jdropdown-header
{
border: 0px;
background-repeat: no-repeat;
background-position-x: 0%;
background-position-y: 40%;
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiIGZpbGw9IiNlNmU2ZTgiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+);
padding-left: 30px !important;
padding-right: 60px !important;
outline: none;
}
.jdropdown-searchbar.jdropdown-focus .jdropdown-close
{
display:block;
}
.jdropdown-searchbar .jdropdown-container
{
width:100%;
}
.jdropdown-searchbar .jdropdown-close
{
position:fixed;
top:0px;
right:0px;
}
.jdropdown-searchbar .jdropdown-content
{
margin-top:10px;
}
.jdropdown-searchbar .jdropdown-group
{
margin-top:10px;
margin-bottom:15px;
background-color:#fff;
}
.jdropdown-searchbar .jdropdown-group-name
{
border-top: 1px solid #e6e6e8;
border-bottom: 1px solid #e6e6e8;
padding:10px;
padding-left:12px;
font-weight:bold;
}
.jdropdown-searchbar .jdropdown-group-arrow
{
float:right;
width:24px;
height:24px;
background-repeat:no-repeat;
}
.jdropdown-searchbar .jdropdown-group-arrow-down
{
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNy40MSA4LjU5TDEyIDEzLjE3bDQuNTktNC41OEwxOCAxMGwtNiA2LTYtNiAxLjQxLTEuNDF6Ii8+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+PC9zdmc+);
}
.jdropdown-searchbar .jdropdown-group-arrow-up
{
background-image: url(data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTcuNDEgMTUuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0bC02LTYtNiA2eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);
}
.jdropdown-searchbar .jdropdown-item
{
padding-top:10px;
padding-bottom:10px;
border-bottom: 1px solid #e6e6e8;
padding-left:15px;
padding-right:40px;
background-color:#fff;
font-size:0.9em;
}
.jdropdown-searchbar .jdropdown-description {
text-overflow: ellipsis;
overflow: hidden;
max-width: calc(100% - 20px);
}
.jdropdown-searchbar .jdropdown-content > .jdropdown-item:first-child
{
border-top: 1px solid #e6e6e8;
}
.jdropdown-searchbar .jdropdown-selected
{
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==');
background-repeat:no-repeat;
background-position:top 50% right 15px;
}
/** List render **/
.jdropdown-list
{
}
.jdropdown-list .jdropdown-container
{
display:block;
}
.jdropdown-list .jdropdown-header
{
display:none;
}
.jdropdown-list .jdropdown-group
{
background-color:#fff;
}
.jdropdown-list .jdropdown-group-name
{
border-bottom: 1px solid #e6e6e8;
padding-top:10px;
padding-bottom:10px;
font-weight:bold;
}
.jdropdown-list .jdropdown-item
{
padding-top:10px;
padding-bottom:10px;
border-bottom: 1px solid #e6e6e8;
padding-left:10px;
padding-right:40px;
background-color:#fff;
}
.jdropdown-list .jdropdown-selected
{
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==');
background-repeat:no-repeat;
background-position:top 50% right 10px;
}
@media only screen and (max-device-width : 800px)
{
.jdropdown-list
{
width:100% !important;
border:0px;
padding:0px;
}
.jdropdown-list .jdropdown-container
{
min-width:100%;
}
}
.app .jdropdown-item {
text-transform:uppercase;
}
/**
* (c) jTools Text Editor
* https://github.com/paulhodel/jtools
*
* @author: Paul Hodel <paul.hodel@gmail.com>
* @description: Inline richtext editor
*/
.jeditor-container {
border:1px solid #ccc;
}
.jeditor-dragging {
border:1px dashed #000;
}
.jeditor-container.jeditor-padding {
padding:10px;
}
.jeditor {
outline:none;
word-break: break-word;
}
.jeditor-container.jeditor-padding .jeditor {
min-height:120px;
margin-bottom:10px;
padding:10px;
}
.jeditor-toolbar {
cursor: pointer;
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-align-items: center;
align-items: center;
border: none;
-webkit-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), 0 1px 10px 0 rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.2);
box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), 0 1px 10px 0 rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.2);
margin: 0px;
margin-bottom:5px;
padding: 5px;
white-space: nowrap;
border-radius:2px;
}
.jeditor-toolbar .jeditor-toolbar-group {
background-color:#f3f3f3;
}
.jeditor-toolbar div {
padding:4px;
}
.jeditor-toolbar div.jeditor-toolbar-button {
padding-left:20px;
padding-right:20px;
}
.jeditor-toolbar div {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}
.jeditor-toolbar div i {
display:block;
font-size:20px;
width:20px;
height:20px;
line-height:20px;
color:#777;
}
.jeditor-toolbar select {
border:0px;
background-color:transparent;
padding:0px;
padding-left:5px;
padding-right:5px;
display:block;
height:32px;
outline:none;
border-radius:4px;
margin:1px;
}
.jeditor-toolbar .jtoolbar-divisor {
width: 2px;
height: 28px;
padding: 0px;
margin: 4px;
background-color: #f2f2f2;
}
.jeditor-toolbar select option {
background-color:#fff;
padding:20px;
}
.jeditor-toolbar div:hover, .toolbar select:hover {
background-color:#f2f2f2;
border-radius:2px;
}
.jeditor-toolbar div:hover i {
color:#222;
}
.jeditor-toolbar div.selected {
background-color:#cecece;
}
.jeditor-thumbs {
display:inline-block;
margin-right:5px;
}
.jeditor-thumbs-container {
margin-top:15px;
}
.jeditor-thumbs .close {
position:absolute;
height:1px;
}
.jeditor-thumbs .close i {
color:#fff;
text-shadow: 0px 0px 2px #000;
position:relative;
top:5px;
left:72px;
}
.jeditor-thumbs img {
border:1px solid #eee;
width:100px;
height:100px;
}
.jeditor-users {
position:absolute;
border:1px solid #ccc;
background-color:#fff;
padding-top:5px;
padding-bottom:5px;
max-height:220px;
overflow-y:scroll;
}
.jeditor-users > div
{
display:flex;
align-items:center;
min-width:220px;
padding:10px;
padding-top:5px;
padding-bottom:5px;
}
.jeditor-users > div:hover
{
background-color:#efefef;
}
.jeditor-users > div img
{
width:24px;
height:24px;
border-radius:12px;
margin-right:5px;
}
/** Snippet **/
.snippet {
margin-top:15px;
cursor:pointer;
border: 1px solid #eee;
position:relative;
}
.snippet:focus {
outline: none;
}
.snippet img {
width:25%;
max-width:120px;
float:left;
margin-right:10px;
margin-bottom:10px;
}
.snippet .snippet-title {
margin-top:15px;
font-size:1.4em;
}
.snippet .snippet-description {
margin-top:5px;
font-size:1em;
}
.snippet .snippet-host {
margin-top:10px;
margin-bottom:10px;
text-transform:uppercase;
font-size:0.8em;
color:#777;
text-align:right;
}
.snippet .snippet-url {
display:none;
}
.jeditor .snippet:after {
content:'';
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
position:absolute;
top:0;
right:0;
margin:14px;
font-size:24px;
width:24px;
height:24px;
cursor:pointer;
text-shadow: 0px 0px 5px #fff;
}
.snippet div, .snippet img {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;
-webkit-user-drag: none;
-khtml-user-drag: none;
-moz-user-drag: none;
-o-user-drag: none;
}
.jeditor img {
border:2px solid transparent;
box-sizing: border-box;
}
.jeditor img:focus {
border:2px solid #0096FD;
}
.jeditor .pdf {
background-image: url("data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 512 512' style='enable-background:new 0 0 512 512;' xml:space='preserve'%3E%3Cpath style='fill:%23C30B15;' d='M511.344,274.266C511.77,268.231,512,262.143,512,256C512,114.615,397.385,0,256,0S0,114.615,0,256 c0,117.769,79.53,216.949,187.809,246.801L511.344,274.266z'/%3E%3Cpath style='fill:%2385080E;' d='M511.344,274.266L314.991,77.913L119.096,434.087l68.714,68.714C209.522,508.787,232.385,512,256,512 C391.243,512,501.976,407.125,511.344,274.266z'/%3E%3Cpolygon style='fill:%23FFFFFF;' points='278.328,333.913 255.711,77.913 119.096,77.913 119.096,311.652 '/%3E%3Cpolygon style='fill:%23E8E6E6;' points='392.904,311.652 392.904,155.826 337.252,133.565 314.991,77.913 255.711,77.913 256.067,333.913 '/%3E%3Cpolygon style='fill:%23FFFFFF;' points='314.991,155.826 314.991,77.913 392.904,155.826 '/%3E%3Crect x='119.096' y='311.652' style='fill:%23FC0F1A;' width='273.809' height='122.435'/%3E%3Cg%3E%3Cpath style='fill:%23FFFFFF;' d='M204.871,346.387c13.547,0,21.341,6.659,21.341,18.465c0,12.412-7.795,19.601-21.341,19.601h-9.611 v14.909h-13.471v-52.975L204.871,346.387L204.871,346.387z M195.26,373.858h8.93c5.904,0,9.308-2.952,9.308-8.552 c0-5.525-3.406-8.324-9.308-8.324h-8.93V373.858z'/%3E%3Cpath style='fill:%23FFFFFF;' d='M257.928,346.387c16.649,0,28.152,10.746,28.152,26.487c0,15.666-11.655,26.488-28.683,26.488 h-22.25v-52.975H257.928z M248.619,388.615h9.611c8.249,0,14.151-6.357,14.151-15.665c0-9.384-6.205-15.817-14.757-15.817h-9.006 V388.615z'/%3E%3Cpath style='fill:%23FFFFFF;' d='M308.563,356.982v12.26h23.763v10.596h-23.763v19.525h-13.471v-52.975h39.277v10.595h-25.806 V356.982z'/%3E%3C/g%3E%3C/svg%3E%0A");
background-repeat: no-repeat;
background-size: cover;
width:60px;
height:60px;
}
/**
* (c) jLoading
* https://github.com/paulhodel/jtools
*
* @author: Paul Hodel <paul.hodel@gmail.com>
* @description: Page loading spin
*/
.jloading {
position:fixed;
z-index:10001;
width:100%;
left:0;
right:0;
top:0;
bottom:0;
background-color: rgba(0,0,0,0.7);
}
.jloading::after {
content:'';
display:block;
margin:0 auto;
margin-top:50vh;
width:40px;
height:40px;
border-style:solid;
border-color:white;
border-top-color:transparent;
border-width:4px;
border-radius:50%;
-webkit-animation: spin .8s linear infinite;
animation: spin .8s linear infinite;
}
.jloading.spin {
background-color:transparent;
}
.jloading.spin::after {
margin:0 auto;
margin-top:80px;
border-color:#aaa;
border-top-color:transparent;
}
.jlogin {
width: 100%;
box-sizing: border-box;
margin:0 auto;
vertical-align:middle;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
font-size:1em;
}
.jlogin-fullscreen {
position:absolute;
top:0px;
left:0px;
width:100%;
height:100%;
background-color:#fff;
z-index:9000;
}
.jlogin > form {
max-width:480px;
padding:20px;
margin: 0 auto;
}
.jlogin > form > div {
margin-bottom:10px;
}
.jlogin label {
display:block;
}
.jlogin > form > div > input {
width:100%;
outline:none;
padding:15px;
margin:0px;
}
.jlogin input[type='checkbox'] {
float:left;
}
.jlogin input[type='button'] {
padding:10px;
background-color: var(--button-color);
border: 1px solid var(--button-color);
color: #fff;
cursor:pointer;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.jlogin span
{
margin:0 auto;
}
.jlogin img
{
text-align:center;
max-width:220px;
}
.jlogin .jlogin-logo
{
text-align:center;
padding:20px;
}
.jlogin .captcha
{
width:100%;
margin-top:4px;
margin-bottom:4px;
border:1px solid #ccc;
display:block;
}
.jlogin .facebookButton
{
padding:10px;
background-color: var(--button-color);
border: 1px solid var(--button-color);
color: #fff;
text-align:center;
background-repeat:no-repeat;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24px' height='24px'%3E%3Cpath d='M19,3H5C3.895,3,3,3.895,3,5v14c0,1.105,0.895,2,2,2h7.621v-6.961h-2.343v-2.725h2.343V9.309 c0-2.324,1.421-3.591,3.495-3.591c0.699-0.002,1.397,0.034,2.092,0.105v2.43h-1.428c-1.13,0-1.35,0.534-1.35,1.322v1.735h2.7 l-0.351,2.725h-2.365V21H19c1.105,0,2-0.895,2-2V5C21,3.895,20.105,3,19,3z' fill='white'/%3E%3C/svg%3E%0A");
background-position:10px 40%;
cursor:pointer;
}
.jlogin .rememberButton
{
padding:10px;
display:none;
}
.jlogin .requestButton, .jlogin .cancelButton, .jlogin .newProfileButton
{
padding:20px;
padding-bottom:0px;
text-align:center;
cursor:pointer;
}
.jlogin-captcha img {
min-width:280px;
}
.jlogin-loading:before {
content: "";
display: block;
position: fixed;
top: 0px;
left: 0px;
width: 200px;
height: 4px;
background-color: var(--button-color);
animation: loading 2s linear infinite;
}
@keyframes loading {
from { left: 0px; width: 25%; }
25% { width: 25%; }
50% { width: 50%; }
75% { left: 75%; }
100% { left: 100%; }
to { left: 100%; }
}
@media only screen and (max-device-width : 800px)
{
.jsuites * {
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
}
html.jsuites {
height:100%;
}
.jsuites body {
margin:0px;
padding:0px;
width:100%;
height:100%;
min-height:100%;
line-height:1.4;
font-family:-apple-system,SF UI Text,Helvetica Neue,Helvetica,Arial,sans-serif !important;
background-color:#fff;
}
.jsuites input, .jsuites select, .jsuites textarea, .jsuites div {
font-family:-apple-system,SF UI Text,Helvetica Neue,Helvetica,Arial,sans-serif !important;
}
}
.japp
{
height:100%;
box-sizing: border-box;
overflow:scroll;
background-color:#fafafa;
}
.jwarning::before {
content:'No internet connection';
background-color:red;
color:#fff;
padding:2px;
position:fixed;
top:0px;
left:0px;
z-index:20000;
width:100%;
font-size:0.55em;
text-align:center;
}
/*
.japp .activeHighLight
{
color:var(--active-color);
}
.japp .active a, .japp .active span, .japp .active i
{
color:var(--active-color);
}
.japp .no-padding
{
padding:0px;
}
.japp .action
{
color:var(--active-color);
cursor:pointer;
}
.japp i.action
{
position:absolute;
right:0px;
margin-right:15px;
cursor:pointer;
}
*/
.japp button {
border-radius: 4px;
width: 100%;
border: 1px solid var(--active-color);
color: var(--active-color);
background-color: transparent;
padding: 4px;
outline: none;
}
.japp button:active {
border: 1px solid #000;
color: #000;
}
.japp .red {
color: red;
border-color: 1px solid red;
}
.japp .link {
color: var(--active-color);
cursor: pointer;
}
.japp .uppercase {
text-transform: uppercase;
}
/** Navbar **/
.japp .navbar {
position:fixed;
top: 0;
width: 100%;
z-index: 500;
margin: 0;
-webkit-backface-visibility: hidden;
-webkit-transform: translate3d(0,0,0);
-webkit-box-sizing: border-box;
backface-visibility: hidden;
box-sizing: border-box;
transform: translate3d(0,0,0);
height: 44px;
background-color: #fff;
box-shadow: 0 1px 2px rgba(0,0,0,.1);
}
.jwarning .navbar {
top:16px;
}
.japp .navbar-container {
padding: 0 8px;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
vertical-align:middle;
display: flex;
-webkit-flex-flow: row wrap;
justify-content: space-between;
align-items:center;
}
.japp .navbar-container div {
text-align:center;
}
.japp .navbar-container div.title {
display: flex;
}
.japp .navbar-container div.title div
{
line-height:24px;
}
.japp .navbar-container div.icon {
width:24px;
}
.japp .navbar-container div i {
display:block;
}
.japp .navbar-container div img {
height:28px;
display:block;
}
.japp .navbar-container div.title div img {
border-radius:12px;
width:24px;
height:24px;
margin-right:6px;
}
.japp .navbar .icon {
color:var(--active-color);
}
.japp .title {
font-size:1.2em;
}
.japp .block {
padding:15px;
color: #6d6d72;
font-size:0.9em;
box-sizing: border-box;
}
.japp .block-title {
text-transform: uppercase;
color: #6d6d72;
margin: 25px 15px 10px;
line-height: 17px;
position: relative;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
line-height: 1;
font-size:0.9em;
}
.japp .block-strong {
background-color:#fff;
color: #000;
}
.japp .block-border {
border-top:1px solid #ddd;
border-bottom:1px solid #ddd;
}
.japp .block-footer {
text-transform: uppercase;
padding:15px;
color: #6d6d72;
font-size:0.7em;
}
.japp .block-collapse {
max-height:100px;
overflow-y:hidden;
}
.japp .block-instruction {
text-transform: uppercase;
padding:15px;
color: #6d6d72;
font-size:0.7em;
text-align:center;
}
.japp .pages {
display: flex;
flex-wrap: nowrap;
align-items: flex-start;
height: 100%;
}
.japp .page {
padding-top: 45px;
padding-bottom: 45px;
min-height: 100%;
min-width: 100%;
box-sizing: border-box;
overflow-y: auto;
/*will-change: scroll-position;
-webkit-overflow-scrolling: touch;
-webkit-transform: translateZ(0px);
-webkit-transform: translate3d(0,0,0);
-webkit-perspective: 1000;*/
}
.warning .page {
padding-top: 60px;
}
.japp .progressbar-container {
margin: 15px;
margin-left: 0px;
margin-right: 0px;
margin-top: 5px;
}
.japp .progressbar {
width:100%;
border:1px solid var(--active-color);
border-radius:1px;
}
.japp .progressbar-title {
margin-bottom:2px;
text-transform:uppercase;
display:flex;
justify-content:space-between;
}
.japp .progressbar div {
background-color:var(--active-color);
height:4px;
width:0%;
}
.japp .panel {
position:fixed;
top: 0;
left: 0;
margin: 0;
width:60vw;
max-width:220px;
height:100vh;
background: #fff;
z-index: 1003;
-webkit-box-sizing: border-box;
box-sizing: border-box;
box-shadow: 0 -1px 2px rgba(0,0,0,.1);
padding:4px;
}
.japp .panel-left {
-webkit-box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);
box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);
}
.japp .panel a {
color:var(--active-color);
}
/** Toolbar **/
.japp .jtoolbar
{
position:fixed;
bottom: 0;
margin: 0;
left: 0;
width: 100%;
background: #f7f7f8;
z-index: 500;
-webkit-box-sizing: border-box;
box-sizing: border-box;
box-shadow: 0 -1px 2px rgba(0,0,0,.1);
padding:4px;
}
.japp .jtoolbar > div
{
-webkit-box-sizing: border-box;
box-sizing: border-box;
vertical-align:middle;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex-flow: row wrap;
justify-content: space-evenly;
align-items:center;
width: 100%;
cursor:pointer;
}
.japp .jtoolbar > div > div
{
text-align:center;
flex:1;
margin:auto;
}
.japp .jtoolbar a
{
text-decoration:none;
display:inline-block;
}
.japp .jtoolbar i
{
color:#929292;
}
.japp .jtoolbar span
{
font-size:0.7em;
display:block;
color:#929292;
}
.japp .jtoolbar .selected a,
.japp .jtoolbar .selected i,
.japp .jtoolbar .selected span
{
color:var(--active-color);
}
/** Options **/
.japp .options
{
background-color:#fff;
border-top:1px solid #e6e6e8;
border-bottom:1px solid #e6e6e8;
padding-left:15px;
margin-top:10px;
}
.japp .options:empty
{
display:none;
}
.japp .options .option
{
padding-top:10px;
padding-bottom:10px;
text-transform:uppercase;
font-size:1em;
border-bottom:1px solid #e6e6e8;
overflow-x:hidden;
-webkit-box-sizing: border-box;
box-sizing: border-box;
vertical-align:middle;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex-flow: row nowrap;
justify-content: space-between;
align-items:center;
flex-wrap:nowrap;
}
.japp .options .option:last-child
{
border-bottom:0px;
}
.japp .options label
{
width:100%;
}
.japp .options input[type='text'], .japp .options textarea
{
outline:none;
border:1px solid transparent;
font-size:1em;
margin:0px;
padding:0px;
width:100%;
box-sizing:border-box;
}
.japp .options textarea
{
height:100px;
}
.japp .options input[type='checkbox'], .japp .options input[type='radio']
{
visibility: hidden;
}
.japp .options input[type='checkbox'] ~ i, .japp .options input[type='radio'] ~ i
{
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==');
background-repeat: no-repeat;
content:'';
visibility: hidden;
margin-right:10px;
line-height:24px;
width:24px;
height:24px;
}
.japp .options input[type='checkbox']:checked ~ i, .japp .options input[type='radio']:checked ~ i
{
visibility: visible;
}
.japp .options .jdropdown {
display: block;
}
.japp .options .jdropdown .jdropdown-header {
border: 0px;
border-bottom: 1px solid #e6e6e8;
padding: 15px;
text-transform: uppercase;
}
.japp .options .jdropdown:last-child .jdropdown-header {
border-bottom: 0px;
}
.japp .options .jdropdown-searchbar.jdropdown-focus .jdropdown-header {
border:0px;
padding: 5px;
}
.japp .options .icon {
float:left;
margin-right:10px;
max-width:40px;
max-height:40px;
border-radius:20px;
color:#929292;
}
.japp .options .option .option-actions {
display:flex;
transform: translateX(100%);
width:0px;
}
.japp .options .option .option-actions > div {
padding-right:5px;
}
.japp .options .option .option-actions > div > i {
width:40px;
height:40px;
color:#fff;
font-size:24px;
line-height:40px;
text-align:center;
border-radius:30px;
background-color:red;
}
.japp .options .option .option-actions.small > div > i
{
color:#000;
width:24px;
height:24px;
font-size:24px;
line-height:24px;
border-radius:24px;
background-color:transparent;
}
.japp .options .option-title {
display:block;
padding-top:10px;
padding-bottom:10px;
text-transform:uppercase;
font-size:1em;
vertical-align:center;
}
.japp .options .option-title::after {
content:'\e313';
font-family: 'material icons';
font-size:24px;
margin-right:10px;
float:right;
width:24px;
height:24px;
line-height:24px;
}
.japp .options .option-title.selected::after
{
content:'\e316';
}
.japp .options .option-title.selected ~ div {
display:block;
}
.japp .options .option-group {
border-top:1px solid #e6e6e8;
background-color:#fff;
display:none;
}
.japp .options .option-link:after {
content:'\e315';
font-family: 'material icons';
color:var(--active-color);
font-size:24px;
margin-right:10px;
float:right;
width:24px;
height:24px;
line-height:24px;
display:block;
}
.japp .options .option-header {
padding-left:10px;
padding-right:10px;
flex-grow:10;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.japp .options .option .option-name {
font-size:1em;
text-overflow: ellipsis;
width: 100%;
overflow: hidden;
}
.japp .options .option .option-small {
font-size:0.7em;
color: #6d6d72;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
display:block;
}
.japp .options .option .option-image img {
width:40px;
height:40px;
border-radius:20px;
display:block;
}
.japp .options .option .option-image-small img {
width:24px;
height:auto;
border-radius:50px;
display:block;
}
.japp .options .option .option-image .option-badge {
position: absolute;
background-color: red;
color: #fff;
width: 16px;
height: 16px;
line-height: 16px;
border-radius: 16px;
text-align: center;
font-size: 7px;
margin: 28px;
}
.japp .options .option .option-image-small .option-badge {
position: absolute;
background-color: red;
color: #fff;
width: 16px;
height: 16px;
line-height: 16px;
border-radius: 16px;
text-align: center;
font-size: 7px;
margin: 12px;
}
.japp .options .option .option-badge.solid {
background-color: red;
color: red;
}
.japp .options .option .option-badge.solid-green {
background-color: green;
color: green;
}
.japp .options .option .option-badge:empty {
display:none;
}
.japp .options .option .option-date {
float:right;
font-size:0.6em;
color:#888;
margin-right:15px;
white-space: nowrap;
}
.japp .options .option .option-right {
margin-right:15px;
}
.japp .options .option .option-badget {
background-color:red;
border-radius:12px;
width:24px;
height:24px;
line-height:24px;
font-size:0.7em;
color:#fff;
text-align:center;
}
.japp .options .option .option-badget:empty {
display:none;
}
/** Badge **/
.japp .jbadge
{
position:relative;
display:inline-block;
top:-12px;
left:-12px;
}
.japp .jbadge > div
{
background-color:red;
color:#fff;
width:16px;
height:16px;
line-height:16px;
border-radius:16px;
text-align:center;
font-size:8px;
position:absolute;
}
.japp .jbadge > div:empty
{
display:none;
}
/** Picker **/
.japp .picker
{
background-color:#fff;
border-top:1px solid #e6e6e8;
border-bottom:1px solid #e6e6e8;
padding-left:15px;
margin-top:10px;
position:absolute;
bottom:0px;
width:100%;
z-index:700;
}
.japp .picker .picker-options
{
-webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,.2)), linear-gradient(to top, rgba(0,0,0,1), rgba(0,0,0,.2));
-webkit-mask-size: 100% 50%;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center bottom, top center;
overflow-y:scroll;
padding-top:100px;
padding-bottom:100px;
}
.japp .picker label
{
display: block;
padding-top: 10px;
padding-bottom: 10px;
}
.japp .picker .picker-selected
{
border-top:1px solid #e6e6e8;
border-bottom:1px solid #e6e6e8;
}
.japp .picker input
{
display:none;
}
/** Topsearch **/
.japp .top-search {
margin:0px;
padding:10px;
border-bottom:1px solid #ddd;
}
.japp .top-search input {
background-color: #e6e6e6;
border: 0px;
border-radius: 4px;
outline: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: 5px center;
padding-left: 32px;
width: 100%;
}
.japp .searchbar-container i {
position:absolute;
margin-top:5px;
margin-left:8px;
color:#bbb;
}
/** Range **/
.japp .range
{
-webkit-appearance: none;
margin: 18px 0;
width: 100%;
}
.japp .range:focus
{
outline: none;
}
.japp .range::-webkit-slider-runnable-track
{
width: 100%;
height: 4px;
cursor: pointer;
animation: 0.2s;
background: #ccc;
border-radius: 1.3px;
}
.japp .range::-webkit-slider-thumb
{
-webkit-appearance:none;
appearance:none;
width:24px;
height:24px;
background:#fff;
cursor:pointer;
border-radius:24px;
margin-top:-10px;
border:0px;
box-shadow:0px 1px 3px 1px #bbb;
}
.japp .range::-moz-range-track
{
width:100%;
cursor:pointer;
animation:0.2s;
background:#ccc;
border-radius:1.3px;
}
.japp .range::-moz-range-thumb
{
width:24px;
height:24px;
background:#fff;
cursor:pointer;
border-radius:24px;
border:0px;
box-shadow:0px 1px 3px 1px #bbb;
}
.japp .range::-ms-track
{
width: 100%;
cursor: pointer;
animation: 0.2s;
background: transparent;
border-color: transparent;
border-width: 16px 0;
color: transparent;
border-radius:1.3px;
}
.japp .range::-ms-fill-lower
{
background:#ccc;
height:5px;
}
.japp .range::-ms-fill-upper
{
background:#ccc;
height:5px;
}
.japp .range::-ms-thumb {
width:24px;
height:24px;
background:#fff;
cursor:pointer;
border-radius:24px;
border:0px;
box-shadow:0px 1px 3px 1px #bbb;
}
.japp .range:focus::-ms-fill-lower
{
background: #ccc;
}
.japp .range:focus::-ms-fill-upper
{
background: #ccc;
}
/** Actionsheet **/
.jactionsheet
{
position:fixed;
left: 0;
bottom: 0;
width: 100%;
min-height:100%;
z-index:10000;
background-color:rgba(0,0,0,0.5);
-webkit-transition-duration: .2s;
transition-duration: .2s;
display: flex;
-ms-flex-align: baseline;
-webkit-align-items: baseline;
-webkit-box-align: baseline;
align-items: baseline;
}
.jactionsheet .jactionsheet-content
{
width:100%;
align-self: flex-end;
}
.jactionsheet .jactionsheet-title
{
font-size:1em;
font-weight:bold;
padding:8px;
}
.jactionsheet .jactionsheet-message
{
padding:4px;
}
.jactionsheet .jactionsheet-group
{
box-sizing: border-box;
margin:10px;
background-color:#fff;
border-radius:5px;
}
.jactionsheet .jactionsheet-group > div
{
font-size:1.4em;
font-weight:bold;
padding:4px;
border-top:1px solid #ccc;
text-align:center;
width:100%;
}
.jactionsheet .jactionsheet-group > div:first-child
{
border-top:0px;
}
.jactionsheet .jactionsheet-group input
{
border:0px;
margin:0px;
background-color:transparent;
color:var(--active-color);
width:100%;
outline:none;
font-size:1em;
}
.jactionsheet .jactionsheet-group input.jactionsheet-cancel
{
color:red;
}
/** Placeholders **/
.japp .options input::-webkit-input-placeholder
{
text-transform:uppercase;
}
.japp .options input::-moz-placeholder
{
text-transform:uppercase;
}
.japp .options input:-ms-input-placeholder
{
text-transform:uppercase;
}
.japp .options input:-moz-placeholder
{
text-transform:uppercase;
}
::placeholder
{
color: #cccccc;
opacity: 1;
}
:-ms-input-placeholder
{
color: #cccccc;
}
::-ms-input-placeholder
{
color: #cccccc;
}
::-webkit-input-placeholder
{
color: #cccccc;
}
.jmodal {
position:fixed;
top:50%;
left:50%;
width:60%;
height:60%;
-webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2);
-moz-box-shadow: 0 2px 10px rgba(0,0,0,.2);
border:1px solid #ccc;
background-color:#fff;
transform: translate(-50%, -50%);
box-sizing: border-box;
padding-top:50px;
z-index:9002;
border-radius:5px;
}
.jmodal:before {
position:absolute;
top:0;
left:0;
width:100%;
content:attr(title);
padding:15px;
box-sizing: border-box;
background: #e3e3e3;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e3e3e3');
background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e3e3e3));
background: -moz-linear-gradient(top, #ededed, #e3e3e3);
font-size:1.2em;
}
.jmodal_content {
padding:20px;
overflow-y:auto;
max-height:100%;
box-sizing: border-box;
}
.jmodal.no-title {
padding-top:0px;
}
.jmodal.no-title:before {
display:none;
}
.jmodal:after {
content:'';
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
position:absolute;
top:0;
right:0;
margin:14px;
font-size:24px;
width:24px;
height:24px;
cursor:pointer;
text-shadow: 0px 0px 5px #fff;
}
.jmodal_fullscreen {
width: 100% !important;
height: 100% !important;
top: 0px;
left: 0px;
transform: none;
border-radius: 0px;
}
.jmodal_backdrop {
position: fixed;
top: 0px;
left: 0px;
min-width: 100%;
min-height: 100%;
background-color: rgba(0,0,0,0.5);
border: 0px;
padding: 0px;
z-index: 8000;
display: none;
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently
supported by Chrome and Opera */
}
.jnotification {
position: fixed;
z-index: 10000;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
}
.jnotification-container {
-webkit-box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);
box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7);
padding: 12px;
border-radius: 8px;
}
.jnotification-close {
content: '';
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='gray'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
font-size: 20px;
width: 20px;
height: 20px;
cursor: pointer;
}
.jnotification-title {
font-weight: bold;
}
.jnotification-header {
display: flex;
padding-bottom: 5px;
}
.jnotification-header:empty {
display: none;
}
.jnotification-image {
margin-right: 5px;
}
.jnotification-image:empty {
display: none;
}
.jnotification-image img {
width: 24px;
}
.jnotification-name {
text-transform: uppercase;
font-size: 0.9em;
flex: 1;
letter-spacing: 0.1em;
}
@media (min-width: 320px) and (max-width: 800px) {
.jnotification {
top: 0px;
width: 100%;
}
.jnotification-container {
background: rgba(255,255,255,0.95);
border: 1px solid #eee;
}
}
@media (min-width: 801px) {
.jnotification {
bottom: 0px;
}
.jnotification-container {
background-color: #000;
background: rgba(92,92,92,1);
background: linear-gradient(0deg, rgba(92,92,92,1) 0%, rgba(77,77,77,1) 100%);
color: #fff;
width: 320px;
margin: 30px;
padding: 20px;
}
}
.jnotification-header {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.jrating {
display:flex;
}
.jrating > div {
width:24px;
height:24px;
line-height:24px;
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z' fill='gray'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
}
.jrating .jrating-over {
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='black'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
opacity: 0.7;
}
.jrating .jrating-selected {
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='red'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
}
/**
* (c) Image slider
* https://github.com/paulhodel/jtools
*
* @author: Paul Hodel <paul.hodel@gmail.com>
* @description: Image Slider
*/
.jslider {
margin-top:10px;
margin-bottom:10px;
}
.jslider-container img {
width:60px;
margin-right:5px;
margin-bottom:5px;
}
.jslider-attach {
cursor:pointer;
}
.jslider-left::before {
position: fixed;
left: 10px;
content:'arrow_back_ios';
color: #fff;
width: 30px;
height: 30px;
font-family: 'Material Icons';
font-size: 30px;
text-shadow: 0px 0px 0px #000;
text-align: center;
}
.jslider-right::after {
position: fixed;
right: 5px;
content: 'arrow_forward_ios';
color: #fff;
width: 30px;
height: 30px;
font-family: 'Material Icons';
font-size: 30px;
text-shadow: 0px 0px 0px #000;
text-align: center;
}
.jslider-close {
width:24px;
height:24px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
position:fixed;
top:15px;
right:15px;
display:none;
cursor:pointer;
z-index:3000;
}
.jslider-preview {
position:fixed;
left:0;
top:0;
width: 100%;
min-height:100%;
z-index:2000;
margin:0px;
box-sizing:border-box;
background-color:rgba(0,0,0,0.9);
-webkit-transition-duration: .4s;
transition-duration: .4s;
display: flex;
-ms-flex-align: center;
-webkit-align-items: center;
-webkit-box-align: center;
align-items: center;
}
.jslider-preview img {
min-width:70%;
max-width:100%;
height:auto;
box-sizing: border-box;
margin:0 auto;
vertical-align:middle;
display:none;
}
.jswitch {
display: inline-block;
cursor: pointer;
-webkit-tap-highlight-color: transparent;
}
.jswitch i {
position: relative;
display: inline-block;
margin-right: .5rem;
width: 46px;
height: 26px;
background-color: #e6e6e6;
border-radius: 23px;
vertical-align: text-bottom;
transition: all 0.3s linear;
}
.jswitch i::before {
content: "";
position: absolute;
left: 0;
width: 42px;
height: 22px;
background-color: #fff;
border-radius: 11px;
transform: translate3d(2px, 2px, 0) scale3d(1, 1, 1);
transition: all 0.25s linear;
}
.jswitch i::after {
content: "";
position: absolute;
left: 0;
width: 22px;
height: 22px;
background-color: #fff;
border-radius: 11px;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.24);
transform: translate3d(2px, 2px, 0);
transition: all 0.2s ease-in-out;
}
.jswitch:active i::after {
width: 28px;
transform: translate3d(2px, 2px, 0);
}
.jswitch:active input:checked + i::after { transform: translate3d(16px, 2px, 0); }
.jswitch input { display: none; }
.jswitch input:checked + i { background-color: #4BD763; }
.jswitch input:checked + i::before { transform: translate3d(18px, 2px, 0) scale3d(0, 0, 0); }
.jswitch input:checked + i::after { transform: translate3d(22px, 2px, 0); }
.jtabs {
max-width: calc(100vw - 24px);
position: relative;
}
.jtabs > .jtabs-headers {
display: flex;
overflow-x: auto;
}
.jtabs > .jtabs-headers > div {
padding: 6px;
padding-left: 20px;
padding-right: 20px;
margin-left: 1px;
margin-right: 1px;
margin-bottom: 1px;
background-color: #f1f1f1;
cursor: pointer;
}
.jtabs > .jtabs-headers > div.jtabs-selected {
background-color: #e8e8e8;
color: #000;
}
.jtabs > .jtabs-content > div {
display: none;
}
.jtabs > .jtabs-content > div.jtabs-selected {
display: block;
}
.jtabs > .jtabs-border {
position: absolute;
height: 2px;
background-color: #888;
transform-origin: left;
transition: all .2s cubic-bezier(0.4,0,0.2,1);
transition-property: color,left,transform;
}
.jtabs .jtabs-add {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 0 24 24' width='24'%3E%3Cpath d='M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z' fill='%23bbbbbb'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");
cursor: pointer;
background-position: center;
background-repeat: no-repeat;
width: 24px;
height: 24px;
line-height: 24px;
margin: 3px;
margin-left: 10px;
}
.jtags {
display: flex;
flex-wrap: wrap;
-ms-flex-direction: row;
-webkit-flex-direction: row;
flex-direction: row;
-ms-flex-pack: flex-start;
-webkit-justify-content: space-between;
justify-content: flex-start;
padding: 2px;
border: 1px solid #ccc;
}
.jtags > div {
padding: 3px;
padding-left: 10px;
padding-right: 22px;
position: relative;
border-radius: 1px;
margin: 2px;
display: block;
outline: none;
}
.jtags > div::after {
content: 'x';
position: absolute;
top: 4px;
right: 4px;
width: 12px;
height: 12px;
cursor: pointer;
font-size: 11px;
display: none;
}
.jtags_label {
background-color: #eeeeee !important;
}
.jtags_label::after {
display: inline-block !important;
}
.jtags_error::after {
color: #fff !important;
}
.jtags_error {
background-color: #d93025 !important;
color: #fff;
}
.jtags_search {
position: absolute;
display: none;
box-shadow: 0 1px 2px 0 rgba(60,64,67,0.302), 0 2px 6px 2px rgba(60,64,67,0.149);
border: none;
-webkit-border-radius: 4px;
border-radius: 4px;
width: 280px;
padding: 8px 0;
-webkit-box-shadow: 0 2px 4px rgba(0,0,0,0.2);
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
-webkit-transition: opacity .218s;
transition: opacity .218s;
background: #fff;
border: 1px solid rgba(0,0,0,.2);
cursor: pointer;
margin: 0;
min-width: 300px;
outline: none;
width: auto;
user-select: none;
}
.jtags_search > div {
color: #333;
cursor: pointer;
display: -webkit-box;
display: -webkit-flex;
display: flex;
padding: 5px 10px;
user-select: none;
-webkit-align-items: center;
align-items: center;
}
.jtags_search > div:hover {
background-color: #e8eaed;
}
.jtags_search > div > img {
width: 32px;
height: 32px;
user-select: none;
border-radius: 16px;
margin-right: 2px;
}
.jtags_search > div > div {
overflow: hidden;
text-overflow: ellipsis;
margin-left: 2px;
max-width: 300px;
white-space: nowrap;
user-select: none;
}
.jtags_search .selected {
background-color: #e8eaed;
}
/**
* (c) jTools Template renderer
* https://github.com/paulhodel/jtools
*
* @author: Paul Hodel <paul.hodel@gmail.com>
* @description: Template renderer
*/
.jtemplate-pagination {
display:flex;
cursor:pointer;
margin-top:10px;
margin-bottom:10px;
}
.jtemplate-pagination div {
text-align:center;
font-size:0.8em;
width:30px;
height:30px;
line-height:30px;
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none;
}
.jtemplate-pagination div:hover {
background-color:#eee;
}
.jtemplate-results {
margin-top:15px;
margin-bottom:15px;
}
.app .jtemplate-empty {
text-align:center;
padding-top:10px;
padding-bottom:10px;
margin-right:10px;
}
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>jsuites.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>jsuites.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/x-javascript</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
Spreadsheet editor with Jexcel library.
\ No newline at end of file
erp5_jexcel_editor
\ No newline at end of file
erp5_jexcel_editor
\ No newline at end of file
001
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Action Information" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>action_permission</string> </key>
<value>
<tuple>
<string>Add portal content</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jio_js_script</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>web_table_clone</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>reference</string> </key>
<value> <string>web_table_clone</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Clone</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/Base_cloneDocumentForWebTable</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -110,7 +110,7 @@
<item>
<key> <string>text_content</string> </key>
<value> <string>CONFIGURATION MANIFEST\n
# generated on Fri Dec 13 20:31:13 2019\n
# generated on Tue Jul 28 08:56:19 2020\n
CACHE:\n
\n
hateoas_appcache/definition_view/cG9ydGFsX3R5cGVzL1dlYiBQYWdlIE1vZHVsZQ==\n
......@@ -119,6 +119,8 @@ hateoas_appcache/definition_view/cG9ydGFsX3NraW5zL2VycDVfd2ViX3RhYmxlX2VkaXRvci9
hateoas_appcache/definition_view/cG9ydGFsX3R5cGVzL1dlYiBUYWJsZQ==\n
hateoas_appcache/definition_view/cG9ydGFsX3R5cGVzL1dlYiBUYWJsZS93ZWJfdGFibGVfdmlldw==\n
hateoas_appcache/definition_view/cG9ydGFsX3NraW5zL2VycDVfd2ViX3RhYmxlX2VkaXRvci9XZWJUYWJsZV92aWV3QXNKaW9Gb3JXZWJUYWJsZUVkaXRvcg==\n
hateoas_appcache/definition_view/cG9ydGFsX3R5cGVzL1dlYiBUYWJsZS93ZWJfdGFibGVfY2xvbmU=\n
hateoas_appcache/definition_view/cG9ydGFsX3NraW5zL2VycDVfd2ViX3RhYmxlX2VkaXRvci9CYXNlX2Nsb25lRG9jdW1lbnRGb3JXZWJUYWJsZQ==\n
\n
NETWORK:\n
*</string> </value>
......
......@@ -19,7 +19,7 @@
<script data-renderjs-configuration="parent_relative_url" type="text/x-renderjs-configuration">web_page_module</script>
<script data-renderjs-configuration="parent_portal_type" type="text/x-renderjs-configuration">Web Page Module</script>
<script data-renderjs-configuration="portal_skin_folder" type="text/x-renderjs-configuration">erp5_web_table_editor</script>
<script data-renderjs-configuration="app_actions" type="text/x-renderjs-configuration">('Web Table | web_table_view', 'Web Page Module | web_table_view')</script>
<script data-renderjs-configuration="app_actions" type="text/x-renderjs-configuration">('Web Table | web_table_view', 'Web Page Module | web_table_view', 'Web Table | web_table_clone')</script>
<script data-renderjs-configuration="app_allowed_sub_types" type="text/x-renderjs-configuration">('Web Page Module | Web Table',)</script>
<script data-renderjs-configuration="app_view_reference" type="text/x-renderjs-configuration">web_table_view</script>
<script data-renderjs-configuration="web_page_module_dict" type="text/x-renderjs-configuration">{"front_page": 1, "editable": 0, "hide_add_button": 0, "jump_button": 0, "fast_input_button": 0, "export_button": 0, "filter_action": 1, "panel_action": 1, "previous_next_button": 0, "history_previous_link": 0, "title": "Jquery Sheet Documents", "hide_listbox_buttons": 1, "blob_type": "", "blob_create_object_url": 0}</script>
......
......@@ -235,7 +235,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>977.62260.6779.17339</string> </value>
<value> <string>984.59943.25702.48622</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -253,7 +253,7 @@
</tuple>
<state>
<tuple>
<float>1568973158.24</float>
<float>1595923550.24</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -412,7 +412,8 @@
<item>
<key> <string>configuration_precache_manifest_script_list</string> </key>
<value> <string>WebSection_getOfficeJsPrecacheManifestList\n
WebSection_getWebTableEditorPrecacheManifestList</string> </value>
WebSection_getWebTableEditorPrecacheManifestList\n
WebSection_getJexcelEditorPrecacheManifestList</string> </value>
</item>
<item>
<key> <string>configuration_router_gadget_url</string> </key>
......@@ -677,7 +678,7 @@ WebSection_getWebTableEditorPrecacheManifestList</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>983.23018.43853.17715</string> </value>
<value> <string>984.59943.25702.48622</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -695,7 +696,7 @@ WebSection_getWebTableEditorPrecacheManifestList</string> </value>
</tuple>
<state>
<tuple>
<float>1587729708.72</float>
<float>1594816416.45</float>
<string>UTC</string>
</tuple>
</state>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>action_description</string>
<string>gadget_field_action_js_script</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_cloneDocumentForWebTable</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>Base_cloneDocumentForJexcelEditor</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>ERP5 Form</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="LabelField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>action_description</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Confirm clone</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="GadgetField" module="Products.ERP5Form.GadgetField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>gadget_field_action_js_script</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>no_validator</string> </key>
<value> <string>Does not support this operation.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>data_url</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>gadget_url</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>js_sandbox</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>renderjs_extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>validator_field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>validator_form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>data_url</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>gadget_url</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>js_sandbox</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>renderjs_extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>validator_field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>validator_form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>data_url</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>gadget_url</string> </key>
<value> <string>action_web_table_clone.html</string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>js_sandbox</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>renderjs_extra</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>gadget_field_action_js_script</string> </value>
</item>
<item>
<key> <string>validator_field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>validator_form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -4,43 +4,10 @@ url_list = [
"gadget_officejs_web_table_router.html",
"gadget_officejs_jio_web_table_view.html",
"gadget_officejs_jio_web_table_view.js",
"action_web_table_clone.html",
"action_web_table_clone.js",
"gadget_officejs_web_table.json",
"web_table_app_logo.svg",
#jquery-sheets
"jquery.js",
"jquery-sheets.gadget.html",
"jquery-sheets.gadget.js",
"jquery-sheets/wickedgrid.css",
"jquery-sheets/menu.html",
"jquery-sheets/font-awesome.css",
"jquery-sheets/js/thaw.js",
"jquery-sheets/js/raphael.js",
"jquery-sheets/js/copy3_of_undomanager.js",
"jquery-sheets/js/jquery-ui.js",
"jquery-sheets/js/globalize.js",
"jquery-sheets/js/jquery.nearest.js",
"jquery-sheets/js/megatable.js",
"jquery-sheets/js/wickedgrid.js",
"jquery-sheets/js/graphael/g.bar.js",
"jquery-sheets/js/graphael/g.line.js",
"jquery-sheets/js/graphael/g.raphael.js",
"jquery-sheets/js/graphael/g.pie.js",
"jquery-sheets/js/graphael/g.dot.js",
"jquery-sheets/js/ZeroClipboard.js",
"jquery-sheets/js/jquery.elastic.source.js",
"jquery-sheets/js/infiniscroll.js",
"jquery-sheets/js/undomanager.js",
"jquery-sheets/js/MouseWheel.js",
"jquery-sheets/bootstrap-theme.css",
"jquery-sheets/images/underline1.svg",
"jquery-sheets/images/strikethrough.svg",
"jquery-sheets/images/right183.svg",
"jquery-sheets/images/left181.svg",
"jquery-sheets/images/centered5.svg",
"jquery-sheets/images/italic3.svg",
"jquery-sheets/images/bold13.svg",
"jquery-sheets/bootstrap.css",
]
return url_list
......@@ -224,8 +224,8 @@
<value>
<list>
<tuple>
<string>{"editor": "jquery-sheets", "maximize": true}</string>
<string>{"editor": "jquery-sheets", "maximize": true}</string>
<string>{"editor": "jexcel", "maximize": true}</string>
<string>{"editor": "jexcel", "maximize": true}</string>
</tuple>
</list>
</value>
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Web Table Clone</title>
<script src="rsvp.js"></script>
<script src="renderjs.js"></script>
<script src="action_web_table_clone.js"></script>
</head>
<body>
</body>
</html>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>action_web_table_clone.html</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/*jslint nomen: true, indent: 2 */
/*global window, rJS, RSVP*/
(function (window, rJS) {
"use strict";
rJS(window)
.declareAcquiredMethod("jio_get", "jio_get")
.declareAcquiredMethod("jio_post", "jio_post")
.declareMethod("preRenderDocument", function (parent_options) {
var gadget = this;
return gadget.jio_get(parent_options.jio_key)
.push(function (parent_document) {
return parent_document;
});
})
.declareMethod("handleSubmit", function (content_dict, parent_options) {
//must return a dict with:
//notify: options_dict for notifySubmitted
//redirect: options_dict for redirect
var return_submit_dict = {
notify: {
message: "",
status: ""
},
redirect: {
command: "display",
options: {}
}
},
gadget = this,
document = parent_options.doc,
property;
delete content_dict.dialog_method;
for (property in content_dict) {
if (content_dict.hasOwnProperty(property)) {
document[property] = content_dict[property];
}
}
return gadget.jio_post(document)
.push(function (jio_key) {
return_submit_dict.notify.message = "Document Cloned";
  • BTW this should have been translated

  • ( I don't think notifySubmitted does the translation ) edit: + but just by reading the diff I don't see exactly where it's called, so maybe it's ok

    Edited by Jérome Perrin
Please register or sign in to reply
return_submit_dict.notify.status = "success";
return_submit_dict.redirect.options = {
jio_key: jio_key,
editable: true
};
return return_submit_dict;
}, function (error) {
if (error instanceof jIO.util.jIOError) {
return_submit_dict.notify.message = "Failure cloning document";
return_submit_dict.notify.status = "error";
return return_submit_dict;
}
throw error;
});
});
}(window, rJS));
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>action_web_table_clone.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
erp5_officejs
erp5_jquery_sheet_js_editor
erp5_minipaint
\ No newline at end of file
erp5_minipaint
erp5_jexcel_editor
\ No newline at end of file
......@@ -3,6 +3,7 @@ image_module/web_table_app_logo_svg
portal_types/Image Module/image_editor_view
portal_types/Image/image_editor_view
portal_types/Web Page Module/web_table_view
portal_types/Web Table/web_table_clone
portal_types/Web Table/web_table_view
web_page_module/gadget_image_editor*
web_page_module/gadget_officejs_image_editor*
......@@ -11,4 +12,4 @@ web_page_module/gadget_web_table*
web_site_module/officejs_image_editor
web_site_module/officejs_image_editor/**
web_site_module/officejs_web_table_editor
web_site_module/officejs_web_table_editor/**
web_site_module/officejs_web_table_editor/**
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testJexcelEditor</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test OfficeJS UI</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test OfficeJS Jexcel UI</td></tr>
</thead><tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<!-- Clean Up -->
<tr>
<td>open</td>
<td>${base_url}/bar_module/ListBoxZuite_reset</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Reset Successfully.</td>
<td></td>
</tr>
<!-- Initialize and skip app installation -->
<tr>
<td>open</td>
<td>${base_url}/web_site_module/officejs_web_table_editor/</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>link=Skip</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Skip</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='Storages']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='Storages']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>link=Local is Enough</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Local is Enough</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>link=Add</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Add</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//button[@data-i18n='Save']</td>
<td></td>
</tr>
<tr>
<!-- Wait for spreadsheet to be rendered by the gadget -->
<tr>
<td>waitForElementPresent</td>
<td>//div[@class='spreadsheet']</td>
<td></td>
</tr>
<!-- Verify maximize button is present -->
<tr>
<td>waitForElementPresent</td>
<td>//button[contains(@class, 'ui-icon-expand ui-btn-icon-notext')]</td>
<td></td>
</tr>
<!-- Verify editor has been maximized -->
<tr>
<td>click</td>
<td>//button[contains(@class, 'ui-icon-expand ui-btn-icon-notext')]</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//div[contains(@class, 'editor-maximize')]</td>
<td></td>
</tr>
<!-- Verify searchbar is present -->
<tr>
<td>waitForElementPresent</td>
<td>//div[contains(@class, 'jexcel_filter')]</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//div[contains(@class, 'jexcel_filter')]</td>
<td></td>
</tr>
<!-- Verify toolbar is present -->
<tr>
<td>waitForElementPresent</td>
<td>//div[contains(@class, 'jexcel_toolbar')]</td>
<td></td>
</tr>
<!-- Verify body is present, draggable and resizable -->
<tr>
<td>waitForElementPresent</td>
<td>//tbody[contains(@class, 'draggable resizable')]</td>
<td></td>
</tr>
<!-- Add table -->
<tr>
<td>waitForElementPresent</td>
<td>//i[@title='Add table']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//i[@title='Add table']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//div[@data-spreadsheet='1']</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//div[@data-spreadsheet='1']</td>
<td>Table 2</td>
</tr>
<!-- Delete Sheet -->
<tr>
<td>click</td>
<td>//div[@data-spreadsheet='0']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//i[@title='Delete table']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//i[@title='Delete table']</td>
<td></td>
</tr>
<tr>
<td>assertConfirmation</td>
<td>Delete this table ?</td>
<td></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>//div[@data-spreadsheet='1']</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//div[@data-spreadsheet='0']</td>
<td>Table 1</td>
</tr>
</tbody>
</table>
\ No newline at end of file
......@@ -116,7 +116,7 @@
</tr>
<tr>
<td>waitForElementPresent</td>
<td>identifier=jquery_sheet_gadget</td>
<td>//div[@class='spreadsheet']</td>
<td></td>
</tr>
<!-- Wait for editor completly loaded, this is workaround, wait for lock in renderjs -->
......
......@@ -13,7 +13,8 @@
"jquery-sheets": {"url": "jquery-sheets.gadget.html"},
"pdf": {"url": "pdf_js/pdfjs.gadget.html"},
"notebook_editor": {"url": "gadget_notebook.html"},
"jsmd_editor": {"url": "gadget_jsmd_viewer.html"}
"jsmd_editor": {"url": "gadget_jsmd_viewer.html"},
"jexcel" : {"url": "jexcel.gadget.html"}
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment