├── .gitignore ├── docs ├── demo │ ├── demo.xlsx │ ├── example4.html │ ├── example1.html │ ├── example2.html │ ├── example3.html │ └── common.js ├── img │ ├── sibbell.png │ ├── ExcelPlus.png │ ├── ExcelPlus16x16.png │ ├── ExcelPlus128x128.png │ └── ExcelPlus.svg ├── css │ ├── prettify.css │ ├── default.css │ ├── sunburst.css │ └── bootstrap-responsive.min.css └── js │ ├── bootstrap-dropdown.js │ ├── bootstrap-scrollspy.js │ └── bootstrap-collapse.js ├── 2.0 └── swfobject │ ├── test.swf │ ├── FileToDataURI.swf │ ├── expressInstall.swf │ ├── src │ ├── expressInstall.fla │ └── expressInstall.as │ ├── index_dynamic.html │ ├── index.html │ └── swfobject.js ├── 2.1 └── swfobject │ ├── test.swf │ ├── FileToDataURI.swf │ ├── expressInstall.swf │ ├── src │ ├── expressInstall.fla │ └── expressInstall.as │ ├── index_dynamic.html │ ├── index.html │ └── swfobject.js ├── 2.2 └── swfobject │ ├── test.swf │ ├── FileToDataURI.swf │ ├── expressInstall.swf │ ├── src │ ├── expressInstall.fla │ └── expressInstall.as │ ├── index_dynamic.html │ ├── index.html │ ├── FileToDataURI.mxml │ └── swfobject.js ├── 2.3 └── swfobject │ ├── test.swf │ ├── FileToDataURI.swf │ ├── expressInstall.swf │ ├── src │ ├── expressInstall.fla │ └── expressInstall.as │ ├── index_dynamic.html │ ├── index.html │ ├── FileToDataURI.mxml │ └── swfobject.js ├── 2.4 └── swfobject │ ├── test.swf │ ├── FileToDataURI.swf │ ├── expressInstall.swf │ ├── src │ ├── expressInstall.fla │ └── expressInstall.as │ ├── index_dynamic.html │ ├── index.html │ ├── FileToDataURI.mxml │ └── swfobject.js ├── 2.5 └── swfobject │ ├── test.swf │ ├── FileToDataURI.swf │ ├── expressInstall.swf │ ├── src │ ├── expressInstall.fla │ └── expressInstall.as │ ├── index_dynamic.html │ ├── index.html │ └── FileToDataURI.mxml ├── 2.4.1 └── swfobject │ ├── test.swf │ ├── FileToDataURI.swf │ ├── expressInstall.swf │ ├── src │ ├── expressInstall.fla │ └── expressInstall.as │ ├── index_dynamic.html │ ├── index.html │ └── FileToDataURI.mxml ├── jsdoc_template ├── static │ ├── demo │ │ ├── demo.xlsx │ │ ├── example4.html │ │ ├── example2.html │ │ ├── example1.html │ │ ├── example3.html │ │ └── common.js │ ├── img │ │ ├── sibbell.png │ │ ├── ExcelPlus.png │ │ ├── ExcelPlus16x16.png │ │ ├── ExcelPlus128x128.png │ │ └── ExcelPlus.svg │ ├── css │ │ ├── prettify.css │ │ ├── default.css │ │ ├── sunburst.css │ │ └── bootstrap-responsive.min.css │ └── js │ │ ├── bootstrap-dropdown.js │ │ ├── bootstrap-scrollspy.js │ │ └── bootstrap-collapse.js ├── README.md └── tmpl │ ├── container.tmpl │ ├── layout.tmpl │ └── mainpage.tmpl ├── README.md └── changelog.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /docs/demo/demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/docs/demo/demo.xlsx -------------------------------------------------------------------------------- /docs/img/sibbell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/docs/img/sibbell.png -------------------------------------------------------------------------------- /2.0/swfobject/test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.0/swfobject/test.swf -------------------------------------------------------------------------------- /2.1/swfobject/test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.1/swfobject/test.swf -------------------------------------------------------------------------------- /2.2/swfobject/test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.2/swfobject/test.swf -------------------------------------------------------------------------------- /2.3/swfobject/test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.3/swfobject/test.swf -------------------------------------------------------------------------------- /2.4/swfobject/test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4/swfobject/test.swf -------------------------------------------------------------------------------- /2.5/swfobject/test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.5/swfobject/test.swf -------------------------------------------------------------------------------- /docs/img/ExcelPlus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/docs/img/ExcelPlus.png -------------------------------------------------------------------------------- /2.4.1/swfobject/test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4.1/swfobject/test.swf -------------------------------------------------------------------------------- /docs/img/ExcelPlus16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/docs/img/ExcelPlus16x16.png -------------------------------------------------------------------------------- /docs/img/ExcelPlus128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/docs/img/ExcelPlus128x128.png -------------------------------------------------------------------------------- /2.0/swfobject/FileToDataURI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.0/swfobject/FileToDataURI.swf -------------------------------------------------------------------------------- /2.0/swfobject/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.0/swfobject/expressInstall.swf -------------------------------------------------------------------------------- /2.1/swfobject/FileToDataURI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.1/swfobject/FileToDataURI.swf -------------------------------------------------------------------------------- /2.1/swfobject/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.1/swfobject/expressInstall.swf -------------------------------------------------------------------------------- /2.2/swfobject/FileToDataURI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.2/swfobject/FileToDataURI.swf -------------------------------------------------------------------------------- /2.2/swfobject/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.2/swfobject/expressInstall.swf -------------------------------------------------------------------------------- /2.3/swfobject/FileToDataURI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.3/swfobject/FileToDataURI.swf -------------------------------------------------------------------------------- /2.3/swfobject/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.3/swfobject/expressInstall.swf -------------------------------------------------------------------------------- /2.4.1/swfobject/FileToDataURI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4.1/swfobject/FileToDataURI.swf -------------------------------------------------------------------------------- /2.4/swfobject/FileToDataURI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4/swfobject/FileToDataURI.swf -------------------------------------------------------------------------------- /2.4/swfobject/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4/swfobject/expressInstall.swf -------------------------------------------------------------------------------- /2.5/swfobject/FileToDataURI.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.5/swfobject/FileToDataURI.swf -------------------------------------------------------------------------------- /2.5/swfobject/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.5/swfobject/expressInstall.swf -------------------------------------------------------------------------------- /2.4.1/swfobject/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4.1/swfobject/expressInstall.swf -------------------------------------------------------------------------------- /2.0/swfobject/src/expressInstall.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.0/swfobject/src/expressInstall.fla -------------------------------------------------------------------------------- /2.1/swfobject/src/expressInstall.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.1/swfobject/src/expressInstall.fla -------------------------------------------------------------------------------- /2.2/swfobject/src/expressInstall.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.2/swfobject/src/expressInstall.fla -------------------------------------------------------------------------------- /2.3/swfobject/src/expressInstall.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.3/swfobject/src/expressInstall.fla -------------------------------------------------------------------------------- /2.4.1/swfobject/src/expressInstall.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4.1/swfobject/src/expressInstall.fla -------------------------------------------------------------------------------- /2.4/swfobject/src/expressInstall.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.4/swfobject/src/expressInstall.fla -------------------------------------------------------------------------------- /2.5/swfobject/src/expressInstall.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/2.5/swfobject/src/expressInstall.fla -------------------------------------------------------------------------------- /jsdoc_template/static/demo/demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/jsdoc_template/static/demo/demo.xlsx -------------------------------------------------------------------------------- /jsdoc_template/static/img/sibbell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/jsdoc_template/static/img/sibbell.png -------------------------------------------------------------------------------- /jsdoc_template/static/img/ExcelPlus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/jsdoc_template/static/img/ExcelPlus.png -------------------------------------------------------------------------------- /jsdoc_template/static/img/ExcelPlus16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/jsdoc_template/static/img/ExcelPlus16x16.png -------------------------------------------------------------------------------- /jsdoc_template/static/img/ExcelPlus128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aymkdn/ExcelPlus/HEAD/jsdoc_template/static/img/ExcelPlus128x128.png -------------------------------------------------------------------------------- /jsdoc_template/README.md: -------------------------------------------------------------------------------- 1 | Template for SharepointPlus 2 | 3 | # Generating the doc 4 | 5 | 1. Install `jsdoc`: `npm install jsdoc` 6 | 2. Use the template from this folder: `node "node_modules\jsdoc\jsdoc.js" sharepointplus-x.x.js -t jsdoc_template/ -d docs` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ExcelPlus 2 | ========= 3 | 4 | This project is just an interface for https://github.com/SheetJS/js-xlsx/ 5 | 6 | ExcelPlus is **DEPRECATED** and better solutions exist: 7 | - https://github.com/guyonroche/exceljs 8 | - https://github.com/dtjohnson/xlsx-populate 9 | - https://github.com/protobi/js-xlsx (a fork of the original js-xlsx) 10 | - and more... 11 | -------------------------------------------------------------------------------- /docs/css/prettify.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} -------------------------------------------------------------------------------- /jsdoc_template/static/css/prettify.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} -------------------------------------------------------------------------------- /2.0/swfobject/index_dynamic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 dynamic publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 |

Alternative content

14 |

Get Adobe Flash player

15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /2.1/swfobject/index_dynamic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 dynamic publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 |

Alternative content

14 |

Get Adobe Flash player

15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /2.2/swfobject/index_dynamic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 dynamic publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 |

Alternative content

14 |

Get Adobe Flash player

15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /2.3/swfobject/index_dynamic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 dynamic publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 |

Alternative content

14 |

Get Adobe Flash player

15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /2.4.1/swfobject/index_dynamic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 dynamic publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 |

Alternative content

14 |

Get Adobe Flash player

15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /2.4/swfobject/index_dynamic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 dynamic publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 |

Alternative content

14 |

Get Adobe Flash player

15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /2.5/swfobject/index_dynamic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 dynamic publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 |

Alternative content

14 |

Get Adobe Flash player

15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /2.0/swfobject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 static publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |

Alternative content

20 |

Get Adobe Flash player

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /2.1/swfobject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 static publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |

Alternative content

20 |

Get Adobe Flash player

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /2.2/swfobject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 static publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |

Alternative content

20 |

Get Adobe Flash player

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /2.3/swfobject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 static publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |

Alternative content

20 |

Get Adobe Flash player

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /2.4/swfobject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 static publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |

Alternative content

20 |

Get Adobe Flash player

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /2.5/swfobject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 static publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |

Alternative content

20 |

Get Adobe Flash player

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /2.4.1/swfobject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SWFObject 2 static publishing example page 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |

Alternative content

20 |

Get Adobe Flash player

21 |
22 | 23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/demo/example4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 |

For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE.

16 |

Reading the file demo.xlsx:

17 |
18 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /jsdoc_template/static/demo/example4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 |

For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE.

16 |

Reading the file demo.xlsx:

