Skip to content

Commit 69ce9b3

Browse files
committed
Version 1.1.3
Fix #5 See changelog
1 parent 03ca5f7 commit 69ce9b3

File tree

5 files changed

+159
-29
lines changed

5 files changed

+159
-29
lines changed

readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## LaTeX Table Editor ##
22

3-
**Version 1.1.2**
3+
**Version 1.1.3**
44

55
This is the GitHub page of an Open Source WYSIWYG table editor that exports to multiples languages including LaTeX, Plain TeX, CSV, HTML, BBCode, Eplain, PreTeXt and Markdown.
66

src/changelog.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,21 @@ Legend
77
Dates use a YYYY/MM/DD format.
88

99

10+
Version 1.1.3 (2018/05/14)
11+
===========
12+
13+
| Note on this release :
14+
| Bug fixes
15+
16+
LATEX IMPORT
17+
18+
[#] Fixed issue where cells with \multirow and a negative argument would disappears (#5)
19+
20+
EPLAIN EXPORT
21+
22+
[#] Characters "\" and "~" were not well encoded
23+
[#] Characters ">" would disappears in the output
24+
1025
Version 1.1.2 (2018/05/10)
1126
===========
1227

src/js.js

Lines changed: 125 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ function $id(id) {
9090
return "[rgb]{"+sep+"}";
9191
},
9292
table = new(function() {
93-
this.version = "1.1";
93+
this.version = "1.1.3";
9494
this.create = function(cols, rows) {
9595
rows = parseInt(rows, 10);
9696
cols = parseInt(cols, 10);
@@ -300,27 +300,58 @@ function $id(id) {
300300
else if(results.length > 0){
301301
loadWorkbook(0);
302302
}
303+
sendGAEvent("Code", "importFile", "file");
303304
table._id("excel-button").disabled = false;
304305
}
305-
this.importExcel = function(){
306-
var file = this._id("excel-file").files[0],
307-
elem_status = this._id('worksheet-loading-status');
308-
if(file){
309-
this._id("excel-button").disabled = true;
310-
var excelWorker = function excelWorker(data, cb, th) {
311-
var worker = new Worker("js/xlsxworker.js");
306+
this.importExcel = function(file){
307+
file = file || this._id("excel-file").files[0]
308+
var elem_status = this._id('worksheet-loading-status');
309+
if(file){
310+
this._id("excel-button").disabled = true;
311+
var excelWorker = function excelWorker(data, cb, th) {
312+
try{
313+
var worker = new Worker("js/xlsxworker.js");
314+
}
315+
catch(e){
316+
if(/origin.+null/.test(e.message)){
317+
elem_status.innerHTML = "Impossible to load worksheets locally with this browser. Use another browser or load this page in a server.";
318+
}
319+
else{
320+
console.error(e);
321+
elem_status.innerHTML = "An unknown error occured";
322+
}
323+
document.getElementById("excel-button").disabled = false;
324+
return false;
325+
}
312326
worker.onmessage = function(e) {
313-
switch(e.data.t) {
314-
case 'ready': break;
315-
case 'e': console.error(e.data.d); break;
316-
case 'xlsx': cb(e.data.d);worker.terminate(); break;
327+
var t = e.data.t;
328+
if(t == "e"){
329+
console.error(e.data.d);
330+
elem_status.innerHTML = "An error occured";
331+
document.getElementById("excel-button").disabled = false;
332+
worker.terminate();
333+
}
334+
else if(t == "xlsx"){
335+
cb(e.data.d);
336+
worker.terminate();
317337
}
318338
};
339+
worker.onerror = function(e){
340+
elem_status.innerHTML = "An error occured";
341+
document.getElementById("excel-button").disabled = false;
342+
console.error(e);
343+
}
319344
worker.postMessage({d:data,b:'binary'});
320345
};
321346
var reader = new FileReader(), _this = this;
322347
reader.onload = function(e){
323-
elem_status.innerHTML = "Converting...";
348+
elem_status.innerHTML = 'Converting... <a href="#" id="worksheet-cancel">Cancel</a>';
349+
document.getElementById("worksheet-cancel").addEventListener("click", function(e){
350+
e.preventDefault();
351+
worker.terminate();
352+
document.getElementById("excel-button").disabled = false;
353+
elem_status.innerHTML = "";
354+
},false);
324355
excelWorker(e.target.result, _this._importExcel);
325356
};
326357
reader.onprogress = function(e){
@@ -331,6 +362,7 @@ function $id(id) {
331362
}
332363
reader.onerror = function(e){
333364
elem_status.innerHTML = "An error occured";
365+
document.getElementById("excel-button").disabled = false;
334366
}
335367
reader.readAsBinaryString(file);
336368
}
@@ -1455,7 +1487,8 @@ this.getHTML = (function(){
14551487
this.loaded = true;
14561488
this.element = table;
14571489
var _this = this,
1458-
waitingforpaste = false;
1490+
waitingforpaste = false,
1491+
waitingfortab = false;
14591492
$id("support-us").addEventListener("animationend",function(){
14601493
this.classList.remove("active");
14611494
}, false);
@@ -1487,11 +1520,73 @@ this.getHTML = (function(){
14871520
}, false);
14881521
table.addEventListener("click", function(e) {
14891522
var target = e.currentTarget;
1523+
waitingfortab = false;
14901524
if (target.tagName == "TD" || target.tagName == "TH") {
14911525
_this._clickCellManager.apply(this, arguments);
14921526
}
14931527
}, false);
1494-
1528+
table.addEventListener("focusin", function(e) {
1529+
if(waitingfortab){
1530+
waitingfortab = false;
1531+
var target = e.target;
1532+
do{
1533+
if(target.tagName == "TD" || target.tagName == "TH"){
1534+
break;
1535+
}
1536+
}
1537+
while(target = target.parentElement);
1538+
if(target){
1539+
_this._clickCellManager.apply(target, arguments);
1540+
}
1541+
}
1542+
}, false);
1543+
table.addEventListener("keydown", function(e){
1544+
e = window.event || e;
1545+
if(e.keyCode == 9 && !e.ctrlKey){
1546+
waitingfortab = true;
1547+
}
1548+
}, false);
1549+
this._id("worksheet-drop").addEventListener("drop", function(e){
1550+
e.stopPropagation();
1551+
e.preventDefault();
1552+
this.classList.remove("dragover");
1553+
var file;
1554+
if(e.dataTransfer.items){
1555+
for(var i=0;i<e.dataTransfer.items.length;i++){
1556+
if(e.dataTransfer.items[i].kind == "file"){
1557+
file = e.dataTransfer.items[i].getAsFile();
1558+
break;
1559+
}
1560+
}
1561+
}
1562+
else{
1563+
file = e.dataTransfer.files[0];
1564+
}
1565+
if(file){
1566+
_this.importExcel(file);
1567+
}
1568+
if(e.dataTransfer.items){
1569+
e.dataTransfer.items.clear();
1570+
}
1571+
else{
1572+
e.dataTransfer.clearData();
1573+
}
1574+
}, false);
1575+
this._id("worksheet-drop").addEventListener("dragenter", function(e){
1576+
e.stopPropagation();
1577+
e.preventDefault();
1578+
this.classList.add("dragover");
1579+
}, false);
1580+
this._id("worksheet-drop").addEventListener("dragover", function(e){
1581+
e.stopPropagation();
1582+
e.preventDefault();
1583+
this.classList.add("dragover");
1584+
}, false);
1585+
this._id("worksheet-drop").addEventListener("dragleave", function(e){
1586+
e.stopPropagation();
1587+
e.preventDefault();
1588+
this.classList.remove("dragover");
1589+
}, false);
14951590

14961591

14971592
document.execCommand("styleWithCSS", false, false);
@@ -1516,9 +1611,15 @@ this.getHTML = (function(){
15161611
var el = div.querySelectorAll("span.latex-equation");
15171612
var eq = []
15181613
for (var i = 0; i < el.length; i++) {
1519-
var kbd = document.createElement("kbd");
1520-
eq.push("$" + (el[i].innerText || el[i].textContent) + "$");
1521-
el[i].parentNode.replaceChild(kbd, el[i]);
1614+
var equation_text = (el[i].innerText || el[i].textContent);
1615+
if(/\S/.test(equation_text)){
1616+
var kbd = document.createElement("kbd");
1617+
eq.push("$" + equation_text + "$");
1618+
el[i].parentNode.replaceChild(kbd, el[i]);
1619+
}
1620+
else{
1621+
el[i].parentNode.removeChild(el[i]);
1622+
}
15221623
}
15231624
var ul = div.querySelectorAll("ul");
15241625
var ULs = []
@@ -2249,6 +2350,10 @@ this.getHTML = (function(){
22492350
else if(format == "html"){
22502351
src = "<!doctype>\n<html>\n<head>\n\t<title>Minimal Working Example</title>\n</head>\n<body>\n"+src+"\n</body>\n</html>";
22512352
}
2353+
else if(format == "wml"){
2354+
src = '<?xml version="1.0"?>\n<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "http://www.wapforum.org/DTD/wml13.dtd">\n<wml>\n<card id="page" title="Minimal Working Example">\n<p>\n' + src;
2355+
src += '\n</p>\n</card>\n</wml>';
2356+
}
22522357
element.value = src;
22532358
}
22542359
this.comparableHeader = function(before, middle, after) {
@@ -3381,12 +3486,7 @@ this.getHTML = (function(){
33813486
}
33823487
}
33833488
}
3384-
console.dir({
3385-
complete: complete,
3386-
color : hasColor,
3387-
borders : border,
3388-
types : types
3389-
});
3489+
33903490
return callback.call(this, {
33913491
complete: complete,
33923492
color : hasColor,
@@ -3495,6 +3595,7 @@ console.dir({
34953595
if (arguments.length == 0) {
34963596
return ""
34973597
}
3598+
console.log(o.color);
34983599
var complete = o.complete,
34993600
hasColor = o.color,
35003601
borders = o.borders,

src/latex-import.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -512,22 +512,32 @@ var tabular = /\\begin{(tabu\*?|sidewaystable|table\*?|xtabular|longtable|mpxtab
512512
var row = table[i],
513513
pos = 0;
514514
for(var j=0;j<row.length;j++){
515-
var o = row[j];
515+
var o = row[j],
516+
o2;
516517
if(o.rowSpan && Math.abs(o.rowSpan) != 1){
517518
if(o.rowSpan < 0){
518519
var span = Math.abs(o.rowSpan);
520+
o.rowSpan = span;
519521
for(var k=i-span+1;k<i+1;k++){
520522
var row2 = table[k];
521523
if(row2){
522524
var pos2 = 0;
523525
for(var h=0;h<row2.length;h++){
524526
if(pos2 == pos){
525527
if(k==i-span+1){
526-
row2[h] = o;
528+
row2[h] = {};
529+
// Copy object
530+
for(var f in o){
531+
if(o.hasOwnProperty(f)){
532+
row2[h][f] = o[f];
533+
}
534+
}
535+
row2[h].rowSpan = span;
536+
o2 = row2[h];
527537
}
528538
else{
529539
row2[h].remove = true;
530-
row2[h].refCell = o;
540+
row2[h].refCell = o2;
531541
}
532542
}
533543
pos2 += row[h].colSpan || 1;

src/toEplain.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
else{
1717
latex+="\\hfill";
1818
}
19+
latex = latex.replace(/\\textbackslash\{\}/g, "{\\char`\\\\}");
1920
return latex;
2021
},
2122
generateFromHTML = function(html, ignoreMultiline, align) {
@@ -71,6 +72,9 @@
7172
else if(inside == "&quot;"){
7273
str += '"';
7374
}
75+
else if(inside == "&gt;"){
76+
str += "$>$";
77+
}
7478
i += inside.length-1;
7579
}
7680
else if(c == "\\"){
@@ -89,7 +93,7 @@
8993
str += "\\P{}";
9094
}
9195
else if(c == "~"){
92-
str += "\\textasciitilde{}";
96+
str += "{\\char`\\~}";
9397
}
9498
else{
9599
str+= c;

0 commit comments

Comments
 (0)