9 changed files with 387 additions and 2 deletions
@ -0,0 +1,265 @@ |
|||||
|
import { replaceHtml } from '../utils/util'; |
||||
|
import { getcellvalue } from '../global/getdata'; |
||||
|
import { luckysheetrefreshgrid } from '../global/refresh'; |
||||
|
import formula from '../global/formula'; |
||||
|
import tooltip from '../global/tooltip'; |
||||
|
import editor from '../global/editor'; |
||||
|
import { modelHTML } from './constant'; |
||||
|
import server from './server'; |
||||
|
import { getSheetIndex } from '../methods/get'; |
||||
|
import locale from '../locale/locale'; |
||||
|
import Store from '../store'; |
||||
|
|
||||
|
const hyperlinkCtrl = { |
||||
|
item: { |
||||
|
linkType: 'external', //链接类型 external外部链接,internal内部链接
|
||||
|
linkAddress: '', //链接地址 网页地址或工作表单元格引用
|
||||
|
linkTooltip: '', //提示
|
||||
|
}, |
||||
|
hyperlink: null, |
||||
|
createDialog: function(){ |
||||
|
let _this = this; |
||||
|
|
||||
|
const _locale = locale(); |
||||
|
const hyperlinkText = _locale.insertLink; |
||||
|
const toolbarText = _locale.toolbar; |
||||
|
const buttonText = _locale.button; |
||||
|
|
||||
|
$("#luckysheet-modal-dialog-mask").show(); |
||||
|
$("#luckysheet-insertLink-dialog").remove(); |
||||
|
|
||||
|
let sheetListOption = ''; |
||||
|
Store.luckysheetfile.forEach(item => { |
||||
|
sheetListOption += `<option value="${item.name}">${item.name}</option>`; |
||||
|
}) |
||||
|
|
||||
|
let content = `<div class="box">
|
||||
|
<div class="box-item"> |
||||
|
<label for="luckysheet-insertLink-dialog-linkText">${hyperlinkText.linkText}:</label> |
||||
|
<input type="text" id="luckysheet-insertLink-dialog-linkText"/> |
||||
|
</div> |
||||
|
<div class="box-item"> |
||||
|
<label for="luckysheet-insertLink-dialog-linkType">${hyperlinkText.linkType}:</label> |
||||
|
<select id="luckysheet-insertLink-dialog-linkType"> |
||||
|
<option value="external">${hyperlinkText.external}</option> |
||||
|
<option value="internal">${hyperlinkText.internal}</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
<div class="show-box show-box-external"> |
||||
|
<div class="box-item"> |
||||
|
<label for="luckysheet-insertLink-dialog-linkAddress">${hyperlinkText.linkAddress}:</label> |
||||
|
<input type="text" id="luckysheet-insertLink-dialog-linkAddress" placeholder="${hyperlinkText.placeholder1}" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="show-box show-box-internal"> |
||||
|
<div class="box-item"> |
||||
|
<label for="luckysheet-insertLink-dialog-linkSheet">${hyperlinkText.linkSheet}:</label> |
||||
|
<select id="luckysheet-insertLink-dialog-linkSheet"> |
||||
|
${sheetListOption} |
||||
|
</select> |
||||
|
</div> |
||||
|
<div class="box-item"> |
||||
|
<label for="luckysheet-insertLink-dialog-linkCell">${hyperlinkText.linkCell}:</label> |
||||
|
<input type="text" id="luckysheet-insertLink-dialog-linkCell" value="A1" placeholder="${hyperlinkText.placeholder2}" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="box-item"> |
||||
|
<label for="luckysheet-insertLink-dialog-linkTooltip">${hyperlinkText.linkTooltip}:</label> |
||||
|
<input type="text" id="luckysheet-insertLink-dialog-linkTooltip" placeholder="${hyperlinkText.placeholder3}" /> |
||||
|
</div> |
||||
|
</div>`; |
||||
|
|
||||
|
$("body").append(replaceHtml(modelHTML, { |
||||
|
"id": "luckysheet-insertLink-dialog", |
||||
|
"addclass": "luckysheet-insertLink-dialog", |
||||
|
"title": toolbarText.insertLink, |
||||
|
"content": content, |
||||
|
"botton": `<button id="luckysheet-insertLink-dialog-confirm" class="btn btn-primary">${buttonText.confirm}</button>
|
||||
|
<button class="btn btn-default luckysheet-model-close-btn">${buttonText.cancel}</button>`, |
||||
|
"style": "z-index:100003" |
||||
|
})); |
||||
|
let $t = $("#luckysheet-insertLink-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 350).end(), |
||||
|
myh = $t.outerHeight(), |
||||
|
myw = $t.outerWidth(); |
||||
|
let winw = $(window).width(), |
||||
|
winh = $(window).height(); |
||||
|
let scrollLeft = $(document).scrollLeft(), |
||||
|
scrollTop = $(document).scrollTop(); |
||||
|
$("#luckysheet-insertLink-dialog").css({ |
||||
|
"left": (winw + scrollLeft - myw) / 2, |
||||
|
"top": (winh + scrollTop - myh) / 3 |
||||
|
}).show(); |
||||
|
|
||||
|
_this.dataAllocation(); |
||||
|
}, |
||||
|
init: function (){ |
||||
|
let _this = this; |
||||
|
|
||||
|
const _locale = locale(); |
||||
|
const hyperlinkText = _locale.insertLink; |
||||
|
|
||||
|
//链接类型
|
||||
|
$(document).off("change.linkType").on("change.linkType", "#luckysheet-insertLink-dialog-linkType", function(e){ |
||||
|
let value = this.value; |
||||
|
|
||||
|
$("#luckysheet-insertLink-dialog .show-box").hide(); |
||||
|
$("#luckysheet-insertLink-dialog .show-box-" + value).show(); |
||||
|
}) |
||||
|
|
||||
|
//确认按钮
|
||||
|
$(document).off("click.confirm").on("click.confirm", "#luckysheet-insertLink-dialog-confirm", function(e){ |
||||
|
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; |
||||
|
let rowIndex = last.row_focus || last.row[0]; |
||||
|
let colIndex = last.column_focus || last.column[0]; |
||||
|
|
||||
|
//文本
|
||||
|
let linkText = $("#luckysheet-insertLink-dialog-linkText").val(); |
||||
|
|
||||
|
let linkType = $("#luckysheet-insertLink-dialog-linkType").val(); |
||||
|
let linkAddress = $("#luckysheet-insertLink-dialog-linkAddress").val(); |
||||
|
let linkSheet = $("#luckysheet-insertLink-dialog-linkSheet").val(); |
||||
|
let linkCell = $("#luckysheet-insertLink-dialog-linkCell").val(); |
||||
|
let linkTooltip = $("#luckysheet-insertLink-dialog-linkTooltip").val(); |
||||
|
|
||||
|
if(linkType == 'external'){ |
||||
|
if(!/^http[s]?:\/\/([\w\-\.]+)+[\w-]*([\w\-\.\/\?%&=]+)?$/ig.test(linkAddress)){ |
||||
|
tooltip.info('<i class="fa fa-exclamation-triangle"></i>', hyperlinkText.tooltipInfo1); |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else{ |
||||
|
if(!formula.iscelldata(linkCell)){ |
||||
|
tooltip.info('<i class="fa fa-exclamation-triangle"></i>', hyperlinkText.tooltipInfo2); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
linkAddress = linkSheet + "!" + linkCell; |
||||
|
} |
||||
|
|
||||
|
if(linkText == null || linkText.replace(/\s/g, '') == ''){ |
||||
|
linkText = linkAddress; |
||||
|
} |
||||
|
|
||||
|
let item = { |
||||
|
linkType: linkType, |
||||
|
linkAddress: linkAddress, |
||||
|
linkTooltip: linkTooltip, |
||||
|
} |
||||
|
|
||||
|
let historyHyperlink = $.extend(true, {}, _this.hyperlink); |
||||
|
let currentHyperlink = $.extend(true, {}, _this.hyperlink); |
||||
|
|
||||
|
currentHyperlink[rowIndex + "_" + colIndex] = item; |
||||
|
|
||||
|
let d = editor.deepCopyFlowData(Store.flowdata); |
||||
|
let cell = d[rowIndex][colIndex]; |
||||
|
|
||||
|
if(cell == null){ |
||||
|
cell = {}; |
||||
|
} |
||||
|
|
||||
|
cell.fc = 'rgb(0, 0, 255)'; |
||||
|
cell.un = 1; |
||||
|
cell.v = linkText; |
||||
|
|
||||
|
d[rowIndex][colIndex] = cell; |
||||
|
|
||||
|
_this.ref( |
||||
|
historyHyperlink, |
||||
|
currentHyperlink, |
||||
|
Store.currentSheetIndex, |
||||
|
d, |
||||
|
{ row: [rowIndex, rowIndex], column: [colIndex, colIndex] } |
||||
|
); |
||||
|
|
||||
|
$("#luckysheet-modal-dialog-mask").hide(); |
||||
|
$("#luckysheet-insertLink-dialog").hide(); |
||||
|
}) |
||||
|
}, |
||||
|
dataAllocation: function(){ |
||||
|
let _this = this; |
||||
|
|
||||
|
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; |
||||
|
let rowIndex = last.row_focus || last.row[0]; |
||||
|
let colIndex = last.column_focus || last.column[0]; |
||||
|
|
||||
|
let hyperlink = _this.hyperlink || {}; |
||||
|
let item = hyperlink[rowIndex + "_" + colIndex] || {}; |
||||
|
|
||||
|
//文本
|
||||
|
let text = getcellvalue(rowIndex, colIndex, null, 'm'); |
||||
|
$("#luckysheet-insertLink-dialog-linkText").val(text); |
||||
|
|
||||
|
//链接类型
|
||||
|
let linkType = item.linkType || 'external'; |
||||
|
$("#luckysheet-insertLink-dialog-linkType").val(linkType); |
||||
|
|
||||
|
$("#luckysheet-insertLink-dialog .show-box").hide(); |
||||
|
$("#luckysheet-insertLink-dialog .show-box-" + linkType).show(); |
||||
|
|
||||
|
//链接地址
|
||||
|
let linkAddress = item.linkAddress || ''; |
||||
|
|
||||
|
if(linkType == 'external'){ |
||||
|
$("#luckysheet-insertLink-dialog-linkAddress").val(linkAddress); |
||||
|
} |
||||
|
else{ |
||||
|
if(formula.iscelldata(linkAddress)){ |
||||
|
let sheettxt = linkAddress.split("!")[0]; |
||||
|
let rangetxt = linkAddress.split("!")[1]; |
||||
|
|
||||
|
$("#luckysheet-insertLink-dialog-linkSheet").val(sheettxt); |
||||
|
$("#luckysheet-insertLink-dialog-linkCell").val(rangetxt); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//提示
|
||||
|
let linkTooltip = item.linkTooltip || ''; |
||||
|
$("#luckysheet-insertLink-dialog-linkTooltip").val(linkTooltip); |
||||
|
}, |
||||
|
cellFocus: function(r, c){ |
||||
|
let _this = this; |
||||
|
|
||||
|
if(_this.hyperlink == null || _this.hyperlink[r + '_' + c] == null){ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
}, |
||||
|
ref: function(historyHyperlink, currentHyperlink, sheetIndex, d, range){ |
||||
|
let _this = this; |
||||
|
|
||||
|
if (Store.clearjfundo) { |
||||
|
Store.jfundo = []; |
||||
|
|
||||
|
let redo = {}; |
||||
|
redo["type"] = "updateHyperlink"; |
||||
|
redo["sheetIndex"] = sheetIndex; |
||||
|
redo["historyHyperlink"] = historyHyperlink; |
||||
|
redo["currentHyperlink"] = currentHyperlink; |
||||
|
redo["data"] = Store.flowdata; |
||||
|
redo["curData"] = d; |
||||
|
redo["range"] = range; |
||||
|
Store.jfredo.push(redo); |
||||
|
} |
||||
|
|
||||
|
_this.hyperlink = currentHyperlink; |
||||
|
Store.luckysheetfile[getSheetIndex(sheetIndex)].hyperlink = currentHyperlink; |
||||
|
|
||||
|
Store.flowdata = d; |
||||
|
editor.webWorkerFlowDataCache(Store.flowdata);//worker存数据
|
||||
|
Store.luckysheetfile[getSheetIndex(sheetIndex)].data = Store.flowdata; |
||||
|
|
||||
|
//共享编辑模式
|
||||
|
if(server.allowUpdate){ |
||||
|
server.saveParam("all", sheetIndex, currentHyperlink, { "k": "hyperlink" }); |
||||
|
server.historyParam(Store.flowdata, sheetIndex, range); |
||||
|
} |
||||
|
|
||||
|
setTimeout(function () { |
||||
|
luckysheetrefreshgrid(); |
||||
|
}, 1); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default hyperlinkCtrl; |
||||
Loading…
Reference in new issue