first commit
This commit is contained in:
commit
a60faa1cbd
21
.gitignore
vendored
Normal file
21
.gitignore
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw*
|
31
index.html
Normal file
31
index.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<link rel="stylesheet" type="text/css" href="../src/style/style.css" />
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>webpack demo</title>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id='app'>
|
||||
<table id='table'></table>
|
||||
<div class='sidebar'>
|
||||
<label>列数</label> <input id='totalCol' type="text" value=10> <br>
|
||||
<label>行数</label> <input id='totalRow' type="text" value=10>
|
||||
<button id='submitRowCol'>创建表格</button>
|
||||
<div id='cellInfo'>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
</html>
|
5217
package-lock.json
generated
Normal file
5217
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
24
package.json
Normal file
24
package.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "excel-practice",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"dev": "webpack --mode development",
|
||||
"build": "webpack --mode production"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"webpack": "^4.20.2",
|
||||
"webpack-cli": "^3.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.1.2",
|
||||
"@babel/preset-env": "^7.1.0",
|
||||
"ts-loader": "^5.2.1",
|
||||
"typescript": "^3.1.3"
|
||||
}
|
||||
}
|
103
src/script/classes.ts
Normal file
103
src/script/classes.ts
Normal file
@ -0,0 +1,103 @@
|
||||
class Table {
|
||||
rowLength: number;
|
||||
columnLength: number;
|
||||
selectedRow: string;
|
||||
selectedCell: string;
|
||||
constructor(rowLength: number, columnLength: number) {
|
||||
this.rowLength = rowLength;
|
||||
this.columnLength = columnLength;
|
||||
this.selectedRow;
|
||||
this.selectedCell;
|
||||
}
|
||||
render(cell) {
|
||||
// clear children elements
|
||||
var myNode = document.getElementById("table");
|
||||
while (myNode.firstChild) {
|
||||
myNode.removeChild(myNode.firstChild);
|
||||
}
|
||||
// loop through rowlength and collentgh
|
||||
for (var i = 0; i < this.rowLength; i++) {
|
||||
var table: HTMLTableElement = <HTMLTableElement>(
|
||||
document.getElementById("table")
|
||||
);
|
||||
var row = table.insertRow(-1);
|
||||
|
||||
for (var j = 0; j < this.columnLength; j++) {
|
||||
var letter = String.fromCharCode("A".charCodeAt(0) + j - 1);
|
||||
const instanceOfCell = new cell(letter + i);
|
||||
const newCell = row.insertCell(-1);
|
||||
|
||||
newCell.addEventListener("click", () => {
|
||||
console.log(instanceOfCell);
|
||||
this.showCellDetails(instanceOfCell);
|
||||
});
|
||||
|
||||
i && j
|
||||
? ((newCell.colSpan = cell.colspan), (newCell.innerHTML = letter + i))
|
||||
: (newCell.innerHTML = i.toString() || letter);
|
||||
}
|
||||
}
|
||||
}
|
||||
showCellDetails(instanceOfCell) {
|
||||
var cellInfoElement = document.getElementById("cellInfo");
|
||||
while (cellInfoElement.firstChild) {
|
||||
cellInfoElement.removeChild(cellInfoElement.firstChild);
|
||||
}
|
||||
const cellUlElement = document.createElement("ul");
|
||||
|
||||
for (const key in instanceOfCell) {
|
||||
if (instanceOfCell.hasOwnProperty(key)) {
|
||||
const cellLiElement = document.createElement("li");
|
||||
const cellLableElement = document.createElement("label");
|
||||
const cellInputElement = document.createElement("input");
|
||||
cellInputElement.setAttribute("id", instanceOfCell.cellId);
|
||||
const cellButtonElement = document.createElement("button");
|
||||
cellButtonElement.innerHTML = "确定";
|
||||
// cellButtonElement.onclick = function() {
|
||||
// const test: HTMLTableElement = <HTMLTableElement>(
|
||||
// document.getElementById(instanceOfCell.cellId)
|
||||
// );
|
||||
// instanceOfCell[key] = test.value;
|
||||
// console.log(instanceOfCell);
|
||||
// };
|
||||
|
||||
cellLableElement.innerHTML = key;
|
||||
cellInputElement.setAttribute("value", instanceOfCell[key]);
|
||||
|
||||
cellLiElement.appendChild(cellLableElement);
|
||||
cellLiElement.appendChild(cellInputElement);
|
||||
cellLiElement.appendChild(cellButtonElement);
|
||||
cellUlElement.appendChild(cellLiElement);
|
||||
}
|
||||
}
|
||||
cellInfoElement.appendChild(cellUlElement);
|
||||
}
|
||||
changeCellDetails(instanceOfCell) {}
|
||||
}
|
||||
class Cell {
|
||||
cellId: string;
|
||||
border: number;
|
||||
color: string;
|
||||
width: number;
|
||||
colspan: number;
|
||||
|
||||
constructor(id) {
|
||||
this.cellId = id;
|
||||
this.border = 1;
|
||||
this.color = "grey";
|
||||
this.width = 80;
|
||||
this.colspan = 1;
|
||||
}
|
||||
|
||||
setColor(newColor: string) {
|
||||
this.color = newColor;
|
||||
}
|
||||
setBorder(newBorder: number) {
|
||||
this.border = newBorder;
|
||||
}
|
||||
setWidth(newWidth: number) {
|
||||
this.width = newWidth;
|
||||
}
|
||||
}
|
||||
|
||||
export { Table, Cell };
|
16
src/script/main.ts
Normal file
16
src/script/main.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { Table, Cell } from "./classes";
|
||||
|
||||
const submit = document.getElementById("submitRowCol");
|
||||
|
||||
submit.addEventListener(
|
||||
"click",
|
||||
function initialTable() {
|
||||
const rowElement = <HTMLInputElement>document.getElementById("totalRow");
|
||||
const totalRow = Number(rowElement.value);
|
||||
const colElement = <HTMLInputElement>document.getElementById("totalCol");
|
||||
const totalCol = Number(colElement.value);
|
||||
const table = new Table(totalRow, totalCol);
|
||||
table.render(Cell);
|
||||
},
|
||||
false
|
||||
);
|
58
src/style/style.css
Normal file
58
src/style/style.css
Normal file
@ -0,0 +1,58 @@
|
||||
#app {
|
||||
display: flex;
|
||||
}
|
||||
#table {
|
||||
width: 80%;
|
||||
}
|
||||
.sidebar {
|
||||
width: 20%;
|
||||
height: 100vh;
|
||||
background-color: lightgray;
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
li:before {
|
||||
content: "✓ ";
|
||||
}
|
||||
|
||||
input {
|
||||
border: none;
|
||||
width: 80px;
|
||||
font-size: 14px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
td:hover {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
td:focus {
|
||||
background-color: #ccf;
|
||||
}
|
||||
|
||||
input:not(:focus) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td {
|
||||
border: 1px solid #999;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
tr:first-child td,
|
||||
td:first-child {
|
||||
background-color: #ccc;
|
||||
padding: 1px 3px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer {
|
||||
font-size: 80%;
|
||||
}
|
5
tsconfig.json
Normal file
5
tsconfig.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"sourceMap": true
|
||||
}
|
||||
}
|
31
webpack.config.js
Normal file
31
webpack.config.js
Normal file
@ -0,0 +1,31 @@
|
||||
var path = require("path")
|
||||
var htmlWebpackPlugin = require('html-webpack-plugin')
|
||||
module.exports={
|
||||
entry:{
|
||||
main:'./src/script/main.ts',
|
||||
},
|
||||
output:{
|
||||
|
||||
filename:'js/[name].js',
|
||||
path: path.resolve(__dirname, './dist'),
|
||||
// publicPath:'http://www.qq.com'
|
||||
},
|
||||
resolve: {
|
||||
extensions: [".ts", ".tsx", ".js"]
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
|
||||
{ test: /\.tsx?$/, loader: "ts-loader" }
|
||||
]
|
||||
},
|
||||
plugins:[
|
||||
new htmlWebpackPlugin(
|
||||
{ filename:'index.html',
|
||||
template:'index.html',
|
||||
|
||||
}
|
||||
)
|
||||
]
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user