2 Star 0 Fork 0

mirrors_jprichardson/ethercalc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
start.html 8.51 KB
一键复制 编辑 原始数据 按行查看 历史
<!DOCTYPE html>
<html manifest="manifest.appcache">
<head>
<title>EtherCalc</title>
<meta charset="utf-8" />
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<script>try { window.history.pushState({}, '', './') } catch (e) {}</script>
<link href="./static/start.css" rel="stylesheet" type="text/css">
</head>
<body id="framedpagebody" class="home">
<div id="top">
<div id="topnav_wrap">
<div id="navigation"></div>
</div>
<div id="intro-left">
<h1>EtherCalc</h1>
<h2><a target="_blank" style="border: none" title="Read the story of this project" href="https://ethercalc.net/">EtherCalc is a web spreadsheet.</a></h2>
<p>Your data is saved on the web, and people can edit the same document at the same time. Everybody's changes are instantly reflected on all screens.</p>
<p>Work together on inventories, survey forms, list management, brainstorming sessions and more!</p>
<div id="intro-links">
<a id="newpadbutton" href="./_new" alt="Create Spreadsheet"><span>Create Spreadsheet</span><br>
<small>No sign-up, start editing instantly</small></a>
</div>
</div>
</div>
<a href="https://github.com/audreyt/ethercalc"><img style="z-order: 9999;
position: absolute; top: 0; right: 0; border: 0"
src="./static/img/right-graphite@2x.png" alt="Fork me on GitHub"
width="120" height="120"></a>
<script src="./static/jszip.js"></script>
<script src="./static/xlsx.js"></script>
<script src="./static/shim.js"></script>
<script src="./static/jquery.js"></script>
<div id="drop">Drop a CSV or an Excel XML (.xlsx) file here to import it</div>
<style>
#drop {
display: block;
clear: both;
margin-top: 40px;
background: #eee;
border:2px dashed #bbb;
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
padding:20px;
text-align:center;
font:20pt bold,"Vollkorn";color:#bbb
}
</style>
<script>
var rABS = typeof FileReader !== "undefined" && typeof FileReader.prototype !== "undefined" && typeof FileReader.prototype.readAsBinaryString !== "undefined";
function fixdata(data) {
var o = "", l = 0, w = 10240;
for(; l<data.byteLength/w; ++l)
o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w)));
o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(o.length)));
return o;
}
function xlsxworker(data, cb) {
var worker = new Worker('./static/xlsxworker.js');
worker.onmessage = function(e) {
switch(e.data.t) {
case 'ready': break;
case 'e': console.error(e.data.d); break;
case 'xlsx': cb(JSON.parse(e.data.d)); break;
}
};
var arr = rABS ? data : btoa(fixdata(data));
worker.postMessage({d:arr,b:rABS});
}
function get_radio_value( radioName ) {
var radios = document.getElementsByName( radioName );
for( var i = 0; i < radios.length; i++ ) {
if( radios[i].checked ) {
return radios[i].value;
}
}
}
function to_csv(workbook) {
var result = [];
workbook.SheetNames.forEach(function(sheetName) {
var csv = XLSX.utils.sheet_to_csv(workbook.Sheets[sheetName]);
if(csv.length > 0){
result.push("SHEET: " + sheetName);
result.push("");
result = [];
result.push(csv);
}
});
return result.join("\n").replace(/,+\n/g, '\n').replace(/[\s]+$/, '\n');
}
/* xlsx2socialcalc.js (C) 2014 SheetJS -- http://sheetjs.com */
/* License: Apache 2.0 */
/* vim: set ts=2: */
var sheet_to_socialcalc = (function() {
var header = [
"socialcalc:version:1.5",
"MIME-Version: 1.0",
"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave"
].join("\n");
var sep = [
"--SocialCalcSpreadsheetControlSave",
"Content-type: text/plain; charset=UTF-8",
""
].join("\n");
/* TODO: the other parts */
var meta = [
"# SocialCalc Spreadsheet Control Save",
"part:sheet"
].join("\n");
var end = "--SocialCalcSpreadsheetControlSave--";
var scencode = function(s) { return s.replace(/\\/g, "\\b").replace(/:/g, "\\c").replace(/\n/g,"\\n"); }
var scsave = function scsave(ws) {
if(!ws || !ws['!ref']) return "";
var o = [], oo = [], cell, coord;
var r = XLSX.utils.decode_range(ws['!ref']);
for(var R = r.s.r; R <= r.e.r; ++R) {
for(var C = r.s.c; C <= r.e.c; ++C) {
coord = XLSX.utils.encode_cell({r:R,c:C});
if(!(cell = ws[coord]) || cell.v == null) continue;
oo = ["cell", coord, 't'];
switch(cell.t) {
case 's': case 'str': oo.push(scencode(cell.v)); break;
case 'n':
if(cell.f) {
oo[2] = 'vtf';
oo.push('n');
oo.push(cell.v);
oo.push(scencode(cell.f));
}
else {
oo[2] = 'v';
oo.push(cell.v);
} break;
}
o.push(oo.join(":"));
}
}
o.push("sheet:c:" + (r.e.c - r.s.c + 1) + ":r:" + (r.e.r - r.s.r + 1) + ":tvf:1");
o.push("valueformat:1:text-wiki");
o.push("copiedfrom:" + ws['!ref']);
return o.join("\n");
};
return function socialcalcify(ws, opts) {
return [header, sep, meta, sep, scsave(ws), end].join("\n");
//return ["version:1.5", scsave(ws)].join("\n");
};
})();
var tarea = document.getElementById('b64data');
function b64it() {
var wb = XLSX.read(tarea.value, {type: 'base64'});
process_wb(wb);
}
function process_wb(wb) {
var output = "";
output = sheet_to_socialcalc(wb.Sheets[wb.SheetNames[0]]);
var id = newId(10, 36).toLowerCase();
$.ajax({
url: '/_/' + id,
method: 'PUT',
contentType: 'text/x-socialcalc',
processData: false,
data: output,
success: function(data, msg, xhr) {
location.href = '/' + id
}
});
}
function post_csv (csv) {
var id = newId(10, 36).toLowerCase();
$.ajax({
url: '/_/' + id,
method: 'PUT',
contentType: 'text/csv',
processData: false,
data: csv,
success: function(data, msg, xhr) {
location.href = '/' + id
}
});
}
var BASE64URICHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('');
function newId (len, radix) {
var chars = BASE64URICHARS, newId = [], i=0;
radix = radix || chars.length;
len = len || 22;
for (i = 0; i < len; i++) newId[i] = chars[0 | Math.random()*radix];
return newId.join('');
};
var drop = document.getElementById('drop');
function handleDrop(e) {
e.stopPropagation();
e.preventDefault();
var toggle = function(){
$(drop).fadeOut('fast', function(){ $(drop).fadeIn('fast', toggle) });
}
var files = e.dataTransfer.files;
var i,f;
for (i = 0, f = files[i]; i != files.length; ++i) {
var reader = new FileReader();
var name = f.name;
reader.onload = function(e) {
var data = e.target.result;
if (!/^PK\u0003\u0004/.test(data) && /^[^\n]+,(?:[^\n]+)*\n/.test(data)) {
return post_csv(data);
}
if(typeof Worker !== 'undefined') {
xlsxworker(data, process_wb);
} else {
var wb;
if(rABS) {
wb = XLSX.read(data, {type: 'binary'});
} else {
var arr = fixdata(data);
wb = XLSX.read(btoa(arr), {type: 'base64'});
}
process_wb(wb);
}
};
if(rABS) reader.readAsBinaryString(f);
else reader.readAsArrayBuffer(f);
}
}
function handleDragover(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy';
}
if(drop.addEventListener) {
drop.addEventListener('dragenter', handleDragover, false);
drop.addEventListener('dragover', handleDragover, false);
drop.addEventListener('drop', handleDrop, false);
}
</script>
</body>
</html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors_jprichardson/ethercalc.git
git@gitee.com:mirrors_jprichardson/ethercalc.git
mirrors_jprichardson
ethercalc
ethercalc
master

搜索帮助