@@ -257,9 +261,16 @@ const dataVerificationCtrl = {
e.stopPropagation();
});
$(document).off("click.dropdownListItem").on("click.dropdownListItem", "#luckysheet-dataVerification-dropdown-List .dropdown-List-item", function(e) {
- $("#luckysheet-dataVerification-dropdown-List").hide();
-
+ var $item = $(this);
let value = e.target.innerText;
+ if ($item.hasClass('multi')) {
+ $item.toggleClass('checked');
+ value = $.map($("#luckysheet-dataVerification-dropdown-List").children().filter('.checked'), function(el) {
+ return el.innerText;
+ }).join(',');
+ } else {
+ $("#luckysheet-dataVerification-dropdown-List").hide();
+ }
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let rowIndex = last.row_focus;
let colIndex = last.column_focus;
@@ -437,6 +448,8 @@ const dataVerificationCtrl = {
}
$("#luckysheet-dataVerification-dialog .show-box-item-dropdown .data-verification-value1").val(value1);
+
+ $('#luckysheet-dataVerification-dialog #data-verification-multi').prop('checked', item.type2 ? true : false);
}
else if(value == 'checkbox'){
$("#luckysheet-dataVerification-dialog .show-box .show-box-item-checkbox").show();
@@ -635,6 +648,7 @@ const dataVerificationCtrl = {
tooltip.info('
', dvText.tooltipInfo1);
return;
}
+ type2 = $("#luckysheet-dataVerification-dialog #data-verification-multi").is(':checked');
}
else if(type == 'checkbox'){
value1 = $("#luckysheet-dataVerification-dialog .show-box-item-checkbox .data-verification-value1").val().trim();
@@ -839,6 +853,7 @@ const dataVerificationCtrl = {
if(item.type == 'dropdown'){
$("#luckysheet-dataVerification-dialog .show-box .show-box-item-dropdown").show();
$("#luckysheet-dataVerification-dialog .show-box-item-dropdown .data-verification-value1").val(item.value1);
+ $('#luckysheet-dataVerification-dialog #data-verification-multi').prop('checked', item.type2 ? true : false);
}
else if(item.type == 'checkbox'){
$("#luckysheet-dataVerification-dialog .show-box .show-box-item-checkbox").show();
@@ -1270,6 +1285,13 @@ const dataVerificationCtrl = {
if(type == 'dropdown'){
let list = _this.getDropdownList(value1);
+ // 多选的情况 检查每个都在下拉列表中
+ if(type2 && cellValue){
+ return cellValue.split(',').every(function (i) {
+ return list.indexOf(i) !== -1;
+ });
+ }
+
let result = false;
for(let i = 0; i < list.length; i++){
@@ -1464,9 +1486,19 @@ const dataVerificationCtrl = {
let list = _this.getDropdownList(item.value1);
let optionHtml = '';
- list.forEach(i => {
- optionHtml += `
${i}
`;
- })
+ if (item.type === 'dropdown' && item.type2) {
+ // 下拉多选的情况下 将已经选择的标出来
+ let cellValue = getcellvalue(rowIndex, colIndex, null);
+ let valueArr = isRealNull(cellValue) ? [] : cellValue.split(',');
+ list.forEach(i => {
+ let checked = valueArr.indexOf(i) !== -1;
+ optionHtml += `
${i}
`;
+ });
+ } else {
+ list.forEach(i => {
+ optionHtml += `
${i}
`;
+ });
+ }
$("#luckysheet-dataVerification-dropdown-List")
.html(optionHtml)
diff --git a/src/controllers/handler.js b/src/controllers/handler.js
index 1b1eba8..4c3adde 100644
--- a/src/controllers/handler.js
+++ b/src/controllers/handler.js
@@ -5326,7 +5326,7 @@ export default function luckysheetHandler() {
for(let c = copy_c1; c <= copy_c2; c++){
let cell = d[r][c];
-
+ let isInlineStr = false
if(cell != null && cell.mc != null && cell.mc.rs == null){
continue;
}
@@ -5344,13 +5344,27 @@ export default function luckysheetHandler() {
v = "";
}
+
+ if(v == null && d[r][c] && d[r][c].ct && d[r][c].ct.t == 'inlineStr') {
+ v = d[r][c].ct.s.map(val=>val.v).join('');
+ isInlineStr = true;
+ }
if(v == null){
- v = "";
+ v = "";
}
-
- if(cpDataArr[r - copy_r1][c - copy_c1] != v){
+ if(isInlineStr){
+ const cpData = $(cpDataArr[r - copy_r1][c - copy_c1]).text().replace(/\s|\n/g,' ')
+ const storeValue = v.replace(/\n/g,'').replace(/\s/g,' ')
+ if(cpData != storeValue){
+ isEqual = false;
+ break;
+ }
+ }
+ else{
+ if(cpDataArr[r - copy_r1][c - copy_c1] != v){
isEqual = false;
break;
+ }
}
}
}
diff --git a/src/controllers/luckysheetConfigsetting.js b/src/controllers/luckysheetConfigsetting.js
index c20c9c6..3d25d8e 100644
--- a/src/controllers/luckysheetConfigsetting.js
+++ b/src/controllers/luckysheetConfigsetting.js
@@ -22,12 +22,13 @@ const luckysheetConfigsetting = {
enableAddBackTop: true,
enablePage: true,
pageInfo: null,
-
-
+
+
editMode: false,
beforeCreateDom: null,
workbookCreateBefore: null,
workbookCreateAfter: null,
+ remoteFunction: null,
fireMousedown: null,
plugins:[],
forceCalculation:false,//强制刷新公式,公式较多会有性能问题,慎用
@@ -39,4 +40,4 @@ const luckysheetConfigsetting = {
defaultCellColor: '#fff',
}
-export default luckysheetConfigsetting;
\ No newline at end of file
+export default luckysheetConfigsetting;
diff --git a/src/controllers/protection.js b/src/controllers/protection.js
index c7783a5..f0b6779 100644
--- a/src/controllers/protection.js
+++ b/src/controllers/protection.js
@@ -922,7 +922,7 @@ export function checkProtectionLocked(r, c, sheetIndex, isOpenAlert=true, isLock
//cell hidden state
export function checkProtectionCellHidden(r, c, sheetIndex){
let sheetFile = sheetmanage.getSheetByIndex(sheetIndex);
- if(!sheetFile || !sheetFile.data[r] || !sheetFile.data[r][c]){
+ if(!sheetFile || (sheetFile.data && !sheetFile.data[r]) || (sheetFile.data && !sheetFile.data[r][c])){
return true;
}
diff --git a/src/controllers/resize.js b/src/controllers/resize.js
index 723811e..3811f7b 100644
--- a/src/controllers/resize.js
+++ b/src/controllers/resize.js
@@ -117,7 +117,8 @@ export default function luckysheetsizeauto(isRefreshCanvas=true) {
const $t = $(this)[0];
const $container = $("#luckysheet-wa-editor")[0];
- // $container.appendChild(document.createTextNode(" "));
+ $container.appendChild(document.createTextNode(" "));
+
$container.appendChild($t);
});
@@ -392,7 +393,7 @@ export function menuToolBarWidth() {
if (JSON.stringify(showtoolbarConfig) !== '{}') {
if(showtoolbarConfig.hasOwnProperty('undoRedo')){
config.undo = config.redo = showtoolbarConfig.undoRedo;
- // delete showtoolbarConfig.undoRedo;
+
}
Object.assign(config, showtoolbarConfig);
@@ -401,10 +402,8 @@ export function menuToolBarWidth() {
for (let i = 0; i
0 ) {
let flag_sure_merge = false
if(range.v.length > 1) {
- flag_sure_merge = Object.keys(range.v[1][0]).length > 0
+ flag_sure_merge = range.v[1][0] == null || Object.keys(range.v[1][0]).length > 0
}
if(range.v[0].length > 1) {
- flag_sure_merge = Object.keys(range.v[0][1]).length > 0
+ flag_sure_merge = range.v[0][1] == null || Object.keys(range.v[0][1]).length > 0
}
if(flag_sure_merge) {
// 合并成一个时执行
diff --git a/src/controllers/selection.js b/src/controllers/selection.js
index 1dba06f..13b4903 100644
--- a/src/controllers/selection.js
+++ b/src/controllers/selection.js
@@ -439,6 +439,17 @@ const selection = {
if(c_value == null){
c_value = getcellvalue(r, c, d);
}
+ if(c_value == null && d[r][c] && d[r][c].ct && d[r][c].ct.t == 'inlineStr') {
+ c_value = d[r][c].ct.s.map(val=>{
+ const font = $('')
+ val.fs && font.css('font-size',val.fs)
+ val.bl && font.css('font-weight',val.border)
+ val.it && font.css('font-style',val.italic)
+ val.cl==1 && font.css('text-decoration','underline')
+ font.text(val.v)
+ return font[0].outerHTML
+ }).join('');
+ }
if(c_value == null){
c_value = "";
diff --git a/src/controllers/server.js b/src/controllers/server.js
index 8bdfbc3..9c60424 100644
--- a/src/controllers/server.js
+++ b/src/controllers/server.js
@@ -20,6 +20,7 @@ import dayjs from "dayjs";
import json from '../global/json';
import luckysheetConfigsetting from './luckysheetConfigsetting';
import {customImageUpdate} from './imageUpdateCtrl';
+import method from '../global/method';
const server = {
gridKey: null,
@@ -99,7 +100,7 @@ const server = {
d.i = index;
d.v = value;
- //切换sheet页不发后台,TODO:改为发后台+后台不广播
+ //切换sheet页不发后台,TODO:改为发后台+后台不广播
if(type === 'shs'){
return;
}
@@ -188,7 +189,7 @@ const server = {
console.info(locale().websocket.success);
hideloading();
_this.wxErrorCount = 0;
-
+
//防止websocket长时间不发送消息导致断连
_this.retryTimer = setInterval(function(){
_this.websocket.send("rub");
@@ -199,6 +200,7 @@ const server = {
_this.websocket.onmessage = function(result){
Store.result = result
let data = new Function("return " + result.data)();
+ method.createHookFunction('cooperativeMessage', data)
console.info(data);
let type = data.type;
let {message,id} = data;
@@ -213,7 +215,19 @@ const server = {
})
}
if(type == 1){ //send 成功或失败
-
+ const oldIndex = data.data.v.index;
+ const sheetToUpdate = Store.luckysheetfile.filter((sheet)=> sheet.index === oldIndex)[0];
+ if (sheetToUpdate !== null) {
+ setTimeout(() => {
+ const index = data.data.i;
+ sheetToUpdate.index = index;
+ Store.currentSheetIndex = index;
+
+ $(`#luckysheet-sheets-item${oldIndex}`).attr('data-index', index);
+ $(`#luckysheet-sheets-item${oldIndex}`).prop('id', `luckysheet-sheets-item${index}`);
+ $(`#luckysheet-datavisual-selection-set-${oldIndex}`).prop('id', `luckysheet-datavisual-selection-set-${index}`);
+ }, 1);
+ }
}
else if(type == 2){ //更新数据
let item = JSON.parse(data.data);
@@ -234,7 +248,7 @@ const server = {
value = item.v;
if(Store.cooperativeEdit.changeCollaborationSize.length === 0) {
Store.cooperativeEdit.changeCollaborationSize.push({id:id,v:item.v[0],i:index})
- }
+ }
let flag = Store.cooperativeEdit.changeCollaborationSize.some(value1 => {
return value1.id == id
})
@@ -244,10 +258,10 @@ const server = {
val.v = item.v[0]
val.i = index
}
- })
+ })
} else {
Store.cooperativeEdit.changeCollaborationSize.push({id:id,v:item.v[0],i:index})
- }
+ }
if(getObjType(value) != "array" && getObjType(value) !== "object"){
value = JSON.parse(value);
}
@@ -259,16 +273,16 @@ const server = {
r = value.range[value.range.length - 1].row[0];
c = value.range[value.range.length - 1].column[0];
_this.multipleRangeShow(id, username, r, c, value.op);
-
+
}else {
r = value[value.length - 1].row[0];
c = value[value.length - 1].column[0];
-
+
_this.multipleRangeShow(id, username, r, c);
-
+
}
-
+
} else {
if(getObjType(value) === "object" && value.op === 'enterEdit'){
r = value.range[value.range.length - 1].row[0];
@@ -331,7 +345,11 @@ const server = {
for(let i = 0; i < items.length; i++){
_this.wsUpdateMsg(item[i]);
}
- }
+ } else if (type == 5) {
+ showloading(data.data);
+ } else if (type == 6) {
+ hideloading();
+ }
}
//通信发生错误时触发
@@ -420,7 +438,7 @@ const server = {
if(index == Store.currentSheetIndex){//更新数据为当前表格数据
Store.flowdata = file.data;
editor.webWorkerFlowDataCache(Store.flowdata);//worker存数据
-
+
//如果更新的单元格有批注
for(let r = r1; r <= r2; r++){
for(let c = c1; c <= c2; c++){
@@ -452,7 +470,7 @@ const server = {
// for(let key in value){
// file["config"][k][key] = value[key];
// }
-
+
// ⚠️ 上面的处理方式会导致部分配置项被遗漏,以致协同编辑的时候多视图出现不一致的情况,调整处理的策略为直接替换配置项:
// 可能的配置项为:
// columnlen: {0: 65, 1: 186, 2: 52}
@@ -695,7 +713,7 @@ const server = {
if(rc == "r"){
file["row"] += len;
-
+
//空行模板
let row = [];
for(let c = 0; c < data[0].length; c++){
@@ -720,8 +738,8 @@ const server = {
new Function("data","return " + 'data.splice(' + st_i + ', 0, ' + arr.join(",") + ')')(data);
}
}
- else{
- new Function("data","return " + 'data.splice(' + (st_i + 1) + ', 0, ' + arr.join(",") + ')')(data);
+ else{
+ new Function("data","return " + 'data.splice(' + (st_i + 1) + ', 0, ' + arr.join(",") + ')')(data);
}
}
else{
@@ -827,18 +845,18 @@ const server = {
else if(type == "shd"){ //删除sheet
for(let i = 0; i < Store.luckysheetfile.length; i++){
if(Store.luckysheetfile[i].index == value.deleIndex){
-
+
// 如果删除的是当前sheet,则切换到前一个sheet页
if(Store.currentSheetIndex === value.deleIndex){
const index = value.deleIndex;
Store.luckysheetfile[sheetmanage.getSheetIndex(index)].hide = 1;
-
+
let luckysheetcurrentSheetitem = $("#luckysheet-sheets-item" + index);
luckysheetcurrentSheetitem.hide();
$("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
-
+
let indicator = luckysheetcurrentSheetitem.nextAll(":visible");
if (luckysheetcurrentSheetitem.nextAll(":visible").length > 0) {
indicator = indicator.eq(0).data("index");
@@ -847,7 +865,7 @@ const server = {
indicator = luckysheetcurrentSheetitem.prevAll(":visible").eq(0).data("index");
}
$("#luckysheet-sheets-item" + indicator).addClass("luckysheet-sheets-item-active");
-
+
sheetmanage.changeSheetExec(indicator);
}
@@ -966,12 +984,12 @@ const server = {
col = margeset.column[1];
col_pre = margeset.column[0];
}
-
+
// 超出16个字符就显示...
if(getByteLen(name) > 16){
name = getByteLen(name,16) + "...";
}
-
+
// 如果正在编辑,就显示“正在输入”
if(value === 'enterEdit'){
name += " " + locale().edit.typing;
@@ -979,7 +997,7 @@ const server = {
if($("#luckysheet-multipleRange-show-" + id).length > 0){
$("#luckysheet-multipleRange-show-" + id).css({ "position": "absolute", "left": col_pre - 1, "width": col - col_pre - 1, "top": row_pre - 1, "height": row - row_pre - 1 });
-
+
$("#luckysheet-multipleRange-show-" + id + " .username").text(name);
$("#luckysheet-multipleRange-show-" + id + " .username").show();
@@ -999,11 +1017,11 @@ const server = {
// ''+
// '
@@ -1019,7 +1037,7 @@ const server = {
$(itemHtml).appendTo($("#luckysheet-cell-main #luckysheet-multipleRange-show"));
_this.multipleIndex++;
-
+
// 设定允许用户名消失的定时器,10秒后用户名可隐藏
// 10秒之类,用户操作界面不会隐藏用户名;10秒之后如果用户操作了界面,则隐藏用户名,没操作就不隐藏
if(Store.cooperativeEdit.usernameTimeout['user' + id] != null){
diff --git a/src/controllers/toolbar.js b/src/controllers/toolbar.js
index 13f4555..65c4ed9 100644
--- a/src/controllers/toolbar.js
+++ b/src/controllers/toolbar.js
@@ -876,7 +876,6 @@ export function createToolbarHtml() {
if (JSON.stringify(showtoolbarConfig) !== '{}') {
if(showtoolbarConfig.hasOwnProperty('undoRedo')){
config.undo = config.redo = showtoolbarConfig.undoRedo;
- // delete showtoolbarConfig.undoRedo;
}
Object.assign(config, showtoolbarConfig);
}
diff --git a/src/controllers/updateCell.js b/src/controllers/updateCell.js
index 3981266..ec81914 100644
--- a/src/controllers/updateCell.js
+++ b/src/controllers/updateCell.js
@@ -217,7 +217,7 @@ export function luckysheetupdateCell(row_index1, col_index1, d, cover, isnotfocu
if((value == null || value.toString() == "") && !cover){
value = "
";
}
-
+ value = formula.xssDeal(value);
if(!checkProtectionCellHidden(row_index, col_index, Store.currentSheetIndex) && value.length>0 && value.substr(0, 63)=='='){
$("#luckysheet-rich-text-editor").html("");
}
diff --git a/src/core.js b/src/core.js
index 3b209eb..ade5bf7 100644
--- a/src/core.js
+++ b/src/core.js
@@ -39,6 +39,7 @@ import flatpickr from 'flatpickr'
import Mandarin from 'flatpickr/dist/l10n/zh.js'
import { initListener } from './controllers/listener';
import { hideloading, showloading } from './global/loading.js';
+import { luckysheetextendData } from './global/extend.js';
let luckysheet = {};
@@ -122,6 +123,7 @@ luckysheet.create = function (setting) {
luckysheetConfigsetting.beforeCreateDom = extendsetting.beforeCreateDom;
luckysheetConfigsetting.workbookCreateBefore = extendsetting.workbookCreateBefore;
luckysheetConfigsetting.workbookCreateAfter = extendsetting.workbookCreateAfter;
+ luckysheetConfigsetting.remoteFunction = extendsetting.remoteFunction;
luckysheetConfigsetting.fireMousedown = extendsetting.fireMousedown;
luckysheetConfigsetting.forceCalculation = extendsetting.forceCalculation;
@@ -248,6 +250,7 @@ luckysheet.destroy = method.destroy;
luckysheet.showLoadingProgress = showloading;
luckysheet.hideLoadingProgress = hideloading;
+luckysheet.luckysheetextendData = luckysheetextendData;
export {
luckysheet
diff --git a/src/css/luckysheet-core.css b/src/css/luckysheet-core.css
index 571c41f..96fb6fa 100644
--- a/src/css/luckysheet-core.css
+++ b/src/css/luckysheet-core.css
@@ -860,7 +860,8 @@
left: 0;
position: absolute;
right: 0;
- top: 6px;
+ top: 50%;
+ transform: translateY(-50%);
resize: none;
/* border: 1px #b9b9b9 solid; */
font-family: arial, sans, sans-serif;
@@ -897,6 +898,12 @@
border-left: 1px solid transparent;
border-right: 1px solid transparent;
}
+.luckysheet-wa-calculate-help-tool .fa-caret-down {
+ position: absolute;
+ top: 50%;
+ left: 3px;
+ transform: translateY(-50%);
+}
.luckysheet-wa-calculate-help-tool:hover {
background: #EFEFEF;
@@ -7200,6 +7207,14 @@ fieldset[disabled] .btn-danger.focus {
cursor: pointer;
color: #6598F3;
}
+#luckysheet-dataVerification-dialog .box-item .multi {
+ margin-top: 10px;
+ line-height: 30px;
+ font-size: 12px;
+}
+#luckysheet-dataVerification-dialog .box-item .multi input {
+ vertical-align: text-top;
+}
#luckysheet-dataVerification-dialog .box-item .show-box{
margin-top: 10px;
}
@@ -7303,6 +7318,24 @@ fieldset[disabled] .btn-danger.focus {
box-sizing: border-box;
cursor: pointer;
}
+
+#luckysheet-dataVerification-dropdown-List .dropdown-List-item.multi {
+ padding-left: 0;
+}
+#luckysheet-dataVerification-dropdown-List .dropdown-List-item.multi:before{
+ content: "";
+ width: 14px;
+ font-family: "iconfont" !important;
+ font-size: 12px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ margin-right: 2px;
+}
+#luckysheet-dataVerification-dropdown-List .dropdown-List-item.multi.checked:before{
+ content: "\e7c8";
+}
#luckysheet-dataVerification-dropdown-List .dropdown-List-item:hover{
background-color: #E1E1E1;
}
diff --git a/src/function/functionImplementation.js b/src/function/functionImplementation.js
index 2007878..f7b81f4 100644
--- a/src/function/functionImplementation.js
+++ b/src/function/functionImplementation.js
@@ -1,3 +1,4 @@
+import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting';
import { luckysheet_getcelldata, luckysheet_parseData, luckysheet_getValue } from './func';
import { inverse } from './matrix_methods';
import { getSheetIndex, getluckysheetfile,getRangetxt } from '../methods/get';
@@ -3336,7 +3337,7 @@ const functionImplementation = {
}
else{
if (typeof value !== 'string') {
- if (new Function("return " + value + criter)()) {
+ if (new Function("return " + value + criter)()) {
matches++;
}
}
@@ -27587,6 +27588,40 @@ const functionImplementation = {
return [formula.error.v, err];
}
},
+ "REMOTE": function() {
+ if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
+ return formula.error.na;
+ }
+
+ try {
+ const cellRow = window.luckysheetCurrentRow;
+ const cellColumn = window.luckysheetCurrentColumn;
+ const cellFunction = window.luckysheetCurrentFunction;
+
+ const remoteFunction = func_methods.getFirstValue(arguments[0]);
+ if(valueIsError(remoteFunction)){
+ return remoteFunction;
+ }
+
+ luckysheetConfigsetting.remoteFunction(remoteFunction, data => {
+ const flowData = editor.deepCopyFlowData(Store.flowdata);
+ formula.execFunctionGroup(cellRow, cellColumn, data);
+ flowData[cellRow][cellColumn] = {
+ "v": data,
+ "f": cellFunction
+ };
+ jfrefreshgrid(flowData, [{"row": [cellRow, cellRow], "column": [cellColumn, cellColumn]}]);
+ });
+
+ return "Loading...";
+ }
+ catch (e) {
+ console.log(e);
+ var err = e;
+ err = formula.errorInfo(err);
+ return [formula.error.v, err];
+ }
+ },
};
export default functionImplementation;
diff --git a/src/global/api.js b/src/global/api.js
index 4c84258..d05169b 100644
--- a/src/global/api.js
+++ b/src/global/api.js
@@ -1082,7 +1082,62 @@ export function insertRowOrColumn(type, index = 0, options = {}) {
success();
}
}
+/**
+ * 在第index行或列的位置,插入number行或列
+ * @param {String} type 插入行或列 row-行 column-列
+ * @param {Number} index 在第几行插入空白行,从0开始
+ * @param {Object} options 可选参数
+ * @param {Number} options.number 插入的空白行数;默认为 1
+ * @param {Number} options.order 工作表索引;默认值为当前工作表索引
+ * @param {Function} options.success 操作结束的回调函数
+ */
+export function insertRowBottomOrColumnRight(type, index = 0, options = {}) {
+ if(!isRealNum(index)){
+ return tooltip.info('The index parameter is invalid.', '');
+ }
+
+ let curSheetOrder = getSheetIndex(Store.currentSheetIndex);
+ let {
+ number = 1,
+ order = curSheetOrder,
+ success
+ } = {...options}
+ let _locale = locale();
+ let locale_info = _locale.info;
+ if (!isRealNum(number)) {
+ if(isEditMode()){
+ alert(locale_info.tipInputNumber);
+ } else{
+ tooltip.info(locale_info.tipInputNumber, "");
+ }
+ return;
+ }
+
+ number = parseInt(number);
+ if (number < 1 || number > 100) {
+ if(isEditMode()){
+ alert(locale_info.tipInputNumberLimit);
+ } else{
+ tooltip.info(locale_info.tipInputNumberLimit, "");
+ }
+ return;
+ }
+
+ // 默认在行上方增加行,列左侧增加列
+ let sheetIndex;
+ if(order){
+ if(Store.luckysheetfile[order]){
+ sheetIndex = Store.luckysheetfile[order].index;
+ }
+ }
+
+ luckysheetextendtable(type, index, number, "rightbottom", sheetIndex);
+
+ if (success && typeof success === 'function') {
+ success();
+ }
+}
/**
* 在第row行的位置,插入number行空白行
* @param {Number} row 在第几行插入空白行,从0开始
@@ -1094,7 +1149,17 @@ export function insertRowOrColumn(type, index = 0, options = {}) {
export function insertRow(row = 0, options = {}) {
insertRowOrColumn('row', row, options)
}
-
+/**
+ * 在第row行的位置,插入number行空白行
+ * @param {Number} row 在第几行插入空白行,从0开始
+ * @param {Object} options 可选参数
+ * @param {Number} options.number 插入的空白行数;默认为 1
+ * @param {Number} options.order 工作表索引;默认值为当前工作表索引
+ * @param {Function} options.success 操作结束的回调函数
+ */
+export function insertRowBottom(row = 0, options = {}) {
+ insertRowBottomOrColumnRight('row', row, options)
+}
/**
* 在第column列的位置,插入number列空白列
* @param {Number} column 在第几列插入空白列,从0开始
@@ -1106,7 +1171,17 @@ export function insertRow(row = 0, options = {}) {
export function insertColumn(column = 0, options = {}) {
insertRowOrColumn('column', column, options)
}
-
+/**
+ * 在第column列的位置,插入number列空白列
+ * @param {Number} column 在第几列插入空白列,从0开始
+ * @param {Object} options 可选参数
+ * @param {Number} options.number 插入的空白列数;默认为 1
+ * @param {Number} options.order 工作表索引;默认值为当前工作表索引
+ * @param {Function} options.success 操作结束的回调函数
+ */
+export function insertColumnRight(column = 0, options = {}) {
+ insertRowBottomOrColumnRight('column', column, options)
+}
/**
* 删除指定的行或列。删除行列之后,行列的序号并不会变化,下面的行(右侧的列)会补充到上(左)面,注意观察数据是否被正确删除即可。
* @param {String} type 删除行或列 row-行 column-列
@@ -1182,6 +1257,7 @@ export function hideRowOrColumn(type, startIndex, endIndex, options = {}) {
let curSheetOrder = getSheetIndex(Store.currentSheetIndex);
let {
order = curSheetOrder,
+ saveParam = true,
success
} = {...options}
@@ -1209,7 +1285,10 @@ export function hideRowOrColumn(type, startIndex, endIndex, options = {}) {
}
Store.luckysheetfile[order].config = cfg;
- server.saveParam("cg", file.index, cfg[cfgKey], { "k": cfgKey });
+
+ if (saveParam) {
+ server.saveParam("cg", file.index, cfg[cfgKey], { "k": cfgKey });
+ }
// 若操作sheet为当前sheet页,行高、列宽 刷新
if (order == curSheetOrder) {
@@ -1240,6 +1319,7 @@ export function showRowOrColumn(type, startIndex, endIndex, options = {}) {
let curSheetOrder = getSheetIndex(Store.currentSheetIndex);
let {
order = curSheetOrder,
+ saveParam = true,
success
} = {...options}
@@ -1269,7 +1349,9 @@ export function showRowOrColumn(type, startIndex, endIndex, options = {}) {
//config
Store.luckysheetfile[order].config = Store.config;
- server.saveParam("cg", file.index, cfg[cfgKey], { "k": cfgKey });
+ if (saveParam) {
+ server.saveParam("cg", file.index, cfg[cfgKey], { "k": cfgKey });
+ }
// 若操作sheet为当前sheet页,行高、列宽 刷新
if (order === curSheetOrder) {
@@ -1332,7 +1414,7 @@ export function showColumn(startIndex, endIndex, options = {}) {
/**
- * 设置指定行的高度
+ * 设置指定行的高度。优先级最高,高于默认行高和用户自定义行高。
* @param {Object} rowInfo 行数和高度对应关系
* @param {Object} options 可选参数
* @param {Number} options.order 工作表索引;默认值为当前工作表索引
@@ -1363,8 +1445,12 @@ export function setRowHeight(rowInfo, options = {}) {
if(parseInt(r) >= 0){
let len = rowInfo[r];
- if(Number(len) >= 0){
- cfg['rowlen'][parseInt(r)] = Number(len);
+ if (len === 'auto') {
+ cfg['rowlen'][parseInt(r)] = len
+ } else {
+ if(Number(len) >= 0){
+ cfg['rowlen'][parseInt(r)] = Number(len);
+ }
}
}
}
@@ -1416,8 +1502,12 @@ export function setColumnWidth(columnInfo, options = {}) {
if(parseInt(c) >= 0){
let len = columnInfo[c];
- if(Number(len) >= 0){
- cfg['columnlen'][parseInt(c)] = Number(len);
+ if (len === 'auto') {
+ cfg['columnlen'][parseInt(c)] = len
+ } else {
+ if(Number(len) >= 0){
+ cfg['columnlen'][parseInt(c)] = Number(len);
+ }
}
}
}
@@ -6741,4 +6831,4 @@ export function checkTheStatusOfTheSelectedCells(type,status){
})
return flag;
-}
\ No newline at end of file
+}
diff --git a/src/global/draw.js b/src/global/draw.js
index b9408c3..1511eb7 100644
--- a/src/global/draw.js
+++ b/src/global/draw.js
@@ -1492,7 +1492,7 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
}
else{
//若单元格有条件格式数据条
- if(checksCF != null && checksCF["dataBar"] != null){
+ if(checksCF != null && checksCF["dataBar"] != null && checksCF["dataBar"]["valueLen"] && checksCF["dataBar"]["valueLen"].toString() !== 'NaN'){
let x = (start_c + offsetLeft + space_width);
let y = (start_r + offsetTop + space_height);
let w = (cellWidth - space_width * 2);
diff --git a/src/global/formula.js b/src/global/formula.js
index 57f36cb..71fda9c 100755
--- a/src/global/formula.js
+++ b/src/global/formula.js
@@ -321,7 +321,11 @@ const luckysheetformula = {
sheetmanage.changeSheetExec(_this.rangetosheet);
}
},
- fucntionboxshow: function (r, c) {
+ xssDeal: function(str) {
+ if (typeof str !== 'string') return str;
+ return str.replace(/
diff --git a/src/locale/en.js b/src/locale/en.js
index 9b4f1dd..10509d3 100644
--- a/src/locale/en.js
+++ b/src/locale/en.js
@@ -8827,6 +8827,21 @@ export default {
"type": "rangeall"
}]
},
+ {
+ "n": "REMOTE",
+ "t": "5",
+ "d": "Calls a function on a remote server",
+ "a": "Calls a function on a remote back end server/API.",
+ "m": [1, 1],
+ "p": [{
+ "name": "remote_expression",
+ "example": 'SUM(A1:A10000000)',
+ "detail": "Formula",
+ "require": "m",
+ "repeat": "n",
+ "type": "string"
+ }]
+ },
],
toolbar: {
undo: 'Undo',
@@ -9391,7 +9406,7 @@ export default {
byRow: 'By row',
byCol: 'By column',
generateNewMatrix: 'Generate new matrix',
-
+
},
comment:{
"insert":"Insert",
@@ -9449,7 +9464,7 @@ export default {
"semicolon":"semicolon",
"comma":"comma",
"space":"space",
-
+
},
findAndReplace:{
find:"Find",
@@ -9509,7 +9524,7 @@ export default {
locationTiplessTwoRow:"Please select at least two rows",
locationTiplessTwoColumn:"Please select at least two columns",
locationTipNotFindCell:"Cell not found"
-
+
},
sheetconfig: {
delete: 'Delete',
@@ -9733,6 +9748,7 @@ export default {
selectCellRange: 'Click to select a cell range',
selectCellRange2: 'Please select a range of cells',
verificationCondition: 'Verification condition',
+ allowMultiSelect: "Allow multiple selection",
dropdown: 'drop-down list',
checkbox: 'Checkbox',
number: 'Number',
@@ -10031,4 +10047,3 @@ export default {
support: 'The current browser does not support WebSocket',
}
};
-
\ No newline at end of file
diff --git a/src/locale/es.js b/src/locale/es.js
index 9e93056..f5466e2 100644
--- a/src/locale/es.js
+++ b/src/locale/es.js
@@ -9716,6 +9716,7 @@ export default {
selectCellRange: 'Haz clic para seleccionar un rango de celdas',
selectCellRange2: 'Selecciona un rango de celdas',
verificationCondition: 'Condición de verificación',
+ allowMultiSelect: "Permitir selección múltiple",
dropdown: 'lista desplegable',
checkbox: 'Casilla de verificación',
number: 'Número',
diff --git a/src/locale/zh.js b/src/locale/zh.js
index 895deb9..c9f21a6 100644
--- a/src/locale/zh.js
+++ b/src/locale/zh.js
@@ -9976,6 +9976,7 @@ export default {
selectCellRange: '点击选择单元格范围',
selectCellRange2: '请选择单元格范围',
verificationCondition: '验证条件',
+ allowMultiSelect: '是否允许多选',
dropdown: '下拉列表',
checkbox: '复选框',
number: '数字',
diff --git a/src/locale/zh_tw.js b/src/locale/zh_tw.js
index 90e394c..9069c0c 100644
--- a/src/locale/zh_tw.js
+++ b/src/locale/zh_tw.js
@@ -9969,6 +9969,7 @@ export default {
selectCellRange : '點擊選擇儲存格範圍',
selectCellRange2 : '請選擇儲存格範圍',
verificationCondition: '驗證條件',
+ allowMultiSelect : "是否允許多選",
dropdown : '下拉清單',
checkbox : '核取方塊',
number : '數位',
diff --git a/yarn.lock b/yarn.lock
index 5b0f7ec..c727400 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2166,10 +2166,10 @@ bluebird@^3.1.1, bluebird@^3.5.5:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
- version "4.11.9"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
- integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+ integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
bn.js@^5.0.0, bn.js@^5.1.1:
version "5.1.3"
@@ -2254,7 +2254,7 @@ braces@^3.0.1, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
-brorand@^1.0.1:
+brorand@^1.0.1, brorand@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
@@ -2379,15 +2379,15 @@ browserify-zlib@^0.2.0:
pako "~1.0.5"
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0:
- version "4.16.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766"
- integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==
+ version "4.16.6"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
+ integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
dependencies:
- caniuse-lite "^1.0.30001173"
- colorette "^1.2.1"
- electron-to-chromium "^1.3.634"
+ caniuse-lite "^1.0.30001219"
+ colorette "^1.2.2"
+ electron-to-chromium "^1.3.723"
escalade "^3.1.1"
- node-releases "^1.1.69"
+ node-releases "^1.1.71"
bs-recipes@1.3.4:
version "1.3.4"
@@ -2635,10 +2635,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001173:
- version "1.0.30001177"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001177.tgz#2c3b384933aafda03e29ccca7bb3d8c3389e1ece"
- integrity sha512-6Ld7t3ifCL02jTj3MxPMM5wAYjbo4h/TAQGFTgv1inihP1tWnWp8mxxT4ut4JBEHLbpFXEXJJQ119JCJTBkYDw==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219:
+ version "1.0.30001230"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71"
+ integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==
caseless@~0.12.0:
version "0.12.0"
@@ -2784,15 +2784,6 @@ cli-width@^2.0.0:
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
-clipboard@^2.0.0:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376"
- integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==
- dependencies:
- good-listener "^1.2.2"
- select "^1.1.2"
- tiny-emitter "^2.0.0"
-
cliui@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
@@ -2916,9 +2907,9 @@ color-name@^1.0.0, color-name@~1.1.4:
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.5.4:
- version "1.5.4"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6"
- integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014"
+ integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
@@ -2936,10 +2927,10 @@ color@^3.0.0:
color-convert "^1.9.1"
color-string "^1.5.4"
-colorette@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
- integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
+colorette@^1.2.1, colorette@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
+ integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
@@ -3910,11 +3901,6 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-delegate@^3.1.2:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
- integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
-
delete@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/delete/-/delete-1.1.0.tgz#931eb819cb6a0833d4ac4686621241cdca202e7c"
@@ -3995,9 +3981,9 @@ dns-equal@^1.0.0:
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
dns-packet@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
- integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
+ integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
dependencies:
ip "^1.1.0"
safe-buffer "^5.0.1"
@@ -4159,23 +4145,23 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-electron-to-chromium@^1.3.634:
- version "1.3.639"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.639.tgz#0a27e3018ae3acf438a14a1dd4e41db4b8ab764e"
- integrity sha512-bwl6/U6xb3d3CNufQU9QeO1L32ueouFwW4bWANSwdXR7LVqyLzWjNbynoKNfuC38QFB5Qn7O0l2KLqBkcXnC3Q==
+electron-to-chromium@^1.3.723:
+ version "1.3.739"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz#f07756aa92cabd5a6eec6f491525a64fe62f98b9"
+ integrity sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==
elliptic@^6.5.3:
- version "6.5.3"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
- integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+ integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
dependencies:
- bn.js "^4.4.0"
- brorand "^1.0.1"
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
hash.js "^1.0.0"
- hmac-drbg "^1.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
emoji-regex@^7.0.1:
version "7.0.3"
@@ -5310,13 +5296,6 @@ glogg@^1.0.0:
dependencies:
sparkles "^1.0.0"
-good-listener@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
- integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
- dependencies:
- delegate "^3.1.2"
-
got@^9.6.0:
version "9.6.0"
resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
@@ -5472,9 +5451,9 @@ handle-thing@^2.0.0:
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
handlebars@^4.7.6:
- version "4.7.6"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e"
- integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==
+ version "4.7.7"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
+ integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
dependencies:
minimist "^1.2.5"
neo-async "^2.6.0"
@@ -5624,7 +5603,7 @@ hex-color-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
-hmac-drbg@^1.0.0:
+hmac-drbg@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
@@ -5649,9 +5628,9 @@ homedir-polyfill@^1.0.1:
parse-passwd "^1.0.0"
hosted-git-info@^2.1.4:
- version "2.8.8"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
- integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
hosted-git-info@^3.0.6:
version "3.0.7"
@@ -6863,9 +6842,9 @@ lodash.uniq@^4.5.0:
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.3, lodash@^4.17.5:
- version "4.17.20"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
- integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
loglevel@^1.6.8:
version "1.7.1"
@@ -7296,7 +7275,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+minimalistic-crypto-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
@@ -7519,10 +7498,10 @@ node-libs-browser@^2.2.1:
util "^0.11.0"
vm-browserify "^1.0.1"
-node-releases@^1.1.69:
- version "1.1.69"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6"
- integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==
+node-releases@^1.1.71:
+ version "1.1.72"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe"
+ integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==
nopt@1.0.10:
version "1.0.10"
@@ -8562,9 +8541,9 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6:
- version "7.0.35"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
- integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
+ version "7.0.36"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
+ integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
@@ -8599,11 +8578,9 @@ pretty-time@^1.1.0:
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
prismjs@^1.13.0:
- version "1.23.0"
- resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33"
- integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==
- optionalDependencies:
- clipboard "^2.0.0"
+ version "1.24.0"
+ resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.0.tgz#0409c30068a6c52c89ef7f1089b3ca4de56be2ac"
+ integrity sha512-SqV5GRsNqnzCL8k5dfAjCNhUrF3pR0A9lTDSCUZeh/LIshheXJEaP0hwLz2t4XHivd2J/v2HR+gRnigzeKe3cQ==
process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
version "2.0.1"
@@ -9349,11 +9326,6 @@ select-hose@^2.0.0:
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
-select@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
- integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
-
selfsigned@^1.10.8:
version "1.10.8"
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30"
@@ -9887,9 +9859,9 @@ sshpk@^1.7.0:
tweetnacl "~0.14.0"
ssri@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
- integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
+ integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
dependencies:
figgy-pudding "^3.5.1"
@@ -10395,11 +10367,6 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
-tiny-emitter@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
- integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
-
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -10607,9 +10574,9 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
ua-parser-js@^0.7.18:
- version "0.7.23"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b"
- integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==
+ version "0.7.28"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31"
+ integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==
uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.6"
@@ -10624,11 +10591,16 @@ uglify-js@3.4.x:
commander "~2.19.0"
source-map "~0.6.1"
-uglify-js@^3.0.5, uglify-js@^3.1.4:
+uglify-js@^3.0.5:
version "3.12.4"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.4.tgz#93de48bb76bb3ec0fc36563f871ba46e2ee5c7ee"
integrity sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A==
+uglify-js@^3.1.4:
+ version "3.13.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113"
+ integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==
+
ultron@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
@@ -10813,9 +10785,9 @@ url-parse-lax@^3.0.0:
prepend-http "^2.0.0"
url-parse@^1.4.3, url-parse@^1.4.7:
- version "1.4.7"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
- integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b"
+ integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==
dependencies:
querystringify "^2.1.1"
requires-port "^1.0.0"