17 |
18 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /docs/demo/example1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 | For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE. 16 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /docs/demo/example2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 | For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE. 16 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /jsdoc_template/static/demo/example2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 | For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE. 16 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /jsdoc_template/static/demo/example1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 | For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE. 16 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /changelog.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | **Change Log v2.5 (April 14, 2017)** 4 | 5 | - Add compatibility with the last js-xlsx releases (see https://github.com/Aymkdn/ExcelPlus/issues/8) 6 | - Add option `propertiesOnly` for `read` 7 | - Add option `compression` for `saveAs` 8 | - Add function `open()` (see https://github.com/Aymkdn/ExcelPlus/issues/13) 9 | - Fix Angular compatibility issue (see https://github.com/Aymkdn/ExcelPlus/issues/14) 10 | - Change `parseDate` option for `read` (see documentation) 11 | - Change demo pages to always get the latest release of js-xlsx 12 | - Change license to Apache v2 13 | 14 | **Change Log v2.4.1 (June 21, 2016)** 15 | 16 | - Better handle of cells with a Date 17 | 18 | **Change Log v2.4 (June 14, 2016)** 19 | 20 | - Add `writeRow()` and `writeNextRow()` 21 | - Show `write()` into the documentation 22 | 23 | **Change Log v2.3 (January 15, 2016)** 24 | 25 | - Fix `writeCell()` when the content was an empty string 26 | - Fix documentation 27 | - IE10/11 compatibility 28 | - Stop using readAsBinaryString to use readAsArrayBuffer 29 | - Fix button size when using Flash 30 | - Fix: with IE and Flash object, the Excel was returning column A as null 31 | - Add same options for both readAll() and read() 32 | - SheetJS/JS-XLSX 0.8.0 doesn't handle correctly the cell format, so I've changed the file (see https://github.com/SheetJS/js-xlsx/pull/349) 33 | - SheetJS/JS-XLSX 0.8.0 and IE8 didn't return the first column of a file, so I've fixed it (see https://github.com/SheetJS/js-xlsx/issues/350) 34 | - Fix for the read()/readAll() when `parseDate` is true, it should now recognize a date cell 35 | - Add options `parameters` as a boolean for read()/readAll() 36 | 37 | **Change Log v2.2 (December 23, 2014)** 38 | 39 | - Rewrite everything to use the XLSX-JS library 40 | - Official release 41 | -------------------------------------------------------------------------------- /docs/demo/example3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 |

For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE.

16 |

Please select an Excel file from your computer:

17 | 18 |
19 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /jsdoc_template/static/demo/example3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 12 | 13 | 14 | 15 |

For old browsers (IE8 and others), make sure to be in standard mode with <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> and with a DOCTYPE.

16 |

Please select an Excel file from your computer:

17 | 18 |
19 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /docs/css/default.css: -------------------------------------------------------------------------------- 1 | body { font-family:"Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif } 2 | h1 { padding:10px 0 } 3 | h2 { padding-bottom:10px } 4 | h3 { padding-top:10px; color:#999 } 5 | hr { border-color:#000 } 6 | .logo { 7 | display:block; 8 | margin-bottom:15px; 9 | padding-left:14px; 10 | margin-top: 10px; 11 | } 12 | .logo:hover { text-decoration:none } 13 | .method { font-weight:bold } 14 | .description { white-space:pre } 15 | div.name > b[data-param^="setup."]:before,div.name > b[data-param^="options."]:before { 16 | content:"\21AA "; 17 | display: inline-block; 18 | margin-left: 1em; 19 | } 20 | .parameters .parameter:nth-child(odd) { background-color:#f4f4f4 } 21 | .footer { border-top: 1px solid #E5E5E5; margin-top: 3em; padding: 1em 2em; } 22 | .visible-phone { display:none } 23 | .visible-tablet { display:none } 24 | .visible-desktop { display:block } 25 | .hidden-phone { display:block } 26 | .hidden-tablet { display:block } 27 | .hidden-desktop { display:none } 28 | .alert a { border-bottom:1px solid } 29 | .alert a:hover { text-decoration:none } 30 | @media (max-width: 768px) { 31 | .hidden-tablet,.hidden-phone { display:none !important } 32 | } 33 | .nav-parent { text-transform: uppercase; font-weight: bold; } 34 | .nav-children { padding-left: 1em; } 35 | .name { white-space:nowrap } 36 | pre { font-size:13px } 37 | .member h2 { display:inline-block } 38 | #main h4 { font-size:16px; color:#999; font-weight:normal; } 39 | .sibbill { 40 | background-color: #40263B; 41 | color: #FFF; 42 | display: inline-block; 43 | border-radius: 3px; 44 | padding: 1px 4px; 45 | font: normal normal normal 11px/18px 'Helvetica Neue',Arial,sans-serif; 46 | position: relative; 47 | top: -7px; 48 | } 49 | .sibbill:hover { 50 | text-decoration: none; 51 | color: #FFF; 52 | background-color: purple; 53 | } 54 | .sibbill > img { 55 | width: 12px; 56 | height: 12px; 57 | vertical-align: -2px; 58 | } 59 | -------------------------------------------------------------------------------- /jsdoc_template/static/css/default.css: -------------------------------------------------------------------------------- 1 | body { font-family:"Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif } 2 | h1 { padding:10px 0 } 3 | h2 { padding-bottom:10px } 4 | h3 { padding-top:10px; color:#999 } 5 | hr { border-color:#000 } 6 | .logo { 7 | display:block; 8 | margin-bottom:15px; 9 | padding-left:14px; 10 | margin-top: 10px; 11 | } 12 | .logo:hover { text-decoration:none } 13 | .method { font-weight:bold } 14 | .description { white-space:pre } 15 | div.name > b[data-param^="setup."]:before,div.name > b[data-param^="options."]:before { 16 | content:"\21AA "; 17 | display: inline-block; 18 | margin-left: 1em; 19 | } 20 | .parameters .parameter:nth-child(odd) { background-color:#f4f4f4 } 21 | .footer { border-top: 1px solid #E5E5E5; margin-top: 3em; padding: 1em 2em; } 22 | .visible-phone { display:none } 23 | .visible-tablet { display:none } 24 | .visible-desktop { display:block } 25 | .hidden-phone { display:block } 26 | .hidden-tablet { display:block } 27 | .hidden-desktop { display:none } 28 | .alert a { border-bottom:1px solid } 29 | .alert a:hover { text-decoration:none } 30 | @media (max-width: 768px) { 31 | .hidden-tablet,.hidden-phone { display:none !important } 32 | } 33 | .nav-parent { text-transform: uppercase; font-weight: bold; } 34 | .nav-children { padding-left: 1em; } 35 | .name { white-space:nowrap } 36 | pre { font-size:13px } 37 | .member h2 { display:inline-block } 38 | #main h4 { font-size:16px; color:#999; font-weight:normal; } 39 | .sibbill { 40 | background-color: #40263B; 41 | color: #FFF; 42 | display: inline-block; 43 | border-radius: 3px; 44 | padding: 1px 4px; 45 | font: normal normal normal 11px/18px 'Helvetica Neue',Arial,sans-serif; 46 | position: relative; 47 | top: -7px; 48 | } 49 | .sibbill:hover { 50 | text-decoration: none; 51 | color: #FFF; 52 | background-color: purple; 53 | } 54 | .sibbill > img { 55 | width: 12px; 56 | height: 12px; 57 | vertical-align: -2px; 58 | } 59 | -------------------------------------------------------------------------------- /docs/css/sunburst.css: -------------------------------------------------------------------------------- 1 | /* Pretty printing styles. Used with prettify.js. */ 2 | /* Vim sunburst theme by David Leibovic */ 3 | 4 | pre .str, code .str { color: #65B042; } /* string - green */ 5 | pre .kwd, code .kwd { color: #E28964; } /* keyword - dark pink */ 6 | pre .com, code .com { color: #AEAEAE; font-style: italic; } /* comment - gray */ 7 | pre .typ, code .typ { color: #89bdff; } /* type - light blue */ 8 | pre .lit, code .lit { color: #3387CC; } /* literal - blue */ 9 | pre .pun, code .pun { color: #fff; } /* punctuation - white */ 10 | pre .pln, code .pln { color: #fff; } /* plaintext - white */ 11 | pre .tag, code .tag { color: #89bdff; } /* html/xml tag - light blue */ 12 | pre .atn, code .atn { color: #bdb76b; } /* html/xml attribute name - khaki */ 13 | pre .atv, code .atv { color: #65B042; } /* html/xml attribute value - green */ 14 | pre .dec, code .dec { color: #3387CC; } /* decimal - blue */ 15 | 16 | pre.prettyprint, code.prettyprint { 17 | background-color: #000; 18 | -moz-border-radius: 8px; 19 | -webkit-border-radius: 8px; 20 | -o-border-radius: 8px; 21 | -ms-border-radius: 8px; 22 | -khtml-border-radius: 8px; 23 | border-radius: 8px; 24 | } 25 | 26 | pre.prettyprint { 27 | width: 95%; 28 | margin: 1em auto; 29 | padding: 1em; 30 | white-space: pre-wrap; 31 | } 32 | 33 | 34 | /* Specify class=linenums on a pre to get line numbering */ 35 | ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE; } /* IE indents via margin-left */ 36 | li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none } 37 | /* Alternate shading for lines */ 38 | li.L1,li.L3,li.L5,li.L7,li.L9 { } 39 | 40 | @media print { 41 | pre .str, code .str { color: #060; } 42 | pre .kwd, code .kwd { color: #006; font-weight: bold; } 43 | pre .com, code .com { color: #600; font-style: italic; } 44 | pre .typ, code .typ { color: #404; font-weight: bold; } 45 | pre .lit, code .lit { color: #044; } 46 | pre .pun, code .pun { color: #440; } 47 | pre .pln, code .pln { color: #000; } 48 | pre .tag, code .tag { color: #006; font-weight: bold; } 49 | pre .atn, code .atn { color: #404; } 50 | pre .atv, code .atv { color: #060; } 51 | } 52 | -------------------------------------------------------------------------------- /jsdoc_template/static/css/sunburst.css: -------------------------------------------------------------------------------- 1 | /* Pretty printing styles. Used with prettify.js. */ 2 | /* Vim sunburst theme by David Leibovic */ 3 | 4 | pre .str, code .str { color: #65B042; } /* string - green */ 5 | pre .kwd, code .kwd { color: #E28964; } /* keyword - dark pink */ 6 | pre .com, code .com { color: #AEAEAE; font-style: italic; } /* comment - gray */ 7 | pre .typ, code .typ { color: #89bdff; } /* type - light blue */ 8 | pre .lit, code .lit { color: #3387CC; } /* literal - blue */ 9 | pre .pun, code .pun { color: #fff; } /* punctuation - white */ 10 | pre .pln, code .pln { color: #fff; } /* plaintext - white */ 11 | pre .tag, code .tag { color: #89bdff; } /* html/xml tag - light blue */ 12 | pre .atn, code .atn { color: #bdb76b; } /* html/xml attribute name - khaki */ 13 | pre .atv, code .atv { color: #65B042; } /* html/xml attribute value - green */ 14 | pre .dec, code .dec { color: #3387CC; } /* decimal - blue */ 15 | 16 | pre.prettyprint, code.prettyprint { 17 | background-color: #000; 18 | -moz-border-radius: 8px; 19 | -webkit-border-radius: 8px; 20 | -o-border-radius: 8px; 21 | -ms-border-radius: 8px; 22 | -khtml-border-radius: 8px; 23 | border-radius: 8px; 24 | } 25 | 26 | pre.prettyprint { 27 | width: 95%; 28 | margin: 1em auto; 29 | padding: 1em; 30 | white-space: pre-wrap; 31 | } 32 | 33 | 34 | /* Specify class=linenums on a pre to get line numbering */ 35 | ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE; } /* IE indents via margin-left */ 36 | li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none } 37 | /* Alternate shading for lines */ 38 | li.L1,li.L3,li.L5,li.L7,li.L9 { } 39 | 40 | @media print { 41 | pre .str, code .str { color: #060; } 42 | pre .kwd, code .kwd { color: #006; font-weight: bold; } 43 | pre .com, code .com { color: #600; font-style: italic; } 44 | pre .typ, code .typ { color: #404; font-weight: bold; } 45 | pre .lit, code .lit { color: #044; } 46 | pre .pun, code .pun { color: #440; } 47 | pre .pln, code .pln { color: #000; } 48 | pre .tag, code .tag { color: #006; font-weight: bold; } 49 | pre .atn, code .atn { color: #404; } 50 | pre .atv, code .atv { color: #060; } 51 | } 52 | -------------------------------------------------------------------------------- /2.0/swfobject/src/expressInstall.as: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 is released under the MIT License 2 | Express Install Copyright (c) 2007-2008 Adobe Systems Incorporated and its licensors. All Rights Reserved. 3 | */ 4 | 5 | System.security.allowDomain("fpdownload.macromedia.com"); 6 | 7 | var time = 0; 8 | var timeOut = 5; // in seconds 9 | var delay = 10; // in milliseconds 10 | var int_id = setInterval(checkLoaded, delay); 11 | var old_si = null; 12 | var loaderClip = this.createEmptyMovieClip("loaderClip", 0); 13 | var updateSWF = "http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?" + Math.random(); 14 | loaderClip.loadMovie(updateSWF); 15 | 16 | function checkLoaded(){ 17 | time += delay / 1000; 18 | if (time > timeOut) { 19 | // updater did not load in time, abort load and force alternative content 20 | clearInterval(int_id); 21 | loaderClip.unloadMovie(); 22 | loadTimeOut(); 23 | } 24 | else if (loaderClip.startInstall.toString() == "[type Function]") { 25 | // updater has loaded successfully AND has determined that it can do the express install 26 | if (old_si == null) { 27 | old_si = loaderClip.startInstall; 28 | loaderClip.startInstall = function() { 29 | clearInterval(int_id); 30 | old_si(); 31 | } 32 | loadComplete(); 33 | } 34 | } 35 | } 36 | 37 | function loadTimeOut() { 38 | callbackSWFObject(); 39 | } 40 | 41 | function callbackSWFObject() { 42 | getURL("javascript:swfobject.expressInstallCallback();"); 43 | } 44 | 45 | function loadComplete() { 46 | loaderClip.redirectURL = _level0.MMredirectURL; 47 | loaderClip.MMplayerType = _level0.MMplayerType; 48 | loaderClip.MMdoctitle = _level0.MMdoctitle; 49 | loaderClip.startUpdate(); 50 | } 51 | 52 | function installStatus(statusValue) { 53 | switch (statusValue) { 54 | case "Download.Complete": 55 | // Installation is complete. 56 | // In most cases the browser window that this SWF is hosted in will be closed by the installer or otherwise it has to be closed manually by the end user. 57 | // The Adobe Flash installer will attempt to reopen the browser window and reload the page containing the SWF. 58 | break; 59 | case "Download.Cancelled": 60 | // The end user chose "NO" when prompted to install the new player. 61 | // By default the SWFObject callback function is called to force alternative content. 62 | callbackSWFObject(); 63 | break; 64 | case "Download.Failed": 65 | // The end user failed to download the installer due to a network failure. 66 | // By default the SWFObject callback function is called to force alternative content. 67 | callbackSWFObject(); 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /2.1/swfobject/src/expressInstall.as: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 is released under the MIT License 2 | Express Install Copyright (c) 2007-2008 Adobe Systems Incorporated and its licensors. All Rights Reserved. 3 | */ 4 | 5 | System.security.allowDomain("fpdownload.macromedia.com"); 6 | 7 | var time = 0; 8 | var timeOut = 5; // in seconds 9 | var delay = 10; // in milliseconds 10 | var int_id = setInterval(checkLoaded, delay); 11 | var old_si = null; 12 | var loaderClip = this.createEmptyMovieClip("loaderClip", 0); 13 | var updateSWF = "http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?" + Math.random(); 14 | loaderClip.loadMovie(updateSWF); 15 | 16 | function checkLoaded(){ 17 | time += delay / 1000; 18 | if (time > timeOut) { 19 | // updater did not load in time, abort load and force alternative content 20 | clearInterval(int_id); 21 | loaderClip.unloadMovie(); 22 | loadTimeOut(); 23 | } 24 | else if (loaderClip.startInstall.toString() == "[type Function]") { 25 | // updater has loaded successfully AND has determined that it can do the express install 26 | if (old_si == null) { 27 | old_si = loaderClip.startInstall; 28 | loaderClip.startInstall = function() { 29 | clearInterval(int_id); 30 | old_si(); 31 | } 32 | loadComplete(); 33 | } 34 | } 35 | } 36 | 37 | function loadTimeOut() { 38 | callbackSWFObject(); 39 | } 40 | 41 | function callbackSWFObject() { 42 | getURL("javascript:swfobject.expressInstallCallback();"); 43 | } 44 | 45 | function loadComplete() { 46 | loaderClip.redirectURL = _level0.MMredirectURL; 47 | loaderClip.MMplayerType = _level0.MMplayerType; 48 | loaderClip.MMdoctitle = _level0.MMdoctitle; 49 | loaderClip.startUpdate(); 50 | } 51 | 52 | function installStatus(statusValue) { 53 | switch (statusValue) { 54 | case "Download.Complete": 55 | // Installation is complete. 56 | // In most cases the browser window that this SWF is hosted in will be closed by the installer or otherwise it has to be closed manually by the end user. 57 | // The Adobe Flash installer will attempt to reopen the browser window and reload the page containing the SWF. 58 | break; 59 | case "Download.Cancelled": 60 | // The end user chose "NO" when prompted to install the new player. 61 | // By default the SWFObject callback function is called to force alternative content. 62 | callbackSWFObject(); 63 | break; 64 | case "Download.Failed": 65 | // The end user failed to download the installer due to a network failure. 66 | // By default the SWFObject callback function is called to force alternative content. 67 | callbackSWFObject(); 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /2.2/swfobject/src/expressInstall.as: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 is released under the MIT License 2 | Express Install Copyright (c) 2007-2008 Adobe Systems Incorporated and its licensors. All Rights Reserved. 3 | */ 4 | 5 | System.security.allowDomain("fpdownload.macromedia.com"); 6 | 7 | var time = 0; 8 | var timeOut = 5; // in seconds 9 | var delay = 10; // in milliseconds 10 | var int_id = setInterval(checkLoaded, delay); 11 | var old_si = null; 12 | var loaderClip = this.createEmptyMovieClip("loaderClip", 0); 13 | var updateSWF = "http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?" + Math.random(); 14 | loaderClip.loadMovie(updateSWF); 15 | 16 | function checkLoaded(){ 17 | time += delay / 1000; 18 | if (time > timeOut) { 19 | // updater did not load in time, abort load and force alternative content 20 | clearInterval(int_id); 21 | loaderClip.unloadMovie(); 22 | loadTimeOut(); 23 | } 24 | else if (loaderClip.startInstall.toString() == "[type Function]") { 25 | // updater has loaded successfully AND has determined that it can do the express install 26 | if (old_si == null) { 27 | old_si = loaderClip.startInstall; 28 | loaderClip.startInstall = function() { 29 | clearInterval(int_id); 30 | old_si(); 31 | } 32 | loadComplete(); 33 | } 34 | } 35 | } 36 | 37 | function loadTimeOut() { 38 | callbackSWFObject(); 39 | } 40 | 41 | function callbackSWFObject() { 42 | getURL("javascript:swfobject.expressInstallCallback();"); 43 | } 44 | 45 | function loadComplete() { 46 | loaderClip.redirectURL = _level0.MMredirectURL; 47 | loaderClip.MMplayerType = _level0.MMplayerType; 48 | loaderClip.MMdoctitle = _level0.MMdoctitle; 49 | loaderClip.startUpdate(); 50 | } 51 | 52 | function installStatus(statusValue) { 53 | switch (statusValue) { 54 | case "Download.Complete": 55 | // Installation is complete. 56 | // In most cases the browser window that this SWF is hosted in will be closed by the installer or otherwise it has to be closed manually by the end user. 57 | // The Adobe Flash installer will attempt to reopen the browser window and reload the page containing the SWF. 58 | break; 59 | case "Download.Cancelled": 60 | // The end user chose "NO" when prompted to install the new player. 61 | // By default the SWFObject callback function is called to force alternative content. 62 | callbackSWFObject(); 63 | break; 64 | case "Download.Failed": 65 | // The end user failed to download the installer due to a network failure. 66 | // By default the SWFObject callback function is called to force alternative content. 67 | callbackSWFObject(); 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /2.3/swfobject/src/expressInstall.as: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 is released under the MIT License 2 | Express Install Copyright (c) 2007-2008 Adobe Systems Incorporated and its licensors. All Rights Reserved. 3 | */ 4 | 5 | System.security.allowDomain("fpdownload.macromedia.com"); 6 | 7 | var time = 0; 8 | var timeOut = 5; // in seconds 9 | var delay = 10; // in milliseconds 10 | var int_id = setInterval(checkLoaded, delay); 11 | var old_si = null; 12 | var loaderClip = this.createEmptyMovieClip("loaderClip", 0); 13 | var updateSWF = "http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?" + Math.random(); 14 | loaderClip.loadMovie(updateSWF); 15 | 16 | function checkLoaded(){ 17 | time += delay / 1000; 18 | if (time > timeOut) { 19 | // updater did not load in time, abort load and force alternative content 20 | clearInterval(int_id); 21 | loaderClip.unloadMovie(); 22 | loadTimeOut(); 23 | } 24 | else if (loaderClip.startInstall.toString() == "[type Function]") { 25 | // updater has loaded successfully AND has determined that it can do the express install 26 | if (old_si == null) { 27 | old_si = loaderClip.startInstall; 28 | loaderClip.startInstall = function() { 29 | clearInterval(int_id); 30 | old_si(); 31 | } 32 | loadComplete(); 33 | } 34 | } 35 | } 36 | 37 | function loadTimeOut() { 38 | callbackSWFObject(); 39 | } 40 | 41 | function callbackSWFObject() { 42 | getURL("javascript:swfobject.expressInstallCallback();"); 43 | } 44 | 45 | function loadComplete() { 46 | loaderClip.redirectURL = _level0.MMredirectURL; 47 | loaderClip.MMplayerType = _level0.MMplayerType; 48 | loaderClip.MMdoctitle = _level0.MMdoctitle; 49 | loaderClip.startUpdate(); 50 | } 51 | 52 | function installStatus(statusValue) { 53 | switch (statusValue) { 54 | case "Download.Complete": 55 | // Installation is complete. 56 | // In most cases the browser window that this SWF is hosted in will be closed by the installer or otherwise it has to be closed manually by the end user. 57 | // The Adobe Flash installer will attempt to reopen the browser window and reload the page containing the SWF. 58 | break; 59 | case "Download.Cancelled": 60 | // The end user chose "NO" when prompted to install the new player. 61 | // By default the SWFObject callback function is called to force alternative content. 62 | callbackSWFObject(); 63 | break; 64 | case "Download.Failed": 65 | // The end user failed to download the installer due to a network failure. 66 | // By default the SWFObject callback function is called to force alternative content. 67 | callbackSWFObject(); 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /2.4.1/swfobject/src/expressInstall.as: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 is released under the MIT License 2 | Express Install Copyright (c) 2007-2008 Adobe Systems Incorporated and its licensors. All Rights Reserved. 3 | */ 4 | 5 | System.security.allowDomain("fpdownload.macromedia.com"); 6 | 7 | var time = 0; 8 | var timeOut = 5; // in seconds 9 | var delay = 10; // in milliseconds 10 | var int_id = setInterval(checkLoaded, delay); 11 | var old_si = null; 12 | var loaderClip = this.createEmptyMovieClip("loaderClip", 0); 13 | var updateSWF = "http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?" + Math.random(); 14 | loaderClip.loadMovie(updateSWF); 15 | 16 | function checkLoaded(){ 17 | time += delay / 1000; 18 | if (time > timeOut) { 19 | // updater did not load in time, abort load and force alternative content 20 | clearInterval(int_id); 21 | loaderClip.unloadMovie(); 22 | loadTimeOut(); 23 | } 24 | else if (loaderClip.startInstall.toString() == "[type Function]") { 25 | // updater has loaded successfully AND has determined that it can do the express install 26 | if (old_si == null) { 27 | old_si = loaderClip.startInstall; 28 | loaderClip.startInstall = function() { 29 | clearInterval(int_id); 30 | old_si(); 31 | } 32 | loadComplete(); 33 | } 34 | } 35 | } 36 | 37 | function loadTimeOut() { 38 | callbackSWFObject(); 39 | } 40 | 41 | function callbackSWFObject() { 42 | getURL("javascript:swfobject.expressInstallCallback();"); 43 | } 44 | 45 | function loadComplete() { 46 | loaderClip.redirectURL = _level0.MMredirectURL; 47 | loaderClip.MMplayerType = _level0.MMplayerType; 48 | loaderClip.MMdoctitle = _level0.MMdoctitle; 49 | loaderClip.startUpdate(); 50 | } 51 | 52 | function installStatus(statusValue) { 53 | switch (statusValue) { 54 | case "Download.Complete": 55 | // Installation is complete. 56 | // In most cases the browser window that this SWF is hosted in will be closed by the installer or otherwise it has to be closed manually by the end user. 57 | // The Adobe Flash installer will attempt to reopen the browser window and reload the page containing the SWF. 58 | break; 59 | case "Download.Cancelled": 60 | // The end user chose "NO" when prompted to install the new player. 61 | // By default the SWFObject callback function is called to force alternative content. 62 | callbackSWFObject(); 63 | break; 64 | case "Download.Failed": 65 | // The end user failed to download the installer due to a network failure. 66 | // By default the SWFObject callback function is called to force alternative content. 67 | callbackSWFObject(); 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /2.4/swfobject/src/expressInstall.as: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 is released under the MIT License 2 | Express Install Copyright (c) 2007-2008 Adobe Systems Incorporated and its licensors. All Rights Reserved. 3 | */ 4 | 5 | System.security.allowDomain("fpdownload.macromedia.com"); 6 | 7 | var time = 0; 8 | var timeOut = 5; // in seconds 9 | var delay = 10; // in milliseconds 10 | var int_id = setInterval(checkLoaded, delay); 11 | var old_si = null; 12 | var loaderClip = this.createEmptyMovieClip("loaderClip", 0); 13 | var updateSWF = "http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?" + Math.random(); 14 | loaderClip.loadMovie(updateSWF); 15 | 16 | function checkLoaded(){ 17 | time += delay / 1000; 18 | if (time > timeOut) { 19 | // updater did not load in time, abort load and force alternative content 20 | clearInterval(int_id); 21 | loaderClip.unloadMovie(); 22 | loadTimeOut(); 23 | } 24 | else if (loaderClip.startInstall.toString() == "[type Function]") { 25 | // updater has loaded successfully AND has determined that it can do the express install 26 | if (old_si == null) { 27 | old_si = loaderClip.startInstall; 28 | loaderClip.startInstall = function() { 29 | clearInterval(int_id); 30 | old_si(); 31 | } 32 | loadComplete(); 33 | } 34 | } 35 | } 36 | 37 | function loadTimeOut() { 38 | callbackSWFObject(); 39 | } 40 | 41 | function callbackSWFObject() { 42 | getURL("javascript:swfobject.expressInstallCallback();"); 43 | } 44 | 45 | function loadComplete() { 46 | loaderClip.redirectURL = _level0.MMredirectURL; 47 | loaderClip.MMplayerType = _level0.MMplayerType; 48 | loaderClip.MMdoctitle = _level0.MMdoctitle; 49 | loaderClip.startUpdate(); 50 | } 51 | 52 | function installStatus(statusValue) { 53 | switch (statusValue) { 54 | case "Download.Complete": 55 | // Installation is complete. 56 | // In most cases the browser window that this SWF is hosted in will be closed by the installer or otherwise it has to be closed manually by the end user. 57 | // The Adobe Flash installer will attempt to reopen the browser window and reload the page containing the SWF. 58 | break; 59 | case "Download.Cancelled": 60 | // The end user chose "NO" when prompted to install the new player. 61 | // By default the SWFObject callback function is called to force alternative content. 62 | callbackSWFObject(); 63 | break; 64 | case "Download.Failed": 65 | // The end user failed to download the installer due to a network failure. 66 | // By default the SWFObject callback function is called to force alternative content. 67 | callbackSWFObject(); 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /2.5/swfobject/src/expressInstall.as: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 is released under the MIT License 2 | Express Install Copyright (c) 2007-2008 Adobe Systems Incorporated and its licensors. All Rights Reserved. 3 | */ 4 | 5 | System.security.allowDomain("fpdownload.macromedia.com"); 6 | 7 | var time = 0; 8 | var timeOut = 5; // in seconds 9 | var delay = 10; // in milliseconds 10 | var int_id = setInterval(checkLoaded, delay); 11 | var old_si = null; 12 | var loaderClip = this.createEmptyMovieClip("loaderClip", 0); 13 | var updateSWF = "http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?" + Math.random(); 14 | loaderClip.loadMovie(updateSWF); 15 | 16 | function checkLoaded(){ 17 | time += delay / 1000; 18 | if (time > timeOut) { 19 | // updater did not load in time, abort load and force alternative content 20 | clearInterval(int_id); 21 | loaderClip.unloadMovie(); 22 | loadTimeOut(); 23 | } 24 | else if (loaderClip.startInstall.toString() == "[type Function]") { 25 | // updater has loaded successfully AND has determined that it can do the express install 26 | if (old_si == null) { 27 | old_si = loaderClip.startInstall; 28 | loaderClip.startInstall = function() { 29 | clearInterval(int_id); 30 | old_si(); 31 | } 32 | loadComplete(); 33 | } 34 | } 35 | } 36 | 37 | function loadTimeOut() { 38 | callbackSWFObject(); 39 | } 40 | 41 | function callbackSWFObject() { 42 | getURL("javascript:swfobject.expressInstallCallback();"); 43 | } 44 | 45 | function loadComplete() { 46 | loaderClip.redirectURL = _level0.MMredirectURL; 47 | loaderClip.MMplayerType = _level0.MMplayerType; 48 | loaderClip.MMdoctitle = _level0.MMdoctitle; 49 | loaderClip.startUpdate(); 50 | } 51 | 52 | function installStatus(statusValue) { 53 | switch (statusValue) { 54 | case "Download.Complete": 55 | // Installation is complete. 56 | // In most cases the browser window that this SWF is hosted in will be closed by the installer or otherwise it has to be closed manually by the end user. 57 | // The Adobe Flash installer will attempt to reopen the browser window and reload the page containing the SWF. 58 | break; 59 | case "Download.Cancelled": 60 | // The end user chose "NO" when prompted to install the new player. 61 | // By default the SWFObject callback function is called to force alternative content. 62 | callbackSWFObject(); 63 | break; 64 | case "Download.Failed": 65 | // The end user failed to download the installer due to a network failure. 66 | // By default the SWFObject callback function is called to force alternative content. 67 | callbackSWFObject(); 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /docs/js/bootstrap-dropdown.js: -------------------------------------------------------------------------------- 1 | /* ============================================================ 2 | * bootstrap-dropdown.js v2.0.2 3 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns 4 | * ============================================================ 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================ */ 19 | 20 | 21 | !function( $ ){ 22 | 23 | "use strict" 24 | 25 | /* DROPDOWN CLASS DEFINITION 26 | * ========================= */ 27 | 28 | var toggle = '[data-toggle="dropdown"]' 29 | , Dropdown = function ( element ) { 30 | var $el = $(element).on('click.dropdown.data-api', this.toggle) 31 | $('html').on('click.dropdown.data-api', function () { 32 | $el.parent().removeClass('open') 33 | }) 34 | } 35 | 36 | Dropdown.prototype = { 37 | 38 | constructor: Dropdown 39 | 40 | , toggle: function ( e ) { 41 | var $this = $(this) 42 | , selector = $this.attr('data-target') 43 | , $parent 44 | , isActive 45 | 46 | if (!selector) { 47 | selector = $this.attr('href') 48 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 49 | } 50 | 51 | $parent = $(selector) 52 | $parent.length || ($parent = $this.parent()) 53 | 54 | isActive = $parent.hasClass('open') 55 | 56 | clearMenus() 57 | !isActive && $parent.toggleClass('open') 58 | 59 | return false 60 | } 61 | 62 | } 63 | 64 | function clearMenus() { 65 | $(toggle).parent().removeClass('open') 66 | } 67 | 68 | 69 | /* DROPDOWN PLUGIN DEFINITION 70 | * ========================== */ 71 | 72 | $.fn.dropdown = function ( option ) { 73 | return this.each(function () { 74 | var $this = $(this) 75 | , data = $this.data('dropdown') 76 | if (!data) $this.data('dropdown', (data = new Dropdown(this))) 77 | if (typeof option == 'string') data[option].call($this) 78 | }) 79 | } 80 | 81 | $.fn.dropdown.Constructor = Dropdown 82 | 83 | 84 | /* APPLY TO STANDARD DROPDOWN ELEMENTS 85 | * =================================== */ 86 | 87 | $(function () { 88 | $('html').on('click.dropdown.data-api', clearMenus) 89 | $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) 90 | }) 91 | 92 | }( window.jQuery ); -------------------------------------------------------------------------------- /jsdoc_template/static/js/bootstrap-dropdown.js: -------------------------------------------------------------------------------- 1 | /* ============================================================ 2 | * bootstrap-dropdown.js v2.0.2 3 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns 4 | * ============================================================ 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================ */ 19 | 20 | 21 | !function( $ ){ 22 | 23 | "use strict" 24 | 25 | /* DROPDOWN CLASS DEFINITION 26 | * ========================= */ 27 | 28 | var toggle = '[data-toggle="dropdown"]' 29 | , Dropdown = function ( element ) { 30 | var $el = $(element).on('click.dropdown.data-api', this.toggle) 31 | $('html').on('click.dropdown.data-api', function () { 32 | $el.parent().removeClass('open') 33 | }) 34 | } 35 | 36 | Dropdown.prototype = { 37 | 38 | constructor: Dropdown 39 | 40 | , toggle: function ( e ) { 41 | var $this = $(this) 42 | , selector = $this.attr('data-target') 43 | , $parent 44 | , isActive 45 | 46 | if (!selector) { 47 | selector = $this.attr('href') 48 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 49 | } 50 | 51 | $parent = $(selector) 52 | $parent.length || ($parent = $this.parent()) 53 | 54 | isActive = $parent.hasClass('open') 55 | 56 | clearMenus() 57 | !isActive && $parent.toggleClass('open') 58 | 59 | return false 60 | } 61 | 62 | } 63 | 64 | function clearMenus() { 65 | $(toggle).parent().removeClass('open') 66 | } 67 | 68 | 69 | /* DROPDOWN PLUGIN DEFINITION 70 | * ========================== */ 71 | 72 | $.fn.dropdown = function ( option ) { 73 | return this.each(function () { 74 | var $this = $(this) 75 | , data = $this.data('dropdown') 76 | if (!data) $this.data('dropdown', (data = new Dropdown(this))) 77 | if (typeof option == 'string') data[option].call($this) 78 | }) 79 | } 80 | 81 | $.fn.dropdown.Constructor = Dropdown 82 | 83 | 84 | /* APPLY TO STANDARD DROPDOWN ELEMENTS 85 | * =================================== */ 86 | 87 | $(function () { 88 | $('html').on('click.dropdown.data-api', clearMenus) 89 | $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) 90 | }) 91 | 92 | }( window.jQuery ); -------------------------------------------------------------------------------- /docs/demo/common.js: -------------------------------------------------------------------------------- 1 | /** 2 | * The MIT License (MIT) - https://github.com/yanatan16/nanoajax/blob/master/LICENSE 3 | * Source : https://github.com/yanatan16/nanoajax 4 | */ 5 | !function(t,e){function n(t){return t&&e.XDomainRequest&&!/MSIE 1/.test(navigator.userAgent)?new XDomainRequest:e.XMLHttpRequest?new XMLHttpRequest:void 0}function o(t,e,n){t[e]=t[e]||n}var r=["responseType","withCredentials","timeout","onprogress"];t.ajax=function(t,a){function s(t,e){return function(){c||(a(void 0===f.status?t:f.status,0===f.status?"Error":f.response||f.responseText||e,f),c=!0)}}var u=t.headers||{},i=t.body,d=t.method||(i?"POST":"GET"),c=!1,f=n(t.cors);f.open(d,t.url,!0);var l=f.onload=s(200);f.onreadystatechange=function(){4===f.readyState&&l()},f.onerror=s(null,"Error"),f.ontimeout=s(null,"Timeout"),f.onabort=s(null,"Abort"),i&&(o(u,"X-Requested-With","XMLHttpRequest"),e.FormData&&i instanceof e.FormData||o(u,"Content-Type","application/x-www-form-urlencoded"));for(var p,m=0,v=r.length;v>m;m++)p=r[m],void 0!==t[p]&&(f[p]=t[p]);for(var p in u)f.setRequestHeader(p,u[p]);return f.send(i),f},e.nanoajax=t}({},function(){return this}()); 6 | 7 | // add http://stackoverflow.com/a/31374433/1134119 8 | // example: loadJS('yourcode.js', document.body, yourCodeToBeCalled); 9 | var loadJS=function(a,n,e){var t=document.createElement("script");t.src=a,t.onload=e||function(){},t.onreadystatechange=e,n.appendChild(t)}; 10 | 11 | function demo_addEvent(t,n,e){t.attachEvent?t.attachEvent("on"+n,e):t.addEventListener(n,e,!0)} 12 | 13 | // get version of a lib 14 | function getVersion(repo, callback) { 15 | nanoajax.ajax({url:'https://api.github.com/repos/'+repo+'/tags'}, function (code, responseText) { 16 | var version = "0"; 17 | try { 18 | var res = JSON.parse(responseText); 19 | if (Object.prototype.toString.call(res) === '[object Array]' && res.length > 0) { 20 | version = res[0].name.replace(/^v/,""); 21 | } 22 | } catch(e) {} 23 | callback(version) 24 | }) 25 | } 26 | var lib_versions={"js-xlsx":0, "ExcelPlus":0}; 27 | // Call our libraries 28 | getVersion('sheetjs/js-xlsx', function(version) { 29 | lib_versions["js-xlsx"]=version; 30 | // load the latest release 31 | loadJS('https://cdnjs.cloudflare.com/ajax/libs/xlsx/'+version+'/xlsx.core.min.js', document.head, function() { 32 | // get ExcelPlus 33 | getVersion('aymkdn/excelplus', function(version) { 34 | lib_versions.ExcelPlus=version; 35 | if (document.location.host) { 36 | loadJS('http://github-proxy.kodono.info/?q=https://raw.githubusercontent.com/Aymkdn/ExcelPlus/master/'+version+'/excelplus-'+version+'.js', document.head, onReady) 37 | } else { 38 | loadJS('../../2.5/excelplus-2.5.js', document.head, onReady) 39 | } 40 | 41 | // show demo code 42 | document.body.insertAdjacentHTML('beforeend', '

Code for this demo (js-xlsx v'+lib_versions["js-xlsx"]+' / ExcelPlus v'+lib_versions.ExcelPlus+'):

'); 43 | document.querySelector('#code').innerHTML = document.querySelector('#demo').innerHTML.replace(/m;m++)p=r[m],void 0!==t[p]&&(f[p]=t[p]);for(var p in u)f.setRequestHeader(p,u[p]);return f.send(i),f},e.nanoajax=t}({},function(){return this}()); 6 | 7 | // add http://stackoverflow.com/a/31374433/1134119 8 | // example: loadJS('yourcode.js', document.body, yourCodeToBeCalled); 9 | var loadJS=function(a,n,e){var t=document.createElement("script");t.src=a,t.onload=e||function(){},t.onreadystatechange=e,n.appendChild(t)}; 10 | 11 | function demo_addEvent(t,n,e){t.attachEvent?t.attachEvent("on"+n,e):t.addEventListener(n,e,!0)} 12 | 13 | // get version of a lib 14 | function getVersion(repo, callback) { 15 | nanoajax.ajax({url:'https://api.github.com/repos/'+repo+'/tags'}, function (code, responseText) { 16 | var version = "0"; 17 | try { 18 | var res = JSON.parse(responseText); 19 | if (Object.prototype.toString.call(res) === '[object Array]' && res.length > 0) { 20 | version = res[0].name.replace(/^v/,""); 21 | } 22 | } catch(e) {} 23 | callback(version) 24 | }) 25 | } 26 | var lib_versions={"js-xlsx":0, "ExcelPlus":0}; 27 | // Call our libraries 28 | getVersion('sheetjs/js-xlsx', function(version) { 29 | lib_versions["js-xlsx"]=version; 30 | // load the latest release 31 | loadJS('https://cdnjs.cloudflare.com/ajax/libs/xlsx/'+version+'/xlsx.core.min.js', document.head, function() { 32 | // get ExcelPlus 33 | getVersion('aymkdn/excelplus', function(version) { 34 | lib_versions.ExcelPlus=version; 35 | if (document.location.host) { 36 | loadJS('http://github-proxy.kodono.info/?q=https://raw.githubusercontent.com/Aymkdn/ExcelPlus/master/'+version+'/excelplus-'+version+'.js', document.head, onReady) 37 | } else { 38 | loadJS('../../2.5/excelplus-2.5.js', document.head, onReady) 39 | } 40 | 41 | // show demo code 42 | document.body.insertAdjacentHTML('beforeend', '

Code for this demo (js-xlsx v'+lib_versions["js-xlsx"]+' / ExcelPlus v'+lib_versions.ExcelPlus+'):

'); 43 | document.querySelector('#code').innerHTML = document.querySelector('#demo').innerHTML.replace(/ 8 | 9 | 15 | 16 | 17 | 18 | 19 |

Methods

20 |
21 |

(source code) 22 |
23 |
24 |
25 |
26 | 27 | 28 |
29 |

Parameters:

30 | { 33 | output += '
'; 34 | output += '
'+param.type.names.map((type) => { return type.charAt(0).toUpperCase() + type.slice(1) }).join("|")+'
'; 35 | output += '
'+param.name+' '; 36 | if (param.optional) { 37 | output += 'Optional'; 38 | if (typeof param.defaultvalue !== 'undefined') output += ', Default: '+param.defaultvalue; 39 | output += ''; 40 | } 41 | output += '
'; 42 | output += '
'+self.linkify(param.description||"")+'
'; 43 | output += '
'; 44 | }) 45 | ?> 46 | 47 |
48 | 49 | 50 | 51 |
52 |

Returns:

53 |
54 | { 57 | output += '
'+ ret.type.names.join('|') + '
' 58 | output += '
'+ ret.description + '
' 59 | }) 60 | ?> 61 | 62 |
63 |
64 | 65 | 66 | 67 |

Example:

68 | { 71 | output += '
'+example.code.replace(/^ {6}/gm,"")+'
' 72 | }) 73 | ?> 74 | 75 | 76 |
77 |
78 |
79 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /jsdoc_template/tmpl/layout.tmpl: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ExcelPlus :: JavaScript API/Interface to deal with Excel 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 42 |
43 | 44 |
45 |
46 |
47 | 48 | 55 |
56 | 57 |
58 |
59 | 60 | 67 | 68 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /docs/js/bootstrap-scrollspy.js: -------------------------------------------------------------------------------- 1 | /* ============================================================= 2 | * bootstrap-scrollspy.js v2.0.2 3 | * http://twitter.github.com/bootstrap/javascript.html#scrollspy 4 | * ============================================================= 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================== */ 19 | 20 | !function ( $ ) { 21 | 22 | "use strict" 23 | 24 | /* SCROLLSPY CLASS DEFINITION 25 | * ========================== */ 26 | 27 | function ScrollSpy( element, options) { 28 | var process = $.proxy(this.process, this) 29 | , $element = $(element).is('body') ? $(window) : $(element) 30 | , href 31 | this.options = $.extend({}, $.fn.scrollspy.defaults, options) 32 | this.$scrollElement = $element.on('scroll.scroll.data-api', process) 33 | this.selector = (this.options.target 34 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 35 | || '') + ' .nav li > a' 36 | this.$body = $('body').on('click.scroll.data-api', this.selector, process) 37 | this.refresh() 38 | this.process() 39 | } 40 | 41 | ScrollSpy.prototype = { 42 | 43 | constructor: ScrollSpy 44 | 45 | , refresh: function () { 46 | this.targets = this.$body 47 | .find(this.selector) 48 | .map(function () { 49 | var href = $(this).attr('href') 50 | return /^#\w/.test(href) && $(href).length ? href : null 51 | }) 52 | 53 | this.offsets = $.map(this.targets, function (id) { 54 | return $(id).position().top 55 | }) 56 | } 57 | 58 | , process: function () { 59 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset 60 | , offsets = this.offsets 61 | , targets = this.targets 62 | , activeTarget = this.activeTarget 63 | , i 64 | 65 | for (i = offsets.length; i--;) { 66 | activeTarget != targets[i] 67 | && scrollTop >= offsets[i] 68 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) 69 | && this.activate( targets[i] ) 70 | } 71 | } 72 | 73 | , activate: function (target) { 74 | var active 75 | 76 | this.activeTarget = target 77 | 78 | this.$body 79 | .find(this.selector).parent('.active') 80 | .removeClass('active') 81 | 82 | active = this.$body 83 | .find(this.selector + '[href="' + target + '"]') 84 | .parent('li') 85 | .addClass('active') 86 | 87 | if ( active.parent('.dropdown-menu') ) { 88 | active.closest('li.dropdown').addClass('active') 89 | } 90 | } 91 | 92 | } 93 | 94 | 95 | /* SCROLLSPY PLUGIN DEFINITION 96 | * =========================== */ 97 | 98 | $.fn.scrollspy = function ( option ) { 99 | return this.each(function () { 100 | var $this = $(this) 101 | , data = $this.data('scrollspy') 102 | , options = typeof option == 'object' && option 103 | if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) 104 | if (typeof option == 'string') data[option]() 105 | }) 106 | } 107 | 108 | $.fn.scrollspy.Constructor = ScrollSpy 109 | 110 | $.fn.scrollspy.defaults = { 111 | offset: 10 112 | } 113 | 114 | 115 | /* SCROLLSPY DATA-API 116 | * ================== */ 117 | 118 | $(function () { 119 | $('[data-spy="scroll"]').each(function () { 120 | var $spy = $(this) 121 | $spy.scrollspy($spy.data()) 122 | }) 123 | }) 124 | 125 | }( window.jQuery ); -------------------------------------------------------------------------------- /jsdoc_template/static/js/bootstrap-scrollspy.js: -------------------------------------------------------------------------------- 1 | /* ============================================================= 2 | * bootstrap-scrollspy.js v2.0.2 3 | * http://twitter.github.com/bootstrap/javascript.html#scrollspy 4 | * ============================================================= 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================== */ 19 | 20 | !function ( $ ) { 21 | 22 | "use strict" 23 | 24 | /* SCROLLSPY CLASS DEFINITION 25 | * ========================== */ 26 | 27 | function ScrollSpy( element, options) { 28 | var process = $.proxy(this.process, this) 29 | , $element = $(element).is('body') ? $(window) : $(element) 30 | , href 31 | this.options = $.extend({}, $.fn.scrollspy.defaults, options) 32 | this.$scrollElement = $element.on('scroll.scroll.data-api', process) 33 | this.selector = (this.options.target 34 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 35 | || '') + ' .nav li > a' 36 | this.$body = $('body').on('click.scroll.data-api', this.selector, process) 37 | this.refresh() 38 | this.process() 39 | } 40 | 41 | ScrollSpy.prototype = { 42 | 43 | constructor: ScrollSpy 44 | 45 | , refresh: function () { 46 | this.targets = this.$body 47 | .find(this.selector) 48 | .map(function () { 49 | var href = $(this).attr('href') 50 | return /^#\w/.test(href) && $(href).length ? href : null 51 | }) 52 | 53 | this.offsets = $.map(this.targets, function (id) { 54 | return $(id).position().top 55 | }) 56 | } 57 | 58 | , process: function () { 59 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset 60 | , offsets = this.offsets 61 | , targets = this.targets 62 | , activeTarget = this.activeTarget 63 | , i 64 | 65 | for (i = offsets.length; i--;) { 66 | activeTarget != targets[i] 67 | && scrollTop >= offsets[i] 68 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) 69 | && this.activate( targets[i] ) 70 | } 71 | } 72 | 73 | , activate: function (target) { 74 | var active 75 | 76 | this.activeTarget = target 77 | 78 | this.$body 79 | .find(this.selector).parent('.active') 80 | .removeClass('active') 81 | 82 | active = this.$body 83 | .find(this.selector + '[href="' + target + '"]') 84 | .parent('li') 85 | .addClass('active') 86 | 87 | if ( active.parent('.dropdown-menu') ) { 88 | active.closest('li.dropdown').addClass('active') 89 | } 90 | } 91 | 92 | } 93 | 94 | 95 | /* SCROLLSPY PLUGIN DEFINITION 96 | * =========================== */ 97 | 98 | $.fn.scrollspy = function ( option ) { 99 | return this.each(function () { 100 | var $this = $(this) 101 | , data = $this.data('scrollspy') 102 | , options = typeof option == 'object' && option 103 | if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) 104 | if (typeof option == 'string') data[option]() 105 | }) 106 | } 107 | 108 | $.fn.scrollspy.Constructor = ScrollSpy 109 | 110 | $.fn.scrollspy.defaults = { 111 | offset: 10 112 | } 113 | 114 | 115 | /* SCROLLSPY DATA-API 116 | * ================== */ 117 | 118 | $(function () { 119 | $('[data-spy="scroll"]').each(function () { 120 | var $spy = $(this) 121 | $spy.scrollspy($spy.data()) 122 | }) 123 | }) 124 | 125 | }( window.jQuery ); -------------------------------------------------------------------------------- /docs/js/bootstrap-collapse.js: -------------------------------------------------------------------------------- 1 | /* ============================================================= 2 | * bootstrap-collapse.js v2.0.2 3 | * http://twitter.github.com/bootstrap/javascript.html#collapse 4 | * ============================================================= 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================ */ 19 | 20 | !function( $ ){ 21 | 22 | "use strict" 23 | 24 | var Collapse = function ( element, options ) { 25 | this.$element = $(element) 26 | this.options = $.extend({}, $.fn.collapse.defaults, options) 27 | 28 | if (this.options["parent"]) { 29 | this.$parent = $(this.options["parent"]) 30 | } 31 | 32 | this.options.toggle && this.toggle() 33 | } 34 | 35 | Collapse.prototype = { 36 | 37 | constructor: Collapse 38 | 39 | , dimension: function () { 40 | var hasWidth = this.$element.hasClass('width') 41 | return hasWidth ? 'width' : 'height' 42 | } 43 | 44 | , show: function () { 45 | var dimension = this.dimension() 46 | , scroll = $.camelCase(['scroll', dimension].join('-')) 47 | , actives = this.$parent && this.$parent.find('.in') 48 | , hasData 49 | 50 | if (actives && actives.length) { 51 | hasData = actives.data('collapse') 52 | actives.collapse('hide') 53 | hasData || actives.data('collapse', null) 54 | } 55 | 56 | this.$element[dimension](0) 57 | this.transition('addClass', 'show', 'shown') 58 | this.$element[dimension](this.$element[0][scroll]) 59 | 60 | } 61 | 62 | , hide: function () { 63 | var dimension = this.dimension() 64 | this.reset(this.$element[dimension]()) 65 | this.transition('removeClass', 'hide', 'hidden') 66 | this.$element[dimension](0) 67 | } 68 | 69 | , reset: function ( size ) { 70 | var dimension = this.dimension() 71 | 72 | this.$element 73 | .removeClass('collapse') 74 | [dimension](size || 'auto') 75 | [0].offsetWidth 76 | 77 | this.$element[size ? 'addClass' : 'removeClass']('collapse') 78 | 79 | return this 80 | } 81 | 82 | , transition: function ( method, startEvent, completeEvent ) { 83 | var that = this 84 | , complete = function () { 85 | if (startEvent == 'show') that.reset() 86 | that.$element.trigger(completeEvent) 87 | } 88 | 89 | this.$element 90 | .trigger(startEvent) 91 | [method]('in') 92 | 93 | $.support.transition && this.$element.hasClass('collapse') ? 94 | this.$element.one($.support.transition.end, complete) : 95 | complete() 96 | } 97 | 98 | , toggle: function () { 99 | this[this.$element.hasClass('in') ? 'hide' : 'show']() 100 | } 101 | 102 | } 103 | 104 | /* COLLAPSIBLE PLUGIN DEFINITION 105 | * ============================== */ 106 | 107 | $.fn.collapse = function ( option ) { 108 | return this.each(function () { 109 | var $this = $(this) 110 | , data = $this.data('collapse') 111 | , options = typeof option == 'object' && option 112 | if (!data) $this.data('collapse', (data = new Collapse(this, options))) 113 | if (typeof option == 'string') data[option]() 114 | }) 115 | } 116 | 117 | $.fn.collapse.defaults = { 118 | toggle: true 119 | } 120 | 121 | $.fn.collapse.Constructor = Collapse 122 | 123 | 124 | /* COLLAPSIBLE DATA-API 125 | * ==================== */ 126 | 127 | $(function () { 128 | $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { 129 | var $this = $(this), href 130 | , target = $this.attr('data-target') 131 | || e.preventDefault() 132 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 133 | , option = $(target).data('collapse') ? 'toggle' : $this.data() 134 | $(target).collapse(option) 135 | }) 136 | }) 137 | 138 | }( window.jQuery ); -------------------------------------------------------------------------------- /jsdoc_template/static/js/bootstrap-collapse.js: -------------------------------------------------------------------------------- 1 | /* ============================================================= 2 | * bootstrap-collapse.js v2.0.2 3 | * http://twitter.github.com/bootstrap/javascript.html#collapse 4 | * ============================================================= 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================ */ 19 | 20 | !function( $ ){ 21 | 22 | "use strict" 23 | 24 | var Collapse = function ( element, options ) { 25 | this.$element = $(element) 26 | this.options = $.extend({}, $.fn.collapse.defaults, options) 27 | 28 | if (this.options["parent"]) { 29 | this.$parent = $(this.options["parent"]) 30 | } 31 | 32 | this.options.toggle && this.toggle() 33 | } 34 | 35 | Collapse.prototype = { 36 | 37 | constructor: Collapse 38 | 39 | , dimension: function () { 40 | var hasWidth = this.$element.hasClass('width') 41 | return hasWidth ? 'width' : 'height' 42 | } 43 | 44 | , show: function () { 45 | var dimension = this.dimension() 46 | , scroll = $.camelCase(['scroll', dimension].join('-')) 47 | , actives = this.$parent && this.$parent.find('.in') 48 | , hasData 49 | 50 | if (actives && actives.length) { 51 | hasData = actives.data('collapse') 52 | actives.collapse('hide') 53 | hasData || actives.data('collapse', null) 54 | } 55 | 56 | this.$element[dimension](0) 57 | this.transition('addClass', 'show', 'shown') 58 | this.$element[dimension](this.$element[0][scroll]) 59 | 60 | } 61 | 62 | , hide: function () { 63 | var dimension = this.dimension() 64 | this.reset(this.$element[dimension]()) 65 | this.transition('removeClass', 'hide', 'hidden') 66 | this.$element[dimension](0) 67 | } 68 | 69 | , reset: function ( size ) { 70 | var dimension = this.dimension() 71 | 72 | this.$element 73 | .removeClass('collapse') 74 | [dimension](size || 'auto') 75 | [0].offsetWidth 76 | 77 | this.$element[size ? 'addClass' : 'removeClass']('collapse') 78 | 79 | return this 80 | } 81 | 82 | , transition: function ( method, startEvent, completeEvent ) { 83 | var that = this 84 | , complete = function () { 85 | if (startEvent == 'show') that.reset() 86 | that.$element.trigger(completeEvent) 87 | } 88 | 89 | this.$element 90 | .trigger(startEvent) 91 | [method]('in') 92 | 93 | $.support.transition && this.$element.hasClass('collapse') ? 94 | this.$element.one($.support.transition.end, complete) : 95 | complete() 96 | } 97 | 98 | , toggle: function () { 99 | this[this.$element.hasClass('in') ? 'hide' : 'show']() 100 | } 101 | 102 | } 103 | 104 | /* COLLAPSIBLE PLUGIN DEFINITION 105 | * ============================== */ 106 | 107 | $.fn.collapse = function ( option ) { 108 | return this.each(function () { 109 | var $this = $(this) 110 | , data = $this.data('collapse') 111 | , options = typeof option == 'object' && option 112 | if (!data) $this.data('collapse', (data = new Collapse(this, options))) 113 | if (typeof option == 'string') data[option]() 114 | }) 115 | } 116 | 117 | $.fn.collapse.defaults = { 118 | toggle: true 119 | } 120 | 121 | $.fn.collapse.Constructor = Collapse 122 | 123 | 124 | /* COLLAPSIBLE DATA-API 125 | * ==================== */ 126 | 127 | $(function () { 128 | $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { 129 | var $this = $(this), href 130 | , target = $this.attr('data-target') 131 | || e.preventDefault() 132 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 133 | , option = $(target).data('collapse') ? 'toggle' : $this.data() 134 | $(target).collapse(option) 135 | }) 136 | }) 137 | 138 | }( window.jQuery ); -------------------------------------------------------------------------------- /docs/img/ExcelPlus.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 31 | 34 | 38 | 42 | 43 | 52 | 53 | 73 | 131 | 132 | -------------------------------------------------------------------------------- /jsdoc_template/static/img/ExcelPlus.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 31 | 34 | 38 | 42 | 43 | 52 | 53 | 73 | 131 | 132 | -------------------------------------------------------------------------------- /jsdoc_template/tmpl/mainpage.tmpl: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 | 9 |

ExcelPlus

10 | 11 | 12 | Be notified on new release 13 |

Description

14 |

ExcelPlus (EP) is a JavaScript API/interface to deal with Excel using the js-xlsx library from SheetJS. The SheetJS library is powerful but difficult to use, so I've created ExcelPlus to interface with it.

15 |

I've developed this interface for my needs during my job at Dell and we thought it could be useful for the community too, so here it is !

16 |
Tested with IE8+, Firefox, Chrome.
17 |

Quick Start

18 |

Requirements

19 |

Because ExcelPlus is an interface for js-xlsx then you'll need it.

20 |

Just add two lines to call the necessary files:

21 |
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/CHOOSE_A_VERSION/xlsx.core.min.js"></script>
 22 | <script type="text/javascript" src="excelplus-.min.js"></script>
23 |

Usage

24 |

Write

25 |

Below are two examples about how to write/create an Excel file:

26 |
 27 | // --- EXAMPLE 1 ---
 28 | // in this example we want to build an Excel file with one sheet and write some stuff
 29 | var ep=new ExcelPlus();
 30 | // We're going to do several tasks in one line of code:
 31 | // 1) create an Excel with one sheet called "Book1"
 32 | // 2) write some data from an array to the new-created sheet
 33 | // 3) create a new sheet called "Book2"
 34 | // 4) write "A1" in cell "A1" of the new-created sheet
 35 | // 5) write the today date in D1 of the "Book1" sheet
 36 | // 6) save it on the user computer (this last step only works with IE10+ and modern browsers)
 37 | ep.createFile("Book1")
 38 |   .write({ "content":[ ["A1","B1","C1"] ] })
 39 |   .createSheet("Book2")
 40 |   .write({ "cell":"A1", "content":"A1" })
 41 |   .write({ "sheet":"Book1", "cell":"D1", "content":new Date() })
 42 |   .saveAs("demo.xlsx");
 43 | 
44 |

See in action this example 1

45 |
 46 | // --- EXAMPLE 2 ---
 47 | // in this other example we want to build an Excel file with several sheets and write some stuff
 48 | var ep=new ExcelPlus();
 49 | // We're going to do several tasks in one line of code:
 50 | // 1) create an Excel with three sheets called "Book1", "Book2" and "Book3"
 51 | // 2) write some data from an array to the "Book1"
 52 | // 3) write "A1" in cell "A1" of "Book2"
 53 | // 3) delete "Book3"
 54 | // 4) select "Book2"
 55 | // 5) write the today date in A2 of the "Book2" sheet
 56 | ep.createFile([ "Book1", "Book2", "Book3" ])
 57 |   .write({ "sheet":"Book1", "content":[ ["A1","B1","C1"] ] })
 58 |   .write({ "sheet":"Book2", "cell":"A1", "content":"A1" })
 59 |   .deleteSheet("Book3")
 60 |   .selectSheet("Book2")
 61 |   .write({ "cell":"A2", "content":new Date() });
 62 | 
63 |

See in action this example 2

64 |

Read

65 |

Below are some examples about how to read an Excel file:

66 |
 67 | // --- EXAMPLE 3 ---
 68 | // in this example we want to read a local (= on the user's computer) Excel file
 69 | // to do so we need to add `<object id="file-object"></object>` into our HTML where a button to upload the file will appear
 70 | // then we can call our JavaScript
 71 | var ep=new ExcelPlus();
 72 | // we call openLocal() and when the file is loaded then we want to display its content
 73 | // openLocal() will use the FileAPI if exists, otherwise it will use a Flash object
 74 | ep.openLocal({
 75 |   "flashPath":"/js/excelplus/2.4/swfobject/",
 76 |   "labelButton":"Open an Excel file"
 77 | },function() {
 78 |   // show the content of the first sheet
 79 |   console.table(ep.selectSheet(1).readAll())
 80 | })
 81 | 
82 |

See in action this example 3

83 |
 84 | // --- EXAMPLE 4 ---
 85 | // in this other example we want to read a remote (= on a server) Excel file
 86 | // to do so we need to make sure the server accepts the remote requests (it's the case for the same domain)
 87 | var ep=new ExcelPlus();
 88 | // we call openRemote()
 89 | ep.openRemote("http://my.server.com/path/file.xlsx", function(passed) {
 90 |   if (!passed) alert("Error: impossible to load the remote file");
 91 |   else alert(ep.selectSheet(1).readAll()) // show the content of the first sheet
 92 | })
 93 | 
94 |

See in action this example 4

95 |
 96 | // a combo because we create an Excel file and we read it
 97 | var ep=new ExcelPlus();
 98 | ep.createFile().write({cell:"A1", content:"A1"}).writeCell("B1","B1").write({cell:"A2",content:"A2"});
 99 | console.table(ep.read("A1:B3"));
100 | 
101 |

Bonus

102 |

If you use Sharepoint you can use ExcelPlus with my other library called SharepointPlus. With these both libraries you can save your Excel file to Sharepoint:

103 |
104 | // Create an Excel file and save it to Sharepoint
105 | var ep=new ExcelPlus();
106 | ep.createFile("Book1").write({ "content":[ ["A1","B1","C1"] ] });
107 | $SP().list("Documents Library", "http://my.sharepoint.com/path/").createFile({
108 |   "content": ep.saveTo(),
109 |   "encoded": true,
110 |   "filename": "myfile.xlsx",
111 |   after:function(fileURL) {
112 |     // and you can send it to the user calling the below line :
113 |     window.location.href=fileURL;
114 |   }
115 | });
116 | 
117 |
118 | 119 | 120 | -------------------------------------------------------------------------------- /2.2/swfobject/FileToDataURI.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | = InitEncoreChar(); 23 | 24 | //File types which we want the user to open 25 | // other example [new FileFilter("Images", "*.jpg;*.png;*.gif")] 26 | private static const FILE_TYPES:Array = [new FileFilter("All Files", "*.*")]; 27 | 28 | // permits to customize the button label 29 | private var _buttonLabel:String = ExternalInterface.call("Flash.getButtonLabel"); 30 | private function returnButtonLabel():String { 31 | return _buttonLabel || "Charger Fichier"; 32 | } 33 | 34 | //called when the user clicks the load file button 35 | private function onLoadFileClick():void 36 | { 37 | //create the FileReference instance 38 | fileRef = new FileReference(); 39 | 40 | //listen for when they select a file 41 | fileRef.addEventListener(Event.SELECT, onFileSelect); 42 | 43 | //listen for when then cancel out of the browse dialog 44 | fileRef.addEventListener(Event.CANCEL,onCancel); 45 | 46 | //open a native browse dialog that filters for the files 47 | fileRef.browse(FILE_TYPES); 48 | } 49 | 50 | /************ Browse Event Handlers **************/ 51 | //called when the user selects a file from the browse dialog 52 | private function onFileSelect(e:Event):void 53 | { 54 | //listen for when the file has loaded 55 | fileRef.addEventListener(Event.COMPLETE, onLoadComplete); 56 | 57 | //listen for any errors reading the file 58 | fileRef.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 59 | 60 | //load the content of the file 61 | fileRef.load(); 62 | } 63 | 64 | //called when the user cancels out of the browser dialog 65 | private function onCancel(e:Event):void 66 | { 67 | trace("File Browse Canceled"); 68 | fileRef = null; 69 | } 70 | 71 | /************ Select Event Handlers **************/ 72 | //called when the file has completed loading 73 | private function onLoadComplete(e:Event):void 74 | { 75 | //get the data from the file as a ByteArray 76 | var data:ByteArray = fileRef.data; 77 | 78 | // call external Javascript function and pass the base64 encoded data and the filename 79 | ExternalInterface.call(javascriptReceiver, encode(data), fileRef.name); 80 | 81 | //clean up the FileReference instance 82 | fileRef = null; 83 | } 84 | 85 | //called if an error occurs while loading the file contents 86 | private function onLoadError(e:IOErrorEvent):void 87 | { 88 | trace("Error loading file : " + e.text); 89 | } 90 | 91 | /* 92 | * Copyright (C) 2012 Jean-Philippe Auclair 93 | * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php 94 | * Base64 library for ActionScript 3.0. 95 | * By: Jean-Philippe Auclair : http://jpauclair.net 96 | * Based on article: http://jpauclair.net/2010/01/09/base64-optimized-as3-lib/ 97 | * Benchmark: 98 | * This version: encode: 260ms decode: 255ms 99 | * Blog version: encode: 322ms decode: 694ms 100 | * as3Crypto encode: 6728ms decode: 4098ms 101 | * 102 | * Encode: com.sociodox.utils.Base64 is 25.8x faster than as3Crypto Base64 103 | * Decode: com.sociodox.utils.Base64 is 16x faster than as3Crypto Base64 104 | * 105 | * Optimize & Profile any Flash content with TheMiner ( http://www.sociodox.com/theminer ) 106 | */ 107 | public static function encode(data:ByteArray):String { 108 | var out:ByteArray = new ByteArray(); 109 | //Presetting the length keep the memory smaller and optimize speed since there is no "grow" needed 110 | out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3; //Preset length //1.6 to 1.5 ms 111 | var i:int = 0; 112 | var r:int = data.length % 3; 113 | var len:int = data.length - r; 114 | var c:uint; //read (3) character AND write (4) characters 115 | var outPos:int = 0; 116 | while (i < len) { 117 | //Read 3 Characters (8bit * 3 = 24 bits) 118 | c = data[int(i++)] << 16 | data[int(i++)] << 8 | data[int(i++)]; 119 | 120 | out[int(outPos++)] = _encodeChars[int(c >>> 18)]; 121 | out[int(outPos++)] = _encodeChars[int(c >>> 12 & 0x3f)]; 122 | out[int(outPos++)] = _encodeChars[int(c >>> 6 & 0x3f)]; 123 | out[int(outPos++)] = _encodeChars[int(c & 0x3f)]; 124 | } 125 | 126 | if (r == 1) { // Need two "=" padding 127 | //Read one char, write two chars, write padding 128 | c = data[int(i)]; 129 | 130 | out[int(outPos++)] = _encodeChars[int(c >>> 2)]; 131 | out[int(outPos++)] = _encodeChars[int((c & 0x03) << 4)]; 132 | out[int(outPos++)] = 61; 133 | out[int(outPos++)] = 61; 134 | } else if (r == 2) { //Need one "=" padding 135 | c = data[int(i++)] << 8 | data[int(i)]; 136 | 137 | out[int(outPos++)] = _encodeChars[int(c >>> 10)]; 138 | out[int(outPos++)] = _encodeChars[int(c >>> 4 & 0x3f)]; 139 | out[int(outPos++)] = _encodeChars[int((c & 0x0f) << 2)]; 140 | out[int(outPos++)] = 61; 141 | } 142 | 143 | return out.readUTFBytes(out.length); 144 | } 145 | 146 | public static function InitEncoreChar():Vector. { 147 | var encodeChars:Vector. = new Vector.(64, true); 148 | 149 | // We could push the number directly 150 | // but I think it's nice to see the characters (with no overhead on encode/decode) 151 | var chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 152 | for (var i:int = 0; i < 64; i++) { 153 | encodeChars[i] = chars.charCodeAt(i); 154 | } 155 | 156 | return encodeChars; 157 | } 158 | 159 | ]]> 160 | 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /2.3/swfobject/FileToDataURI.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | = InitEncoreChar(); 23 | 24 | //File types which we want the user to open 25 | // other example [new FileFilter("Images", "*.jpg;*.png;*.gif")] 26 | private static const FILE_TYPES:Array = [new FileFilter("All Files", "*.*")]; 27 | 28 | // permits to customize the button label 29 | private var _buttonLabel:String = ExternalInterface.call("Flash.getButtonLabel"); 30 | private function returnButtonLabel():String { 31 | return _buttonLabel || "Charger Fichier"; 32 | } 33 | 34 | //called when the user clicks the load file button 35 | private function onLoadFileClick():void 36 | { 37 | //create the FileReference instance 38 | fileRef = new FileReference(); 39 | 40 | //listen for when they select a file 41 | fileRef.addEventListener(Event.SELECT, onFileSelect); 42 | 43 | //listen for when then cancel out of the browse dialog 44 | fileRef.addEventListener(Event.CANCEL,onCancel); 45 | 46 | //open a native browse dialog that filters for the files 47 | fileRef.browse(FILE_TYPES); 48 | } 49 | 50 | /************ Browse Event Handlers **************/ 51 | //called when the user selects a file from the browse dialog 52 | private function onFileSelect(e:Event):void 53 | { 54 | //listen for when the file has loaded 55 | fileRef.addEventListener(Event.COMPLETE, onLoadComplete); 56 | 57 | //listen for any errors reading the file 58 | fileRef.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 59 | 60 | //load the content of the file 61 | fileRef.load(); 62 | } 63 | 64 | //called when the user cancels out of the browser dialog 65 | private function onCancel(e:Event):void 66 | { 67 | trace("File Browse Canceled"); 68 | fileRef = null; 69 | } 70 | 71 | /************ Select Event Handlers **************/ 72 | //called when the file has completed loading 73 | private function onLoadComplete(e:Event):void 74 | { 75 | //get the data from the file as a ByteArray 76 | var data:ByteArray = fileRef.data; 77 | 78 | // call external Javascript function and pass the base64 encoded data and the filename 79 | ExternalInterface.call(javascriptReceiver, encode(data), fileRef.name); 80 | 81 | //clean up the FileReference instance 82 | fileRef = null; 83 | } 84 | 85 | //called if an error occurs while loading the file contents 86 | private function onLoadError(e:IOErrorEvent):void 87 | { 88 | trace("Error loading file : " + e.text); 89 | } 90 | 91 | /* 92 | * Copyright (C) 2012 Jean-Philippe Auclair 93 | * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php 94 | * Base64 library for ActionScript 3.0. 95 | * By: Jean-Philippe Auclair : http://jpauclair.net 96 | * Based on article: http://jpauclair.net/2010/01/09/base64-optimized-as3-lib/ 97 | * Benchmark: 98 | * This version: encode: 260ms decode: 255ms 99 | * Blog version: encode: 322ms decode: 694ms 100 | * as3Crypto encode: 6728ms decode: 4098ms 101 | * 102 | * Encode: com.sociodox.utils.Base64 is 25.8x faster than as3Crypto Base64 103 | * Decode: com.sociodox.utils.Base64 is 16x faster than as3Crypto Base64 104 | * 105 | * Optimize & Profile any Flash content with TheMiner ( http://www.sociodox.com/theminer ) 106 | */ 107 | public static function encode(data:ByteArray):String { 108 | var out:ByteArray = new ByteArray(); 109 | //Presetting the length keep the memory smaller and optimize speed since there is no "grow" needed 110 | out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3; //Preset length //1.6 to 1.5 ms 111 | var i:int = 0; 112 | var r:int = data.length % 3; 113 | var len:int = data.length - r; 114 | var c:uint; //read (3) character AND write (4) characters 115 | var outPos:int = 0; 116 | while (i < len) { 117 | //Read 3 Characters (8bit * 3 = 24 bits) 118 | c = data[int(i++)] << 16 | data[int(i++)] << 8 | data[int(i++)]; 119 | 120 | out[int(outPos++)] = _encodeChars[int(c >>> 18)]; 121 | out[int(outPos++)] = _encodeChars[int(c >>> 12 & 0x3f)]; 122 | out[int(outPos++)] = _encodeChars[int(c >>> 6 & 0x3f)]; 123 | out[int(outPos++)] = _encodeChars[int(c & 0x3f)]; 124 | } 125 | 126 | if (r == 1) { // Need two "=" padding 127 | //Read one char, write two chars, write padding 128 | c = data[int(i)]; 129 | 130 | out[int(outPos++)] = _encodeChars[int(c >>> 2)]; 131 | out[int(outPos++)] = _encodeChars[int((c & 0x03) << 4)]; 132 | out[int(outPos++)] = 61; 133 | out[int(outPos++)] = 61; 134 | } else if (r == 2) { //Need one "=" padding 135 | c = data[int(i++)] << 8 | data[int(i)]; 136 | 137 | out[int(outPos++)] = _encodeChars[int(c >>> 10)]; 138 | out[int(outPos++)] = _encodeChars[int(c >>> 4 & 0x3f)]; 139 | out[int(outPos++)] = _encodeChars[int((c & 0x0f) << 2)]; 140 | out[int(outPos++)] = 61; 141 | } 142 | 143 | return out.readUTFBytes(out.length); 144 | } 145 | 146 | public static function InitEncoreChar():Vector. { 147 | var encodeChars:Vector. = new Vector.(64, true); 148 | 149 | // We could push the number directly 150 | // but I think it's nice to see the characters (with no overhead on encode/decode) 151 | var chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 152 | for (var i:int = 0; i < 64; i++) { 153 | encodeChars[i] = chars.charCodeAt(i); 154 | } 155 | 156 | return encodeChars; 157 | } 158 | 159 | ]]> 160 | 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /2.4.1/swfobject/FileToDataURI.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | = InitEncoreChar(); 23 | 24 | //File types which we want the user to open 25 | // other example [new FileFilter("Images", "*.jpg;*.png;*.gif")] 26 | private static const FILE_TYPES:Array = [new FileFilter("All Files", "*.*")]; 27 | 28 | // permits to customize the button label 29 | private var _buttonLabel:String = ExternalInterface.call("Flash.getButtonLabel"); 30 | private function returnButtonLabel():String { 31 | return _buttonLabel || "Charger Fichier"; 32 | } 33 | 34 | //called when the user clicks the load file button 35 | private function onLoadFileClick():void 36 | { 37 | //create the FileReference instance 38 | fileRef = new FileReference(); 39 | 40 | //listen for when they select a file 41 | fileRef.addEventListener(Event.SELECT, onFileSelect); 42 | 43 | //listen for when then cancel out of the browse dialog 44 | fileRef.addEventListener(Event.CANCEL,onCancel); 45 | 46 | //open a native browse dialog that filters for the files 47 | fileRef.browse(FILE_TYPES); 48 | } 49 | 50 | /************ Browse Event Handlers **************/ 51 | //called when the user selects a file from the browse dialog 52 | private function onFileSelect(e:Event):void 53 | { 54 | //listen for when the file has loaded 55 | fileRef.addEventListener(Event.COMPLETE, onLoadComplete); 56 | 57 | //listen for any errors reading the file 58 | fileRef.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 59 | 60 | //load the content of the file 61 | fileRef.load(); 62 | } 63 | 64 | //called when the user cancels out of the browser dialog 65 | private function onCancel(e:Event):void 66 | { 67 | trace("File Browse Canceled"); 68 | fileRef = null; 69 | } 70 | 71 | /************ Select Event Handlers **************/ 72 | //called when the file has completed loading 73 | private function onLoadComplete(e:Event):void 74 | { 75 | //get the data from the file as a ByteArray 76 | var data:ByteArray = fileRef.data; 77 | 78 | // call external Javascript function and pass the base64 encoded data and the filename 79 | ExternalInterface.call(javascriptReceiver, encode(data), fileRef.name); 80 | 81 | //clean up the FileReference instance 82 | fileRef = null; 83 | } 84 | 85 | //called if an error occurs while loading the file contents 86 | private function onLoadError(e:IOErrorEvent):void 87 | { 88 | trace("Error loading file : " + e.text); 89 | } 90 | 91 | /* 92 | * Copyright (C) 2012 Jean-Philippe Auclair 93 | * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php 94 | * Base64 library for ActionScript 3.0. 95 | * By: Jean-Philippe Auclair : http://jpauclair.net 96 | * Based on article: http://jpauclair.net/2010/01/09/base64-optimized-as3-lib/ 97 | * Benchmark: 98 | * This version: encode: 260ms decode: 255ms 99 | * Blog version: encode: 322ms decode: 694ms 100 | * as3Crypto encode: 6728ms decode: 4098ms 101 | * 102 | * Encode: com.sociodox.utils.Base64 is 25.8x faster than as3Crypto Base64 103 | * Decode: com.sociodox.utils.Base64 is 16x faster than as3Crypto Base64 104 | * 105 | * Optimize & Profile any Flash content with TheMiner ( http://www.sociodox.com/theminer ) 106 | */ 107 | public static function encode(data:ByteArray):String { 108 | var out:ByteArray = new ByteArray(); 109 | //Presetting the length keep the memory smaller and optimize speed since there is no "grow" needed 110 | out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3; //Preset length //1.6 to 1.5 ms 111 | var i:int = 0; 112 | var r:int = data.length % 3; 113 | var len:int = data.length - r; 114 | var c:uint; //read (3) character AND write (4) characters 115 | var outPos:int = 0; 116 | while (i < len) { 117 | //Read 3 Characters (8bit * 3 = 24 bits) 118 | c = data[int(i++)] << 16 | data[int(i++)] << 8 | data[int(i++)]; 119 | 120 | out[int(outPos++)] = _encodeChars[int(c >>> 18)]; 121 | out[int(outPos++)] = _encodeChars[int(c >>> 12 & 0x3f)]; 122 | out[int(outPos++)] = _encodeChars[int(c >>> 6 & 0x3f)]; 123 | out[int(outPos++)] = _encodeChars[int(c & 0x3f)]; 124 | } 125 | 126 | if (r == 1) { // Need two "=" padding 127 | //Read one char, write two chars, write padding 128 | c = data[int(i)]; 129 | 130 | out[int(outPos++)] = _encodeChars[int(c >>> 2)]; 131 | out[int(outPos++)] = _encodeChars[int((c & 0x03) << 4)]; 132 | out[int(outPos++)] = 61; 133 | out[int(outPos++)] = 61; 134 | } else if (r == 2) { //Need one "=" padding 135 | c = data[int(i++)] << 8 | data[int(i)]; 136 | 137 | out[int(outPos++)] = _encodeChars[int(c >>> 10)]; 138 | out[int(outPos++)] = _encodeChars[int(c >>> 4 & 0x3f)]; 139 | out[int(outPos++)] = _encodeChars[int((c & 0x0f) << 2)]; 140 | out[int(outPos++)] = 61; 141 | } 142 | 143 | return out.readUTFBytes(out.length); 144 | } 145 | 146 | public static function InitEncoreChar():Vector. { 147 | var encodeChars:Vector. = new Vector.(64, true); 148 | 149 | // We could push the number directly 150 | // but I think it's nice to see the characters (with no overhead on encode/decode) 151 | var chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 152 | for (var i:int = 0; i < 64; i++) { 153 | encodeChars[i] = chars.charCodeAt(i); 154 | } 155 | 156 | return encodeChars; 157 | } 158 | 159 | ]]> 160 | 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /2.4/swfobject/FileToDataURI.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | = InitEncoreChar(); 23 | 24 | //File types which we want the user to open 25 | // other example [new FileFilter("Images", "*.jpg;*.png;*.gif")] 26 | private static const FILE_TYPES:Array = [new FileFilter("All Files", "*.*")]; 27 | 28 | // permits to customize the button label 29 | private var _buttonLabel:String = ExternalInterface.call("Flash.getButtonLabel"); 30 | private function returnButtonLabel():String { 31 | return _buttonLabel || "Charger Fichier"; 32 | } 33 | 34 | //called when the user clicks the load file button 35 | private function onLoadFileClick():void 36 | { 37 | //create the FileReference instance 38 | fileRef = new FileReference(); 39 | 40 | //listen for when they select a file 41 | fileRef.addEventListener(Event.SELECT, onFileSelect); 42 | 43 | //listen for when then cancel out of the browse dialog 44 | fileRef.addEventListener(Event.CANCEL,onCancel); 45 | 46 | //open a native browse dialog that filters for the files 47 | fileRef.browse(FILE_TYPES); 48 | } 49 | 50 | /************ Browse Event Handlers **************/ 51 | //called when the user selects a file from the browse dialog 52 | private function onFileSelect(e:Event):void 53 | { 54 | //listen for when the file has loaded 55 | fileRef.addEventListener(Event.COMPLETE, onLoadComplete); 56 | 57 | //listen for any errors reading the file 58 | fileRef.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 59 | 60 | //load the content of the file 61 | fileRef.load(); 62 | } 63 | 64 | //called when the user cancels out of the browser dialog 65 | private function onCancel(e:Event):void 66 | { 67 | trace("File Browse Canceled"); 68 | fileRef = null; 69 | } 70 | 71 | /************ Select Event Handlers **************/ 72 | //called when the file has completed loading 73 | private function onLoadComplete(e:Event):void 74 | { 75 | //get the data from the file as a ByteArray 76 | var data:ByteArray = fileRef.data; 77 | 78 | // call external Javascript function and pass the base64 encoded data and the filename 79 | ExternalInterface.call(javascriptReceiver, encode(data), fileRef.name); 80 | 81 | //clean up the FileReference instance 82 | fileRef = null; 83 | } 84 | 85 | //called if an error occurs while loading the file contents 86 | private function onLoadError(e:IOErrorEvent):void 87 | { 88 | trace("Error loading file : " + e.text); 89 | } 90 | 91 | /* 92 | * Copyright (C) 2012 Jean-Philippe Auclair 93 | * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php 94 | * Base64 library for ActionScript 3.0. 95 | * By: Jean-Philippe Auclair : http://jpauclair.net 96 | * Based on article: http://jpauclair.net/2010/01/09/base64-optimized-as3-lib/ 97 | * Benchmark: 98 | * This version: encode: 260ms decode: 255ms 99 | * Blog version: encode: 322ms decode: 694ms 100 | * as3Crypto encode: 6728ms decode: 4098ms 101 | * 102 | * Encode: com.sociodox.utils.Base64 is 25.8x faster than as3Crypto Base64 103 | * Decode: com.sociodox.utils.Base64 is 16x faster than as3Crypto Base64 104 | * 105 | * Optimize & Profile any Flash content with TheMiner ( http://www.sociodox.com/theminer ) 106 | */ 107 | public static function encode(data:ByteArray):String { 108 | var out:ByteArray = new ByteArray(); 109 | //Presetting the length keep the memory smaller and optimize speed since there is no "grow" needed 110 | out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3; //Preset length //1.6 to 1.5 ms 111 | var i:int = 0; 112 | var r:int = data.length % 3; 113 | var len:int = data.length - r; 114 | var c:uint; //read (3) character AND write (4) characters 115 | var outPos:int = 0; 116 | while (i < len) { 117 | //Read 3 Characters (8bit * 3 = 24 bits) 118 | c = data[int(i++)] << 16 | data[int(i++)] << 8 | data[int(i++)]; 119 | 120 | out[int(outPos++)] = _encodeChars[int(c >>> 18)]; 121 | out[int(outPos++)] = _encodeChars[int(c >>> 12 & 0x3f)]; 122 | out[int(outPos++)] = _encodeChars[int(c >>> 6 & 0x3f)]; 123 | out[int(outPos++)] = _encodeChars[int(c & 0x3f)]; 124 | } 125 | 126 | if (r == 1) { // Need two "=" padding 127 | //Read one char, write two chars, write padding 128 | c = data[int(i)]; 129 | 130 | out[int(outPos++)] = _encodeChars[int(c >>> 2)]; 131 | out[int(outPos++)] = _encodeChars[int((c & 0x03) << 4)]; 132 | out[int(outPos++)] = 61; 133 | out[int(outPos++)] = 61; 134 | } else if (r == 2) { //Need one "=" padding 135 | c = data[int(i++)] << 8 | data[int(i)]; 136 | 137 | out[int(outPos++)] = _encodeChars[int(c >>> 10)]; 138 | out[int(outPos++)] = _encodeChars[int(c >>> 4 & 0x3f)]; 139 | out[int(outPos++)] = _encodeChars[int((c & 0x0f) << 2)]; 140 | out[int(outPos++)] = 61; 141 | } 142 | 143 | return out.readUTFBytes(out.length); 144 | } 145 | 146 | public static function InitEncoreChar():Vector. { 147 | var encodeChars:Vector. = new Vector.(64, true); 148 | 149 | // We could push the number directly 150 | // but I think it's nice to see the characters (with no overhead on encode/decode) 151 | var chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 152 | for (var i:int = 0; i < 64; i++) { 153 | encodeChars[i] = chars.charCodeAt(i); 154 | } 155 | 156 | return encodeChars; 157 | } 158 | 159 | ]]> 160 | 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /2.5/swfobject/FileToDataURI.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | = InitEncoreChar(); 23 | 24 | //File types which we want the user to open 25 | // other example [new FileFilter("Images", "*.jpg;*.png;*.gif")] 26 | private static const FILE_TYPES:Array = [new FileFilter("All Files", "*.*")]; 27 | 28 | // permits to customize the button label 29 | private var _buttonLabel:String = ExternalInterface.call("Flash.getButtonLabel"); 30 | private function returnButtonLabel():String { 31 | return _buttonLabel || "Charger Fichier"; 32 | } 33 | 34 | //called when the user clicks the load file button 35 | private function onLoadFileClick():void 36 | { 37 | //create the FileReference instance 38 | fileRef = new FileReference(); 39 | 40 | //listen for when they select a file 41 | fileRef.addEventListener(Event.SELECT, onFileSelect); 42 | 43 | //listen for when then cancel out of the browse dialog 44 | fileRef.addEventListener(Event.CANCEL,onCancel); 45 | 46 | //open a native browse dialog that filters for the files 47 | fileRef.browse(FILE_TYPES); 48 | } 49 | 50 | /************ Browse Event Handlers **************/ 51 | //called when the user selects a file from the browse dialog 52 | private function onFileSelect(e:Event):void 53 | { 54 | //listen for when the file has loaded 55 | fileRef.addEventListener(Event.COMPLETE, onLoadComplete); 56 | 57 | //listen for any errors reading the file 58 | fileRef.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 59 | 60 | //load the content of the file 61 | fileRef.load(); 62 | } 63 | 64 | //called when the user cancels out of the browser dialog 65 | private function onCancel(e:Event):void 66 | { 67 | trace("File Browse Canceled"); 68 | fileRef = null; 69 | } 70 | 71 | /************ Select Event Handlers **************/ 72 | //called when the file has completed loading 73 | private function onLoadComplete(e:Event):void 74 | { 75 | //get the data from the file as a ByteArray 76 | var data:ByteArray = fileRef.data; 77 | 78 | // call external Javascript function and pass the base64 encoded data and the filename 79 | ExternalInterface.call(javascriptReceiver, encode(data), fileRef.name); 80 | 81 | //clean up the FileReference instance 82 | fileRef = null; 83 | } 84 | 85 | //called if an error occurs while loading the file contents 86 | private function onLoadError(e:IOErrorEvent):void 87 | { 88 | trace("Error loading file : " + e.text); 89 | } 90 | 91 | /* 92 | * Copyright (C) 2012 Jean-Philippe Auclair 93 | * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php 94 | * Base64 library for ActionScript 3.0. 95 | * By: Jean-Philippe Auclair : http://jpauclair.net 96 | * Based on article: http://jpauclair.net/2010/01/09/base64-optimized-as3-lib/ 97 | * Benchmark: 98 | * This version: encode: 260ms decode: 255ms 99 | * Blog version: encode: 322ms decode: 694ms 100 | * as3Crypto encode: 6728ms decode: 4098ms 101 | * 102 | * Encode: com.sociodox.utils.Base64 is 25.8x faster than as3Crypto Base64 103 | * Decode: com.sociodox.utils.Base64 is 16x faster than as3Crypto Base64 104 | * 105 | * Optimize & Profile any Flash content with TheMiner ( http://www.sociodox.com/theminer ) 106 | */ 107 | public static function encode(data:ByteArray):String { 108 | var out:ByteArray = new ByteArray(); 109 | //Presetting the length keep the memory smaller and optimize speed since there is no "grow" needed 110 | out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3; //Preset length //1.6 to 1.5 ms 111 | var i:int = 0; 112 | var r:int = data.length % 3; 113 | var len:int = data.length - r; 114 | var c:uint; //read (3) character AND write (4) characters 115 | var outPos:int = 0; 116 | while (i < len) { 117 | //Read 3 Characters (8bit * 3 = 24 bits) 118 | c = data[int(i++)] << 16 | data[int(i++)] << 8 | data[int(i++)]; 119 | 120 | out[int(outPos++)] = _encodeChars[int(c >>> 18)]; 121 | out[int(outPos++)] = _encodeChars[int(c >>> 12 & 0x3f)]; 122 | out[int(outPos++)] = _encodeChars[int(c >>> 6 & 0x3f)]; 123 | out[int(outPos++)] = _encodeChars[int(c & 0x3f)]; 124 | } 125 | 126 | if (r == 1) { // Need two "=" padding 127 | //Read one char, write two chars, write padding 128 | c = data[int(i)]; 129 | 130 | out[int(outPos++)] = _encodeChars[int(c >>> 2)]; 131 | out[int(outPos++)] = _encodeChars[int((c & 0x03) << 4)]; 132 | out[int(outPos++)] = 61; 133 | out[int(outPos++)] = 61; 134 | } else if (r == 2) { //Need one "=" padding 135 | c = data[int(i++)] << 8 | data[int(i)]; 136 | 137 | out[int(outPos++)] = _encodeChars[int(c >>> 10)]; 138 | out[int(outPos++)] = _encodeChars[int(c >>> 4 & 0x3f)]; 139 | out[int(outPos++)] = _encodeChars[int((c & 0x0f) << 2)]; 140 | out[int(outPos++)] = 61; 141 | } 142 | 143 | return out.readUTFBytes(out.length); 144 | } 145 | 146 | public static function InitEncoreChar():Vector. { 147 | var encodeChars:Vector. = new Vector.(64, true); 148 | 149 | // We could push the number directly 150 | // but I think it's nice to see the characters (with no overhead on encode/decode) 151 | var chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 152 | for (var i:int = 0; i < 64; i++) { 153 | encodeChars[i] = chars.charCodeAt(i); 154 | } 155 | 156 | return encodeChars; 157 | } 158 | 159 | ]]> 160 | 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /docs/css/bootstrap-responsive.min.css: -------------------------------------------------------------------------------- 1 | .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} 2 | .clearfix:after{clear:both;} 3 | .hidden{display:none;visibility:hidden;} 4 | @media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:767px){.container{width:auto;padding:0 20px;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .span1{width:42px;} .span2{width:104px;} .span3{width:166px;} .span4{width:228px;} .span5{width:290px;} .span6{width:352px;} .span7{width:414px;} .span8{width:476px;} .span9{width:538px;} .span10{width:600px;} .span11{width:662px;} .span12,.container{width:724px;} .offset1{margin-left:82px;} .offset2{margin-left:144px;} .offset3{margin-left:206px;} .offset4{margin-left:268px;} .offset5{margin-left:330px;} .offset6{margin-left:392px;} .offset7{margin-left:454px;} .offset8{margin-left:516px;} .offset9{margin-left:578px;} .offset10{margin-left:640px;} .offset11{margin-left:702px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid>.span1{width:5.801104972%;} .row-fluid>.span2{width:14.364640883%;} .row-fluid>.span3{width:22.928176794%;} .row-fluid>.span4{width:31.491712705%;} .row-fluid>.span5{width:40.055248616%;} .row-fluid>.span6{width:48.618784527%;} .row-fluid>.span7{width:57.182320438000005%;} .row-fluid>.span8{width:65.74585634900001%;} .row-fluid>.span9{width:74.30939226%;} .row-fluid>.span10{width:82.87292817100001%;} .row-fluid>.span11{width:91.436464082%;} .row-fluid>.span12{width:99.999999993%;} input.span1,textarea.span1,.uneditable-input.span1{width:32px;} input.span2,textarea.span2,.uneditable-input.span2{width:94px;} input.span3,textarea.span3,.uneditable-input.span3{width:156px;} input.span4,textarea.span4,.uneditable-input.span4{width:218px;} input.span5,textarea.span5,.uneditable-input.span5{width:280px;} input.span6,textarea.span6,.uneditable-input.span6{width:342px;} input.span7,textarea.span7,.uneditable-input.span7{width:404px;} input.span8,textarea.span8,.uneditable-input.span8{width:466px;} input.span9,textarea.span9,.uneditable-input.span9{width:528px;} input.span10,textarea.span10,.uneditable-input.span10{width:590px;} input.span11,textarea.span11,.uneditable-input.span11{width:652px;} input.span12,textarea.span12,.uneditable-input.span12{width:714px;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav .nav-header{color:#999999;text-shadow:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .span1{width:70px;} .span2{width:170px;} .span3{width:270px;} .span4{width:370px;} .span5{width:470px;} .span6{width:570px;} .span7{width:670px;} .span8{width:770px;} .span9{width:870px;} .span10{width:970px;} .span11{width:1070px;} .span12,.container{width:1170px;} .offset1{margin-left:130px;} .offset2{margin-left:230px;} .offset3{margin-left:330px;} .offset4{margin-left:430px;} .offset5{margin-left:530px;} .offset6{margin-left:630px;} .offset7{margin-left:730px;} .offset8{margin-left:830px;} .offset9{margin-left:930px;} .offset10{margin-left:1030px;} .offset11{margin-left:1130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid>.span1{width:5.982905983%;} .row-fluid>.span2{width:14.529914530000001%;} .row-fluid>.span3{width:23.076923077%;} .row-fluid>.span4{width:31.623931624%;} .row-fluid>.span5{width:40.170940171000005%;} .row-fluid>.span6{width:48.717948718%;} .row-fluid>.span7{width:57.264957265%;} .row-fluid>.span8{width:65.81196581200001%;} .row-fluid>.span9{width:74.358974359%;} .row-fluid>.span10{width:82.905982906%;} .row-fluid>.span11{width:91.45299145300001%;} .row-fluid>.span12{width:100%;} input.span1,textarea.span1,.uneditable-input.span1{width:60px;} input.span2,textarea.span2,.uneditable-input.span2{width:160px;} input.span3,textarea.span3,.uneditable-input.span3{width:260px;} input.span4,textarea.span4,.uneditable-input.span4{width:360px;} input.span5,textarea.span5,.uneditable-input.span5{width:460px;} input.span6,textarea.span6,.uneditable-input.span6{width:560px;} input.span7,textarea.span7,.uneditable-input.span7{width:660px;} input.span8,textarea.span8,.uneditable-input.span8{width:760px;} input.span9,textarea.span9,.uneditable-input.span9{width:860px;} input.span10,textarea.span10,.uneditable-input.span10{width:960px;} input.span11,textarea.span11,.uneditable-input.span11{width:1060px;} input.span12,textarea.span12,.uneditable-input.span12{width:1160px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} 5 | -------------------------------------------------------------------------------- /jsdoc_template/static/css/bootstrap-responsive.min.css: -------------------------------------------------------------------------------- 1 | .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} 2 | .clearfix:after{clear:both;} 3 | .hidden{display:none;visibility:hidden;} 4 | @media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:767px){.container{width:auto;padding:0 20px;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .span1{width:42px;} .span2{width:104px;} .span3{width:166px;} .span4{width:228px;} .span5{width:290px;} .span6{width:352px;} .span7{width:414px;} .span8{width:476px;} .span9{width:538px;} .span10{width:600px;} .span11{width:662px;} .span12,.container{width:724px;} .offset1{margin-left:82px;} .offset2{margin-left:144px;} .offset3{margin-left:206px;} .offset4{margin-left:268px;} .offset5{margin-left:330px;} .offset6{margin-left:392px;} .offset7{margin-left:454px;} .offset8{margin-left:516px;} .offset9{margin-left:578px;} .offset10{margin-left:640px;} .offset11{margin-left:702px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid>.span1{width:5.801104972%;} .row-fluid>.span2{width:14.364640883%;} .row-fluid>.span3{width:22.928176794%;} .row-fluid>.span4{width:31.491712705%;} .row-fluid>.span5{width:40.055248616%;} .row-fluid>.span6{width:48.618784527%;} .row-fluid>.span7{width:57.182320438000005%;} .row-fluid>.span8{width:65.74585634900001%;} .row-fluid>.span9{width:74.30939226%;} .row-fluid>.span10{width:82.87292817100001%;} .row-fluid>.span11{width:91.436464082%;} .row-fluid>.span12{width:99.999999993%;} input.span1,textarea.span1,.uneditable-input.span1{width:32px;} input.span2,textarea.span2,.uneditable-input.span2{width:94px;} input.span3,textarea.span3,.uneditable-input.span3{width:156px;} input.span4,textarea.span4,.uneditable-input.span4{width:218px;} input.span5,textarea.span5,.uneditable-input.span5{width:280px;} input.span6,textarea.span6,.uneditable-input.span6{width:342px;} input.span7,textarea.span7,.uneditable-input.span7{width:404px;} input.span8,textarea.span8,.uneditable-input.span8{width:466px;} input.span9,textarea.span9,.uneditable-input.span9{width:528px;} input.span10,textarea.span10,.uneditable-input.span10{width:590px;} input.span11,textarea.span11,.uneditable-input.span11{width:652px;} input.span12,textarea.span12,.uneditable-input.span12{width:714px;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav .nav-header{color:#999999;text-shadow:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .span1{width:70px;} .span2{width:170px;} .span3{width:270px;} .span4{width:370px;} .span5{width:470px;} .span6{width:570px;} .span7{width:670px;} .span8{width:770px;} .span9{width:870px;} .span10{width:970px;} .span11{width:1070px;} .span12,.container{width:1170px;} .offset1{margin-left:130px;} .offset2{margin-left:230px;} .offset3{margin-left:330px;} .offset4{margin-left:430px;} .offset5{margin-left:530px;} .offset6{margin-left:630px;} .offset7{margin-left:730px;} .offset8{margin-left:830px;} .offset9{margin-left:930px;} .offset10{margin-left:1030px;} .offset11{margin-left:1130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid>.span1{width:5.982905983%;} .row-fluid>.span2{width:14.529914530000001%;} .row-fluid>.span3{width:23.076923077%;} .row-fluid>.span4{width:31.623931624%;} .row-fluid>.span5{width:40.170940171000005%;} .row-fluid>.span6{width:48.717948718%;} .row-fluid>.span7{width:57.264957265%;} .row-fluid>.span8{width:65.81196581200001%;} .row-fluid>.span9{width:74.358974359%;} .row-fluid>.span10{width:82.905982906%;} .row-fluid>.span11{width:91.45299145300001%;} .row-fluid>.span12{width:100%;} input.span1,textarea.span1,.uneditable-input.span1{width:60px;} input.span2,textarea.span2,.uneditable-input.span2{width:160px;} input.span3,textarea.span3,.uneditable-input.span3{width:260px;} input.span4,textarea.span4,.uneditable-input.span4{width:360px;} input.span5,textarea.span5,.uneditable-input.span5{width:460px;} input.span6,textarea.span6,.uneditable-input.span6{width:560px;} input.span7,textarea.span7,.uneditable-input.span7{width:660px;} input.span8,textarea.span8,.uneditable-input.span8{width:760px;} input.span9,textarea.span9,.uneditable-input.span9{width:860px;} input.span10,textarea.span10,.uneditable-input.span10{width:960px;} input.span11,textarea.span11,.uneditable-input.span11{width:1060px;} input.span12,textarea.span12,.uneditable-input.span12{width:1160px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} 5 | -------------------------------------------------------------------------------- /2.0/swfobject/swfobject.js: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.2 2 | is released under the MIT License 3 | */ 4 | var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab 2 | is released under the MIT License 3 | */ 4 | var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab 2 | is released under the MIT License 3 | */ 4 | var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab 2 | is released under the MIT License 3 | */ 4 | var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab 2 | is released under the MIT License 3 | */ 4 | var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab