n20-common-lib 1.2.6 → 1.2.9

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.
Files changed (202) hide show
  1. package/README.md +2 -2
  2. package/package.json +87 -87
  3. package/src/_qiankun/index.js +113 -113
  4. package/src/_qiankun/postMessage.js +48 -48
  5. package/src/assets/css/_coreLib.scss +35 -35
  6. package/src/assets/css/cl-anchor.scss +23 -23
  7. package/src/assets/css/cl-approve-card.scss +58 -58
  8. package/src/assets/css/cl-dialog.scss +99 -99
  9. package/src/assets/css/cl-drag-list.scss +22 -22
  10. package/src/assets/css/cl-empty.scss +10 -10
  11. package/src/assets/css/cl-expandable-pane.scss +26 -26
  12. package/src/assets/css/cl-expandable.scss +24 -24
  13. package/src/assets/css/cl-file-upload-table.scss +11 -11
  14. package/src/assets/css/cl-filter.scss +4 -4
  15. package/src/assets/css/cl-flow-step.scss +185 -185
  16. package/src/assets/css/cl-footer-box.scss +10 -10
  17. package/src/assets/css/cl-form-item.scss +454 -454
  18. package/src/assets/css/cl-general-card.scss +11 -11
  19. package/src/assets/css/cl-layout-aside.scss +88 -88
  20. package/src/assets/css/cl-layout-content.scss +16 -16
  21. package/src/assets/css/cl-layout-header.scss +73 -73
  22. package/src/assets/css/cl-layout-tabs.scss +87 -87
  23. package/src/assets/css/cl-layout.scss +97 -97
  24. package/src/assets/css/cl-login-temporary.scss +37 -37
  25. package/src/assets/css/cl-message.scss +75 -75
  26. package/src/assets/css/cl-more-tab.scss +98 -98
  27. package/src/assets/css/cl-nav-menu.scss +5 -5
  28. package/src/assets/css/cl-pagination.scss +65 -65
  29. package/src/assets/css/cl-secondary-tab.scss +39 -39
  30. package/src/assets/css/cl-showcolumn.scss +23 -23
  31. package/src/assets/css/cl-sifting.scss +51 -51
  32. package/src/assets/css/cl-statis.scss +42 -42
  33. package/src/assets/css/cl-step.scss +73 -73
  34. package/src/assets/css/cl-suspend.scss +19 -19
  35. package/src/assets/css/cl-tertiary-tab.scss +9 -9
  36. package/src/assets/css/cl-upload.scss +41 -41
  37. package/src/assets/css/cl-worn-pagination.scss +50 -50
  38. package/src/assets/css/el-button.scss +173 -173
  39. package/src/assets/css/el-table.scss +79 -79
  40. package/src/assets/css/element-variables.scss +1061 -1061
  41. package/src/assets/css/element.dev.scss +21 -21
  42. package/src/assets/css/font-icon.scss +27 -26
  43. package/src/assets/css/index.dev.scss +4 -4
  44. package/src/assets/css/index.scss +11 -11
  45. package/src/assets/css/normalize.scss +726 -726
  46. package/src/assets/css/rootvar.scss +139 -139
  47. package/src/assets/css/select.scss +25 -25
  48. package/src/assets/css/title-pop.scss +4 -4
  49. package/src/assets/getJsonc.js +50 -50
  50. package/src/assets/iconFont/demo.css +539 -0
  51. package/src/assets/iconFont/demo_index.html +1614 -0
  52. package/src/assets/iconFont/iconfont.css +263 -0
  53. package/src/assets/iconFont/iconfont.js +1 -0
  54. package/src/assets/iconFont/iconfont.json +443 -0
  55. package/src/assets/iconFont/iconfont.ttf +0 -0
  56. package/src/assets/iconFont/iconfont.woff +0 -0
  57. package/src/assets/iconFont/iconfont.woff2 +0 -0
  58. package/src/assets/realUrl.js +12 -12
  59. package/src/components/.DS_Store +0 -0
  60. package/src/components/Anchor/AnchorItem.vue +29 -29
  61. package/src/components/Anchor/index.vue +185 -185
  62. package/src/components/ApprovalButtons/index.vue +232 -232
  63. package/src/components/ApprovalCard/index.vue +128 -128
  64. package/src/components/ApprovalRecord/approvalImg.vue +39 -39
  65. package/src/components/ApprovalRecord/index.vue +59 -59
  66. package/src/components/Button/button-group.vue +150 -150
  67. package/src/components/Button/icon-group-button.vue +61 -61
  68. package/src/components/Button/index.vue +56 -56
  69. package/src/components/CascaderArea/index.vue +81 -81
  70. package/src/components/ContentLoading/index.vue +41 -41
  71. package/src/components/ContentNull/index.vue +19 -19
  72. package/src/components/DatePicker/index.vue +27 -27
  73. package/src/components/DatePicker/por.vue +169 -169
  74. package/src/components/Dialog/index.vue +26 -26
  75. package/src/components/Dialog/indexO.vue +116 -116
  76. package/src/components/DragList/index.vue +68 -68
  77. package/src/components/Empty/img/abnormal.svg +108 -108
  78. package/src/components/Empty/img/dispose.svg +71 -71
  79. package/src/components/Empty/img/empty.svg +57 -57
  80. package/src/components/Empty/img/general.svg +58 -58
  81. package/src/components/Empty/img/lock.svg +57 -57
  82. package/src/components/Empty/img/network.svg +59 -59
  83. package/src/components/Empty/img/relevant.svg +68 -68
  84. package/src/components/Empty/img/search.svg +72 -72
  85. package/src/components/Empty/index.vue +92 -92
  86. package/src/components/Expandable/index.vue +49 -49
  87. package/src/components/Expandable/main.vue +52 -52
  88. package/src/components/FileExportAsync/index.vue +174 -0
  89. package/src/components/FileUploadTable/index.vue +484 -484
  90. package/src/components/Filters/index.vue +369 -369
  91. package/src/components/Filters/indexO.vue +104 -104
  92. package/src/components/FlowStep/index.vue +68 -68
  93. package/src/components/FooterBox/index.vue +21 -21
  94. package/src/components/GeneralCard/index.vue +15 -15
  95. package/src/components/InputNumber/index.vue +153 -153
  96. package/src/components/InputNumber/numberRange.vue +47 -47
  97. package/src/components/InputSearch/index.vue +75 -75
  98. package/src/components/Layout/.DS_Store +0 -0
  99. package/src/components/Layout/AsideNav/index.vue +119 -144
  100. package/src/components/Layout/AsideNav/menuItem.vue +34 -0
  101. package/src/components/Layout/AsideNav/submenuTitle.vue +26 -0
  102. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
  103. package/src/components/Layout/HeaderWrap/index.vue +348 -333
  104. package/src/components/Layout/HeaderWrap/noticePop.vue +300 -300
  105. package/src/components/Layout/SubContent/index.vue +131 -131
  106. package/src/components/Layout/TabsNav/index.vue +170 -170
  107. package/src/components/Layout/index.vue +529 -529
  108. package/src/components/Layout/utils.js +12 -12
  109. package/src/components/LoginTemporary/form.vue +537 -537
  110. package/src/components/LoginTemporary/index.vue +122 -122
  111. package/src/components/LoginTemporary/qrcode.vue +90 -90
  112. package/src/components/LoginTemporary/retrievePw.vue +28 -28
  113. package/src/components/LoginTemporary/utils.js +73 -73
  114. package/src/components/MicroApp/index.js +67 -67
  115. package/src/components/MicroFrame/index.vue +95 -95
  116. package/src/components/MoreTab/index.vue +232 -232
  117. package/src/components/NavMenu/index.vue +60 -60
  118. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +184 -184
  119. package/src/components/PageLayout/page.vue +15 -15
  120. package/src/components/Pagination/index.vue +96 -96
  121. package/src/components/SecondaryTab/index.vue +58 -58
  122. package/src/components/SelectLazy/index.vue +75 -75
  123. package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
  124. package/src/components/SelectTree/index.vue +205 -205
  125. package/src/components/ShowColumn/index.vue +204 -204
  126. package/src/components/Sifting/index.vue +99 -99
  127. package/src/components/Statis/index.vue +97 -97
  128. package/src/components/Statis/statisItem.vue +54 -54
  129. package/src/components/Statis/statisPopover.vue +55 -55
  130. package/src/components/Step/index.vue +38 -38
  131. package/src/components/Suspend/index.vue +72 -72
  132. package/src/components/Table/index.vue +179 -179
  133. package/src/components/Table/indexO.vue +149 -149
  134. package/src/components/Task/index.vue +26 -26
  135. package/src/components/TertiaryTab/index.vue +53 -53
  136. package/src/components/TimePicker/index.vue +28 -28
  137. package/src/components/Upload/index.vue +242 -242
  138. package/src/components/WornPagination/index.vue +73 -73
  139. package/src/directives/VClickOutside/index.js +19 -19
  140. package/src/directives/VHas/index.js +32 -32
  141. package/src/directives/VMove/index.js +42 -42
  142. package/src/directives/VTitle/index.js +64 -56
  143. package/src/directives/VTitle/tooltip.vue +21 -21
  144. package/src/index.js +225 -218
  145. package/src/plugins/CompatibleOld/index.js +57 -57
  146. package/src/plugins/Print/index.js +4 -4
  147. package/src/plugins/Print/print-js/.babelrc +12 -12
  148. package/src/plugins/Print/print-js/LICENSE +21 -21
  149. package/src/plugins/Print/print-js/README.md +98 -98
  150. package/src/plugins/Print/print-js/dist/print.css +96 -96
  151. package/src/plugins/Print/print-js/dist/print.js +990 -990
  152. package/src/plugins/Print/print-js/package.json +60 -60
  153. package/src/plugins/Print/print-js/src/index.d.ts +45 -45
  154. package/src/plugins/Print/print-js/src/index.js +10 -10
  155. package/src/plugins/Print/print-js/src/js/browser.js +33 -33
  156. package/src/plugins/Print/print-js/src/js/functions.js +103 -103
  157. package/src/plugins/Print/print-js/src/js/html.js +70 -70
  158. package/src/plugins/Print/print-js/src/js/image.js +48 -48
  159. package/src/plugins/Print/print-js/src/js/init.js +168 -168
  160. package/src/plugins/Print/print-js/src/js/json.js +109 -109
  161. package/src/plugins/Print/print-js/src/js/modal.js +62 -62
  162. package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
  163. package/src/plugins/Print/print-js/src/js/print.js +102 -102
  164. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
  165. package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
  166. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
  167. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
  168. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
  169. package/src/plugins/Print/print.js +2 -2
  170. package/src/plugins/Print/print.scss +1 -1
  171. package/src/plugins/SetMenuTree/index.vue +41 -41
  172. package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
  173. package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
  174. package/src/plugins/SetMenuTree/utils.js +74 -74
  175. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
  176. package/src/plugins/Sign/index.js +65 -65
  177. package/src/plugins/Sign/sign.js +1 -1
  178. package/src/plugins/setTabsForSub.js +2 -2
  179. package/src/utils/auth.js +53 -53
  180. package/src/utils/axios.js +203 -203
  181. package/src/utils/downloadBlob.js +19 -19
  182. package/src/utils/forEachs.js +16 -16
  183. package/src/utils/getScrollContainer.js +43 -43
  184. package/src/utils/i18n/cn2hk.json +1270 -1270
  185. package/src/utils/i18n/index.js +54 -54
  186. package/src/utils/list2tree.js +36 -36
  187. package/src/utils/msgboxPor.js +26 -26
  188. package/src/utils/print.js +161 -161
  189. package/src/utils/relaNo.js +69 -69
  190. package/src/utils/repairElementUI.js +66 -66
  191. package/src/utils/urlToGo.js +82 -82
  192. package/style/css/normalize.scss +723 -726
  193. package/style/fonts/iconfont.022f36c4.woff2 +0 -0
  194. package/style/fonts/iconfont.4a1b2c93.woff +0 -0
  195. package/style/fonts/iconfont.a9febaa2.ttf +0 -0
  196. package/style/index.css +3 -2
  197. package/style/index.css.map +1 -1
  198. package/style/pageDemo/demo-1.vue +130 -131
  199. package/style/pageDemo/demo-2.vue +35 -35
  200. package/style/pageDemo/demo-3.vue +22 -22
  201. package/style/pageDemo/seeCode.js +20 -20
  202. package/style/server-config.jsonc +663 -596
@@ -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
  }