vue2-client 1.15.76 → 1.15.78

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 (456) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.apply +19 -19
  3. package/.env.gaslink +19 -19
  4. package/.env.his +19 -19
  5. package/.env.liuli +20 -20
  6. package/.env.scada +19 -19
  7. package/.eslintrc.js +90 -90
  8. package/.history/public/his/editor/editor_20250606134713.html +51 -0
  9. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  10. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  11. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  12. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  13. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +207 -0
  14. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +211 -0
  15. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +212 -0
  16. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +212 -0
  17. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  18. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  19. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  20. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  21. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  22. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  23. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +731 -0
  24. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +748 -0
  25. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +748 -0
  26. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +1071 -0
  27. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +1078 -0
  28. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +1077 -0
  29. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +1077 -0
  30. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +1077 -0
  31. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +442 -0
  32. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +442 -0
  33. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +442 -0
  34. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +475 -0
  35. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +475 -0
  36. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +475 -0
  37. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +477 -0
  38. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +477 -0
  39. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +477 -0
  40. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +473 -0
  41. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +473 -0
  42. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +473 -0
  43. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +473 -0
  44. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +473 -0
  45. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +473 -0
  46. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +473 -0
  47. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +473 -0
  48. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +473 -0
  49. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +473 -0
  50. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +474 -0
  51. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +474 -0
  52. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +474 -0
  53. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +472 -0
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +472 -0
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +472 -0
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +472 -0
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +472 -0
  58. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +472 -0
  59. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +501 -0
  60. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +501 -0
  61. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +501 -0
  62. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +504 -0
  63. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +504 -0
  64. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +504 -0
  65. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +131 -0
  66. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +160 -0
  67. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +160 -0
  68. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +160 -0
  69. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +158 -0
  70. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  71. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  72. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  73. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  74. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  75. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  76. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  77. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  78. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  79. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  80. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  81. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  82. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  83. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  84. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  85. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  86. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  87. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  88. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  89. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  90. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  91. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  92. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  93. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  94. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  95. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  96. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  97. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  98. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  99. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  100. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  101. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +495 -0
  102. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +495 -0
  103. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +494 -0
  104. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +494 -0
  105. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +494 -0
  106. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +495 -0
  107. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +495 -0
  108. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +492 -0
  109. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +492 -0
  110. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +485 -0
  111. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +485 -0
  112. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +488 -0
  113. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250609151519.vue +222 -0
  114. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155514.vue +183 -0
  115. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155556.vue +183 -0
  116. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155600.vue +183 -0
  117. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181609.vue +206 -0
  118. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181629.vue +209 -0
  119. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +242 -0
  120. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +242 -0
  121. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +242 -0
  122. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +251 -0
  123. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +251 -0
  124. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +250 -0
  125. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +250 -0
  126. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +250 -0
  127. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +250 -0
  128. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140844.vue +238 -0
  129. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140910.vue +238 -0
  130. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140912.vue +238 -0
  131. package/CHANGELOG.md +824 -824
  132. package/Components.md +60 -60
  133. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +36 -0
  134. package/docs/LowCode/lowcode.md +155 -155
  135. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  136. package/docs/index.md +30 -30
  137. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +6 -0
  138. package/index.js +31 -31
  139. package/jest-transform-stub.js +8 -8
  140. package/jest.setup.js +7 -7
  141. package/jsconfig.json +19 -19
  142. package/package.json +1 -1
  143. package/public/his/editor/editor.html +51 -51
  144. package/public/his/editor/mock/bind_data.html +779 -779
  145. package/public/his/editor/mock/data_table.html +40 -40
  146. package/public/his/editor/mock/sign.html +75 -75
  147. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  148. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  149. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  150. package/public/his/editor/vender/date97/calendar.js +4 -4
  151. package/public/his/editor/vender/date97/lang/en.js +13 -13
  152. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  153. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  154. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  155. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  156. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  157. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  158. package/public/his/editor/vender/diff.js +1627 -1627
  159. package/public/his/editor/vender/editor.js +1 -1
  160. package/public/his/editor/vender/fabric.js +31187 -31187
  161. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  162. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  163. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  164. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  165. package/public/his/editor/vender/mui/mui.min.css +4 -4
  166. package/public/his/editor/vender/mui/mui.min.js +5 -5
  167. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  168. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  169. package/public/his/editor/vender/qrcode.js +7 -7
  170. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  171. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  172. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  173. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  174. package/public/his/editor/vender/validator.js +5094 -5094
  175. package/public/his/editor/vender/weui/weui.css +5659 -5659
  176. package/public/his/editor/vender/weui/weui.min.css +4 -4
  177. package/public/his/editor/vender/weui/weui.min.js +11 -11
  178. package/public/index.html +27 -27
  179. package/src/assets/img/querySlotDemo.svg +15 -15
  180. package/src/assets/svg/badtwo.svg +1 -1
  181. package/src/assets/svg/goodtwo.svg +1 -1
  182. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  183. package/src/base-client/components/AI/demo.vue +31 -31
  184. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  185. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  186. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  187. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  188. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  189. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  190. package/src/base-client/components/common/CitySelect/demo.vue +1 -1
  191. package/src/base-client/components/common/CitySelect/index.js +3 -3
  192. package/src/base-client/components/common/CitySelect/index.md +109 -109
  193. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  194. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  195. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  196. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  197. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  198. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  199. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  200. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  201. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  202. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  203. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  204. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  205. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  206. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  207. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  208. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  209. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  210. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  211. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  212. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  213. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  214. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  215. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  216. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  217. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  218. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  219. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  220. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  221. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  222. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  223. package/src/base-client/components/common/Recording/index.js +3 -3
  224. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  225. package/src/base-client/components/common/Tree/index.js +2 -2
  226. package/src/base-client/components/common/Upload/index.js +3 -3
  227. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  228. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  229. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  230. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  231. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  232. package/src/base-client/components/common/XAddReport/index.js +3 -3
  233. package/src/base-client/components/common/XAddReport/index.md +56 -56
  234. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  235. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  236. package/src/base-client/components/common/XButtons/index.js +3 -3
  237. package/src/base-client/components/common/XButtons/index.md +61 -61
  238. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  239. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  240. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  241. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  242. package/src/base-client/components/common/XDataCard/index.js +3 -3
  243. package/src/base-client/components/common/XDataCard/index.md +1 -1
  244. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  245. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  246. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  247. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  248. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  249. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  250. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  251. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  252. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  253. package/src/base-client/components/common/XForm/index.md +178 -178
  254. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  255. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  256. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  257. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  258. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  259. package/src/base-client/components/common/XFormTable/index.md +92 -92
  260. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  261. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  262. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  263. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  264. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  265. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  266. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  267. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  268. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  269. package/src/base-client/components/common/XPrint/index.vue +97 -97
  270. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  271. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  272. package/src/base-client/components/common/XReport/index.js +3 -3
  273. package/src/base-client/components/common/XReport/print.js +186 -186
  274. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  275. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  276. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  277. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  278. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  279. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  280. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  281. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  282. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  283. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  284. package/src/base-client/components/common/XStepView/index.js +3 -3
  285. package/src/base-client/components/common/XStepView/index.md +31 -31
  286. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  287. package/src/base-client/components/common/XTab/index.js +3 -3
  288. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  289. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  290. package/src/base-client/components/common/XTable/index.md +255 -255
  291. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  292. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  293. package/src/base-client/components/common/XTree/index.js +3 -3
  294. package/src/base-client/components/common/XTree/index.md +36 -36
  295. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  296. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  297. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  298. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  299. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  300. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +22 -5
  301. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +4 -4
  302. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +13 -5
  303. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  304. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  305. package/src/base-client/components/index.js +51 -51
  306. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  307. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  308. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  309. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  310. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  311. package/src/base-client/plugins/Config.js +19 -19
  312. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  313. package/src/base-client/plugins/Recording.js +258 -258
  314. package/src/base-client/plugins/index.js +23 -23
  315. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  316. package/src/components/Charts/Bar.vue +62 -62
  317. package/src/components/Charts/ChartCard.vue +134 -134
  318. package/src/components/Charts/Liquid.vue +67 -67
  319. package/src/components/Charts/MiniArea.vue +39 -39
  320. package/src/components/Charts/MiniBar.vue +39 -39
  321. package/src/components/Charts/MiniProgress.vue +75 -75
  322. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  323. package/src/components/Charts/Radar.vue +68 -68
  324. package/src/components/Charts/RankList.vue +77 -77
  325. package/src/components/Charts/TagCloud.vue +113 -113
  326. package/src/components/Charts/TransferBar.vue +64 -64
  327. package/src/components/Charts/Trend.vue +82 -82
  328. package/src/components/Charts/chart.less +12 -12
  329. package/src/components/Charts/smooth.area.less +13 -13
  330. package/src/components/CodeMirror/inedx.vue +118 -118
  331. package/src/components/CodeMirror/setting.js +40 -40
  332. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  333. package/src/components/NumberInfo/index.js +3 -3
  334. package/src/components/NumberInfo/index.less +54 -54
  335. package/src/components/NumberInfo/index.md +43 -43
  336. package/src/components/card/ChartCard.vue +79 -79
  337. package/src/components/chart/Bar.vue +60 -60
  338. package/src/components/chart/MiniArea.vue +67 -67
  339. package/src/components/chart/MiniBar.vue +59 -59
  340. package/src/components/chart/MiniProgress.vue +57 -57
  341. package/src/components/chart/Radar.vue +80 -80
  342. package/src/components/chart/RankingList.vue +60 -60
  343. package/src/components/chart/Trend.vue +79 -79
  344. package/src/components/chart/index.less +9 -9
  345. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  346. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  347. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  348. package/src/components/checkbox/index.js +9 -9
  349. package/src/components/exception/ExceptionPage.vue +70 -70
  350. package/src/components/g2Charts/constants.js +202 -202
  351. package/src/components/g2Charts/demo.vue +808 -808
  352. package/src/components/g2Charts/designer.vue +228 -228
  353. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  354. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  355. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  356. package/src/components/g2Charts/index.vue +397 -397
  357. package/src/components/index.js +36 -36
  358. package/src/components/input/IInput.vue +66 -66
  359. package/src/components/menu/SideMenu.vue +75 -75
  360. package/src/components/menu/menu.js +273 -273
  361. package/src/components/setting/Setting.vue +234 -234
  362. package/src/components/tool/AStepItem.vue +60 -60
  363. package/src/config/CreateQueryConfig.js +325 -325
  364. package/src/config/default/antd.config.js +89 -89
  365. package/src/config/default/setting.config.js +55 -55
  366. package/src/font-style/font.css +4 -4
  367. package/src/layouts/CommonLayout.vue +56 -56
  368. package/src/layouts/PageLayout.vue +151 -151
  369. package/src/layouts/SinglePageView.vue +136 -136
  370. package/src/layouts/header/AdminHeader.vue +132 -132
  371. package/src/layouts/header/HeaderNotice.vue +177 -177
  372. package/src/layouts/header/InstitutionDetail.vue +181 -181
  373. package/src/layouts/tabs/TabsHead.vue +189 -189
  374. package/src/lib.js +1 -1
  375. package/src/mock/extend/index.js +84 -84
  376. package/src/mock/goods/index.js +108 -108
  377. package/src/pages/DefaultExample/index.vue +77 -77
  378. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  379. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  380. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  381. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  382. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  383. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  384. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  385. package/src/pages/DynamicStatistics/index.vue +282 -282
  386. package/src/pages/Example/childIndex.vue +15 -15
  387. package/src/pages/Example/index.vue +30 -30
  388. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  389. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  390. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  391. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  392. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  393. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  394. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  395. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  396. package/src/pages/Recording/index.vue +77 -77
  397. package/src/pages/ServiceReview/index.vue +284 -284
  398. package/src/pages/SubExample/index.vue +26 -26
  399. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  400. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  401. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  402. package/src/pages/XReportView/index.vue +64 -64
  403. package/src/pages/XTreeOneProExample/index.vue +67 -67
  404. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  405. package/src/pages/login/Login.vue +380 -380
  406. package/src/pages/login/LoginV3.vue +389 -389
  407. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  408. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  409. package/src/pages/report/ReportTable.js +124 -124
  410. package/src/pages/resourceManage/orgListManage.vue +98 -98
  411. package/src/pages/system/dictionary/index.vue +44 -44
  412. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  413. package/src/pages/system/monitor/operLog/index.vue +37 -37
  414. package/src/pages/system/settings/modifyPassword.vue +117 -117
  415. package/src/pages/system/ticket/index.vue +480 -480
  416. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  417. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  418. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  419. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  420. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  421. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  422. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  423. package/src/plugins/EventLogPlugin.js +33 -33
  424. package/src/plugins/FindParentsData.js +17 -17
  425. package/src/router/async/config.async.js +35 -35
  426. package/src/router/index.js +27 -27
  427. package/src/services/DataModel.js +30 -30
  428. package/src/services/LodopFuncs.js +137 -137
  429. package/src/services/api/TicketDetailsViewApi.js +46 -46
  430. package/src/services/api/cas.js +79 -79
  431. package/src/services/api/common.js +346 -346
  432. package/src/services/api/entity.js +18 -18
  433. package/src/services/api/index.js +17 -17
  434. package/src/store/modules/account.js +115 -115
  435. package/src/store/modules/index.js +5 -5
  436. package/src/store/modules/lowCode.js +33 -33
  437. package/src/store/modules/setting.js +119 -119
  438. package/src/theme/default/style.less +58 -58
  439. package/src/utils/authority-utils.js +85 -85
  440. package/src/utils/errorCode.js +6 -6
  441. package/src/utils/formatter.js +74 -74
  442. package/src/utils/htmlToPDF.js +108 -108
  443. package/src/utils/htmlToPDFApi.js +5 -5
  444. package/src/utils/login.js +188 -188
  445. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  446. package/src/utils/lowcode/lowcodeLog.js +29 -29
  447. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  448. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  449. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  450. package/src/utils/map-utils.js +47 -47
  451. package/src/utils/reg.js +95 -95
  452. package/src/utils/runEvalFunction.js +14 -14
  453. package/src/utils/theme-color-replacer-extend.js +92 -92
  454. package/src/utils/util.js +329 -329
  455. package/src/utils/waterMark.js +31 -31
  456. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,519 +1,519 @@
