123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- import { replaceHtml } from '../utils/util';
- import { getcellvalue } from '../global/getdata';
- import { luckysheetrefreshgrid } from '../global/refresh';
- import { rowLocation, colLocation, mouseposition } from '../global/location';
- import formula from '../global/formula';
- import tooltip from '../global/tooltip';
- import editor from '../global/editor';
- import { modelHTML } from './constant';
- import { selectHightlightShow } from './select';
- import server from './server';
- import sheetmanage from './sheetmanage';
- import luckysheetFreezen from './freezen';
- import menuButton from './menuButton';
- 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").first().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]?:\/\//.test(linkAddress)){
- linkAddress = 'https://' + linkAddress;
- }
- 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 = cell.m = 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;
- }
- let item = _this.hyperlink[r + '_' + c];
- if(item.linkType == 'external'){
- window.open(item.linkAddress);
- }
- else{
- let cellrange = formula.getcellrange(item.linkAddress);
- let sheetIndex = cellrange.sheetIndex;
- let range = [{
- row: cellrange.row,
- column: cellrange.column
- }];
- if(sheetIndex != Store.currentSheetIndex){
- $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
- $("#luckysheet-sheets-item" + sheetIndex).addClass("luckysheet-sheets-item-active");
- sheetmanage.changeSheet(sheetIndex);
- }
- Store.luckysheet_select_save = range;
- selectHightlightShow(true);
- let row_pre = cellrange.row[0] - 1 == -1 ? 0 : Store.visibledatarow[cellrange.row[0] - 1];
- let col_pre = cellrange.column[0] - 1 == -1 ? 0 : Store.visibledatacolumn[cellrange.column[0] - 1];
- $("#luckysheet-scrollbar-x").scrollLeft(col_pre);
- $("#luckysheet-scrollbar-y").scrollTop(row_pre);
- }
- },
- overshow: function(event){
- let _this = this;
- $("#luckysheet-hyperlink-overshow").remove();
- if($(event.target).closest("#luckysheet-cell-main").length == 0){
- return;
- }
- let mouse = mouseposition(event.pageX, event.pageY);
- let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
- let scrollTop = $("#luckysheet-cell-main").scrollTop();
- let x = mouse[0] + scrollLeft;
- let y = mouse[1] + scrollTop;
- if(luckysheetFreezen.freezenverticaldata != null && mouse[0] < (luckysheetFreezen.freezenverticaldata[0] - luckysheetFreezen.freezenverticaldata[2])){
- return;
- }
- if(luckysheetFreezen.freezenhorizontaldata != null && mouse[1] < (luckysheetFreezen.freezenhorizontaldata[0] - luckysheetFreezen.freezenhorizontaldata[2])){
- return;
- }
- let row_index = rowLocation(y)[2];
- let col_index = colLocation(x)[2];
- let margeset = menuButton.mergeborer(Store.flowdata, row_index, col_index);
- if(!!margeset){
- row_index = margeset.row[2];
- col_index = margeset.column[2];
- }
- if(_this.hyperlink == null || _this.hyperlink[row_index + "_" + col_index] == null){
- return;
- }
- let item = _this.hyperlink[row_index + "_" + col_index];
- let linkTooltip = item.linkTooltip;
- if(linkTooltip == null || linkTooltip.replace(/\s/g, '') == ''){
- linkTooltip = item.linkAddress;
- }
- let row = Store.visibledatarow[row_index],
- row_pre = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
- let col = Store.visibledatacolumn[col_index],
- col_pre = col_index - 1 == -1 ? 0 : Store.visibledatacolumn[col_index - 1];
- if(!!margeset){
- row = margeset.row[1];
- row_pre = margeset.row[0];
-
- col = margeset.column[1];
- col_pre = margeset.column[0];
- }
- let html = `<div id="luckysheet-hyperlink-overshow" style="background:#fff;padding:5px 10px;border:1px solid #000;box-shadow:2px 2px #999;position:absolute;left:${col_pre}px;top:${row + 5}px;z-index:100;">
- <div>${linkTooltip}</div>
- <div>单击鼠标可以追踪</div>
- </div>`;
- $(html).appendTo($("#luckysheet-cell-main"));
- },
- ref: function(historyHyperlink, currentHyperlink, sheetIndex, d, range){
- let _this = this;
- if (Store.clearjfundo) {
- Store.jfundo.length = 0;
- 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[0]);
- }
- setTimeout(function () {
- luckysheetrefreshgrid();
- }, 1);
- }
- }
- export default hyperlinkCtrl;
|