| | |
| | | self.$dropZone = $cont.find('.file-drop-zone'); |
| | | self.$progress = $cont.find('.kv-upload-progress'); |
| | | self.$btnUpload = $cont.find('.fileinput-upload'); |
| | | self.$batchDowCss = $cont.find('.batchDowCss'); |
| | | self.$captionContainer = $h.getElement(options, 'elCaptionContainer', $cont.find('.file-caption')); |
| | | self.$caption = $h.getElement(options, 'elCaptionText', $cont.find('.file-caption-name')); |
| | | if (!$h.isEmpty(self.msgPlaceholder)) { |
| | |
| | | }; |
| | | rm.reset(); |
| | | }, |
| | | //这里是模板 xin 2022-9-29 17:20:13 |
| | | _initTemplateDefaults: function () { |
| | | var self = this, tMain1, tMain2, tPreview, tFileIcon, tClose, tCaption, tBtnDefault, tBtnLink, tBtnBrowse, |
| | | var self = this, tMain1, tMain2, tPreview, tFileIcon, tClose, tCaption, tBtnDefault, tBtnLink, tBtnBrowse,tBtnBatchDownload, |
| | | tModalMain, tModal, tProgress, tSize, tFooter, tActions, tActionDelete, tActionUpload, tActionDownload, |
| | | tActionZoom, tActionDrag, tIndicator, tTagBef, tTagBef1, tTagBef2, tTagAft, tGeneric, tHtml, tImage, |
| | | tText, tOffice, tGdocs, tVideo, tAudio, tFlash, tObject, tPdf, tOther, tStyle, tZoomCache, vDefaultDim, |
| | |
| | | ' {pause}\n' + |
| | | ' {upload}\n' + |
| | | ' {browse}\n' + |
| | | ' {batchDownload}\n' + |
| | | ($h.isBs(5) ? '' : ' </div>\n') + |
| | | ' </div>' |
| | | '</div>'; |
| | | tMain2 = '{preview}\n<div class="kv-upload-progress kv-hidden"></div>\n<div class="clearfix"></div>\n' + |
| | | '<span class="{class}">{remove}\n{cancel}\n{upload}\n{browse}\n</span>'; |
| | | '<span class="{class}">{remove}\n{cancel}\n{upload}\n{browse}{batchDownload}\n</span>'; |
| | | tPreview = '<div class="file-preview {class}">\n' + |
| | | ' {close}' + |
| | | ' <div class="{dropClass} clearfix">\n' + |
| | |
| | | tBtnLink = '<a href="{href}" title="{title}" class="{css}" {status} {tabIndexConfig}>{icon} {label}</a>'; |
| | | //noinspection HtmlUnknownAttribute |
| | | tBtnBrowse = '<div class="{css}" {status} {tabIndexConfig}>{icon} {label}</div>'; |
| | | tBtnBatchDownload = '<div class="{css}" title="{title}" {status} {tabIndexConfig}>{icon} {label}</div>'; |
| | | tModalLabel = $h.MODAL_ID + 'Label'; |
| | | tModalMain = '<div id="' + $h.MODAL_ID + '" class="file-zoom-dialog modal fade" ' + |
| | | 'aria-labelledby="' + tModalLabel + '" {tabIndexConfig}></div>'; |
| | | tModal = '<div class="modal-dialog modal-lg{rtl}" role="document">\n' + |
| | | ' <div class="modal-content">\n' + |
| | | ' <div class="modal-header kv-zoom-header">\n' + |
| | | ' <h6 class="modal-title kv-zoom-title" id="' + tModalLabel + '"><span class="kv-zoom-caption"></span> <span class="kv-zoom-size"></span></h6>\n' + |
| | | ' <div class="kv-zoom-actions">{search}{toggleheader}{fullscreen}{borderless}{close}</div>\n' + |
| | | ' <h6 class="modal-title kv-zoom-title" id="' + tModalLabel + '">' + |
| | | ' <span class="kv-zoom-caption"></span> <span class="kv-zoom-size"></span>' + |
| | | // ' <span class="number-of-views" title="查看次数" style="margin-left: 20px;padding: 0px 15px">' + |
| | | // ' <i class="bi bi-eye"></i><span class="viewsNumber" style="color:#1f62a8;padding-left: 6px;font-size: 12px"></span></span>' + |
| | | // ' <span class="amount-of-downloads" title="下载次数">' + |
| | | // ' <i class="bi bi-arrow-bar-down"></i><span class="downNumber" style="color:#1f62a8;padding-left: 6px;font-size: 12px"></span></span>' + |
| | | ' </h6>\n' + |
| | | ' <div class="kv-zoom-actions">{toggleheader}{fullscreen}{borderless}{close}</div>\n' +//{left}{right}{search} |
| | | ' </div>\n' + |
| | | ' <div class="floating-buttons"></div>\n' + |
| | | ' <div class="kv-zoom-body file-zoom-content {zoomFrameClass}"></div>\n' + '{prev} {next}\n' + |
| | |
| | | '{drag}\n' + |
| | | '<div class="clearfix"></div>'; |
| | | //noinspection HtmlUnknownAttribute |
| | | tActionDelete = '<button type="button" class="kv-file-remove {removeClass}" ' + |
| | | 'title="{removeTitle}" {dataUrl}{dataKey}>{removeIcon}</button>\n'; |
| | | tActionUpload = '<button type="button" class="kv-file-upload {uploadClass}" title="{uploadTitle}">' + |
| | | '{uploadIcon}</button>'; |
| | | tActionDelete = '<a class="kv-file-remove {removeClass}" ' + |
| | | 'title="{removeTitle}" {dataUrl}{dataKey}>{removeIcon}</a>\n'; |
| | | // tActionDelete = '<button type="button" class="kv-file-remove {removeClass}" ' + |
| | | // 'title="{removeTitle}" {dataUrl}{dataKey}>{removeIcon}</button>\n'; |
| | | tActionUpload = '<a class="kv-file-upload {uploadClass}" title="{uploadTitle}">' + |
| | | '{uploadIcon}</a>'; |
| | | // tActionUpload = '<button type="button" class="kv-file-upload {uploadClass}" title="{uploadTitle}">' + |
| | | // '{uploadIcon}</button>'; |
| | | tActionDownload = '<a class="kv-file-download {downloadClass}" title="{downloadTitle}" ' + |
| | | 'href="{downloadUrl}" download="{caption}" target="_blank">{downloadIcon}</a>'; |
| | | tActionZoom = '<button type="button" class="kv-file-zoom {zoomClass}" ' + |
| | | 'title="{zoomTitle}">{zoomIcon}</button>'; |
| | | tActionZoom = '<a class="kv-file-zoom {zoomClass}" ' + |
| | | 'title="{zoomTitle}">{zoomIcon}</a>'; |
| | | // tActionZoom = '<button type="button" class="kv-file-zoom {zoomClass}" ' + |
| | | // 'title="{zoomTitle}">{zoomIcon}</button>'; |
| | | tActionDrag = '<span class="file-drag-handle {dragClass}" title="{dragTitle}">{dragIcon}</span>'; |
| | | tIndicator = '<div class="file-upload-indicator" title="{indicatorTitle}">{indicator}</div>'; |
| | | tTagBef = '<div class="file-preview-frame {frameClass}" id="{previewId}" data-fileindex="{fileindex}"' + |
| | |
| | | btnDefault: tBtnDefault, |
| | | btnLink: tBtnLink, |
| | | btnBrowse: tBtnBrowse, |
| | | btnBatchDownload:tBtnBatchDownload, |
| | | zoomCache: tZoomCache |
| | | }, |
| | | previewMarkupTags: { |
| | |
| | | uploadRetryIcon: '<i class="bi-arrow-clockwise"></i>', |
| | | uploadRetryTitle: 'Retry upload', |
| | | downloadIcon: '<i class="bi-download"></i>', |
| | | batchDownload: '<i class="bi-download"></i>', |
| | | downloadClass: defBtnCss1, |
| | | downloadTitle: 'Download file', |
| | | zoomIcon: '<i class="bi-zoom-in"></i>', |
| | |
| | | if (len === 0) { |
| | | return {content: '', caption: ''}; |
| | | } |
| | | for (i = 0; i < len; i++) { |
| | | for (i = 0; i < len; i++) {//遍历存在的附件信息 xin 2022-9-28 16:10:15 |
| | | content = self.previewCache.get(i); |
| | | html = self.reversePreviewOrder ? (content + html) : (html + content); |
| | | } |
| | |
| | | 'fullscreen': self._getZoomButton('fullscreen'), |
| | | 'borderless': self._getZoomButton('borderless'), |
| | | 'close': self._getZoomButton('close'), |
| | | 'search':self._getZoomButton('search') |
| | | 'search':self._getZoomButton('search'), |
| | | 'left':self._getZoomButton('left'), |
| | | 'right':self._getZoomButton('right') |
| | | }); |
| | | }, |
| | | _imageRotateEvent:function(type){ |
| | | if (isFileInputImage == null) { |
| | | return; |
| | | } |
| | | var self = this, img = self.$modal.find('.kv-zoom-body').find('img'); |
| | | if (type == 'left') {//左旋转 |
| | | isFileInputImage.imageCurrent = (isFileInputImage.imageCurrent - 90) % 360; |
| | | } else if (type == 'right') {//右旋转 |
| | | isFileInputImage.imageCurrent = (isFileInputImage.imageCurrent + 90) % 360; |
| | | } |
| | | img.css('transform', 'rotate(' + isFileInputImage.imageCurrent + 'deg)'); |
| | | }, |
| | | _listenModalEvent: function (event) { |
| | | var self = this, $modal = self.$modal, getParams = function (e) { |
| | | return { |
| | | sourceEvent: e, |
| | | previewId: $modal.data('previewId'), |
| | | modal: $modal |
| | | modal: $modal, |
| | | viewerIndex:self.viewerIndex//图片定位用 xin 2022-9-30 15:11:58 |
| | | }; |
| | | }; |
| | | $modal.on(event + '.bs.modal', function (e) { |
| | |
| | | $modal.focus(); |
| | | }, |
| | | _setZoomContent: function ($frame, navigate) { |
| | | var self = this, $content, tmplt, body, title, $body, $dataEl, config, previewId = $frame.attr('id'), |
| | | $zoomPreview = self._getZoom(previewId), $modal = self.$modal, $tmp, desc, $desc, |
| | | var self = this, $content, tmplt, body, title,logTitle, $body, $dataEl, config, previewId = $frame.attr('id'), |
| | | $zoomPreview = self._getZoom(previewId), $modal = self.$modal, $tmp, desc, $desc,viewsNumber,downNumber, |
| | | $btnFull = $modal.find('.btn-kv-fullscreen'), $btnBord = $modal.find('.btn-kv-borderless'), cap, size, |
| | | $btnTogh = $modal.find('.btn-kv-toggleheader'), dir = navigate === 'prev' ? 'Left' : 'Right', |
| | | slideIn = 'slideIn' + dir, slideOut = 'slideOut' + dir, parsed, zoomData = $frame.data('zoom'), |
| | | $search = $modal.find('.btn-kv-search'); |
| | | $search = $modal.find('.btn-kv-search'),$left = $modal.find('.btn-kv-left'),$right = $modal.find('.btn-kv-right'); |
| | | if (zoomData) { |
| | | zoomData = decodeURIComponent(zoomData); |
| | | parsed = $zoomPreview.html().replace(self.zoomPlaceholder, '').setTokens({zoomData: zoomData}); |
| | |
| | | cap = $frame.data('caption') || self.msgZoomModalHeading; |
| | | size = $frame.data('size') || ''; |
| | | desc = $frame.data('description') || ''; |
| | | $modal.find('.kv-zoom-caption').attr('title', cap).html(cap); |
| | | // //修改图片浏览模式 xin 2022-9-29 16:08:55 |
| | | if (self.initialPreview != null && self.initialPreview.length > 0) { |
| | | body = (tmplt == 'image' ? '<div style="display: none">' + body + '</div><ul style="display: none">' : body); |
| | | let n = 0; |
| | | for (let i = 0; i < self.initialPreview.length; i++) { |
| | | let c = self.initialPreviewConfig[i]; |
| | | if (tmplt == 'image' && c.filetype.indexOf('image') != -1) { |
| | | body += '<li><img src="' + self.initialPreview[i] + '" alt="' + c.caption + '"></li>' |
| | | if (c.caption == cap) { |
| | | self.viewerIndex = n; |
| | | } |
| | | n++; |
| | | } |
| | | if (c.caption == cap) { |
| | | viewsNumber = c.viewsNumber || 0; |
| | | downNumber = c.downNumber || 0; |
| | | } |
| | | } |
| | | body = (tmplt == 'image' ? body + '</ul>' : body); |
| | | } |
| | | //显示次数 xin 2022-9-28 16:56:55(暂时注释) |
| | | // $modal.find('.viewsNumber').html(viewsNumber); |
| | | // $modal.find('.downNumber').html(downNumber); |
| | | //标题太长,限制显示25个 xin 2022-9-28 15:45:48 |
| | | if(cap.length > 30){ |
| | | logTitle=cap.substring(0,30)+'...'; |
| | | }else{ |
| | | logTitle=cap; |
| | | } |
| | | $modal.find('.kv-zoom-caption').attr('title', cap).html(logTitle); |
| | | $modal.find('.kv-zoom-size').html(size); |
| | | $desc = $modal.find('.kv-zoom-description').hide(); |
| | | if (desc) { |
| | |
| | | if(isFileInputImage!=null){ |
| | | isFileInputImage.show(); |
| | | } |
| | | }); |
| | | self._handler($left,'click',function () { |
| | | self._imageRotateEvent('left'); |
| | | }); |
| | | self._handler($right,'click',function () { |
| | | self._imageRotateEvent('right'); |
| | | }); |
| | | self._handler($btnTogh, 'click', function () { |
| | | var $header = $modal.find('.modal-header'), $floatBar = $modal.find('.floating-buttons'), |
| | |
| | | self._setZoomContent($targFrame, dir); |
| | | } |
| | | self._initZoomButtons(); |
| | | self._raise('filezoom' + dir, {'previewId': previewId, modal: self.$modal}); |
| | | self._raise('filezoom' + dir, {'previewId': previewId, modal: self.$modal,viewerIndex:self.viewerIndex}); |
| | | }, |
| | | _initZoomButton: function () { |
| | | var self = this; |
| | | var self = this,vindex=0; |
| | | self.$preview.find('.kv-file-content').each(function () { |
| | | var $el = $(this); |
| | | self._handler($el, 'dblclick', function () {//双击打开附件 xin 2022-9-28 10:29:37 |
| | | self._zoomPreview($el); |
| | | }); |
| | | }); |
| | | self.$preview.find('.kv-file-zoom').each(function () { |
| | | var $el = $(this); |
| | | self._handler($el, 'click', function () { |
| | |
| | | var self = this; |
| | | return self.mimeTypeAliases[ftype] || ftype; |
| | | }, |
| | | //创建试图 xin 2022-9-28 16:06:29 |
| | | _generatePreviewTemplate: function ( |
| | | cat, |
| | | data, |
| | |
| | | config, title = caption, alt = caption, typeCss = 'type-default', getContent, |
| | | footer = foot || self._renderFileFooter(cat, caption, size, 'auto', isError), |
| | | forcePrevIcon = self.preferIconicPreview, forceZoomIcon = self.preferIconicZoomPreview, |
| | | newCat = forcePrevIcon ? (cat == 'image' ? cat : 'other') : cat; |
| | | newCat = forcePrevIcon ? (cat == 'image' || cat=='video' ? cat : 'other') : cat; |
| | | config = screenW < 400 ? (self.previewSettingsSmall[newCat] || self.defaults.previewSettingsSmall[newCat]) : |
| | | (self.previewSettings[newCat] || self.defaults.previewSettings[newCat]); |
| | | if (config) { |
| | |
| | | if (typeof self.sanitizeZoomCache === 'function') { |
| | | zoomContent = self.sanitizeZoomCache(zoomContent); |
| | | } |
| | | prevContent = getContent((forcePrevIcon ? (cat == 'image' ? cat : 'other') : cat), data, false, 'kv-preview-thumb', zoomData); |
| | | prevContent = getContent((forcePrevIcon ? (cat == 'image' || cat=='video' ? cat : 'other') : cat), data, false, 'kv-preview-thumb', zoomData); |
| | | return prevContent.setTokens({zoomCache: zoomContent}); |
| | | }, |
| | | _addToPreview: function ($preview, content) { |
| | |
| | | $h.addCss($el, 'file-no-browse'); |
| | | } |
| | | }, |
| | | _initBatchDownload:function($container){//批量下载触发事件 xin 2022-8-4 09:29:40 |
| | | var self = this, $batchDowCss = $container.find('.batchDowCss'); |
| | | if (self.showBatchDownload && self.initialPreview !='') { |
| | | let elemIF = null; |
| | | self._handler($batchDowCss, 'click', function (e) { |
| | | let preview = self.initialPreviewConfig; |
| | | if (preview != null && preview.length > 0) { |
| | | for (let p = 0; p < preview.length; p++) { |
| | | let downloadUrl = preview[p].downloadUrl; |
| | | if (downloadUrl != null && downloadUrl != '') { |
| | | try { |
| | | elemIF = document.createElement("iframe"); |
| | | elemIF.src = downloadUrl; |
| | | elemIF.style.display = "none"; |
| | | document.body.appendChild(elemIF); |
| | | } catch (e) { |
| | | layer.msg("批量下载异常!"); |
| | | } |
| | | } |
| | | } |
| | | // if (elemIF != null) { |
| | | // $(elemIF).remove(); |
| | | // } |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | _initClickable: function () { |
| | | var self = this, $zone, $tmpZone; |
| | | if (!self.isClickable) { |
| | |
| | | $h.cspBuffer.apply($container); |
| | | $container.insertBefore(self.$element).attr(attribs); |
| | | self._initBrowse($container); |
| | | self._initBatchDownload($container); |
| | | if (self.theme) { |
| | | $container.addClass('theme-' + self.theme); |
| | | } |
| | |
| | | $el.insertAfter($container); |
| | | $h.setHtml($container, self._renderMain()); |
| | | self._initBrowse($container); |
| | | self._initBatchDownload($container); |
| | | self._validateDisabled(); |
| | | }, |
| | | _validateDisabled: function () { |
| | |
| | | 'remove': self._renderButton('remove'), |
| | | 'cancel': self._renderButton('cancel'), |
| | | 'pause': self._renderButton('pause'), |
| | | 'browse': self._renderButton('browse') |
| | | 'browse': self._renderButton('browse'), |
| | | 'batchDownload':self._renderButton('batchDownload') |
| | | }); |
| | | |
| | | }, |
| | |
| | | } |
| | | tmplt = self._getLayoutTemplate('btnBrowse'); |
| | | break; |
| | | case 'batchDownload': |
| | | if (!self.showBatchDownload || self.initialPreview =='') { |
| | | return ''; |
| | | } |
| | | tmplt = self._getLayoutTemplate('btnBatchDownload'); |
| | | break; |
| | | default: |
| | | return ''; |
| | | } |
| | | tmplt = self._setTabIndex(type, tmplt); |
| | | |
| | | css += type === 'browse' ? ' btn-file' : ' fileinput-' + type + ' fileinput-' + type + '-button'; |
| | | css += type === 'browse' ? ' btn-file' : (type==='batchDownload'?' batchDowCss':' fileinput-' + type + ' fileinput-' + type + '-button'); |
| | | if (!$h.isEmpty(label)) { |
| | | label = ' <span class="' + self.buttonLabelClass + '">' + label + '</span>'; |
| | | } |
| | |
| | | out = $h.replaceTags(out, self.previewThumbTags); |
| | | return out; |
| | | }, |
| | | //生成脚部按钮信息 xin 2022-9-28 16:11:52 |
| | | _renderFileActions: function ( |
| | | cfg, |
| | | showUpl, |
| | |
| | | var IFRAME_ATTRIBS = 'class="kv-preview-data file-preview-pdf" src="{renderer}?file={data}" {style}', |
| | | defBtnCss1 = 'btn btn-sm btn-kv ' + $h.defaultButtonCss(), defBtnCss2 = 'btn ' + $h.defaultButtonCss(); |
| | | |
| | | $.fn.fileinput.defaults = { |
| | | $.fn.fileinput.defaults = {//初始化 xin 2022-9-29 17:36:25 |
| | | language: 'en', |
| | | bytesToKB: 1024, |
| | | showCaption: true, |
| | | showBrowse: true, |
| | | showBatchDownload:false, |
| | | showPreview: true, |
| | | showRemove: true, |
| | | showUpload: true, |
| | |
| | | showConsoleLogs: false, |
| | | browseOnZoneClick: false, |
| | | autoReplace: false, |
| | | viewerIndex:0, |
| | | showDescriptionClose: true, |
| | | autoOrientImage: function () { // applicable for JPEG images only and non ios safari |
| | | var ua = window.navigator.userAgent, webkit = !!ua.match(/WebKit/i), |
| | |
| | | fullscreen: '<i class="bi-arrows-fullscreen"></i>', |
| | | borderless: '<i class="bi-arrows-angle-expand"></i>', |
| | | close: '<i class="bi-x-lg"></i>', |
| | | search: '<i class="bi bi-search"></i>' |
| | | search: '<i class="bi bi-search"></i>', |
| | | left:'<i class="bi bi-arrow-90deg-left"></i>', |
| | | right:'<i class="bi bi-arrow-90deg-right"></i>' |
| | | }, |
| | | previewZoomButtonClasses: { |
| | | prev: 'btn btn-default btn-outline-secondary btn-navigate', |
| | |
| | | fullscreen: defBtnCss1, |
| | | borderless: defBtnCss1, |
| | | close: defBtnCss1, |
| | | search:defBtnCss1 |
| | | search:defBtnCss1, |
| | | left:defBtnCss1, |
| | | right: defBtnCss1 |
| | | }, |
| | | previewTemplates: {}, |
| | | previewContentTemplates: {}, |
| | |
| | | buttonLabelClass: 'hidden-xs', |
| | | browseIcon: '<i class="bi-folder2-open"></i> ', |
| | | browseClass: 'btn btn-primary', |
| | | batchDownloadClass:'btn btn-secondary', |
| | | batchDownloadIcon:'<i class="bi bi-arrow-bar-down"></i>', |
| | | removeIcon: '<i class="bi-trash"></i>', |
| | | removeClass: defBtnCss2, |
| | | cancelIcon: '<i class="bi-slash-circle"></i>', |
| | |
| | | upload: 500, |
| | | cancel: null, |
| | | pause: null, |
| | | modal: -1 |
| | | modal: -1, |
| | | batchDownload:500 |
| | | } |
| | | }; |
| | | |
| | |
| | | fileSingle: 'file', |
| | | filePlural: 'files', |
| | | browseLabel: 'Browse …', |
| | | batchDownloadLabel:'批量下载', |
| | | batchDownloadTitle:'批量下载有下载按钮的附件', |
| | | removeLabel: 'Remove', |
| | | removeTitle: 'Clear all unprocessed files', |
| | | cancelLabel: 'Cancel', |
| | |
| | | borderless: 'Toggle borderless mode', |
| | | close: 'Close detailed preview', |
| | | search:'放大图片预览', |
| | | left:'全部左旋转', |
| | | right:'全部右旋转' |
| | | } |
| | | }; |
| | | |