@@ -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 ( / o r i g i n .+ n u l l / . 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 ,
0 commit comments