n20-common-lib 1.2.39 → 1.2.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/package.json +88 -88
- package/src/_qiankun/index.js +113 -113
- package/src/_qiankun/postMessage.js +48 -48
- package/src/assets/css/_coreLib.scss +35 -35
- package/src/assets/css/cl-anchor.scss +23 -23
- package/src/assets/css/cl-approve-card.scss +58 -58
- package/src/assets/css/cl-dialog.scss +99 -99
- package/src/assets/css/cl-drag-list.scss +22 -22
- package/src/assets/css/cl-empty.scss +10 -10
- package/src/assets/css/cl-expandable-pane.scss +26 -26
- package/src/assets/css/cl-expandable.scss +24 -24
- package/src/assets/css/cl-file-upload-table.scss +11 -11
- package/src/assets/css/cl-filter.scss +4 -4
- package/src/assets/css/cl-flow-step.scss +185 -185
- package/src/assets/css/cl-footer-box.scss +10 -10
- package/src/assets/css/cl-form-item.scss +612 -612
- package/src/assets/css/cl-general-card.scss +11 -11
- package/src/assets/css/cl-layout-aside.scss +92 -92
- package/src/assets/css/cl-layout-content.scss +16 -16
- package/src/assets/css/cl-layout-header.scss +73 -73
- package/src/assets/css/cl-layout-tabs.scss +87 -87
- package/src/assets/css/cl-layout.scss +97 -97
- package/src/assets/css/cl-login-temporary.scss +37 -37
- package/src/assets/css/cl-message.scss +75 -75
- package/src/assets/css/cl-more-tab.scss +98 -98
- package/src/assets/css/cl-nav-menu.scss +5 -5
- package/src/assets/css/cl-pagination.scss +128 -128
- package/src/assets/css/cl-secondary-tab.scss +53 -53
- package/src/assets/css/cl-showcolumn.scss +23 -23
- package/src/assets/css/cl-sifting.scss +51 -51
- package/src/assets/css/cl-statis.scss +42 -42
- package/src/assets/css/cl-step.scss +73 -73
- package/src/assets/css/cl-suspend.scss +19 -19
- package/src/assets/css/cl-tertiary-tab.scss +54 -54
- package/src/assets/css/cl-upload.scss +41 -41
- package/src/assets/css/cl-worn-pagination.scss +50 -50
- package/src/assets/css/el-button.scss +173 -173
- package/src/assets/css/el-table.scss +79 -79
- package/src/assets/css/element-variables.scss +1061 -1061
- package/src/assets/css/element.dev.scss +21 -21
- package/src/assets/css/font-icon.scss +27 -27
- package/src/assets/css/index.dev.scss +4 -4
- package/src/assets/css/index.scss +11 -11
- package/src/assets/css/normalize.scss +726 -726
- package/src/assets/css/rootvar.scss +139 -139
- package/src/assets/css/select.scss +25 -25
- package/src/assets/css/title-pop.scss +4 -4
- package/src/assets/getJsonc.js +50 -50
- package/src/assets/realUrl.js +12 -12
- package/src/components/Anchor/AnchorItem.vue +29 -29
- package/src/components/Anchor/index.vue +185 -185
- package/src/components/ApprovalButtons/index.vue +233 -233
- package/src/components/ApprovalCard/index.vue +128 -128
- package/src/components/ApprovalRecord/approvalImg.vue +44 -44
- package/src/components/ApprovalRecord/flowDialog.vue +45 -45
- package/src/components/ApprovalRecord/index.vue +59 -59
- package/src/components/Button/button-group.vue +150 -150
- package/src/components/Button/icon-group-button.vue +61 -61
- package/src/components/Button/index.vue +56 -56
- package/src/components/CascaderArea/index.vue +103 -103
- package/src/components/ContentLoading/index.vue +41 -41
- package/src/components/ContentNull/index.vue +19 -19
- package/src/components/DatePicker/index.vue +27 -27
- package/src/components/DatePicker/por.vue +169 -169
- package/src/components/Dialog/index.vue +26 -26
- package/src/components/Dialog/indexO.vue +116 -116
- package/src/components/DragList/index.vue +75 -75
- package/src/components/Empty/img/abnormal.svg +108 -108
- package/src/components/Empty/img/dispose.svg +71 -71
- package/src/components/Empty/img/empty.svg +57 -57
- package/src/components/Empty/img/general.svg +58 -58
- package/src/components/Empty/img/lock.svg +57 -57
- package/src/components/Empty/img/network.svg +59 -59
- package/src/components/Empty/img/relevant.svg +68 -68
- package/src/components/Empty/img/search.svg +72 -72
- package/src/components/Empty/index.vue +92 -92
- package/src/components/Expandable/index.vue +49 -49
- package/src/components/Expandable/main.vue +52 -52
- package/src/components/FileExportAsync/index.vue +178 -178
- package/src/components/FileUploadTable/index.vue +484 -484
- package/src/components/Filters/index.vue +371 -371
- package/src/components/Filters/indexO.vue +104 -104
- package/src/components/FlowStep/index.vue +68 -68
- package/src/components/FooterBox/index.vue +21 -21
- package/src/components/GeneralCard/index.vue +15 -15
- package/src/components/InputNumber/index.vue +169 -169
- package/src/components/InputNumber/numberRange.vue +47 -47
- package/src/components/InputSearch/index.vue +75 -75
- package/src/components/Layout/AsideNav/index.vue +120 -119
- package/src/components/Layout/AsideNav/menuItem.vue +34 -34
- package/src/components/Layout/AsideNav/submenuTitle.vue +26 -26
- package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
- package/src/components/Layout/HeaderWrap/index.vue +371 -371
- package/src/components/Layout/HeaderWrap/noticePop.vue +316 -316
- package/src/components/Layout/SubContent/index.vue +127 -127
- package/src/components/Layout/TabsNav/index.vue +170 -170
- package/src/components/Layout/index.vue +518 -518
- package/src/components/Layout/utils.js +12 -12
- package/src/components/LoginTemporary/form.vue +570 -570
- package/src/components/LoginTemporary/index.vue +139 -139
- package/src/components/LoginTemporary/retrievePw.vue +372 -372
- package/src/components/MicroApp/index.js +67 -67
- package/src/components/MicroFrame/index.vue +95 -95
- package/src/components/MoreTab/index.vue +232 -232
- package/src/components/NavMenu/index.vue +60 -60
- package/src/components/PageLayout/page.vue +15 -15
- package/src/components/Pagination/index.vue +165 -165
- package/src/components/SecondaryTab/index.vue +58 -58
- package/src/components/SelectLazy/index.vue +75 -75
- package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
- package/src/components/SelectTree/index.vue +205 -205
- package/src/components/ShowColumn/index.vue +213 -213
- package/src/components/Sifting/index.vue +99 -99
- package/src/components/Statis/index.vue +97 -97
- package/src/components/Statis/statisItem.vue +54 -54
- package/src/components/Statis/statisPopover.vue +55 -55
- package/src/components/Step/index.vue +38 -38
- package/src/components/Suspend/index.vue +72 -72
- package/src/components/Table/index.vue +209 -209
- package/src/components/Table/indexO.vue +149 -149
- package/src/components/Task/index.vue +26 -26
- package/src/components/TertiaryTab/index.vue +63 -63
- package/src/components/TimePicker/index.vue +28 -28
- package/src/components/Upload/index.vue +242 -242
- package/src/components/WornPagination/index.vue +73 -73
- package/src/directives/VClickOutside/index.js +19 -19
- package/src/directives/VHas/index.js +58 -58
- package/src/directives/VMove/index.js +42 -42
- package/src/directives/VTitle/index.js +69 -69
- package/src/directives/VTitle/tooltip.vue +21 -21
- package/src/index.js +232 -232
- package/src/plugins/CompatibleOld/index.js +57 -57
- package/src/plugins/Print/index.js +4 -4
- package/src/plugins/Print/print-js/.babelrc +12 -12
- package/src/plugins/Print/print-js/LICENSE +21 -21
- package/src/plugins/Print/print-js/README.md +98 -98
- package/src/plugins/Print/print-js/dist/print.css +96 -96
- package/src/plugins/Print/print-js/dist/print.js +990 -990
- package/src/plugins/Print/print-js/package.json +60 -60
- package/src/plugins/Print/print-js/src/index.d.ts +45 -45
- package/src/plugins/Print/print-js/src/index.js +10 -10
- package/src/plugins/Print/print-js/src/js/browser.js +33 -33
- package/src/plugins/Print/print-js/src/js/functions.js +103 -103
- package/src/plugins/Print/print-js/src/js/html.js +70 -70
- package/src/plugins/Print/print-js/src/js/image.js +48 -48
- package/src/plugins/Print/print-js/src/js/init.js +168 -168
- package/src/plugins/Print/print-js/src/js/json.js +109 -109
- package/src/plugins/Print/print-js/src/js/modal.js +62 -62
- package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
- package/src/plugins/Print/print-js/src/js/print.js +102 -102
- package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
- package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
- package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
- package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
- package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
- package/src/plugins/Print/print.js +2 -2
- package/src/plugins/Print/print.scss +1 -1
- package/src/plugins/SetMenuTree/index.vue +41 -41
- package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
- package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
- package/src/plugins/SetMenuTree/utils.js +74 -74
- package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
- package/src/plugins/Sign/index.js +65 -65
- package/src/plugins/Sign/sign.js +1 -1
- package/src/plugins/setTabsForSub.js +2 -2
- package/src/utils/auth.js +53 -53
- package/src/utils/axios.js +203 -203
- package/src/utils/downloadBlob.js +19 -19
- package/src/utils/forEachs.js +16 -16
- package/src/utils/getScrollContainer.js +43 -43
- package/src/utils/i18n/cn2hk.json +1270 -1270
- package/src/utils/i18n/index.js +50 -50
- package/src/utils/list2tree.js +36 -36
- package/src/utils/msgboxPor.js +26 -26
- package/src/utils/print.js +161 -161
- package/src/utils/relaNo.js +72 -72
- package/src/utils/repairElementUI.js +95 -66
- package/src/utils/urlToGo.js +82 -82
- package/style/css/normalize.scss +726 -0
- package/style/index.css +3 -3
- package/style/index.css.map +1 -1
- package/style/pageDemo/demo-1.vue +131 -0
- package/style/pageDemo/demo-2.vue +35 -0
- package/style/pageDemo/demo-3.vue +22 -0
- package/style/pageDemo/seeCode.js +20 -0
- package/style/server-config.jsonc +606 -0
- package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +0 -185
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
const Modal = {
|
|
2
|
-
show (params) {
|
|
3
|
-
// Build modal
|
|
4
|
-
const modalStyle = 'font-family:sans-serif; ' +
|
|
5
|
-
'display:table; ' +
|
|
6
|
-
'text-align:center; ' +
|
|
7
|
-
'font-weight:300; ' +
|
|
8
|
-
'font-size:30px; ' +
|
|
9
|
-
'left:0; top:0;' +
|
|
10
|
-
'position:fixed; ' +
|
|
11
|
-
'z-index: 9990;' +
|
|
12
|
-
'color: #0460B5; ' +
|
|
13
|
-
'width: 100%; ' +
|
|
14
|
-
'height: 100%; ' +
|
|
15
|
-
'background-color:rgba(255,255,255,.9);' +
|
|
16
|
-
'transition: opacity .3s ease;'
|
|
17
|
-
|
|
18
|
-
// Create wrapper
|
|
19
|
-
const printModal = document.createElement('div')
|
|
20
|
-
printModal.setAttribute('style', modalStyle)
|
|
21
|
-
printModal.setAttribute('id', 'printJS-Modal')
|
|
22
|
-
|
|
23
|
-
// Create content div
|
|
24
|
-
const contentDiv = document.createElement('div')
|
|
25
|
-
contentDiv.setAttribute('style', 'display:table-cell; vertical-align:middle; padding-bottom:100px;')
|
|
26
|
-
|
|
27
|
-
// Add close button (requires print.css)
|
|
28
|
-
const closeButton = document.createElement('div')
|
|
29
|
-
closeButton.setAttribute('class', 'printClose')
|
|
30
|
-
closeButton.setAttribute('id', 'printClose')
|
|
31
|
-
contentDiv.appendChild(closeButton)
|
|
32
|
-
|
|
33
|
-
// Add spinner (requires print.css)
|
|
34
|
-
const spinner = document.createElement('span')
|
|
35
|
-
spinner.setAttribute('class', 'printSpinner')
|
|
36
|
-
contentDiv.appendChild(spinner)
|
|
37
|
-
|
|
38
|
-
// Add message
|
|
39
|
-
const messageNode = document.createTextNode(params.modalMessage)
|
|
40
|
-
contentDiv.appendChild(messageNode)
|
|
41
|
-
|
|
42
|
-
// Add contentDiv to printModal
|
|
43
|
-
printModal.appendChild(contentDiv)
|
|
44
|
-
|
|
45
|
-
// Append print modal element to document body
|
|
46
|
-
document.getElementsByTagName('body')[0].appendChild(printModal)
|
|
47
|
-
|
|
48
|
-
// Add event listener to close button
|
|
49
|
-
document.getElementById('printClose').addEventListener('click', function () {
|
|
50
|
-
Modal.close()
|
|
51
|
-
})
|
|
52
|
-
},
|
|
53
|
-
close () {
|
|
54
|
-
const printModal = document.getElementById('printJS-Modal')
|
|
55
|
-
|
|
56
|
-
if (printModal) {
|
|
57
|
-
printModal.parentNode.removeChild(printModal)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export default Modal
|
|
1
|
+
const Modal = {
|
|
2
|
+
show (params) {
|
|
3
|
+
// Build modal
|
|
4
|
+
const modalStyle = 'font-family:sans-serif; ' +
|
|
5
|
+
'display:table; ' +
|
|
6
|
+
'text-align:center; ' +
|
|
7
|
+
'font-weight:300; ' +
|
|
8
|
+
'font-size:30px; ' +
|
|
9
|
+
'left:0; top:0;' +
|
|
10
|
+
'position:fixed; ' +
|
|
11
|
+
'z-index: 9990;' +
|
|
12
|
+
'color: #0460B5; ' +
|
|
13
|
+
'width: 100%; ' +
|
|
14
|
+
'height: 100%; ' +
|
|
15
|
+
'background-color:rgba(255,255,255,.9);' +
|
|
16
|
+
'transition: opacity .3s ease;'
|
|
17
|
+
|
|
18
|
+
// Create wrapper
|
|
19
|
+
const printModal = document.createElement('div')
|
|
20
|
+
printModal.setAttribute('style', modalStyle)
|
|
21
|
+
printModal.setAttribute('id', 'printJS-Modal')
|
|
22
|
+
|
|
23
|
+
// Create content div
|
|
24
|
+
const contentDiv = document.createElement('div')
|
|
25
|
+
contentDiv.setAttribute('style', 'display:table-cell; vertical-align:middle; padding-bottom:100px;')
|
|
26
|
+
|
|
27
|
+
// Add close button (requires print.css)
|
|
28
|
+
const closeButton = document.createElement('div')
|
|
29
|
+
closeButton.setAttribute('class', 'printClose')
|
|
30
|
+
closeButton.setAttribute('id', 'printClose')
|
|
31
|
+
contentDiv.appendChild(closeButton)
|
|
32
|
+
|
|
33
|
+
// Add spinner (requires print.css)
|
|
34
|
+
const spinner = document.createElement('span')
|
|
35
|
+
spinner.setAttribute('class', 'printSpinner')
|
|
36
|
+
contentDiv.appendChild(spinner)
|
|
37
|
+
|
|
38
|
+
// Add message
|
|
39
|
+
const messageNode = document.createTextNode(params.modalMessage)
|
|
40
|
+
contentDiv.appendChild(messageNode)
|
|
41
|
+
|
|
42
|
+
// Add contentDiv to printModal
|
|
43
|
+
printModal.appendChild(contentDiv)
|
|
44
|
+
|
|
45
|
+
// Append print modal element to document body
|
|
46
|
+
document.getElementsByTagName('body')[0].appendChild(printModal)
|
|
47
|
+
|
|
48
|
+
// Add event listener to close button
|
|
49
|
+
document.getElementById('printClose').addEventListener('click', function () {
|
|
50
|
+
Modal.close()
|
|
51
|
+
})
|
|
52
|
+
},
|
|
53
|
+
close () {
|
|
54
|
+
const printModal = document.getElementById('printJS-Modal')
|
|
55
|
+
|
|
56
|
+
if (printModal) {
|
|
57
|
+
printModal.parentNode.removeChild(printModal)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default Modal
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
import Print from './print'
|
|
2
|
-
import { cleanUp } from './functions'
|
|
3
|
-
import Browser from './browser'
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
print: (params, printFrame) => {
|
|
7
|
-
// Check if we have base64 data
|
|
8
|
-
if (params.base64) {
|
|
9
|
-
const bytesArray = Uint8Array.from(atob(params.printable), c => c.charCodeAt(0))
|
|
10
|
-
createBlobAndPrint(params, printFrame, bytesArray)
|
|
11
|
-
return
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// Format pdf url
|
|
15
|
-
params.printable = /^(blob|http|\/\/)/i.test(params.printable)
|
|
16
|
-
? params.printable
|
|
17
|
-
: window.location.origin + (params.printable.charAt(0) !== '/' ? '/' + params.printable : params.printable)
|
|
18
|
-
|
|
19
|
-
// Get the file through a http request (Preload)
|
|
20
|
-
const req = new window.XMLHttpRequest()
|
|
21
|
-
req.responseType = 'arraybuffer'
|
|
22
|
-
|
|
23
|
-
req.addEventListener('error', () => {
|
|
24
|
-
cleanUp(params)
|
|
25
|
-
params.onError(req.statusText, req)
|
|
26
|
-
|
|
27
|
-
// Since we don't have a pdf document available, we will stop the print job
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
req.addEventListener('load', () => {
|
|
31
|
-
// Check for errors
|
|
32
|
-
if ([200, 201].indexOf(req.status) === -1) {
|
|
33
|
-
cleanUp(params)
|
|
34
|
-
params.onError(req.statusText, req)
|
|
35
|
-
|
|
36
|
-
// Since we don't have a pdf document available, we will stop the print job
|
|
37
|
-
return
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Print requested document
|
|
41
|
-
createBlobAndPrint(params, printFrame, req.response)
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
req.open('GET', params.printable, true)
|
|
45
|
-
req.send()
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function createBlobAndPrint(params, printFrame, data) {
|
|
50
|
-
// Pass response or base64 data to a blob and create a local object url
|
|
51
|
-
let localPdf = new window.Blob([data], { type: 'application/pdf' })
|
|
52
|
-
localPdf = window.URL.createObjectURL(localPdf)
|
|
53
|
-
// 启程浏览器打印方法
|
|
54
|
-
if (Browser.isNstc()) {
|
|
55
|
-
window.sendMessage(localPdf)
|
|
56
|
-
} else {
|
|
57
|
-
// Set iframe src with pdf document url
|
|
58
|
-
printFrame.setAttribute('src', localPdf)
|
|
59
|
-
|
|
60
|
-
Print.send(params, printFrame)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
1
|
+
import Print from './print'
|
|
2
|
+
import { cleanUp } from './functions'
|
|
3
|
+
import Browser from './browser'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
print: (params, printFrame) => {
|
|
7
|
+
// Check if we have base64 data
|
|
8
|
+
if (params.base64) {
|
|
9
|
+
const bytesArray = Uint8Array.from(atob(params.printable), c => c.charCodeAt(0))
|
|
10
|
+
createBlobAndPrint(params, printFrame, bytesArray)
|
|
11
|
+
return
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Format pdf url
|
|
15
|
+
params.printable = /^(blob|http|\/\/)/i.test(params.printable)
|
|
16
|
+
? params.printable
|
|
17
|
+
: window.location.origin + (params.printable.charAt(0) !== '/' ? '/' + params.printable : params.printable)
|
|
18
|
+
|
|
19
|
+
// Get the file through a http request (Preload)
|
|
20
|
+
const req = new window.XMLHttpRequest()
|
|
21
|
+
req.responseType = 'arraybuffer'
|
|
22
|
+
|
|
23
|
+
req.addEventListener('error', () => {
|
|
24
|
+
cleanUp(params)
|
|
25
|
+
params.onError(req.statusText, req)
|
|
26
|
+
|
|
27
|
+
// Since we don't have a pdf document available, we will stop the print job
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
req.addEventListener('load', () => {
|
|
31
|
+
// Check for errors
|
|
32
|
+
if ([200, 201].indexOf(req.status) === -1) {
|
|
33
|
+
cleanUp(params)
|
|
34
|
+
params.onError(req.statusText, req)
|
|
35
|
+
|
|
36
|
+
// Since we don't have a pdf document available, we will stop the print job
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Print requested document
|
|
41
|
+
createBlobAndPrint(params, printFrame, req.response)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
req.open('GET', params.printable, true)
|
|
45
|
+
req.send()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function createBlobAndPrint(params, printFrame, data) {
|
|
50
|
+
// Pass response or base64 data to a blob and create a local object url
|
|
51
|
+
let localPdf = new window.Blob([data], { type: 'application/pdf' })
|
|
52
|
+
localPdf = window.URL.createObjectURL(localPdf)
|
|
53
|
+
// 启程浏览器打印方法
|
|
54
|
+
if (Browser.isNstc()) {
|
|
55
|
+
window.sendMessage(localPdf)
|
|
56
|
+
} else {
|
|
57
|
+
// Set iframe src with pdf document url
|
|
58
|
+
printFrame.setAttribute('src', localPdf)
|
|
59
|
+
|
|
60
|
+
Print.send(params, printFrame)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import Browser from './browser'
|
|
2
|
-
import { cleanUp } from './functions'
|
|
3
|
-
|
|
4
|
-
const Print = {
|
|
5
|
-
send: (params, printFrame) => {
|
|
6
|
-
// Append iframe element to document body
|
|
7
|
-
document.getElementsByTagName('body')[0].appendChild(printFrame)
|
|
8
|
-
|
|
9
|
-
// Get iframe element
|
|
10
|
-
const iframeElement = document.getElementById(params.frameId)
|
|
11
|
-
|
|
12
|
-
// Wait for iframe to load all content
|
|
13
|
-
iframeElement.onload = () => {
|
|
14
|
-
if (params.type === 'pdf') {
|
|
15
|
-
// Add a delay for Firefox. In my tests, 1000ms was sufficient but 100ms was not
|
|
16
|
-
if (Browser.isFirefox()) {
|
|
17
|
-
setTimeout(() => performPrint(iframeElement, params), 1000)
|
|
18
|
-
} else {
|
|
19
|
-
performPrint(iframeElement, params)
|
|
20
|
-
}
|
|
21
|
-
return
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// Get iframe element document
|
|
25
|
-
let printDocument = (iframeElement.contentWindow || iframeElement.contentDocument)
|
|
26
|
-
if (printDocument.document) printDocument = printDocument.document
|
|
27
|
-
|
|
28
|
-
// Append printable element to the iframe body
|
|
29
|
-
printDocument.body.appendChild(params.printableElement)
|
|
30
|
-
|
|
31
|
-
// Add custom style
|
|
32
|
-
if (params.type !== 'pdf' && params.style) {
|
|
33
|
-
// Create style element
|
|
34
|
-
const style = document.createElement('style')
|
|
35
|
-
style.innerHTML = params.style
|
|
36
|
-
|
|
37
|
-
// Append style element to iframe's head
|
|
38
|
-
printDocument.head.appendChild(style)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// If printing images, wait for them to load inside the iframe
|
|
42
|
-
const images = printDocument.getElementsByTagName('img')
|
|
43
|
-
|
|
44
|
-
if (images.length > 0) {
|
|
45
|
-
loadIframeImages(Array.from(images)).then(() => performPrint(iframeElement, params))
|
|
46
|
-
} else {
|
|
47
|
-
performPrint(iframeElement, params)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function performPrint (iframeElement, params) {
|
|
54
|
-
try {
|
|
55
|
-
iframeElement.focus()
|
|
56
|
-
|
|
57
|
-
// If Edge or IE, try catch with execCommand
|
|
58
|
-
if (Browser.isEdge() || Browser.isIE()) {
|
|
59
|
-
try {
|
|
60
|
-
iframeElement.contentWindow.document.execCommand('print', false, null)
|
|
61
|
-
} catch (e) {
|
|
62
|
-
iframeElement.contentWindow.print()
|
|
63
|
-
}
|
|
64
|
-
} else {
|
|
65
|
-
// Other browsers
|
|
66
|
-
iframeElement.contentWindow.print()
|
|
67
|
-
}
|
|
68
|
-
} catch (error) {
|
|
69
|
-
params.onError(error)
|
|
70
|
-
} finally {
|
|
71
|
-
if (Browser.isFirefox()) {
|
|
72
|
-
// Move the iframe element off-screen and make it invisible
|
|
73
|
-
iframeElement.style.visibility = 'hidden'
|
|
74
|
-
iframeElement.style.left = '-1px'
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
cleanUp(params)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function loadIframeImages (images) {
|
|
82
|
-
const promises = images.map(image => {
|
|
83
|
-
if (image.src && image.src !== window.location.href) {
|
|
84
|
-
return loadIframeImage(image)
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
return Promise.all(promises)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function loadIframeImage (image) {
|
|
92
|
-
return new Promise(resolve => {
|
|
93
|
-
const pollImage = () => {
|
|
94
|
-
!image || typeof image.naturalWidth === 'undefined' || image.naturalWidth === 0 || !image.complete
|
|
95
|
-
? setTimeout(pollImage, 500)
|
|
96
|
-
: resolve()
|
|
97
|
-
}
|
|
98
|
-
pollImage()
|
|
99
|
-
})
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export default Print
|
|
1
|
+
import Browser from './browser'
|
|
2
|
+
import { cleanUp } from './functions'
|
|
3
|
+
|
|
4
|
+
const Print = {
|
|
5
|
+
send: (params, printFrame) => {
|
|
6
|
+
// Append iframe element to document body
|
|
7
|
+
document.getElementsByTagName('body')[0].appendChild(printFrame)
|
|
8
|
+
|
|
9
|
+
// Get iframe element
|
|
10
|
+
const iframeElement = document.getElementById(params.frameId)
|
|
11
|
+
|
|
12
|
+
// Wait for iframe to load all content
|
|
13
|
+
iframeElement.onload = () => {
|
|
14
|
+
if (params.type === 'pdf') {
|
|
15
|
+
// Add a delay for Firefox. In my tests, 1000ms was sufficient but 100ms was not
|
|
16
|
+
if (Browser.isFirefox()) {
|
|
17
|
+
setTimeout(() => performPrint(iframeElement, params), 1000)
|
|
18
|
+
} else {
|
|
19
|
+
performPrint(iframeElement, params)
|
|
20
|
+
}
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Get iframe element document
|
|
25
|
+
let printDocument = (iframeElement.contentWindow || iframeElement.contentDocument)
|
|
26
|
+
if (printDocument.document) printDocument = printDocument.document
|
|
27
|
+
|
|
28
|
+
// Append printable element to the iframe body
|
|
29
|
+
printDocument.body.appendChild(params.printableElement)
|
|
30
|
+
|
|
31
|
+
// Add custom style
|
|
32
|
+
if (params.type !== 'pdf' && params.style) {
|
|
33
|
+
// Create style element
|
|
34
|
+
const style = document.createElement('style')
|
|
35
|
+
style.innerHTML = params.style
|
|
36
|
+
|
|
37
|
+
// Append style element to iframe's head
|
|
38
|
+
printDocument.head.appendChild(style)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// If printing images, wait for them to load inside the iframe
|
|
42
|
+
const images = printDocument.getElementsByTagName('img')
|
|
43
|
+
|
|
44
|
+
if (images.length > 0) {
|
|
45
|
+
loadIframeImages(Array.from(images)).then(() => performPrint(iframeElement, params))
|
|
46
|
+
} else {
|
|
47
|
+
performPrint(iframeElement, params)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function performPrint (iframeElement, params) {
|
|
54
|
+
try {
|
|
55
|
+
iframeElement.focus()
|
|
56
|
+
|
|
57
|
+
// If Edge or IE, try catch with execCommand
|
|
58
|
+
if (Browser.isEdge() || Browser.isIE()) {
|
|
59
|
+
try {
|
|
60
|
+
iframeElement.contentWindow.document.execCommand('print', false, null)
|
|
61
|
+
} catch (e) {
|
|
62
|
+
iframeElement.contentWindow.print()
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
// Other browsers
|
|
66
|
+
iframeElement.contentWindow.print()
|
|
67
|
+
}
|
|
68
|
+
} catch (error) {
|
|
69
|
+
params.onError(error)
|
|
70
|
+
} finally {
|
|
71
|
+
if (Browser.isFirefox()) {
|
|
72
|
+
// Move the iframe element off-screen and make it invisible
|
|
73
|
+
iframeElement.style.visibility = 'hidden'
|
|
74
|
+
iframeElement.style.left = '-1px'
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
cleanUp(params)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function loadIframeImages (images) {
|
|
82
|
+
const promises = images.map(image => {
|
|
83
|
+
if (image.src && image.src !== window.location.href) {
|
|
84
|
+
return loadIframeImage(image)
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
return Promise.all(promises)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function loadIframeImage (image) {
|
|
92
|
+
return new Promise(resolve => {
|
|
93
|
+
const pollImage = () => {
|
|
94
|
+
!image || typeof image.naturalWidth === 'undefined' || image.naturalWidth === 0 || !image.complete
|
|
95
|
+
? setTimeout(pollImage, 500)
|
|
96
|
+
: resolve()
|
|
97
|
+
}
|
|
98
|
+
pollImage()
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export default Print
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import Print from './print'
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
print: (params, printFrame) => {
|
|
5
|
-
// Create printable element (container)
|
|
6
|
-
params.printableElement = document.createElement('div')
|
|
7
|
-
params.printableElement.setAttribute('style', 'width:100%')
|
|
8
|
-
|
|
9
|
-
// Set our raw html as the printable element inner html content
|
|
10
|
-
params.printableElement.innerHTML = params.printable
|
|
11
|
-
|
|
12
|
-
// Print html contents
|
|
13
|
-
Print.send(params, printFrame)
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
import Print from './print'
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
print: (params, printFrame) => {
|
|
5
|
+
// Create printable element (container)
|
|
6
|
+
params.printableElement = document.createElement('div')
|
|
7
|
+
params.printableElement.setAttribute('style', 'width:100%')
|
|
8
|
+
|
|
9
|
+
// Set our raw html as the printable element inner html content
|
|
10
|
+
params.printableElement.innerHTML = params.printable
|
|
11
|
+
|
|
12
|
+
// Print html contents
|
|
13
|
+
Print.send(params, printFrame)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|--------------------------------------------------------------------------
|
|
3
|
-
| Modules
|
|
4
|
-
|--------------------------------------------------------------------------
|
|
5
|
-
*/
|
|
6
|
-
@import './modules/colors';
|
|
7
|
-
|
|
8
|
-
/*
|
|
9
|
-
|--------------------------------------------------------------------------
|
|
10
|
-
| Partials
|
|
11
|
-
|--------------------------------------------------------------------------
|
|
12
|
-
*/
|
|
13
|
-
@import './partials/modal';
|
|
1
|
+
/*
|
|
2
|
+
|--------------------------------------------------------------------------
|
|
3
|
+
| Modules
|
|
4
|
+
|--------------------------------------------------------------------------
|
|
5
|
+
*/
|
|
6
|
+
@import './modules/colors';
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
|--------------------------------------------------------------------------
|
|
10
|
+
| Partials
|
|
11
|
+
|--------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
@import './partials/modal';
|
|
14
14
|
@import './partials/spinner';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
$blue: hsl(209, 96%, 36%);
|
|
2
|
-
$white: hsl(0, 0%, 100%);
|
|
3
|
-
|
|
4
|
-
/*
|
|
5
|
-
|--------------------------------------------------------------------------
|
|
6
|
-
| Aliases
|
|
7
|
-
|--------------------------------------------------------------------------
|
|
8
|
-
*/
|
|
9
|
-
$primary: $blue;
|
|
1
|
+
$blue: hsl(209, 96%, 36%);
|
|
2
|
+
$white: hsl(0, 0%, 100%);
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
|--------------------------------------------------------------------------
|
|
6
|
+
| Aliases
|
|
7
|
+
|--------------------------------------------------------------------------
|
|
8
|
+
*/
|
|
9
|
+
$primary: $blue;
|
|
10
10
|
$bg-color: rgba($white, .9);
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
.printModal {
|
|
2
|
-
font-family:sans-serif;
|
|
3
|
-
display:flex;
|
|
4
|
-
text-align:center;
|
|
5
|
-
font-weight:300;
|
|
6
|
-
font-size:30px;
|
|
7
|
-
left:0;
|
|
8
|
-
top:0;
|
|
9
|
-
position:absolute;
|
|
10
|
-
color: $primary;
|
|
11
|
-
width: 100%;
|
|
12
|
-
height: 100%;
|
|
13
|
-
background-color: $bg-color;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/*
|
|
17
|
-
|--------------------------------------------------------------------------
|
|
18
|
-
| Close Button
|
|
19
|
-
|--------------------------------------------------------------------------
|
|
20
|
-
*/
|
|
21
|
-
.printClose {
|
|
22
|
-
position:absolute;
|
|
23
|
-
right:10px;
|
|
24
|
-
top:10px;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.printClose:before {
|
|
28
|
-
content: "\00D7";
|
|
29
|
-
font-family: "Helvetica Neue", sans-serif;
|
|
30
|
-
font-weight: 100;
|
|
31
|
-
line-height: 1px;
|
|
32
|
-
padding-top: 0.5em;
|
|
33
|
-
display: block;
|
|
34
|
-
font-size: 2em;
|
|
35
|
-
text-indent: 1px;
|
|
36
|
-
overflow: hidden;
|
|
37
|
-
height: 1.25em;
|
|
38
|
-
width: 1.25em;
|
|
39
|
-
text-align: center;
|
|
40
|
-
cursor: pointer;
|
|
1
|
+
.printModal {
|
|
2
|
+
font-family:sans-serif;
|
|
3
|
+
display:flex;
|
|
4
|
+
text-align:center;
|
|
5
|
+
font-weight:300;
|
|
6
|
+
font-size:30px;
|
|
7
|
+
left:0;
|
|
8
|
+
top:0;
|
|
9
|
+
position:absolute;
|
|
10
|
+
color: $primary;
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 100%;
|
|
13
|
+
background-color: $bg-color;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
|--------------------------------------------------------------------------
|
|
18
|
+
| Close Button
|
|
19
|
+
|--------------------------------------------------------------------------
|
|
20
|
+
*/
|
|
21
|
+
.printClose {
|
|
22
|
+
position:absolute;
|
|
23
|
+
right:10px;
|
|
24
|
+
top:10px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.printClose:before {
|
|
28
|
+
content: "\00D7";
|
|
29
|
+
font-family: "Helvetica Neue", sans-serif;
|
|
30
|
+
font-weight: 100;
|
|
31
|
+
line-height: 1px;
|
|
32
|
+
padding-top: 0.5em;
|
|
33
|
+
display: block;
|
|
34
|
+
font-size: 2em;
|
|
35
|
+
text-indent: 1px;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
height: 1.25em;
|
|
38
|
+
width: 1.25em;
|
|
39
|
+
text-align: center;
|
|
40
|
+
cursor: pointer;
|
|
41
41
|
}
|