diff --git a/docs/zh/guide/contribute.md b/docs/zh/guide/contribute.md index 7bf7071..c007708 100644 --- a/docs/zh/guide/contribute.md +++ b/docs/zh/guide/contribute.md @@ -49,70 +49,71 @@ ## 如何提交代码 -1. fork 到自己的仓库 +1. fork 到自己的仓库 -进入  [Luckysheet](https://github.com/mengshukeji/Luckysheet)  的Github页面 ,点击右上角按钮 Fork 进行 Fork。 +进入  [Luckysheet](https://github.com/mengshukeji/Luckysheet)  的Github页面 ,点击右上角按钮 Fork 进行 Fork。 -2. git clone 到本地 +2. git clone 到本地 ```shell -git clone https://github.com//Luckysheet.git +git clone https://github.com//Luckysheet.git ``` -3. 上游建立连接 +3. 上游建立连接 ```shell + cd Luckysheet -git remote add upstream https://github.com/mengshukeji/Luckysheet.git +git remote add upstream https://github.com/mengshukeji/Luckysheet.git ``` -4. 检查远程仓库设置 +4. 创建开发分支 + +```shell +git checkout -b dev +``` + +5. 修改提交代码 ```shell -git remote -v -origin https://github.com//Luckysheet.git (fetch) -origin https://github.com//Luckysheet.git (push) -upstream https://github.com/mengshukeji/Luckysheet.git (fetch) -upstream https://github.com/mengshukeji/Luckysheet.git (push) +git add .  +npm run commit +git push origin dev ``` -5. 获取 Luckysheet 仓库代码,并更新本地master分支代码为最新 +6. 同步代码,将最新代码同步到本地 ```shell -git fetch upstream -git pull upstream master +git fetch upstream  +git rebase upstream/master ``` -6. 新建分支 +7. 如果有冲突(没有可以忽略) -一般以issue id作为分支名,如:Luckysheet-123 ```shell -git checkout -b Luckysheet-123 +git status # 查看冲突文件,并修改冲突 +git add . +git rebase --continue ``` -**确保分支Luckysheet-123是基于官方master分支的最新代码** -分支创建完成后即可进行代码更改。 +提交git rebase --continue命令的时候,如果弹出vim提示编辑commit信息,则可以添加你的修改,然后保存退出 +vim命令请参考vim链接https://www.runoob.com/linux/linux-vim.html -7. 提交代码到远程分支 +8. 提交分支代码 -我们使用Angular规范来提交commit信息。 -> 参考阅读[Git commit message 规范](https://juejin.im/post/6844903871832145927) +```shell +git push origin dev +``` -commit 信息的格式必须与Issue标题保持一致且以[issue id]开头,即:[Luckysheet-123] xxx +如果提示需要先pull 可以先拉取在提交 ```shell -npm run commit -git push origin Luckysheet-123 +git pull origin dev +git push origin dev ``` -8. 提交PR - - * 打开自己的github仓库页面,如:`https://github.com//Luckysheet` - * 切换分支,切换到提交的分支 `Luckysheet-123` - * 创建新PR,点击 `New pull request`或者`Compare & pull request` - * 点击Create pull request按钮进行创建PR - - ### 提交PR需要注意以下几点: - 1. PR的标题必须以issue id开头,最好与commit信息保持一致 - 2. 可以填写部分描述信息也可以不填 - 3. 如果点击`Create pull request`后提示代码冲突,则请将`Luckysheet-123`分支的代码 与master分支同步一致后在进行提交 +若弹出vim提示编辑commit信息,可以直接通过vim命令退出 +> vim命令请参考阅读[vim](https://www.runoob.com/linux/linux-vim.html) + +9. 提交pr +去自己github仓库对应fork的项目,切换到刚刚创建修改的分支,点击new pull request,并添加上对应的描述,最后点击Create pull request进行提交 ## 代码规范 diff --git a/gulpfile.js b/gulpfile.js index 52fdb75..9906bbd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -26,6 +26,7 @@ const commonjs = require('@rollup/plugin-commonjs'); const terser = require('rollup-plugin-terser').terser; // rollup babel plugin, support the latest ES grammar const babel = require('@rollup/plugin-babel').default; +// const gulpBabel = require('gulp-babel'); // Distinguish development and production environments const production = process.env.NODE_ENV === 'production' ? true : false; @@ -247,6 +248,10 @@ function copyStaticExpendPlugins(){ function copyStaticDemoData(){ return src(paths.staticDemoData) .pipe(dest(paths.destStaticDemoData)); + // .pipe(gulpBabel({ + // presets: ['@babel/env'] + // })) + // .pipe(gulp.dest('dist')); } function copyStaticCssImages(){ return src(paths.staticCssImages) diff --git a/package.json b/package.json index 2854ada..a9385a7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "module": "dist/luckysheet.esm.js", "browser": "dist/luckysheet.umd.js", "devDependencies": { - "@babel/preset-env": "^7.10.2", + "@babel/core": "^7.12.3", + "@babel/preset-env": "^7.12.1", "@babel/runtime-corejs3": "^7.12.1", "@commitlint/cli": "^9.1.1", "@commitlint/config-conventional": "^9.1.1", @@ -17,6 +18,7 @@ "cross-env": "^7.0.2", "delete": "^1.1.0", "gulp": "^4.0.2", + "gulp-babel": "^8.0.0", "gulp-clean-css": "^4.3.0", "gulp-concat": "^2.6.1", "gulp-if": "^3.0.0", diff --git a/src/controllers/handler.js b/src/controllers/handler.js index a5ff0f6..f44c8e1 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -2356,7 +2356,7 @@ export default function luckysheetHandler() { col = col_location[1], col_pre = col_location[0], col_index = col_location[2]; - + if ((x + 3) - Store.luckysheet_cols_change_size_start[0] > 30 && x < winW + scrollLeft - 100) { $("#luckysheet-change-size-line").css({ "left": x }); $("#luckysheet-cols-change-size").css({ "left": x - 2 }); diff --git a/src/controllers/imageCtrl.js b/src/controllers/imageCtrl.js index fcc9485..4d64a9d 100644 --- a/src/controllers/imageCtrl.js +++ b/src/controllers/imageCtrl.js @@ -51,7 +51,7 @@ const imageCtrl = { copyImgItemObj: null, inserImg: function(src){ let _this = this; - + let rowIndex = Store.luckysheet_select_save[0].row_focus || 0; let colIndex = Store.luckysheet_select_save[0].column_focus || 0; let left = colIndex == 0 ? 0 : Store.visibledatacolumn[colIndex - 1]; diff --git a/src/controllers/server.js b/src/controllers/server.js index d2f50a3..6075c48 100644 --- a/src/controllers/server.js +++ b/src/controllers/server.js @@ -12,6 +12,7 @@ import { getSheetIndex } from '../methods/get'; import Store from '../store'; import locale from '../locale/locale'; import dayjs from "dayjs"; +import imageCtrl from './imageCtrl'; const server = { gridKey: null, @@ -163,16 +164,21 @@ const server = { //客户端接收服务端数据时触发 _this.websocket.onmessage = function(result){ - let data = eval('(' + result.data + ')'); - console.info(data); - let type = data.type; - + Store.result = result + let data = eval('(' + result.data + ')'); + console.info(data); + let type = data.type; + let {message,id} = data; + // 用户退出时,关闭协同编辑时其提示框 + if(message === '用户退出') { + $("#luckysheet-multipleRange-show-" + id).hide(); + } if(type == 1){ //send 成功或失败 } else if(type == 2){ //更新数据 let item = JSON.parse(data.data); - _this.wsUpdateMsg(item); + _this.wsUpdateMsg(item); } else if(type == 3){ //多人操作不同选区("t": "mv")(用不同颜色显示其他人所操作的选区) let id = data.id; diff --git a/src/controllers/sheetBar.js b/src/controllers/sheetBar.js index a3659fd..897813e 100644 --- a/src/controllers/sheetBar.js +++ b/src/controllers/sheetBar.js @@ -206,6 +206,8 @@ export function initialSheetBar(){ let $t = $(this), $cur = $(e.target); luckysheetsheetrightclick($t, $cur, e); + let result = Store.result + server.websocket.onmessage(result) }); let luckysheetsheetnameeditor = function ($t) { diff --git a/src/demoData/demoFeature.js b/src/demoData/demoFeature.js index db3a8e5..a5746cb 100644 --- a/src/demoData/demoFeature.js +++ b/src/demoData/demoFeature.js @@ -17,7 +17,7 @@ const text = language() === 'zh' ? '反馈' : 'Forum'; const link = language() === 'zh' ? 'https://support.qq.com/product/288322' : 'https://groups.google.com/g/luckysheet'; - document.querySelector("body").insertAdjacentHTML('beforeend', `${text}`); + document.querySelector("body").insertAdjacentHTML('beforeend', ''+ text +''); } supportButton() diff --git a/src/demoData/sheetCell.js b/src/demoData/sheetCell.js index b20bd91..5adcea3 100644 --- a/src/demoData/sheetCell.js +++ b/src/demoData/sheetCell.js @@ -1,4 +1,4 @@ -const sheetCell = { +window.sheetCell = { "name": "Cell", "config": { "merge": { @@ -1575,4 +1575,4 @@ const sheetCell = { "scrollLeft": 0, "scrollTop": 0 } -export default sheetCell \ No newline at end of file +// export default sheetCell \ No newline at end of file diff --git a/src/demoData/sheetChart.js b/src/demoData/sheetChart.js index a95e636..4d10493 100644 --- a/src/demoData/sheetChart.js +++ b/src/demoData/sheetChart.js @@ -1,4 +1,4 @@ -const sheetChart = { +window.sheetChart = { "name": "Chart", "color": "", "status": 0, @@ -4915,4 +4915,4 @@ const sheetChart = { }] } -export default sheetChart \ No newline at end of file +// export default sheetChart \ No newline at end of file diff --git a/src/demoData/sheetComment.js b/src/demoData/sheetComment.js index 83f2c0c..326d9a9 100644 --- a/src/demoData/sheetComment.js +++ b/src/demoData/sheetComment.js @@ -1,4 +1,4 @@ -const sheetComment = { +window.sheetComment = { "name": "Comment", "color": "", "config": { @@ -64,4 +64,4 @@ const sheetComment = { "scrollTop": 0 } -export default sheetComment; \ No newline at end of file +// export default sheetComment; \ No newline at end of file diff --git a/src/demoData/sheetConditionFormat.js b/src/demoData/sheetConditionFormat.js index f4a1d02..e91f9b8 100644 --- a/src/demoData/sheetConditionFormat.js +++ b/src/demoData/sheetConditionFormat.js @@ -1,4 +1,4 @@ -const sheetConditionFormat = { +window.sheetConditionFormat = { "name": "Conditional Format", "color": "", "zoomRatio":1, @@ -6538,4 +6538,4 @@ const sheetConditionFormat = { }] } -export default sheetConditionFormat; \ No newline at end of file +// export default sheetConditionFormat; \ No newline at end of file diff --git a/src/demoData/sheetDataVerification.js b/src/demoData/sheetDataVerification.js index 903669f..ee93a91 100644 --- a/src/demoData/sheetDataVerification.js +++ b/src/demoData/sheetDataVerification.js @@ -1,4 +1,4 @@ -const sheetDataVerification = { +window.sheetDataVerification = { "name": "Data Verification", "index": "Sheet_pdolzzie5xwi_1600927444446", "celldata": [{"r":0,"c":0,"v":{"ct":{"fa":"General","t":"g"},"m":"Drop Down List","v":"Drop Down List","bl":1}},{"r":0,"c":1,"v":{"m":"Checkbox","ct":{"fa":"General","t":"g"},"v":"Checkbox","bl":1}},{"r":0,"c":2,"v":{"ct":{"fa":"General","t":"g"},"v":"Number between 1-10","bl":1,"m":"Number between 1-10"}},{"r":0,"c":3,"v":{"m":"Text content include Luckysheet","ct":{"fa":"General","t":"g"},"v":"Text content include Luckysheet","bl":1}},{"r":0,"c":4,"v":{"ct":{"fa":"General","t":"g"},"v":"Text length between 1-5","m":"Text length between 1-5","bl":1}},{"r":0,"c":5,"v":{"m":"Date","ct":{"fa":"General","t":"g"},"v":"Date","bl":1}},{"r":0,"c":6,"v":{"m":"Identification Number","ct":{"fa":"General","t":"g"},"v":"Identification Number","bl":1}},{"r":0,"c":7,"v":{"m":"Phone Number","ct":{"fa":"General","t":"g"},"v":"Phone Number","bl":1}},{"r":1,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Fix","m":"Fix"}},{"r":1,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":1,"c":2,"v":{"v":1,"ct":{"fa":"General","t":"n"},"m":"1"}},{"r":1,"c":3,"v":{"m":"Luckysheet is good","ct":{"fa":"General","t":"g"},"v":"Luckysheet is good"}},{"r":1,"c":4,"v":{"m":"Welcome","ct":{"fa":"General","t":"g"},"v":"Welcome"}},{"r":1,"c":5,"v":{"m":"2020-09-24","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44098}},{"r":1,"c":6,"v":{"v":"311414199009138910","ct":{"fa":"@","t":"s"},"m":"311414199009138910"}},{"r":1,"c":7,"v":{"v":13678765439,"ct":{"fa":"General","t":"n"},"m":"13678765439"}},{"r":2,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Done","m":"Done"}},{"r":2,"c":1,"v":{"m":"Pass","ct":{"fa":"General","t":"g"},"v":"Pass"}},{"r":2,"c":2,"v":{"v":2,"ct":{"fa":"General","t":"n"},"m":"2"}},{"r":2,"c":3,"v":{"m":"I am Luckysheet","ct":{"fa":"General","t":"g"},"v":"I am Luckysheet"}},{"r":2,"c":4,"v":{"m":"Good","ct":{"fa":"General","t":"g"},"v":"Good"}},{"r":2,"c":5,"v":{"ct":{"fa":"General","t":"g"},"v":"Time","m":"Time"}},{"r":2,"c":6,"v":{"v":"31141419900913891","ct":{"fa":"@","t":"s"},"m":"31141419900913891"}},{"r":2,"c":7,"v":{"v":1367876544,"ct":{"fa":"General","t":"n"},"m":"1367876544"}},{"r":3,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Develop","m":"Develop"}},{"r":3,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":3,"c":2,"v":{"v":5,"ct":{"fa":"General","t":"n"},"m":"5"}},{"r":3,"c":3,"v":{"ct":{"fa":"General","t":"g"},"v":"I am luckyDemo","m":"I am luckyDemo"}},{"r":3,"c":4,"v":{"m":"Nice","ct":{"fa":"General","t":"g"},"v":"Nice"}},{"r":3,"c":5,"v":{"m":"2020-09-26","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44100}},{"r":3,"c":6,"v":{"v":"3114141990091389102","ct":{"fa":"@","t":"s"},"m":"3114141990091389102"}},{"r":3,"c":7,"v":{"v":136787654412,"ct":{"fa":"##0","t":"n"},"m":"136787654412"}},{"r":4,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Doing","m":"Doing"}},{"r":4,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":4,"c":2,"v":{"v":11,"ct":{"fa":"General","t":"n"},"m":"11"}},{"r":4,"c":3,"v":{"ct":{"fa":"General","t":"g"},"v":"Luckysheet Documentation","m":"Luckysheet Documentation"}},{"r":4,"c":4,"v":{"ct":{"fa":"General","t":"g"},"v":"Morning","m":"Morning"}},{"r":4,"c":5,"v":{"m":"2020-09-27","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44101}},{"r":4,"c":6,"v":{"v":"31141419900913891X","ct":{"fa":"@","t":"s"},"m":"31141419900913891X"}},{"r":4,"c":7,"v":{"v":49865342456,"ct":{"fa":"General","t":"n"},"m":"49865342456"}},{"r":5,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Develop","m":"Develop"}},{"r":5,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":5,"c":2,"v":{"v":3,"ct":{"fa":"General","t":"n"},"m":"3"}},{"r":5,"c":3,"v":{"m":"Luckyexcel","ct":{"fa":"General","t":"g"},"v":"Luckyexcel"}},{"r":5,"c":4,"v":{"ct":{"fa":"General","t":"g"},"v":"Tomorrow","m":"Tomorrow"}},{"r":5,"c":5,"v":{"ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44071,"m":"2020-08-28"}},{"r":5,"c":6,"v":{"v":"Number","ct":{"fa":"@","t":"s"},"m":"Number"}},{"r":5,"c":7,"v":{"v":"Number","ct":{"fa":"General","t":"g"},"m":"Number"}},{"r":6,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Done","m":"Done"}},{"r":6,"c":1,"v":{"m":"Pass","ct":{"fa":"General","t":"g"},"v":"Pass"}},{"r":6,"c":2,"v":{"v":0,"ct":{"fa":"General","t":"n"},"m":"0"}},{"r":6,"c":3,"v":{"m":"Luckysheet Online","ct":{"fa":"General","t":"g"},"v":"Luckysheet Online"}},{"r":6,"c":4,"v":{"m":"Three","ct":{"fa":"General","t":"g"},"v":"Three"}},{"r":6,"c":5,"v":{"m":"2020-09-29","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44103}},{"r":6,"c":6,"v":{"v":"311414199301118910","ct":{"fa":"@","t":"s"},"m":"311414199301118910"}},{"r":6,"c":7,"v":{"v":23309873564,"ct":{"fa":"General","t":"n"},"m":"23309873564"}},{"r":7,"c":8,"v":{"v":null,"ct":{"fa":"General","t":"g"},"bl":1}}], @@ -576,4 +576,4 @@ const sheetDataVerification = { } } } -export default sheetDataVerification; \ No newline at end of file +// export default sheetDataVerification; \ No newline at end of file diff --git a/src/demoData/sheetFormula.js b/src/demoData/sheetFormula.js index 4e85f6b..1f1ee36 100644 --- a/src/demoData/sheetFormula.js +++ b/src/demoData/sheetFormula.js @@ -1,4 +1,4 @@ -const sheetFormula = { + window.sheetFormula = { "name": "Formula", "color": "", "config": { @@ -6597,4 +6597,4 @@ const sheetFormula = { "frozen": {"type":"row"} } -export default sheetFormula \ No newline at end of file +// export default sheetFormula \ No newline at end of file diff --git a/src/demoData/sheetPicture.js b/src/demoData/sheetPicture.js index 5643a59..c328988 100644 --- a/src/demoData/sheetPicture.js +++ b/src/demoData/sheetPicture.js @@ -1,4 +1,4 @@ -const sheetPicture = { +window.sheetPicture = { "name": "Picture", "index": "Sheet_3e4oe25C757r_1600925108337", "celldata": [], @@ -156,4 +156,4 @@ const sheetPicture = { } } -export default sheetPicture; \ No newline at end of file +// export default sheetPicture; \ No newline at end of file diff --git a/src/demoData/sheetPivotTable.js b/src/demoData/sheetPivotTable.js index f3f7bd6..b938b41 100644 --- a/src/demoData/sheetPivotTable.js +++ b/src/demoData/sheetPivotTable.js @@ -1,4 +1,4 @@ -const sheetPivotTable = { +window.sheetPivotTable = { "name": "PivotTable", "color": "", "config": {}, @@ -186,4 +186,4 @@ const sheetPivotTable = { } } -export default sheetPivotTable; \ No newline at end of file +// export default sheetPivotTable; \ No newline at end of file diff --git a/src/demoData/sheetPivotTableData.js b/src/demoData/sheetPivotTableData.js index 3946ff9..3e3407c 100644 --- a/src/demoData/sheetPivotTableData.js +++ b/src/demoData/sheetPivotTableData.js @@ -1,4 +1,4 @@ -const sheetPivotTableData = { +window.sheetPivotTableData = { "name": "PivotTableData", "color": "", "config": { @@ -738,4 +738,4 @@ const sheetPivotTableData = { "scrollTop": 0 } -export default sheetPivotTableData; \ No newline at end of file +// export default sheetPivotTableData; \ No newline at end of file diff --git a/src/demoData/sheetSparkline.js b/src/demoData/sheetSparkline.js index aac8d65..031c445 100644 --- a/src/demoData/sheetSparkline.js +++ b/src/demoData/sheetSparkline.js @@ -1,4 +1,4 @@ -const sheetSparkline = { +window.sheetSparkline = { "name": "Sparkline", "color": "", "config": { @@ -7063,4 +7063,4 @@ const sheetSparkline = { "luckysheet_alternateformat_save": [] } -export default sheetSparkline; \ No newline at end of file +// export default sheetSparkline; \ No newline at end of file diff --git a/src/demoData/sheetTable.js b/src/demoData/sheetTable.js index 0623103..c3ba4ba 100644 --- a/src/demoData/sheetTable.js +++ b/src/demoData/sheetTable.js @@ -1,4 +1,4 @@ -const sheetTable = { +window.sheetTable = { "name": "Table", "color": "", "config": { @@ -1065,4 +1065,4 @@ const sheetTable = { }] } -export default sheetTable; \ No newline at end of file +// export default sheetTable; \ No newline at end of file diff --git a/src/index.html b/src/index.html index 42ca183..b34f5ce 100644 --- a/src/index.html +++ b/src/index.html @@ -21,25 +21,36 @@
- + + + + + + + + + + + + -