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