1
- /** @license
2
- jSignature v2 SVG export plugin.
3
-
4
- */
5
- /**
6
- Copyright (c) 2012 Willow Systems Corp http://willow-systems.com
7
- MIT License <http://www.opensource.org/licenses/mit-license.php>
8
- */
9
-
10
- ;(function(){
11
- 'use strict'
12
-
13
- /** @preserve
14
- Simplify.js BSD
15
- (c) 2012, Vladimir Agafonkin
16
- mourner.github.com/simplify-js
17
-
18
- */
19
- ;(function(a,b){function c(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d}function d(a,b,c){var d=b.x,e=b.y,f=c.x-d,g=c.y-e,h;if(f!==0||g!==0)h=((a.x-d)*f+(a.y-e)*g)/(f*f+g*g),h>1?(d=c.x,e=c.y):h>0&&(d+=f*h,e+=g*h);return f=a.x-d,g=a.y-e,f*f+g*g}function e(a,b){var d,e=a.length,f,g=a[0],h=[g];for(d=1;d<e;d++)f=a[d],c(f,g)>b&&(h.push(f),g=f);return g!==f&&h.push(f),h}function f(a,c){var e=a.length,f=typeof Uint8Array!=b+""?Uint8Array:Array,g=new f(e),h=0,i=e-1,j,k,l,m,n=[],o=[],p=[];g[h]=g[i]=1;while(i){k=0;for(j=h+1;j<i;j++)l=d(a[j],a[h],a[i]),l>k&&(m=j,k=l);k>c&&(g[m]=1,n.push(h),o.push(m),n.push(m),o.push(i)),h=n.pop(),i=o.pop()}for(j=0;j<e;j++)g[j]&&p.push(a[j]);return p}"use strict";var g=a;g.simplify=function(a,c,d){var g=c!==b?c*c:1;return d||(a=e(a,g)),a=f(a,g),a}})(window);
20
-
21
-
22
- /**
23
- Vector class. Allows us to simplify representation and manipulation of coordinate-pair
24
- representing shift against (0, 0)
25
-
26
- @public
27
- @class
28
- @param
29
- @returns {Type}
30
- */
31
- function Vector(x,y){
32
- this.x = x
33
- this.y = y
34
- this.reverse = function(){
35
- return new this.constructor(
36
- this.x * -1
37
- , this.y * -1
38
- )
39
- }
40
- this._length = null
41
- this.getLength = function(){
42
- if (!this._length){
43
- this._length = Math.sqrt( Math.pow(this.x, 2) + Math.pow(this.y, 2) )
44
- }
45
- return this._length
46
- }
47
-
48
- var polarity = function (e){
49
- return Math.round(e / Math.abs(e))
50
- }
51
- this.resizeTo = function(length){
52
- // proportionally changes x,y such that the hypotenuse (vector length) is = new length
53
- if (this.x === 0 && this.y === 0){
54
- this._length = 0
55
- } else if (this.x === 0){
56
- this._length = length
57
- this.y = length * polarity(this.y)
58
- } else if(this.y === 0){
59
- this._length = length
60
- this.x = length * polarity(this.x)
61
- } else {
62
- var proportion = Math.abs(this.y / this.x)
63
- , x = Math.sqrt(Math.pow(length, 2) / (1 + Math.pow(proportion, 2)))
64
- , y = proportion * x
65
- this._length = length
66
- this.x = x * polarity(this.x)
67
- this.y = y * polarity(this.y)
68
- }
69
- return this
70
- }
71
-
72
- /**
73
- * Calculates the angle between 'this' vector and another.
74
- * @public
75
- * @function
76
- * @returns {Number} The angle between the two vectors as measured in PI.
77
- */
78
- this.angleTo = function(vectorB) {
79
- var divisor = this.getLength() * vectorB.getLength()
80
- if (divisor === 0) {
81
- return 0
82
- } else {
83
- // JavaScript floating point math is screwed up.
84
- // because of it, the core of the formula can, on occasion, have values
85
- // over 1.0 and below -1.0.
86
- return Math.acos(
87
- Math.min(
88
- Math.max(
89
- ( this.x * vectorB.x + this.y * vectorB.y ) / divisor
90
- , -1.0
91
- )
92
- , 1.0
93
- )
94
- ) / Math.PI
95
- }
96
- }
97
- }
98
-
99
- function Point(x,y){
100
- this.x = x
101
- this.y = y
102
-
103
- this.getVectorToCoordinates = function (x, y) {
104
- return new Vector(x - this.x, y - this.y)
105
- }
106
- this.getVectorFromCoordinates = function (x, y) {
107
- return this.getVectorToCoordinates(x, y).reverse()
108
- }
109
- this.getVectorToPoint = function (point) {
110
- return new Vector(point.x - this.x, point.y - this.y)
111
- }
112
- this.getVectorFromPoint = function (point) {
113
- return this.getVectorToPoint(point).reverse()
114
- }
115
- }
116
-
117
- /**
118
- Allows one to round a number to arbitrary precision.
119
- Math.round() rounds to whole only.
120
- Number.toFixed(precision) returns a string.
121
- I need float to float, but with arbitrary precision, hence:
122
-
123
- @public
124
- @function
125
- @param number {Number}
126
- @param position {Number} number of digits right of decimal point to keep. If negative, rounding to the left of decimal.
127
- @returns {Type}
128
- */
129
- function round (number, position){
130
- var tmp = Math.pow(10, position)
131
- return Math.round( number * tmp ) / tmp
132
- }
133
-
134
- // /**
135
- // * This is a simple, points-to-lines (not curves) renderer.
136
- // * Keeping it around so we can activate it from time to time and see
137
- // * if smoothing logic is off much.
138
- // * @public
139
- // * @function
140
- // * @returns {String} Like so "l 1 2 3 5' with stroke as long line chain.
141
- // */
142
- // function compressstroke(stroke, shiftx, shifty){
143
- // // we combine strokes data into string like this:
144
- // // 'M 53 7 l 1 2 3 4 -5 -6 5 -6'
145
- // // see SVG documentation for Path element's 'd' argument.
146
- // var lastx = stroke.x[0]
147
- // , lasty = stroke.y[0]
148
- // , i
149
- // , l = stroke.x.length
150
- // , answer = ['M', lastx - shiftx, lasty - shifty, 'l']
151
- //
152
- // if (l === 1){
153
- // // meaning this was just a DOT, not a stroke.
154
- // // instead of creating a circle, we just create a short line
155
- // answer.concat(1, -1)
156
- // } else {
157
- // for(i = 1; i < l; i++){
158
- // answer = answer.concat(stroke.x[i] - lastx, stroke.y[i] - lasty)
159
- // lastx = stroke.x[i]
160
- // lasty = stroke.y[i]
161
- // }
162
- // }
163
- // return answer.join(' ')
164
- // }
165
-
166
- function segmentToCurve(stroke, positionInStroke, lineCurveThreshold){
167
- 'use strict'
168
- // long lines (ones with many pixels between them) do not look good when they are part of a large curvy stroke.
169
- // You know, the jaggedy crocodile spine instead of a pretty, smooth curve. Yuck!
170
- // We want to approximate pretty curves in-place of those ugly lines.
171
- // To approximate a very nice curve we need to know the direction of line before and after.
172
- // Hence, on long lines we actually wait for another point beyond it to come back from
173
- // mousemoved before we draw this curve.
174
-
175
- // So for "prior curve" to be calc'ed we need 4 points
176
- // A, B, C, D (we are on D now, A is 3 points in the past.)
177
- // and 3 lines:
178
- // pre-line (from points A to B),
179
- // this line (from points B to C), (we call it "this" because if it was not yet, it's the only one we can draw for sure.)
180
- // post-line (from points C to D) (even through D point is 'current' we don't know how we can draw it yet)
181
- //
182
- // Well, actually, we don't need to *know* the point A, just the vector A->B
183
-
184
- // Again, we can only derive curve between points positionInStroke-1 and positionInStroke
185
- // Thus, since we can only draw a line if we know one point ahead of it, we need to shift our focus one point ahead.
186
- positionInStroke += 1
187
- // Let's hope the code that calls us knows we do that and does not call us with positionInStroke = index of last point.
188
-
189
- var Cpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1])
190
- , Dpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke])
191
- , CDvector = Cpoint.getVectorToPoint(Dpoint)
192
- // Again, we have a chance here to draw only PREVIOUS line segment - BC
193
-
194
- // So, let's start with BC curve.
195
- // if there is only 2 points in stroke array (C, D), we don't have "history" long enough to have point B, let alone point A.
196
- // so positionInStroke should start with 2, ie
197
- // we are here when there are at least 3 points in stroke array.
198
- var Bpoint = new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2])
199
- , BCvector = Bpoint.getVectorToPoint(Cpoint)
200
- , ABvector
201
- , rounding = 2
202
-
203
- if ( BCvector.getLength() > lineCurveThreshold ){
204
- // Yey! Pretty curves, here we come!
205
- if(positionInStroke > 2) {
206
- ABvector = (new Point(stroke.x[positionInStroke-3], stroke.y[positionInStroke-3])).getVectorToPoint(Bpoint)
207
- } else {
208
- ABvector = new Vector(0,0)
209
- }
210
- var minlenfraction = 0.05
211
- , maxlen = BCvector.getLength() * 0.35
212
- , ABCangle = BCvector.angleTo(ABvector.reverse())
213
- , BCDangle = CDvector.angleTo(BCvector.reverse())
214
- , BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo(
215
- Math.max(minlenfraction, ABCangle) * maxlen
216
- )
217
- , CtoCP2vector = (new Vector(BCvector.x + CDvector.x, BCvector.y + CDvector.y)).reverse().resizeTo(
218
- Math.max(minlenfraction, BCDangle) * maxlen
219
- )
220
- , BtoCP2vector = new Vector(BCvector.x + CtoCP2vector.x, BCvector.y + CtoCP2vector.y)
221
-
222
- // returing curve for BC segment
223
- // all coords are vectors against Bpoint
224
- return [
225
- 'c' // bezier curve
226
- , round( BtoCP1vector.x, rounding )
227
- , round( BtoCP1vector.y, rounding )
228
- , round( BtoCP2vector.x, rounding )
229
- , round( BtoCP2vector.y, rounding )
230
- , round( BCvector.x, rounding )
231
- , round( BCvector.y, rounding )
232
- ]
233
- } else {
234
- return [
235
- 'l' // line
236
- , round( BCvector.x, rounding )
237
- , round( BCvector.y, rounding )
238
- ]
239
- }
240
- }
241
-
242
- function lastSegmentToCurve(stroke, lineCurveThreshold){
243
- 'use strict'
244
- // Here we tidy up things left unfinished
245
-
246
- // What's left unfinished there is the curve between the last points
247
- // in the stroke
248
- // We can also be called when there is only one point in the stroke (meaning, the
249
- // stroke was just a dot), in which case there is nothing for us to do.
250
-
251
- // So for "this curve" to be calc'ed we need 3 points
252
- // A, B, C
253
- // and 2 lines:
254
- // pre-line (from points A to B),
255
- // this line (from points B to C)
256
- // Well, actually, we don't need to *know* the point A, just the vector A->B
257
- // so, we really need points B, C and AB vector.
258
- var positionInStroke = stroke.x.length - 1
259
-
260
- // there must be at least 2 points in the stroke.for us to work. Hope calling code checks for that.
261
- var Cpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke])
262
- , Bpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1])
263
- , BCvector = Bpoint.getVectorToPoint(Cpoint)
264
- , rounding = 2
265
-
266
- if (positionInStroke > 1 && BCvector.getLength() > lineCurveThreshold){
267
- // we have at least 3 elems in stroke
268
- var ABvector = (new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2])).getVectorToPoint(Bpoint)
269
- , ABCangle = BCvector.angleTo(ABvector.reverse())
270
- , minlenfraction = 0.05
271
- , maxlen = BCvector.getLength() * 0.35
272
- , BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo(
273
- Math.max(minlenfraction, ABCangle) * maxlen
274
- )
275
-
276
- return [
277
- 'c' // bezier curve
278
- , round( BtoCP1vector.x, rounding )
279
- , round( BtoCP1vector.y, rounding )
280
- , round( BCvector.x, rounding ) // CP2 is same as Cpoint
281
- , round( BCvector.y, rounding ) // CP2 is same as Cpoint
282
- , round( BCvector.x, rounding )
283
- , round( BCvector.y, rounding )
284
- ]
285
- } else {
286
- // Since there is no AB leg, there is no curve to draw. This is just line
287
- return [
288
- 'l' // simple line
289
- , round( BCvector.x, rounding )
290
- , round( BCvector.y, rounding )
291
- ]
292
- }
293
- }
294
-
295
- function addstroke(stroke, shiftx, shifty){
296
- 'use strict'
297
- // we combine strokes data into string like this:
298
- // 'M 53 7 l 1 2 c 3 4 -5 -6 5 -6'
299
- // see SVG documentation for Path element's 'd' argument.
300
- var lines = [
301
- 'M' // move to
302
- , round( (stroke.x[0] - shiftx), 2)
303
- , round( (stroke.y[0] - shifty), 2)
304
- ]
305
- // processing all points but first and last.
306
- , i = 1 // index zero item in there is STARTING point. we already extracted it.
307
- , l = stroke.x.length - 1 // this is a trick. We are leaving last point coordinates for separate processing.
308
- , lineCurveThreshold = 1
309
-
310
- for(; i < l; i++){
311
- lines.push.apply(lines, segmentToCurve(stroke, i, lineCurveThreshold))
312
- }
313
- if (l > 0 /* effectively more than 1, since we "-1" above */){
314
- lines.push.apply(lines, lastSegmentToCurve(stroke, i, lineCurveThreshold))
315
- } else if (l === 0){
316
- // meaning we only have ONE point in the stroke (and otherwise refer to the stroke as "dot")
317
- lines.push.apply(lines, ['l' , 1, 1])
318
- }
319
- return lines.join(' ')
320
- }
321
-
322
- function simplifystroke(stroke){
323
- var d = []
324
- , newstroke = {'x':[], 'y':[]}
325
- , i, l
326
-
327
- for (i = 0, l = stroke.x.length; i < l; i++){
328
- d.push({'x':stroke.x[i], 'y':stroke.y[i]})
329
- }
330
- d = simplify(d, 0.7, true)
331
- for (i = 0, l = d.length; i < l; i++){
332
- newstroke.x.push(d[i].x)
333
- newstroke.y.push(d[i].y)
334
- }
335
- return newstroke
336
- }
337
-
338
- // generate SVG style from settings
339
- function styleFromSettings(settings){
340
- var styles = [];
341
- var meta = [
342
- // ["style attr", "key in settings", "default value"]
343
- ["fill", undefined, "none"],
344
- ["stroke", "color", "#000000"],
345
- ["stroke-width", "lineWidth", 2],
346
- ["stroke-linecap", undefined, "round"],
347
- ["stroke-linejoin", undefined, "round"]
348
- ];
349
- for (var i = meta.length - 1; i >= 0; i--){
350
- var attr = meta[i][0]
351
- , key = meta[i][1]
352
- , defaultVal = meta[i][2];
353
- styles.push(attr + '="' + (key in settings && settings[key] ? settings[key] : defaultVal) + '"');
354
- }
355
- return styles.join(' ');
356
- }
357
-
358
- function compressstrokes(data, settings){
359
- 'use strict'
360
- var answer = [
361
- '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
362
- , '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'
363
- ]
364
- , i , l = data.length
365
- , stroke
366
- , xlimits = []
367
- , ylimits = []
368
- , sizex = 0
369
- , sizey = 0
370
- , shiftx = 0
371
- , shifty = 0
372
- , minx, maxx, miny, maxy, padding = 1
373
- , simplifieddata = []
374
-
375
- if(l !== 0){
376
- for(i = 0; i < l; i++){
377
- stroke = simplifystroke( data[i] )
378
- simplifieddata.push(stroke)
379
- xlimits = xlimits.concat(stroke.x)
380
- ylimits = ylimits.concat(stroke.y)
381
- }
382
-
383
- minx = Math.min.apply(null, xlimits) - padding
384
- maxx = Math.max.apply(null, xlimits) + padding
385
- miny = Math.min.apply(null, ylimits) - padding
386
- maxy = Math.max.apply(null, ylimits) + padding
387
- shiftx = minx < 0? 0 : minx
388
- shifty = miny < 0? 0 : miny
389
- sizex = maxx - minx
390
- sizey = maxy - miny
391
- }
392
-
393
- answer.push(
394
- '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'+
395
- sizex.toString() +
396
- '" height="'+
397
- sizey.toString() +
398
- '">'
399
- )
400
-
401
- // // This is a nice idea: use style declaration on top, and mark the lines with 'class="f"'
402
- // // thus saving space in svg...
403
- // // alas, many SVG renderers don't understand "class" and render the strokes in default "fill = black, no stroke" style. Ugh!!!
404
- // // TODO: Rewrite ImageMagic / GraphicsMagic, InkScape, http://svg.codeplex.com/ to support style + class. until then, we hardcode the stroke style within the path.
405
- // answer.push(
406
- // '<style type="text/css"><![CDATA[.f {fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}]]></style>'
407
- // )
408
-
409
- // // This set is accompaniment to "simple line renderer" - compressstroke
410
- // answer.push(
411
- // '<style type="text/css"><![CDATA[.t {fill:none;stroke:#FF0000;stroke-width:2}]]></style>'
412
- // )
413
- // for(i = 0; i < l; i++){
414
- // stroke = data[i]
415
- // // This one is accompaniment to "simple line renderer"
416
- // answer.push('<path class="t" d="'+ compressstroke(stroke, shiftx, shifty) +'"/>')
417
- // }
418
-
419
- for(i = 0, l = simplifieddata.length; i < l; i++){
420
- stroke = simplifieddata[i]
421
- answer.push('<path ' + styleFromSettings(settings) + ' d="'+ addstroke(stroke, shiftx, shifty) + '"/>')
422
- }
423
- answer.push('</svg>')
424
- return answer.join('')
425
- }
426
-
427
- if (typeof btoa !== 'function')
428
- {
429
- var btoa = function(data) {
430
- /** @preserve
431
- base64 encoder
432
- MIT, GPL
433
- http://phpjs.org/functions/base64_encode
434
- + original by: Tyler Akins (http://rumkin.com)
435
- + improved by: Bayron Guevara
436
- + improved by: Thunder.m
437
- + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
438
- + bugfixed by: Pellentesque Malesuada
439
- + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
440
- + improved by: Rafal Kukawski (http://kukawski.pl)
441
-
442
- */
443
- var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
444
- , b64a = b64.split('')
445
- , o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
446
- ac = 0,
447
- enc = "",
448
- tmp_arr = [];
449
-
450
- do { // pack three octets into four hexets
451
- o1 = data.charCodeAt(i++);
452
- o2 = data.charCodeAt(i++);
453
- o3 = data.charCodeAt(i++);
454
-
455
- bits = o1 << 16 | o2 << 8 | o3;
456
-
457
- h1 = bits >> 18 & 0x3f;
458
- h2 = bits >> 12 & 0x3f;
459
- h3 = bits >> 6 & 0x3f;
460
- h4 = bits & 0x3f;
461
-
462
- // use hexets to index into b64, and append result to encoded string
463
- tmp_arr[ac++] = b64a[h1] + b64a[h2] + b64a[h3] + b64a[h4];
464
- } while (i < data.length);
465
-
466
- enc = tmp_arr.join('');
467
- var r = data.length % 3;
468
- return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
469
-
470
- // end of base64 encoder MIT, GPL
471
- }
472
- }
473
-
474
- var unencodedmime = 'image/svg+xml'
475
- function getUnencodedSVG(data, settings){
476
- return [unencodedmime , compressstrokes(data, settings)];
477
- }
478
-
479
- var base64encodedmime = 'image/svg+xml;base64'
480
- function getBase64encodedSVG(data, settings){
481
-
482
- return [base64encodedmime , btoa( compressstrokes(data, settings) )];
483
- }
484
-
485
- function Initializer($){
486
- var mothership = $.fn['jSignature']
487
- mothership(
488
- 'addPlugin'
489
- ,'export'
490
- ,'svg' // alias
491
- ,getUnencodedSVG
492
- )
493
- mothership(
494
- 'addPlugin'
495
- ,'export'
496
- ,unencodedmime // full name
497
- ,getUnencodedSVG
498
- )
499
- mothership(
500
- 'addPlugin'
501
- ,'export'
502
- ,'svgbase64' // alias
503
- ,getBase64encodedSVG
504
- )
505
- mothership(
506
- 'addPlugin'
507
- ,'export'
508
- ,base64encodedmime // full name
509
- ,getBase64encodedSVG
510
- )
511
- }
512
-
513
- // //Because plugins are minified together with jSignature, multiple defines per (minified) file blow up and dont make sense
514
- // //Need to revisit this later.
515
-
516
- if(typeof $ === 'undefined') {throw new Error("We need jQuery for some of the functionality. jQuery is not detected. Failing to initialize...")}
517
- Initializer($)
518
-
1
+ /** @license
2
+ jSignature v2 SVG export plugin.
3
+
4
+ */
5
+ /**
6
+ Copyright (c) 2012 Willow Systems Corp http://willow-systems.com
7
+ MIT License <http://www.opensource.org/licenses/mit-license.php>
8
+ */
9
+
10
+ ;(function(){
11
+ 'use strict'
12
+
13
+ /** @preserve
14
+ Simplify.js BSD
15
+ (c) 2012, Vladimir Agafonkin
16
+ mourner.github.com/simplify-js
17
+
18
+ */
19
+ ;(function(a,b){function c(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d}function d(a,b,c){var d=b.x,e=b.y,f=c.x-d,g=c.y-e,h;if(f!==0||g!==0)h=((a.x-d)*f+(a.y-e)*g)/(f*f+g*g),h>1?(d=c.x,e=c.y):h>0&&(d+=f*h,e+=g*h);return f=a.x-d,g=a.y-e,f*f+g*g}function e(a,b){var d,e=a.length,f,g=a[0],h=[g];for(d=1;d<e;d++)f=a[d],c(f,g)>b&&(h.push(f),g=f);return g!==f&&h.push(f),h}function f(a,c){var e=a.length,f=typeof Uint8Array!=b+""?Uint8Array:Array,g=new f(e),h=0,i=e-1,j,k,l,m,n=[],o=[],p=[];g[h]=g[i]=1;while(i){k=0;for(j=h+1;j<i;j++)l=d(a[j],a[h],a[i]),l>k&&(m=j,k=l);k>c&&(g[m]=1,n.push(h),o.push(m),n.push(m),o.push(i)),h=n.pop(),i=o.pop()}for(j=0;j<e;j++)g[j]&&p.push(a[j]);return p}"use strict";var g=a;g.simplify=function(a,c,d){var g=c!==b?c*c:1;return d||(a=e(a,g)),a=f(a,g),a}})(window);
20
+
21
+
22
+ /**
23
+ Vector class. Allows us to simplify representation and manipulation of coordinate-pair
24
+ representing shift against (0, 0)
25
+
26
+ @public
27
+ @class
28
+ @param
29
+ @returns {Type}
30
+ */
31
+ function Vector(x,y){
32
+ this.x = x
33
+ this.y = y
34
+ this.reverse = function(){
35
+ return new this.constructor(
36
+ this.x * -1
37
+ , this.y * -1
38
+ )
39
+ }
40
+ this._length = null
41
+ this.getLength = function(){
42
+ if (!this._length){
43
+ this._length = Math.sqrt( Math.pow(this.x, 2) + Math.pow(this.y, 2) )
44
+ }
45
+ return this._length
46
+ }
47
+
48
+ var polarity = function (e){
49
+ return Math.round(e / Math.abs(e))
50
+ }
51
+ this.resizeTo = function(length){
52
+ // proportionally changes x,y such that the hypotenuse (vector length) is = new length
53
+ if (this.x === 0 && this.y === 0){
54
+ this._length = 0
55
+ } else if (this.x === 0){
56
+ this._length = length
57
+ this.y = length * polarity(this.y)
58
+ } else if(this.y === 0){
59
+ this._length = length
60
+ this.x = length * polarity(this.x)
61
+ } else {
62
+ var proportion = Math.abs(this.y / this.x)
63
+ , x = Math.sqrt(Math.pow(length, 2) / (1 + Math.pow(proportion, 2)))
64
+ , y = proportion * x
65
+ this._length = length
66
+ this.x = x * polarity(this.x)
67
+ this.y = y * polarity(this.y)
68
+ }
69
+ return this
70
+ }
71
+
72
+ /**
73
+ * Calculates the angle between 'this' vector and another.
74
+ * @public
75
+ * @function
76
+ * @returns {Number} The angle between the two vectors as measured in PI.
77
+ */
78
+ this.angleTo = function(vectorB) {
79
+ var divisor = this.getLength() * vectorB.getLength()
80
+ if (divisor === 0) {
81
+ return 0
82
+ } else {
83
+ // JavaScript floating point math is screwed up.
84
+ // because of it, the core of the formula can, on occasion, have values
85
+ // over 1.0 and below -1.0.
86
+ return Math.acos(
87
+ Math.min(
88
+ Math.max(
89
+ ( this.x * vectorB.x + this.y * vectorB.y ) / divisor
90
+ , -1.0
91
+ )
92
+ , 1.0
93
+ )
94
+ ) / Math.PI
95
+ }
96
+ }
97
+ }
98
+
99
+ function Point(x,y){
100
+ this.x = x
101
+ this.y = y
102
+
103
+ this.getVectorToCoordinates = function (x, y) {
104
+ return new Vector(x - this.x, y - this.y)
105
+ }
106
+ this.getVectorFromCoordinates = function (x, y) {
107
+ return this.getVectorToCoordinates(x, y).reverse()
108
+ }
109
+ this.getVectorToPoint = function (point) {
110
+ return new Vector(point.x - this.x, point.y - this.y)
111
+ }
112
+ this.getVectorFromPoint = function (point) {
113
+ return this.getVectorToPoint(point).reverse()
114
+ }
115
+ }
116
+
117
+ /**
118
+ Allows one to round a number to arbitrary precision.
119
+ Math.round() rounds to whole only.
120
+ Number.toFixed(precision) returns a string.
121
+ I need float to float, but with arbitrary precision, hence:
122
+
123
+ @public
124
+ @function
125
+ @param number {Number}
126
+ @param position {Number} number of digits right of decimal point to keep. If negative, rounding to the left of decimal.
127
+ @returns {Type}
128
+ */
129
+ function round (number, position){
130
+ var tmp = Math.pow(10, position)
131
+ return Math.round( number * tmp ) / tmp
132
+ }
133
+
134
+ // /**
135
+ // * This is a simple, points-to-lines (not curves) renderer.
136
+ // * Keeping it around so we can activate it from time to time and see
137
+ // * if smoothing logic is off much.
138
+ // * @public
139
+ // * @function
140
+ // * @returns {String} Like so "l 1 2 3 5' with stroke as long line chain.
141
+ // */
142
+ // function compressstroke(stroke, shiftx, shifty){
143
+ // // we combine strokes data into string like this:
144
+ // // 'M 53 7 l 1 2 3 4 -5 -6 5 -6'
145
+ // // see SVG documentation for Path element's 'd' argument.
146
+ // var lastx = stroke.x[0]
147
+ // , lasty = stroke.y[0]
148
+ // , i
149
+ // , l = stroke.x.length
150
+ // , answer = ['M', lastx - shiftx, lasty - shifty, 'l']
151
+ //
152
+ // if (l === 1){
153
+ // // meaning this was just a DOT, not a stroke.
154
+ // // instead of creating a circle, we just create a short line
155
+ // answer.concat(1, -1)
156
+ // } else {
157
+ // for(i = 1; i < l; i++){
158
+ // answer = answer.concat(stroke.x[i] - lastx, stroke.y[i] - lasty)
159
+ // lastx = stroke.x[i]
160
+ // lasty = stroke.y[i]
161
+ // }
162
+ // }
163
+ // return answer.join(' ')
164
+ // }
165
+
166
+ function segmentToCurve(stroke, positionInStroke, lineCurveThreshold){
167
+ 'use strict'
168
+ // long lines (ones with many pixels between them) do not look good when they are part of a large curvy stroke.
169
+ // You know, the jaggedy crocodile spine instead of a pretty, smooth curve. Yuck!
170
+ // We want to approximate pretty curves in-place of those ugly lines.
171
+ // To approximate a very nice curve we need to know the direction of line before and after.
172
+ // Hence, on long lines we actually wait for another point beyond it to come back from
173
+ // mousemoved before we draw this curve.
174
+
175
+ // So for "prior curve" to be calc'ed we need 4 points
176
+ // A, B, C, D (we are on D now, A is 3 points in the past.)
177
+ // and 3 lines:
178
+ // pre-line (from points A to B),
179
+ // this line (from points B to C), (we call it "this" because if it was not yet, it's the only one we can draw for sure.)
180
+ // post-line (from points C to D) (even through D point is 'current' we don't know how we can draw it yet)
181
+ //
182
+ // Well, actually, we don't need to *know* the point A, just the vector A->B
183
+
184
+ // Again, we can only derive curve between points positionInStroke-1 and positionInStroke
185
+ // Thus, since we can only draw a line if we know one point ahead of it, we need to shift our focus one point ahead.
186
+ positionInStroke += 1
187
+ // Let's hope the code that calls us knows we do that and does not call us with positionInStroke = index of last point.
188
+
189
+ var Cpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1])
190
+ , Dpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke])
191
+ , CDvector = Cpoint.getVectorToPoint(Dpoint)
192
+ // Again, we have a chance here to draw only PREVIOUS line segment - BC
193
+
194
+ // So, let's start with BC curve.
195
+ // if there is only 2 points in stroke array (C, D), we don't have "history" long enough to have point B, let alone point A.
196
+ // so positionInStroke should start with 2, ie
197
+ // we are here when there are at least 3 points in stroke array.
198
+ var Bpoint = new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2])
199
+ , BCvector = Bpoint.getVectorToPoint(Cpoint)
200
+ , ABvector
201
+ , rounding = 2
202
+
203
+ if ( BCvector.getLength() > lineCurveThreshold ){
204
+ // Yey! Pretty curves, here we come!
205
+ if(positionInStroke > 2) {
206
+ ABvector = (new Point(stroke.x[positionInStroke-3], stroke.y[positionInStroke-3])).getVectorToPoint(Bpoint)
207
+ } else {
208
+ ABvector = new Vector(0,0)
209
+ }
210
+ var minlenfraction = 0.05
211
+ , maxlen = BCvector.getLength() * 0.35
212
+ , ABCangle = BCvector.angleTo(ABvector.reverse())
213
+ , BCDangle = CDvector.angleTo(BCvector.reverse())
214
+ , BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo(
215
+ Math.max(minlenfraction, ABCangle) * maxlen
216
+ )
217
+ , CtoCP2vector = (new Vector(BCvector.x + CDvector.x, BCvector.y + CDvector.y)).reverse().resizeTo(
218
+ Math.max(minlenfraction, BCDangle) * maxlen
219
+ )
220
+ , BtoCP2vector = new Vector(BCvector.x + CtoCP2vector.x, BCvector.y + CtoCP2vector.y)
221
+
222
+ // returing curve for BC segment
223
+ // all coords are vectors against Bpoint
224
+ return [
225
+ 'c' // bezier curve
226
+ , round( BtoCP1vector.x, rounding )
227
+ , round( BtoCP1vector.y, rounding )
228
+ , round( BtoCP2vector.x, rounding )
229
+ , round( BtoCP2vector.y, rounding )
230
+ , round( BCvector.x, rounding )
231
+ , round( BCvector.y, rounding )
232
+ ]
233
+ } else {
234
+ return [
235
+ 'l' // line
236
+ , round( BCvector.x, rounding )
237
+ , round( BCvector.y, rounding )
238
+ ]
239
+ }
240
+ }
241
+
242
+ function lastSegmentToCurve(stroke, lineCurveThreshold){
243
+ 'use strict'
244
+ // Here we tidy up things left unfinished
245
+
246
+ // What's left unfinished there is the curve between the last points
247
+ // in the stroke
248
+ // We can also be called when there is only one point in the stroke (meaning, the
249
+ // stroke was just a dot), in which case there is nothing for us to do.
250
+
251
+ // So for "this curve" to be calc'ed we need 3 points
252
+ // A, B, C
253
+ // and 2 lines:
254
+ // pre-line (from points A to B),
255
+ // this line (from points B to C)
256
+ // Well, actually, we don't need to *know* the point A, just the vector A->B
257
+ // so, we really need points B, C and AB vector.
258
+ var positionInStroke = stroke.x.length - 1
259
+
260
+ // there must be at least 2 points in the stroke.for us to work. Hope calling code checks for that.
261
+ var Cpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke])
262
+ , Bpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1])
263
+ , BCvector = Bpoint.getVectorToPoint(Cpoint)
264
+ , rounding = 2
265
+
266
+ if (positionInStroke > 1 && BCvector.getLength() > lineCurveThreshold){
267
+ // we have at least 3 elems in stroke
268
+ var ABvector = (new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2])).getVectorToPoint(Bpoint)
269
+ , ABCangle = BCvector.angleTo(ABvector.reverse())
270
+ , minlenfraction = 0.05
271
+ , maxlen = BCvector.getLength() * 0.35
272
+ , BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo(
273
+ Math.max(minlenfraction, ABCangle) * maxlen
274
+ )
275
+
276
+ return [
277
+ 'c' // bezier curve
278
+ , round( BtoCP1vector.x, rounding )
279
+ , round( BtoCP1vector.y, rounding )
280
+ , round( BCvector.x, rounding ) // CP2 is same as Cpoint
281
+ , round( BCvector.y, rounding ) // CP2 is same as Cpoint
282
+ , round( BCvector.x, rounding )
283
+ , round( BCvector.y, rounding )
284
+ ]
285
+ } else {
286
+ // Since there is no AB leg, there is no curve to draw. This is just line
287
+ return [
288
+ 'l' // simple line
289
+ , round( BCvector.x, rounding )
290
+ , round( BCvector.y, rounding )
291
+ ]
292
+ }
293
+ }
294
+
295
+ function addstroke(stroke, shiftx, shifty){
296
+ 'use strict'
297
+ // we combine strokes data into string like this:
298
+ // 'M 53 7 l 1 2 c 3 4 -5 -6 5 -6'
299
+ // see SVG documentation for Path element's 'd' argument.
300
+ var lines = [
301
+ 'M' // move to
302
+ , round( (stroke.x[0] - shiftx), 2)
303
+ , round( (stroke.y[0] - shifty), 2)
304
+ ]
305
+ // processing all points but first and last.
306
+ , i = 1 // index zero item in there is STARTING point. we already extracted it.
307
+ , l = stroke.x.length - 1 // this is a trick. We are leaving last point coordinates for separate processing.
308
+ , lineCurveThreshold = 1
309
+
310
+ for(; i < l; i++){
311
+ lines.push.apply(lines, segmentToCurve(stroke, i, lineCurveThreshold))
312
+ }
313
+ if (l > 0 /* effectively more than 1, since we "-1" above */){
314
+ lines.push.apply(lines, lastSegmentToCurve(stroke, i, lineCurveThreshold))
315
+ } else if (l === 0){
316
+ // meaning we only have ONE point in the stroke (and otherwise refer to the stroke as "dot")
317
+ lines.push.apply(lines, ['l' , 1, 1])
318
+ }
319
+ return lines.join(' ')
320
+ }
321
+
322
+ function simplifystroke(stroke){
323
+ var d = []
324
+ , newstroke = {'x':[], 'y':[]}
325
+ , i, l
326
+
327
+ for (i = 0, l = stroke.x.length; i < l; i++){
328
+ d.push({'x':stroke.x[i], 'y':stroke.y[i]})
329
+ }
330
+ d = simplify(d, 0.7, true)
331
+ for (i = 0, l = d.length; i < l; i++){
332
+ newstroke.x.push(d[i].x)
333
+ newstroke.y.push(d[i].y)
334
+ }
335
+ return newstroke
336
+ }
337
+
338
+ // generate SVG style from settings
339
+ function styleFromSettings(settings){
340
+ var styles = [];
341
+ var meta = [
342
+ // ["style attr", "key in settings", "default value"]
343
+ ["fill", undefined, "none"],
344
+ ["stroke", "color", "#000000"],
345
+ ["stroke-width", "lineWidth", 2],
346
+ ["stroke-linecap", undefined, "round"],
347
+ ["stroke-linejoin", undefined, "round"]
348
+ ];
349
+ for (var i = meta.length - 1; i >= 0; i--){
350
+ var attr = meta[i][0]
351
+ , key = meta[i][1]
352
+ , defaultVal = meta[i][2];
353
+ styles.push(attr + '="' + (key in settings && settings[key] ? settings[key] : defaultVal) + '"');
354
+ }
355
+ return styles.join(' ');
356
+ }
357
+
358
+ function compressstrokes(data, settings){
359
+ 'use strict'
360
+ var answer = [
361
+ '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
362
+ , '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'
363
+ ]
364
+ , i , l = data.length
365
+ , stroke
366
+ , xlimits = []
367
+ , ylimits = []
368
+ , sizex = 0
369
+ , sizey = 0
370
+ , shiftx = 0
371
+ , shifty = 0
372
+ , minx, maxx, miny, maxy, padding = 1
373
+ , simplifieddata = []
374
+
375
+ if(l !== 0){
376
+ for(i = 0; i < l; i++){
377
+ stroke = simplifystroke( data[i] )
378
+ simplifieddata.push(stroke)
379
+ xlimits = xlimits.concat(stroke.x)
380
+ ylimits = ylimits.concat(stroke.y)
381
+ }
382
+
383
+ minx = Math.min.apply(null, xlimits) - padding
384
+ maxx = Math.max.apply(null, xlimits) + padding
385
+ miny = Math.min.apply(null, ylimits) - padding
386
+ maxy = Math.max.apply(null, ylimits) + padding
387
+ shiftx = minx < 0? 0 : minx
388
+ shifty = miny < 0? 0 : miny
389
+ sizex = maxx - minx
390
+ sizey = maxy - miny
391
+ }
392
+
393
+ answer.push(
394
+ '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'+
395
+ sizex.toString() +
396
+ '" height="'+
397
+ sizey.toString() +
398
+ '">'
399
+ )
400
+
401
+ // // This is a nice idea: use style declaration on top, and mark the lines with 'class="f"'
402
+ // // thus saving space in svg...
403
+ // // alas, many SVG renderers don't understand "class" and render the strokes in default "fill = black, no stroke" style. Ugh!!!
404
+ // // TODO: Rewrite ImageMagic / GraphicsMagic, InkScape, http://svg.codeplex.com/ to support style + class. until then, we hardcode the stroke style within the path.
405
+ // answer.push(
406
+ // '<style type="text/css"><![CDATA[.f {fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}]]></style>'
407
+ // )
408
+
409
+ // // This set is accompaniment to "simple line renderer" - compressstroke
410
+ // answer.push(
411
+ // '<style type="text/css"><![CDATA[.t {fill:none;stroke:#FF0000;stroke-width:2}]]></style>'
412
+ // )
413
+ // for(i = 0; i < l; i++){
414
+ // stroke = data[i]
415
+ // // This one is accompaniment to "simple line renderer"
416
+ // answer.push('<path class="t" d="'+ compressstroke(stroke, shiftx, shifty) +'"/>')
417
+ // }
418
+
419
+ for(i = 0, l = simplifieddata.length; i < l; i++){
420
+ stroke = simplifieddata[i]
421
+ answer.push('<path ' + styleFromSettings(settings) + ' d="'+ addstroke(stroke, shiftx, shifty) + '"/>')
422
+ }
423
+ answer.push('</svg>')
424
+ return answer.join('')
425
+ }
426
+
427
+ if (typeof btoa !== 'function')
428
+ {
429
+ var btoa = function(data) {
430
+ /** @preserve
431
+ base64 encoder
432
+ MIT, GPL
433
+ http://phpjs.org/functions/base64_encode
434
+ + original by: Tyler Akins (http://rumkin.com)
435
+ + improved by: Bayron Guevara
436
+ + improved by: Thunder.m
437
+ + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
438
+ + bugfixed by: Pellentesque Malesuada
439
+ + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
440
+ + improved by: Rafal Kukawski (http://kukawski.pl)
441
+
442
+ */
443
+ var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
444
+ , b64a = b64.split('')
445
+ , o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
446
+ ac = 0,
447
+ enc = "",
448
+ tmp_arr = [];
449
+
450
+ do { // pack three octets into four hexets
451
+ o1 = data.charCodeAt(i++);
452
+ o2 = data.charCodeAt(i++);
453
+ o3 = data.charCodeAt(i++);
454
+
455
+ bits = o1 << 16 | o2 << 8 | o3;
456
+
457
+ h1 = bits >> 18 & 0x3f;
458
+ h2 = bits >> 12 & 0x3f;
459
+ h3 = bits >> 6 & 0x3f;
460
+ h4 = bits & 0x3f;
461
+
462
+ // use hexets to index into b64, and append result to encoded string
463
+ tmp_arr[ac++] = b64a[h1] + b64a[h2] + b64a[h3] + b64a[h4];
464
+ } while (i < data.length);
465
+
466
+ enc = tmp_arr.join('');
467
+ var r = data.length % 3;
468
+ return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
469
+
470
+ // end of base64 encoder MIT, GPL
471
+ }
472
+ }
473
+
474
+ var unencodedmime = 'image/svg+xml'
475
+ function getUnencodedSVG(data, settings){
476
+ return [unencodedmime , compressstrokes(data, settings)];
477
+ }
478
+
479
+ var base64encodedmime = 'image/svg+xml;base64'
480
+ function getBase64encodedSVG(data, settings){
481
+
482
+ return [base64encodedmime , btoa( compressstrokes(data, settings) )];
483
+ }
484
+
485
+ function Initializer($){
486
+ var mothership = $.fn['jSignature']
487
+ mothership(
488
+ 'addPlugin'
489
+ ,'export'
490
+ ,'svg' // alias
491
+ ,getUnencodedSVG
492
+ )
493
+ mothership(
494
+ 'addPlugin'
495
+ ,'export'
496
+ ,unencodedmime // full name
497
+ ,getUnencodedSVG
498
+ )
499
+ mothership(
500
+ 'addPlugin'
501
+ ,'export'
502
+ ,'svgbase64' // alias
503
+ ,getBase64encodedSVG
504
+ )
505
+ mothership(
506
+ 'addPlugin'
507
+ ,'export'
508
+ ,base64encodedmime // full name
509
+ ,getBase64encodedSVG
510
+ )
511
+ }
512
+
513
+ // //Because plugins are minified together with jSignature, multiple defines per (minified) file blow up and dont make sense
514
+ // //Need to revisit this later.
515
+
516
+ if(typeof $ === 'undefined') {throw new Error("We need jQuery for some of the functionality. jQuery is not detected. Failing to initialize...")}
517
+ Initializer($)
518
+
519
519
  })();