DEV: Use webpack to load table-builder dependencies (#25018)

This avoids the need to vendor the JS/CSS in our git repository
This commit is contained in:
David Taylor 2024-01-02 10:47:47 +00:00 committed by GitHub
parent e47ad13122
commit fb95ab8e00
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 61 additions and 33176 deletions

View File

@ -22,7 +22,9 @@
"messageformat": "0.1.5", "messageformat": "0.1.5",
"regenerator-transform": "0.10.1", "regenerator-transform": "0.10.1",
"source-map": "0.1.43", "source-map": "0.1.43",
"sourcemap-validator": "1.1.1" "sourcemap-validator": "1.1.1",
"jspreadsheet-ce": "4.13.4",
"@jspreadsheet/formula": "2.0.2"
}, },
"corrections": true, "corrections": true,
"ignore": [ "ignore": [

View File

@ -2,7 +2,6 @@ import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking"; import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object"; import { action } from "@ember/object";
import didInsert from "@ember/render-modifiers/modifiers/did-insert"; import didInsert from "@ember/render-modifiers/modifiers/did-insert";
import { schedule } from "@ember/runloop";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner"; import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
import DButton from "discourse/components/d-button"; import DButton from "discourse/components/d-button";
@ -11,7 +10,6 @@ import DModalCancel from "discourse/components/d-modal-cancel";
import TextField from "discourse/components/text-field"; import TextField from "discourse/components/text-field";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import loadScript from "discourse/lib/load-script";
import { import {
arrayToTable, arrayToTable,
findTableRegex, findTableRegex,
@ -24,11 +22,16 @@ import DTooltip from "float-kit/components/d-tooltip";
export default class SpreadsheetEditor extends Component { export default class SpreadsheetEditor extends Component {
@service dialog; @service dialog;
@tracked showEditReason = false; @tracked showEditReason = false;
@tracked loading = null; @tracked loading = true;
spreadsheet = null; spreadsheet = null;
defaultColWidth = 150; defaultColWidth = 150;
isEditingTable = !!this.args.model.tableTokens; isEditingTable = !!this.args.model.tableTokens;
constructor() {
super(...arguments);
this.loadJspreadsheet();
}
get modalAttributes() { get modalAttributes() {
if (this.isEditingTable) { if (this.isEditingTable) {
return { return {
@ -53,15 +56,11 @@ export default class SpreadsheetEditor extends Component {
createSpreadsheet(spreadsheet) { createSpreadsheet(spreadsheet) {
this.spreadsheet = spreadsheet; this.spreadsheet = spreadsheet;
schedule("afterRender", () => {
this.loadLibraries().then(() => {
if (this.isEditingTable) { if (this.isEditingTable) {
this.buildPopulatedTable(this.args.model.tableTokens); this.buildPopulatedTable(this.args.model.tableTokens);
} else { } else {
this.buildNewTable(); this.buildNewTable();
} }
});
});
} }
@action @action
@ -116,13 +115,15 @@ export default class SpreadsheetEditor extends Component {
} }
} }
loadLibraries() { async loadJspreadsheet() {
this.loading = true; const [jspreadsheetModule] = await Promise.all([
return loadScript("/javascripts/jsuites/jsuites.js") import("jspreadsheet-ce"),
.then(() => { import("jspreadsheet-ce/dist/jspreadsheet.css"),
return loadScript("/javascripts/jspreadsheet/jspreadsheet.js"); import("jsuites/dist/jsuites.css"),
}) ]);
.finally(() => (this.loading = false));
this.jspreadsheet = jspreadsheetModule.default;
this.loading = false;
} }
buildNewTable() { buildNewTable() {
@ -201,7 +202,7 @@ export default class SpreadsheetEditor extends Component {
: `post-table-export`; : `post-table-export`;
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
this.spreadsheet = jspreadsheet(this.spreadsheet, { this.spreadsheet = this.jspreadsheet(this.spreadsheet, {
data, data,
columns, columns,
defaultColAlign: "left", defaultColAlign: "left",

View File

@ -24,6 +24,7 @@
"ember-source": "~3.28.12", "ember-source": "~3.28.12",
"handlebars": "^4.7.8", "handlebars": "^4.7.8",
"highlight.js": "^11.9.0", "highlight.js": "^11.9.0",
"jspreadsheet-ce": "^4.13.4",
"pretty-text": "1.0.0" "pretty-text": "1.0.0"
}, },
"devDependencies": { "devDependencies": {

View File

@ -1560,6 +1560,11 @@
"@jridgewell/resolve-uri" "3.1.0" "@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14" "@jridgewell/sourcemap-codec" "1.4.14"
"@jspreadsheet/formula@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@jspreadsheet/formula/-/formula-2.0.2.tgz#e0529f275c086fd7d34179b50450a98aeb56fd58"
integrity sha512-PDQYf9REQA53I7tVYkvkeyQxrd5jcjUeHgItYnRpjN2QiIQwawSqBDtGGEVQTSboTG+JwgGCuhvOpj7FxeKwew==
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@ -7655,6 +7660,19 @@ jsonify@^0.0.1:
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978"
integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==
jspreadsheet-ce@^4.13.4:
version "4.13.4"
resolved "https://registry.yarnpkg.com/jspreadsheet-ce/-/jspreadsheet-ce-4.13.4.tgz#78b11090a3dcc206b53d7dd72c030b6a5abdf8b4"
integrity sha512-Rv1xbR5AKme7Nd+vCRsHS05+3h0CtcDYcGseXPOEOWV9Mq7k3z57comq+kjLXJZyEf3CR9kCzIPQsd6tN7Yn6w==
dependencies:
"@jspreadsheet/formula" "^2.0.2"
jsuites "^5.0.25"
jsuites@^5.0.25:
version "5.0.30"
resolved "https://registry.yarnpkg.com/jsuites/-/jsuites-5.0.30.tgz#85ff6e0847f9dbc574232cd34728eac8f53d719d"
integrity sha512-QFMgWH5pIxBxiXX8JB97gIUwsNazMn791fXCkX1HRXZdX9yKOC18InS0qd8ftkt2zTfdAgOG+t2cvteV4EUsEg==
just-extend@^4.0.2: just-extend@^4.0.2:
version "4.2.1" version "4.2.1"
resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744"

View File

@ -1712,6 +1712,11 @@
"@jridgewell/resolve-uri" "3.1.0" "@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14" "@jridgewell/sourcemap-codec" "1.4.14"
"@jspreadsheet/formula@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@jspreadsheet/formula/-/formula-2.0.2.tgz#e0529f275c086fd7d34179b50450a98aeb56fd58"
integrity sha512-PDQYf9REQA53I7tVYkvkeyQxrd5jcjUeHgItYnRpjN2QiIQwawSqBDtGGEVQTSboTG+JwgGCuhvOpj7FxeKwew==
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@ -7861,6 +7866,19 @@ jsonify@^0.0.1:
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978"
integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==
jspreadsheet-ce@^4.13.4:
version "4.13.4"
resolved "https://registry.yarnpkg.com/jspreadsheet-ce/-/jspreadsheet-ce-4.13.4.tgz#78b11090a3dcc206b53d7dd72c030b6a5abdf8b4"
integrity sha512-Rv1xbR5AKme7Nd+vCRsHS05+3h0CtcDYcGseXPOEOWV9Mq7k3z57comq+kjLXJZyEf3CR9kCzIPQsd6tN7Yn6w==
dependencies:
"@jspreadsheet/formula" "^2.0.2"
jsuites "^5.0.25"
jsuites@^5.0.25:
version "5.0.30"
resolved "https://registry.yarnpkg.com/jsuites/-/jsuites-5.0.30.tgz#85ff6e0847f9dbc574232cd34728eac8f53d719d"
integrity sha512-QFMgWH5pIxBxiXX8JB97gIUwsNazMn791fXCkX1HRXZdX9yKOC18InS0qd8ftkt2zTfdAgOG+t2cvteV4EUsEg==
just-extend@^4.0.2: just-extend@^4.0.2:
version "4.2.1" version "4.2.1"
resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744"

View File

@ -1,5 +1,3 @@
@import "vendor/jspreadsheet";
@import "vendor/jsuites";
@import "jspreadsheet-theme"; @import "jspreadsheet-theme";
@import "table-edit-decorator"; @import "table-edit-decorator";
@import "insert-table-modal"; @import "insert-table-modal";

View File

@ -1,699 +0,0 @@
:root {
--jexcel-border-color: #000;
}
.jexcel_container {
display: inline-block;
padding-right: 2px;
box-sizing: border-box;
overscroll-behavior: contain;
outline: none;
}
.jexcel_container.fullscreen {
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 21;
}
.jexcel_container.fullscreen .jexcel_content {
overflow: auto;
width: 100%;
height: 100%;
background-color: #ffffff;
}
.jexcel_container.with-toolbar .jexcel > thead > tr > td {
top: 0;
}
.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: 8px;
height: 8px;
}
.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;
}
.jexcel_container.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: relative;
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_overflow > tbody > tr > td {
overflow: hidden;
}
.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;
padding-right: 2px;
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);
}
.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: 20;
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: 0.875rem;
letter-spacing: 0.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: 0.875rem;
letter-spacing: 0.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: 8px;
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 4px 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: 10px;
padding-left: 20px;
padding-right: 20px;
margin-right: 5px;
margin-bottom: 5px;
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 > tfoot > 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,
.jexcel tfoot .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;
}
.red {
color: red;
}
.jexcel > tbody > tr > td.readonly > input[type="checkbox"],
.jexcel > tbody > tr > td.readonly > input[type="radio"] {
pointer-events: none;
opacity: 0.5;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,97 +0,0 @@
#!/bin/bash
# Script used for updating depencies for the table builder/editor feature.
# Updates the JSpreadsheet and jSuites libraries to the latest available versions.
# Get the directory of the script
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Construct paths relative to the script directory
SCSS_VENDOR="$SCRIPT_DIR/../app/assets/stylesheets/common/table-builder/vendor/"
JSPREADSHEET_VENDOR="$SCRIPT_DIR/../public/javascripts/jspreadsheet/"
JSUITES_VENDOR="$SCRIPT_DIR/../public/javascripts/jsuites/"
JSUITES_JS_URL="https://jsuites.net/v4/jsuites.js"
JSPREADSHEET_JS_URL="https://bossanova.uk/jspreadsheet/v4/jexcel.js"
JSUITES_CSS_URL="https://raw.githubusercontent.com/jsuites/jsuites/master/dist/jsuites.css"
JSPREADSHEET_CSS_URL="https://bossanova.uk/jspreadsheet/v4/jexcel.css"
JSUITES_CSS_FILE=jsuites.css
JSUITES_SCSS_FILE=jsuites.scss
JSUITES_SCSS_FILE_LOCATION=$SCSS_VENDOR$JSUITES_SCSS_FILE
JSUITES_JS_FILE=jsuites.js
JSUITES_NEW_JS_FILE=jsuites.js
JSUITES_JS_FILE_LOCATION=$JSUITES_VENDOR$JSUITES_NEW_JS_FILE
JSPREADSHEET_CSS_FILE=jexcel.css
JSPREADSHEET_SCSS_FILE=jspreadsheet.scss
JSPREADSHEET_SCSS_FILE_LOCATION=$SCSS_VENDOR$JSPREADSHEET_SCSS_FILE
JSPREADSHEET_JS_FILE=jexcel.js
JSPREADSHEET_NEW_JS_FILE=jspreadsheet.js
JSPREADSHEET_JS_FILE_LOCATION=$JSPREADSHEET_VENDOR$JSPREADSHEET_NEW_JS_FILE
# Remove all vendor related files:
rm -r ${SCSS_VENDOR}*
rm -r ${JSUITES_VENDOR}
rm -r ${JSPREADSHEET_VENDOR}
# Recreate vendor directory
mkdir $JSUITES_VENDOR
mkdir $JSPREADSHEET_VENDOR
echo "Old vendor assets have been removed."
# STYLESHEETS:
# Add JSuite vendor file
if test -f "$JSUITES_CSS_FILE"; then
echo "$JSUITES_CSS_FILE already exists."
else
# Fetch jsuite stylesheet
wget $JSUITES_CSS_URL
echo "$JSUITES_CSS_FILE has been created in $(pwd)"
# Move jsuite stylesheet to vendor as a scss file
mv $JSUITES_CSS_FILE $JSUITES_SCSS_FILE_LOCATION
echo "$JSUITES_SCSS_FILE has been placed in the scss vendor directory"
# Scope styles to jexcel_container class
sed -i '' '1s/^/.jexcel_container {\n/' $JSUITES_SCSS_FILE_LOCATION
sed -i '' '$a\
}' $JSUITES_SCSS_FILE_LOCATION
# Remove conflicting animation classes
# TODO: Improve below code to handle nested code blocks
fi
# Add JSpreadsheet vendor file
if test -f "$JSPREADSHEET_CSS_FILE"; then
echo "$JSPREADSHEET_CSS_FILE already exists."
else
# Fetch jspreadsheet stylesheet
wget $JSPREADSHEET_CSS_URL
echo "$JSPREADSHEET_CSS_FILE has been created in $(pwd)"
# Move jspreadsheet stylesheet to vendor as a scss file
mv $JSPREADSHEET_CSS_FILE $JSPREADSHEET_SCSS_FILE_LOCATION
fi
# Apply prettier to vendor files
yarn prettier --write $SCSS_VENDOR
# JAVASCRIPTS:
if test -f "$JSUITES_JS_FILE"; then
echo "$JSUITES_JS_FILE already exists."
else
wget $JSUITES_JS_URL
mv $JSUITES_JS_FILE $JSUITES_JS_FILE_LOCATION
fi
if test -f "$JSPREADSHEET_JS_FILE"; then
echo "$JSPREADSHEET_JS_FILE already exists."
else
wget $JSPREADSHEET_JS_URL
mv $JSPREADSHEET_JS_FILE $JSPREADSHEET_JS_FILE_LOCATION
fi