telephone-clients 3.0.103-66 → 3.0.103-67

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 (1033) hide show
  1. package/.babelignore +1 -1
  2. package/.babelrc +6 -6
  3. package/.eslintrc.js +16 -16
  4. package/CHANGELOG.md +37 -37
  5. package/README.md +38 -38
  6. package/TelephoneClient.iml +12 -12
  7. package/adapter.min.js +2049 -2049
  8. package/android.html +18 -18
  9. package/build.gradle +15 -15
  10. package/index.html +29 -29
  11. package/package.json +2 -2
  12. package/release.bat +5 -5
  13. package/src/AndroidApp.vue +33 -33
  14. package/src/App.vue +4 -4
  15. package/src/android-bootstrap/less/navs.less +333 -333
  16. package/src/android.js +17 -17
  17. package/src/androidBase.js +111 -111
  18. package/src/androidTest.js +18 -18
  19. package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  20. package/src/bootstrap/less/.csscomb.json +304 -304
  21. package/src/bootstrap/less/.csslintrc +19 -19
  22. package/src/bootstrap/less/alerts.less +73 -73
  23. package/src/bootstrap/less/aofeng/animate.min.css +10 -10
  24. package/src/bootstrap/less/aofeng/standard.less +585 -585
  25. package/src/bootstrap/less/aofeng/themeOne/BinaryTemplate.less +478 -478
  26. package/src/bootstrap/less/aofeng/themeOne/loginStyle.less +1586 -1586
  27. package/src/bootstrap/less/aofeng/themeOne/systemStyle.less +1905 -1905
  28. package/src/bootstrap/less/aofeng/themeTwo/newStyle1.less +415 -415
  29. package/src/bootstrap/less/badges.less +66 -66
  30. package/src/bootstrap/less/bootstrap.less +65 -65
  31. package/src/bootstrap/less/breadcrumbs.less +26 -26
  32. package/src/bootstrap/less/button-groups.less +247 -247
  33. package/src/bootstrap/less/buttons.less +172 -172
  34. package/src/bootstrap/less/carousel.less +269 -269
  35. package/src/bootstrap/less/close.less +34 -34
  36. package/src/bootstrap/less/code.less +69 -69
  37. package/src/bootstrap/less/component-animations.less +33 -33
  38. package/src/bootstrap/less/dropdowns.less +216 -216
  39. package/src/bootstrap/less/forms.less +626 -626
  40. package/src/bootstrap/less/glyphicons.less +305 -305
  41. package/src/bootstrap/less/grid.less +84 -84
  42. package/src/bootstrap/less/input-groups.less +167 -167
  43. package/src/bootstrap/less/jumbotron.less +52 -52
  44. package/src/bootstrap/less/labels.less +64 -64
  45. package/src/bootstrap/less/list-group.less +141 -141
  46. package/src/bootstrap/less/manageStyle/manageChile.less +180 -180
  47. package/src/bootstrap/less/manageStyle/manageStyle.less +1102 -1102
  48. package/src/bootstrap/less/manageStyle/safeStyle.less +498 -498
  49. package/src/bootstrap/less/media.less +66 -66
  50. package/src/bootstrap/less/mixins/alerts.less +14 -14
  51. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  52. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  53. package/src/bootstrap/less/mixins/buttons.less +69 -69
  54. package/src/bootstrap/less/mixins/center-block.less +7 -7
  55. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  56. package/src/bootstrap/less/mixins/forms.less +90 -90
  57. package/src/bootstrap/less/mixins/gradients.less +59 -59
  58. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  59. package/src/bootstrap/less/mixins/grid.less +122 -122
  60. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  61. package/src/bootstrap/less/mixins/image.less +33 -33
  62. package/src/bootstrap/less/mixins/labels.less +12 -12
  63. package/src/bootstrap/less/mixins/list-group.less +30 -30
  64. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  65. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  66. package/src/bootstrap/less/mixins/opacity.less +8 -8
  67. package/src/bootstrap/less/mixins/pagination.less +24 -24
  68. package/src/bootstrap/less/mixins/panels.less +24 -24
  69. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  70. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  71. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  72. package/src/bootstrap/less/mixins/resize.less +6 -6
  73. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  74. package/src/bootstrap/less/mixins/size.less +10 -10
  75. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  76. package/src/bootstrap/less/mixins/table-row.less +44 -44
  77. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  78. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  79. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  80. package/src/bootstrap/less/mixins.less +40 -40
  81. package/src/bootstrap/less/modals.less +151 -151
  82. package/src/bootstrap/less/navbar.less +660 -660
  83. package/src/bootstrap/less/navs.less +285 -285
  84. package/src/bootstrap/less/normalize.less +424 -424
  85. package/src/bootstrap/less/pager.less +76 -76
  86. package/src/bootstrap/less/pagination.less +89 -89
  87. package/src/bootstrap/less/panels.less +275 -275
  88. package/src/bootstrap/less/popovers.less +131 -131
  89. package/src/bootstrap/less/print.less +101 -101
  90. package/src/bootstrap/less/progress-bars.less +87 -87
  91. package/src/bootstrap/less/responsive-embed.less +35 -35
  92. package/src/bootstrap/less/responsive-utilities.less +194 -194
  93. package/src/bootstrap/less/scaffolding.less +161 -161
  94. package/src/bootstrap/less/stand.less +211 -211
  95. package/src/bootstrap/less/standard.less +503 -503
  96. package/src/bootstrap/less/systemStyle.less +860 -860
  97. package/src/bootstrap/less/tables.less +312 -312
  98. package/src/bootstrap/less/theme.less +291 -291
  99. package/src/bootstrap/less/themeOne.less +34 -34
  100. package/src/bootstrap/less/themeTwo.less +27 -27
  101. package/src/bootstrap/less/thumbnails.less +36 -36
  102. package/src/bootstrap/less/tooltip.less +102 -102
  103. package/src/bootstrap/less/type.less +303 -303
  104. package/src/bootstrap/less/utilities.less +55 -55
  105. package/src/bootstrap/less/variables.less +896 -896
  106. package/src/bootstrap/less/wells.less +29 -29
  107. package/src/bus.js +2 -2
  108. package/src/components/CaseContainer.vue +86 -86
  109. package/src/components/ExportExcel.vue +342 -342
  110. package/src/components/ImgSelfTel.vue +126 -126
  111. package/src/components/MaterialsManage/MaterialsBase.vue +177 -177
  112. package/src/components/MaterialsManage/MaterialsList.vue +244 -244
  113. package/src/components/MaterialsManage/MaterialsManage.vue +60 -60
  114. package/src/components/PartialView.vue +44 -44
  115. package/src/components/Test.vue +26 -26
  116. package/src/components/TimelineItem.vue +119 -119
  117. package/src/components/Util/FileUpload.vue +139 -139
  118. package/src/components/Util/ImgSelfSafePlus.vue +156 -156
  119. package/src/components/Util/RightTreeSafe.vue +346 -346
  120. package/src/components/Util/RightTreeSafeDep.vue +350 -350
  121. package/src/components/Util/TelePhoneUpload.vue +279 -279
  122. package/src/components/Util.js +600 -600
  123. package/src/components/android/AddMyTask.vue +353 -353
  124. package/src/components/android/AppHeader.vue +69 -69
  125. package/src/components/android/CameraImg.vue +111 -111
  126. package/src/components/android/CompletedRepair.vue +264 -264
  127. package/src/components/android/EmployeeInfo.vue +59 -59
  128. package/src/components/android/EmployeePage.vue +71 -71
  129. package/src/components/android/Lbt.vue +103 -103
  130. package/src/components/android/LoginApp.vue +374 -374
  131. package/src/components/android/NavBottom.vue +104 -104
  132. package/src/components/changemeter/ChangeMeterAll.vue +189 -189
  133. package/src/components/changemeter/ChangeMeterDetail.vue +300 -300
  134. package/src/components/changemeter/ChangeMeterMain.vue +37 -37
  135. package/src/components/eachart/BarBrokenline.vue +206 -206
  136. package/src/components/eachart/BarChart.vue +165 -165
  137. package/src/components/eachart/PieChart.vue +182 -182
  138. package/src/components/eachart/datesumchart.vue +165 -165
  139. package/src/components/eachart/statework.vue +226 -226
  140. package/src/components/eachart/workorderchart.vue +183 -183
  141. package/src/components/guoxin/Console.vue +356 -356
  142. package/src/components/guoxin/RecordInfoRight.vue +75 -75
  143. package/src/components/guoxin/VisitInfo.vue +281 -281
  144. package/src/components/guoxin/call.state.api.js +215 -215
  145. package/src/components/guoxin/reconnecting-websocket.min.js +1 -1
  146. package/src/components/guoxin/telephone.js +15 -15
  147. package/src/components/map/AMapTrailShowWx.vue +178 -178
  148. package/src/components/map/CallMap.vue +403 -403
  149. package/src/components/map/CriteriaData.vue +81 -81
  150. package/src/components/map/OlMap.vue +831 -831
  151. package/src/components/map/OrderService.vue +249 -249
  152. package/src/components/map/PipeMap.vue +154 -154
  153. package/src/components/map/dragbox.js +234 -234
  154. package/src/components/pay/createQRcode.vue +192 -192
  155. package/src/components/pay/telReadCard.vue +59 -59
  156. package/src/components/pc/AllUser.vue +615 -615
  157. package/src/components/pc/AllUserNew.vue +638 -638
  158. package/src/components/pc/ArrearsList.vue +397 -397
  159. package/src/components/pc/AttendantCallStat.vue +213 -213
  160. package/src/components/pc/AttendantWorkHistory.vue +98 -98
  161. package/src/components/pc/Auxfunc.vue +76 -76
  162. package/src/components/pc/BottleGas/BottleGasManage.vue +304 -304
  163. package/src/components/pc/BottleGasWork.vue +214 -214
  164. package/src/components/pc/BuildReport.vue +60 -60
  165. package/src/components/pc/CallerInfoList.vue +98 -98
  166. package/src/components/pc/ChatMsg.vue +338 -338
  167. package/src/components/pc/ComplainWork.vue +326 -326
  168. package/src/components/pc/Console.vue +617 -617
  169. package/src/components/pc/DelayReply.vue +60 -60
  170. package/src/components/pc/DistributeWork.vue +177 -177
  171. package/src/components/pc/ElseWork.vue +44 -44
  172. package/src/components/pc/ElseWorkList.vue +267 -267
  173. package/src/components/pc/Emoji.vue +64 -64
  174. package/src/components/pc/Evaluate.vue +145 -145
  175. package/src/components/pc/EvaluateList.vue +195 -195
  176. package/src/components/pc/EvaluateModel.vue +53 -53
  177. package/src/components/pc/FailureEdit.vue +192 -192
  178. package/src/components/pc/FailureShow.vue +61 -61
  179. package/src/components/pc/FireQuery.vue +165 -165
  180. package/src/components/pc/FootPrintList.vue +40 -40
  181. package/src/components/pc/GasWork.vue +764 -764
  182. package/src/components/pc/GroupResend.vue +111 -111
  183. package/src/components/pc/InstallWork.vue +734 -734
  184. package/src/components/pc/ManageMaterial.vue +282 -282
  185. package/src/components/pc/MessageList.vue +635 -635
  186. package/src/components/pc/MessageManage.vue +136 -136
  187. package/src/components/pc/MessageManageList.vue +127 -127
  188. package/src/components/pc/MessageManageNew.vue +121 -121
  189. package/src/components/pc/MonitorGroup.vue +82 -82
  190. package/src/components/pc/NewRepairPaper.vue +370 -370
  191. package/src/components/pc/OrderService.vue +182 -182
  192. package/src/components/pc/ProgressBar.vue +50 -50
  193. package/src/components/pc/QueryJoinlv.vue +136 -136
  194. package/src/components/pc/QueryTeleHistory.vue +95 -95
  195. package/src/components/pc/QueryTextHistory.vue +98 -98
  196. package/src/components/pc/QueryVisitHistory.vue +217 -217
  197. package/src/components/pc/ReVisitList.vue +208 -208
  198. package/src/components/pc/RecordInfoRight.vue +84 -84
  199. package/src/components/pc/RecordList.vue +53 -53
  200. package/src/components/pc/RecordList2.vue +155 -155
  201. package/src/components/pc/RecordListLeft.vue +188 -188
  202. package/src/components/pc/RecordReport.vue +181 -181
  203. package/src/components/pc/ReminderOrder.vue +52 -52
  204. package/src/components/pc/RepairHistoryList.vue +152 -152
  205. package/src/components/pc/RepairsWork.vue +839 -839
  206. package/src/components/pc/ReturnRecord.vue +126 -126
  207. package/src/components/pc/RoleSelector.vue +139 -139
  208. package/src/components/pc/RoleSelectorDep.vue +158 -158
  209. package/src/components/pc/SeatInfo.vue +207 -207
  210. package/src/components/pc/Seekwork.vue +310 -310
  211. package/src/components/pc/ServerAppendixInfo.vue +52 -52
  212. package/src/components/pc/ServiceBack.vue +49 -49
  213. package/src/components/pc/ServiceDetails.vue +53 -53
  214. package/src/components/pc/ServiceDetailsNew.vue +53 -53
  215. package/src/components/pc/SiteBack.vue +84 -84
  216. package/src/components/pc/SiteCase.vue +87 -87
  217. package/src/components/pc/SiteSend.vue +281 -281
  218. package/src/components/pc/StandSend.vue +600 -600
  219. package/src/components/pc/StandServer.vue +25 -25
  220. package/src/components/pc/StandWork.vue +91 -91
  221. package/src/components/pc/StandWorkNew.vue +91 -91
  222. package/src/components/pc/TelFindUser.vue +304 -304
  223. package/src/components/pc/TelListener.vue +174 -174
  224. package/src/components/pc/TelLossList.vue +247 -247
  225. package/src/components/pc/TelMaterSelect.vue +225 -225
  226. package/src/components/pc/TelUserMaterSend.vue +171 -171
  227. package/src/components/pc/TeleInfo.vue +140 -140
  228. package/src/components/pc/TeleList.vue +99 -99
  229. package/src/components/pc/TeleOperKl.vue +91 -91
  230. package/src/components/pc/TemplateMessage.vue +92 -92
  231. package/src/components/pc/TextControl.vue +113 -113
  232. package/src/components/pc/TextInfoRight.vue +84 -84
  233. package/src/components/pc/TextList.vue +45 -45
  234. package/src/components/pc/TextListLeft.vue +156 -156
  235. package/src/components/pc/TextServer.vue +154 -154
  236. package/src/components/pc/TextService.vue +849 -849
  237. package/src/components/pc/UserDefinedMessage.vue +90 -90
  238. package/src/components/pc/UserDefinedMessageNew.vue +121 -121
  239. package/src/components/pc/UserOperate.vue +48 -48
  240. package/src/components/pc/VideoPlayer.vue +73 -73
  241. package/src/components/pc/VisitInfo.vue +284 -284
  242. package/src/components/pc/VoiceServer.vue +208 -208
  243. package/src/components/pc/WorkCenter.vue +105 -105
  244. package/src/components/pc/WorkCenterContent.vue +100 -100
  245. package/src/components/pc/WorkCenterList.vue +292 -292
  246. package/src/components/pc/WorkFind.vue +128 -128
  247. package/src/components/pc/WorkHistory.vue +560 -560
  248. package/src/components/pc/WorkList.vue +743 -743
  249. package/src/components/pc/WorkListAll.vue +630 -630
  250. package/src/components/pc/WorkListAllNew.vue +700 -700
  251. package/src/components/pc/WorkListNew.vue +9 -3
  252. package/src/components/pc/WorkMsg.vue +105 -105
  253. package/src/components/pc/analysis/AnalysisMain.vue +423 -423
  254. package/src/components/pc/analysis/StateStatistics.vue +292 -292
  255. package/src/components/pc/analysis/TelephoneAnaly.vue +104 -104
  256. package/src/components/pc/analysis/TelephoneType.vue +270 -270
  257. package/src/components/pc/config/DefaultPrint.js +7 -7
  258. package/src/components/pc/dataManager/KlCatalog.vue +293 -293
  259. package/src/components/pc/dataManager/KlContent.vue +193 -193
  260. package/src/components/pc/dataManager/Knowledge.vue +21 -21
  261. package/src/components/pc/dataManager/Materials.vue +553 -553
  262. package/src/components/pc/dataManager/OutletsList.vue +85 -85
  263. package/src/components/pc/dataManager/SafeEditor.vue +91 -91
  264. package/src/components/pc/dataManager/SafeList.vue +77 -77
  265. package/src/components/pc/dataManager/ShowMaterials.vue +159 -159
  266. package/src/components/pc/dataManager/StopGasManager.vue +320 -320
  267. package/src/components/pc/imgmove.vue +192 -192
  268. package/src/components/pc/olddata/OldWorkList.vue +193 -193
  269. package/src/components/pc/serviceDeleteOrder.vue +53 -53
  270. package/src/components/pc/wx/BookingService.vue +407 -407
  271. package/src/components/pc/wx/CustomMenu.vue +154 -154
  272. package/src/components/pc/wx/MenuView.vue +249 -249
  273. package/src/components/pc/wx/MobileView.vue +273 -273
  274. package/src/components/pc/wx/NewsMaterial.vue +144 -144
  275. package/src/components/pc/wx/SelectMaterial.vue +100 -100
  276. package/src/components/pc/wx/TelOutletsManager.vue +186 -186
  277. package/src/components/pos/Init.vue +213 -213
  278. package/src/components/pos/Main.vue +123 -123
  279. package/src/components/pos/Plugin/AndroidPlugin.js +148 -148
  280. package/src/components/pos/Plugin/PosUtil.js +315 -315
  281. package/src/components/pos/aotePos.js +55 -55
  282. package/src/components/pos/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  283. package/src/components/pos/bootstrap/less/.csscomb.json +304 -304
  284. package/src/components/pos/bootstrap/less/.csslintrc +19 -19
  285. package/src/components/pos/bootstrap/less/alerts.less +73 -73
  286. package/src/components/pos/bootstrap/less/badges.less +66 -66
  287. package/src/components/pos/bootstrap/less/bootstrap.less +56 -56
  288. package/src/components/pos/bootstrap/less/breadcrumbs.less +26 -26
  289. package/src/components/pos/bootstrap/less/button-groups.less +247 -247
  290. package/src/components/pos/bootstrap/less/buttons.less +172 -172
  291. package/src/components/pos/bootstrap/less/carousel.less +269 -269
  292. package/src/components/pos/bootstrap/less/close.less +34 -34
  293. package/src/components/pos/bootstrap/less/code.less +69 -69
  294. package/src/components/pos/bootstrap/less/component-animations.less +33 -33
  295. package/src/components/pos/bootstrap/less/dropdowns.less +216 -216
  296. package/src/components/pos/bootstrap/less/forms.less +626 -626
  297. package/src/components/pos/bootstrap/less/glyphicons.less +305 -305
  298. package/src/components/pos/bootstrap/less/grid.less +84 -84
  299. package/src/components/pos/bootstrap/less/input-groups.less +167 -167
  300. package/src/components/pos/bootstrap/less/jumbotron.less +52 -52
  301. package/src/components/pos/bootstrap/less/labels.less +64 -64
  302. package/src/components/pos/bootstrap/less/list-group.less +141 -141
  303. package/src/components/pos/bootstrap/less/media.less +66 -66
  304. package/src/components/pos/bootstrap/less/mixins/alerts.less +14 -14
  305. package/src/components/pos/bootstrap/less/mixins/background-variant.less +9 -9
  306. package/src/components/pos/bootstrap/less/mixins/border-radius.less +18 -18
  307. package/src/components/pos/bootstrap/less/mixins/buttons.less +69 -69
  308. package/src/components/pos/bootstrap/less/mixins/center-block.less +7 -7
  309. package/src/components/pos/bootstrap/less/mixins/clearfix.less +22 -22
  310. package/src/components/pos/bootstrap/less/mixins/forms.less +90 -90
  311. package/src/components/pos/bootstrap/less/mixins/gradients.less +59 -59
  312. package/src/components/pos/bootstrap/less/mixins/grid-framework.less +92 -92
  313. package/src/components/pos/bootstrap/less/mixins/grid.less +122 -122
  314. package/src/components/pos/bootstrap/less/mixins/hide-text.less +21 -21
  315. package/src/components/pos/bootstrap/less/mixins/image.less +33 -33
  316. package/src/components/pos/bootstrap/less/mixins/labels.less +12 -12
  317. package/src/components/pos/bootstrap/less/mixins/list-group.less +30 -30
  318. package/src/components/pos/bootstrap/less/mixins/nav-divider.less +10 -10
  319. package/src/components/pos/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  320. package/src/components/pos/bootstrap/less/mixins/opacity.less +8 -8
  321. package/src/components/pos/bootstrap/less/mixins/pagination.less +24 -24
  322. package/src/components/pos/bootstrap/less/mixins/panels.less +24 -24
  323. package/src/components/pos/bootstrap/less/mixins/progress-bar.less +10 -10
  324. package/src/components/pos/bootstrap/less/mixins/reset-filter.less +8 -8
  325. package/src/components/pos/bootstrap/less/mixins/reset-text.less +18 -18
  326. package/src/components/pos/bootstrap/less/mixins/resize.less +6 -6
  327. package/src/components/pos/bootstrap/less/mixins/responsive-visibility.less +15 -15
  328. package/src/components/pos/bootstrap/less/mixins/size.less +10 -10
  329. package/src/components/pos/bootstrap/less/mixins/tab-focus.less +9 -9
  330. package/src/components/pos/bootstrap/less/mixins/table-row.less +44 -44
  331. package/src/components/pos/bootstrap/less/mixins/text-emphasis.less +9 -9
  332. package/src/components/pos/bootstrap/less/mixins/text-overflow.less +8 -8
  333. package/src/components/pos/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  334. package/src/components/pos/bootstrap/less/mixins.less +40 -40
  335. package/src/components/pos/bootstrap/less/modals.less +151 -151
  336. package/src/components/pos/bootstrap/less/navbar.less +660 -660
  337. package/src/components/pos/bootstrap/less/navs.less +286 -286
  338. package/src/components/pos/bootstrap/less/normalize.less +424 -424
  339. package/src/components/pos/bootstrap/less/pager.less +76 -76
  340. package/src/components/pos/bootstrap/less/pagination.less +89 -89
  341. package/src/components/pos/bootstrap/less/panels.less +274 -274
  342. package/src/components/pos/bootstrap/less/popovers.less +131 -131
  343. package/src/components/pos/bootstrap/less/print.less +101 -101
  344. package/src/components/pos/bootstrap/less/progress-bars.less +87 -87
  345. package/src/components/pos/bootstrap/less/responsive-embed.less +35 -35
  346. package/src/components/pos/bootstrap/less/responsive-utilities.less +194 -194
  347. package/src/components/pos/bootstrap/less/scaffolding.less +161 -161
  348. package/src/components/pos/bootstrap/less/tables.less +262 -262
  349. package/src/components/pos/bootstrap/less/theme.less +291 -291
  350. package/src/components/pos/bootstrap/less/thumbnails.less +36 -36
  351. package/src/components/pos/bootstrap/less/tooltip.less +102 -102
  352. package/src/components/pos/bootstrap/less/type.less +303 -303
  353. package/src/components/pos/bootstrap/less/utilities.less +55 -55
  354. package/src/components/pos/bootstrap/less/variables.less +895 -895
  355. package/src/components/pos/bootstrap/less/wells.less +29 -29
  356. package/src/components/pos/charge/card/CardInfo.vue +43 -43
  357. package/src/components/pos/charge/card/CheckUser.Vue +116 -116
  358. package/src/components/pos/charge/card/ReadCardInter.vue +177 -177
  359. package/src/components/pos/charge/card/ReadCardToBuy.vue +174 -174
  360. package/src/components/pos/charge/card/SelectUser.Vue +104 -104
  361. package/src/components/pos/charge/machine/MachineSearch.Vue +124 -124
  362. package/src/components/pos/charge/sellgas/AdvertPop.vue +70 -70
  363. package/src/components/pos/charge/sellgas/CardSellGas.vue +361 -361
  364. package/src/components/pos/charge/sellgas/ChoosePayWay.vue +275 -275
  365. package/src/components/pos/charge/sellgas/GudingPrice.vue +38 -38
  366. package/src/components/pos/charge/sellgas/JietiPrice.vue +54 -54
  367. package/src/components/pos/charge/sellgas/ScanQrcode.vue +171 -171
  368. package/src/components/pos/charge/sellgas/WriteCard.vue +366 -366
  369. package/src/components/pos/charge/userinfo/ChangeMeterList.vue +43 -43
  370. package/src/components/pos/charge/userinfo/FillGasList.vue +43 -43
  371. package/src/components/pos/charge/userinfo/HistorySellList.vue +90 -90
  372. package/src/components/pos/charge/userinfo/OtherList.vue +43 -43
  373. package/src/components/pos/charge/userinfo/SellList.vue +43 -43
  374. package/src/components/pos/charge/userinfo/TransList.vue +43 -43
  375. package/src/components/pos/charge/userinfo/UserInfo.vue +176 -176
  376. package/src/components/pos/charge/userinfo/WritecardInfo.vue +44 -44
  377. package/src/components/pos/css/bootstrap.less +6757 -6757
  378. package/src/components/pos/css/style.less +158 -158
  379. package/src/components/pos/css/style.less.bak +84 -84
  380. package/src/components/pos/fonts/fontawesome-webfont.svg +2671 -2671
  381. package/src/components/pos/fonts/glyphicons-halflings-regular.svg +287 -287
  382. package/src/components/pos/js/bootstrap.js +2377 -2377
  383. package/src/components/pos/js/bootstrap.min.js +6 -6
  384. package/src/components/pos/js/jquery.chromatable.js +150 -150
  385. package/src/components/pos/js/jquery.min.js +5 -5
  386. package/src/components/pos/js/npm.js +12 -12
  387. package/src/components/pos/ztprint.js +26 -26
  388. package/src/components/qinhua/qhonlineChangeMeter.vue +440 -440
  389. package/src/components/qinhua/qhonlineoperation.vue +227 -227
  390. package/src/components/reli/ChoosePayWay.vue +179 -179
  391. package/src/components/reli/HistorySellLists.vue +128 -128
  392. package/src/components/reli/MachineMain.vue +470 -470
  393. package/src/components/reli/UserInfo.vue +211 -211
  394. package/src/components/reli/searchSells.vue +446 -446
  395. package/src/components/repaircount/RepairDetail.vue +74 -74
  396. package/src/components/repaircount/RepairPlan.vue +58 -58
  397. package/src/components/repaircount/SelectRepairPlan.vue +189 -189
  398. package/src/components/sale/CardMeterCenter.vue +625 -625
  399. package/src/components/sale/IOTMeterCenter.vue +443 -443
  400. package/src/components/sale/MachineMeterCenter.vue +591 -591
  401. package/src/components/sendsingle/CardChangeFill.vue +338 -338
  402. package/src/components/sendsingle/ChangeSendCard.vue +19 -19
  403. package/src/components/sendsingle/IotChangeFill.vue +471 -471
  404. package/src/components/sendsingle/MachineChangeFill.vue +143 -143
  405. package/src/components/sendsingle/PosMakeGas.vue +342 -342
  406. package/src/components/sendsingle/QueryTemporaryRepair.vue +226 -226
  407. package/src/components/sendsingle/TelLotChangeFill.vue +626 -626
  408. package/src/components/sendsingle/TemporarySingle.vue +480 -480
  409. package/src/components/sendsingle/ceshi.vue +51 -51
  410. package/src/components/sendsingle/onlineBuyGas.vue +632 -632
  411. package/src/components/sendsingle/onlineBuyGasOld.vue +19 -19
  412. package/src/components/sendsingle/onlineChangeMeter.vue +419 -419
  413. package/src/components/sendsingle/onlinemakecard.vue +413 -413
  414. package/src/components/sendsingle/onlineoperation.vue +401 -401
  415. package/src/components/sendsingle/onlinequeryuser.vue +468 -468
  416. package/src/components/sendsingle/posMaintainer.vue +277 -277
  417. package/src/components/shaoguan/DelayReply.vue +60 -60
  418. package/src/components/shaoguan/FailureEdit.vue +172 -172
  419. package/src/components/shaoguan/RepairDetailsChange.vue +399 -399
  420. package/src/components/shaoguan/RepairOrderChange.vue +673 -673
  421. package/src/components/shaoguan/RepairUserInfoChange.vue +532 -532
  422. package/src/components/shaoguan/WorkHistory.vue +346 -346
  423. package/src/components/shaoguan/WorkListAll.vue +521 -521
  424. package/src/components/shaoguan/config/DefaultPrint.js +7 -7
  425. package/src/components/telcount/TelByAttendant.vue +118 -118
  426. package/src/components/telcount/TelByLouQi.vue +113 -113
  427. package/src/components/telcount/TelByLouQiMingxi.vue +117 -117
  428. package/src/components/telcount/TelByOrderMan.vue +105 -105
  429. package/src/components/telcount/TelByWeiXiu.vue +199 -199
  430. package/src/components/telcount/TelByZhiHuan.vue +109 -109
  431. package/src/components/telreport/HotlineMonthly.vue +121 -121
  432. package/src/components/telreport/TableFaultReport.vue +96 -96
  433. package/src/components/telreport/TelAgentVoiceReport.vue +275 -275
  434. package/src/components/telreport/TelMan.vue +127 -127
  435. package/src/components/telreport/TelReport.vue +122 -122
  436. package/src/components/telreport/TelephoneManReport.vue +121 -121
  437. package/src/components/telreport/Traffic.vue +94 -94
  438. package/src/components/telreport/Trafficassess.vue +121 -121
  439. package/src/components/temp/BusinessMessage.vue +60 -60
  440. package/src/components/temp/BusinesscheckInfo.vue +82 -82
  441. package/src/components/temp/CallRecords.vue +86 -86
  442. package/src/components/temp/ChangemeterInfo.vue +87 -87
  443. package/src/components/temp/DeviceInfo.vue +82 -82
  444. package/src/components/temp/DisableInforMation.vue +82 -82
  445. package/src/components/temp/HandplanInfo.vue +78 -78
  446. package/src/components/temp/InfoTable.vue +134 -134
  447. package/src/components/temp/InstructInfo.vue +86 -86
  448. package/src/components/temp/Main.vue +375 -375
  449. package/src/components/temp/MetereadInfo.vue +83 -83
  450. package/src/components/temp/MetterInfo.vue +92 -92
  451. package/src/components/temp/OldRepairList.vue +100 -100
  452. package/src/components/temp/ParamManager/ParamPage.vue +285 -285
  453. package/src/components/temp/ParamManager/SinglePage.vue +161 -161
  454. package/src/components/temp/RepairList.vue +125 -125
  455. package/src/components/temp/SecurityMessage.vue +64 -64
  456. package/src/components/temp/SecuritycheckInfo.vue +73 -73
  457. package/src/components/temp/SellInfo.vue +153 -153
  458. package/src/components/temp/TelList.vue +99 -99
  459. package/src/components/temp/rightview/CardList.vue +287 -287
  460. package/src/components/temp/rightview/RecordCancel.vue +103 -103
  461. package/src/components/temp/rightview/carddetail/AddUserDetail.vue +65 -65
  462. package/src/components/temp/rightview/carddetail/BankDKDetail.vue +75 -75
  463. package/src/components/temp/rightview/carddetail/BankPay.vue +75 -75
  464. package/src/components/temp/rightview/carddetail/CancellationDetail.vue +58 -58
  465. package/src/components/temp/rightview/carddetail/CardMeterCenterDetail.vue +58 -58
  466. package/src/components/temp/rightview/carddetail/CardOverUserDetail.vue +62 -62
  467. package/src/components/temp/rightview/carddetail/ChangeMeterDetail.vue +70 -70
  468. package/src/components/temp/rightview/carddetail/OtherChargeDetail.vue +56 -56
  469. package/src/components/temp/rightview/carddetail/RefundDetail.vue +63 -63
  470. package/src/components/temp/rightview/carddetail/ReissueBill.vue +165 -165
  471. package/src/components/temp/rightview/carddetail/SortingQuery.vue +295 -295
  472. package/src/components/temp/rightview/carddetail/UserChangeDetail.vue +77 -77
  473. package/src/components/temp/rightview/carddetail/WeChatPay.vue +75 -75
  474. package/src/components/temp/server/ChangeDeclare.vue +45 -45
  475. package/src/components/temp/server/LoadData.vue +60 -60
  476. package/src/components/temp/server/Login.vue +401 -401
  477. package/src/components/temp/server/ModifyPw.vue +143 -143
  478. package/src/components/tongcheng/DistributeWork.vue +129 -129
  479. package/src/components/tongcheng/InfoTable.vue +55 -55
  480. package/src/components/tongcheng/MetterInfo.vue +90 -90
  481. package/src/components/tongcheng/RepairsWork.vue +788 -788
  482. package/src/components/tongcheng/SellInfo.vue +152 -152
  483. package/src/components/tongcheng/StandServer.vue +24 -24
  484. package/src/components/tongcheng/UserOperate.vue +43 -43
  485. package/src/components/tongcheng/VoiceServer.vue +136 -136
  486. package/src/components/tongcheng/WorkListAll.vue +535 -535
  487. package/src/components/weinan/ComplainMsg.vue +141 -141
  488. package/src/components/weinan/ComplainWork.vue +205 -205
  489. package/src/components/weinan/Console.vue +418 -418
  490. package/src/components/weinan/DistributeWork.vue +138 -138
  491. package/src/components/weinan/ExportExcel.vue +204 -204
  492. package/src/components/weinan/FailureEdit.vue +182 -182
  493. package/src/components/weinan/InfoTable.vue +67 -67
  494. package/src/components/weinan/RecordList.vue +299 -299
  495. package/src/components/weinan/RepairFirstV.vue +547 -547
  496. package/src/components/weinan/RepairInfo.vue +163 -163
  497. package/src/components/weinan/RepairListTel.vue +96 -96
  498. package/src/components/weinan/RepairOrderV.vue +1447 -1447
  499. package/src/components/weinan/RepairUserInfo.vue +533 -533
  500. package/src/components/weinan/RepairsWork.vue +806 -806
  501. package/src/components/weinan/Seekwork.vue +178 -178
  502. package/src/components/weinan/SiteChange.vue +228 -228
  503. package/src/components/weinan/SiteSend.vue +228 -228
  504. package/src/components/weinan/SiteSendWeixiu.vue +268 -268
  505. package/src/components/weinan/StandWorkWeixiu.vue +91 -91
  506. package/src/components/weinan/TelByAttendant.vue +110 -110
  507. package/src/components/weinan/TelFindUser.vue +241 -241
  508. package/src/components/weinan/WorkList.vue +726 -726
  509. package/src/components/weinan/WorkListAll.vue +974 -974
  510. package/src/components/weinan/WorkListWeixiu.vue +608 -608
  511. package/src/components/workOrderApplication/OrderWorkDetail.vue +796 -796
  512. package/src/components/workOrderApplication/orderApplicationManage.vue +98 -98
  513. package/src/components/workOrderApplication/orderApply.vue +57 -57
  514. package/src/components/workOrderApplication/orderTable.vue +214 -214
  515. package/src/components/workOrderApplication/orderWork.vue +114 -114
  516. package/src/components/workorder/AfTabset.vue +125 -125
  517. package/src/components/workorder/AndroidStopGasManager.vue +270 -270
  518. package/src/components/workorder/AppInstallationMaterial.vue +613 -613
  519. package/src/components/workorder/ChangeMeter.vue +546 -546
  520. package/src/components/workorder/ChangeMeterList.vue +236 -236
  521. package/src/components/workorder/ChangeMeterPage.vue +506 -506
  522. package/src/components/workorder/CompletedInstall.vue +214 -214
  523. package/src/components/workorder/CompletedRepair.vue +321 -321
  524. package/src/components/workorder/CookingUtensils.vue +134 -134
  525. package/src/components/workorder/DelayApply.vue +105 -105
  526. package/src/components/workorder/DeviceService.vue +133 -133
  527. package/src/components/workorder/DoorService.vue +355 -355
  528. package/src/components/workorder/FaultAll.vue +826 -826
  529. package/src/components/workorder/FirstGasCheck.vue +310 -310
  530. package/src/components/workorder/InputSelect.vue +110 -110
  531. package/src/components/workorder/InstallFirst.vue +517 -517
  532. package/src/components/workorder/InstallUpLoad.vue +111 -111
  533. package/src/components/workorder/MaterialSum.vue +238 -238
  534. package/src/components/workorder/MonitorMSend.vue +202 -202
  535. package/src/components/workorder/Othercharge.vue +477 -477
  536. package/src/components/workorder/Outlay.vue +236 -236
  537. package/src/components/workorder/PhoneGroupResend.vue +88 -88
  538. package/src/components/workorder/PhoneStandWork.vue +354 -354
  539. package/src/components/workorder/PhoneUpDetail.vue +1041 -1041
  540. package/src/components/workorder/PhoneUpUserinfo.vue +1041 -1041
  541. package/src/components/workorder/PhotoWrite.vue +116 -116
  542. package/src/components/workorder/Pipeline.vue +497 -497
  543. package/src/components/workorder/QueryTemporaryRepair.vue +220 -220
  544. package/src/components/workorder/ReadCardPage.vue +217 -217
  545. package/src/components/workorder/RepairDetails.vue +603 -603
  546. package/src/components/workorder/RepairDetails22.vue +128 -128
  547. package/src/components/workorder/RepairFirst.vue +170 -170
  548. package/src/components/workorder/RepairFirstOld.vue +410 -410
  549. package/src/components/workorder/RepairFirstV.vue +673 -673
  550. package/src/components/workorder/RepairFirstVnew.vue +542 -542
  551. package/src/components/workorder/RepairInfo.vue +166 -166
  552. package/src/components/workorder/RepairMatterInfo.vue +186 -186
  553. package/src/components/workorder/RepairOrder.vue +688 -688
  554. package/src/components/workorder/RepairOrderV.vue +1446 -1446
  555. package/src/components/workorder/RepairOrderVnew.vue +868 -868
  556. package/src/components/workorder/RepairSend.vue +264 -264
  557. package/src/components/workorder/RepairUserInfo.vue +532 -532
  558. package/src/components/workorder/Repairpage.vue +100 -100
  559. package/src/components/workorder/RepairsVisit.vue +319 -319
  560. package/src/components/workorder/SafeCheckService.vue +355 -355
  561. package/src/components/workorder/SubstitFirstV.vue +143 -143
  562. package/src/components/workorder/SubstitutionPage.vue +100 -100
  563. package/src/components/workorder/TelChangeMatter.vue +231 -231
  564. package/src/components/workorder/TemporarySingle.vue +480 -480
  565. package/src/components/workorder/TroubleRemoval.vue +419 -419
  566. package/src/components/workorder/UpLoad.vue +111 -111
  567. package/src/components/workorder/ZHihuanFirst.vue +546 -546
  568. package/src/components/workorder/ZhiCompletedRepair.vue +217 -217
  569. package/src/components/workorder/ZhiUpLoad.vue +136 -136
  570. package/src/expandcss.less +620 -620
  571. package/src/filiale/fugu/pc/ComplainWork.vue +206 -206
  572. package/src/filiale/fugu/pc/FailureEdit.vue +183 -183
  573. package/src/filiale/fugu/pc/RepairsWork.vue +793 -793
  574. package/src/filiale/fugu/pc/Seekwork.vue +182 -182
  575. package/src/filiale/fugu/telephone.js +16 -16
  576. package/src/filiale/furuike/android/CompletedRepair.vue +210 -210
  577. package/src/filiale/furuike/android/FaultAll.vue +861 -861
  578. package/src/filiale/furuike/android/Materials.vue +410 -410
  579. package/src/filiale/furuike/android/RepairFirstVnew.vue +580 -580
  580. package/src/filiale/furuike/android/RepairOrderVnew.vue +890 -890
  581. package/src/filiale/furuike/pc/Auxfunc.vue +109 -109
  582. package/src/filiale/furuike/pc/CallRcords.vue +109 -109
  583. package/src/filiale/furuike/pc/ChangemeterInfo.vue +87 -87
  584. package/src/filiale/furuike/pc/ComplainWork.vue +348 -348
  585. package/src/filiale/furuike/pc/DeviceInfo.vue +82 -82
  586. package/src/filiale/furuike/pc/DisableInforMation.vue +82 -82
  587. package/src/filiale/furuike/pc/FailureEdit.vue +198 -198
  588. package/src/filiale/furuike/pc/HandplanInfo.vue +78 -78
  589. package/src/filiale/furuike/pc/InfoTable.vue +134 -134
  590. package/src/filiale/furuike/pc/InstructInfo.vue +86 -86
  591. package/src/filiale/furuike/pc/LineReport.vue +215 -215
  592. package/src/filiale/furuike/pc/MaterialWorkOrder/MaterialWork.vue +400 -400
  593. package/src/filiale/furuike/pc/MaterialWorkOrder/MaterialWorkOrderManage.vue +63 -63
  594. package/src/filiale/furuike/pc/MaterialWorkOrder/WorkOrderMaterial.vue +381 -381
  595. package/src/filiale/furuike/pc/MetereadInfo.vue +82 -82
  596. package/src/filiale/furuike/pc/MetterInfo.vue +92 -92
  597. package/src/filiale/furuike/pc/NewRepairPaper.vue +415 -415
  598. package/src/filiale/furuike/pc/ProblemList.vue +170 -170
  599. package/src/filiale/furuike/pc/QueryVisitHistory.vue +183 -183
  600. package/src/filiale/furuike/pc/RecordListLeft.vue +259 -259
  601. package/src/filiale/furuike/pc/ReminderOrder.vue +50 -50
  602. package/src/filiale/furuike/pc/RepairList.vue +102 -102
  603. package/src/filiale/furuike/pc/RepairsWork.vue +918 -918
  604. package/src/filiale/furuike/pc/SecuritycheckInfo.vue +128 -128
  605. package/src/filiale/furuike/pc/Seekwork.vue +352 -352
  606. package/src/filiale/furuike/pc/SellInfo.vue +158 -158
  607. package/src/filiale/furuike/pc/TableReport.vue +160 -160
  608. package/src/filiale/furuike/pc/TelFindUser.vue +229 -229
  609. package/src/filiale/furuike/pc/TelLossList.vue +145 -145
  610. package/src/filiale/furuike/pc/TelePhoneUpload.vue +279 -279
  611. package/src/filiale/furuike/pc/TextServer.vue +168 -168
  612. package/src/filiale/furuike/pc/VoiceServer.vue +216 -216
  613. package/src/filiale/furuike/pc/WorkCenter.vue +104 -104
  614. package/src/filiale/furuike/pc/WorkListAllNew.vue +855 -855
  615. package/src/filiale/furuike/telephone.js +115 -115
  616. package/src/filiale/furuike/telephoneAndroid.js +23 -23
  617. package/src/filiale/gehua/pc/Console.vue +676 -676
  618. package/src/filiale/gehua/pc/TelAgentVoiceReport.vue +285 -285
  619. package/src/filiale/gehua/pc/TelFindUser.vue +214 -214
  620. package/src/filiale/gehua/telephone.js +16 -16
  621. package/src/filiale/gehua/telephoneAndroid.js +9 -9
  622. package/src/filiale/gongyi/android/RepairDetails.vue +542 -542
  623. package/src/filiale/gongyi/android/RepairFirstV.vue +537 -537
  624. package/src/filiale/gongyi/android/RepairOrderV.vue +1415 -1415
  625. package/src/filiale/gongyi/pc/WorkListAll.vue +632 -632
  626. package/src/filiale/gongyi/telephone.js +13 -13
  627. package/src/filiale/gongyi/telephoneAndroid.js +15 -15
  628. package/src/filiale/guangxi/android/FaultAll.vue +896 -896
  629. package/src/filiale/guangxi/telephoneAndroid.js +13 -13
  630. package/src/filiale/hanzhong/PagedList.js +248 -248
  631. package/src/filiale/hanzhong/android/Outlay.vue +265 -265
  632. package/src/filiale/hanzhong/android/RepairInfo.vue +167 -167
  633. package/src/filiale/hanzhong/hzSelectUtil.js +84 -84
  634. package/src/filiale/hanzhong/md5.js +266 -266
  635. package/src/filiale/hanzhong/pc/AnalysisMain.vue +477 -477
  636. package/src/filiale/hanzhong/pc/Console.vue +884 -884
  637. package/src/filiale/hanzhong/pc/DistributeWork.vue +420 -420
  638. package/src/filiale/hanzhong/pc/FailureEdit.vue +195 -195
  639. package/src/filiale/hanzhong/pc/RecordInfoRight.vue +84 -84
  640. package/src/filiale/hanzhong/pc/RecordList.vue +53 -53
  641. package/src/filiale/hanzhong/pc/RecordListLeft.vue +196 -196
  642. package/src/filiale/hanzhong/pc/Seekwork.vue +318 -318
  643. package/src/filiale/hanzhong/pc/StateStatistics.vue +292 -292
  644. package/src/filiale/hanzhong/pc/TelFindUser.vue +224 -224
  645. package/src/filiale/hanzhong/pc/TelLossList.vue +137 -137
  646. package/src/filiale/hanzhong/pc/TelephoneAnaly.vue +104 -104
  647. package/src/filiale/hanzhong/pc/TelephoneType.vue +269 -269
  648. package/src/filiale/hanzhong/pc/TextServer.vue +157 -157
  649. package/src/filiale/hanzhong/pc/VoiceServer.vue +208 -208
  650. package/src/filiale/hanzhong/pc/message/AllUser.vue +615 -615
  651. package/src/filiale/hanzhong/pc/message/AllUserNew.vue +638 -638
  652. package/src/filiale/hanzhong/pc/message/ArrearsList.vue +397 -397
  653. package/src/filiale/hanzhong/pc/message/MessageList.vue +635 -635
  654. package/src/filiale/hanzhong/pc/message/MessageManage.vue +136 -136
  655. package/src/filiale/hanzhong/pc/message/MessageManageList.vue +127 -127
  656. package/src/filiale/hanzhong/pc/message/MessageManageNew.vue +121 -121
  657. package/src/filiale/hanzhong/pc/message/TemplateMessage.vue +92 -92
  658. package/src/filiale/hanzhong/pc/message/UserDefinedMessage.vue +90 -90
  659. package/src/filiale/hanzhong/pc/message/UserDefinedMessageNew.vue +121 -121
  660. package/src/filiale/hanzhong/telephone.js +48 -48
  661. package/src/filiale/hanzhong/telephoneAndroid.js +15 -15
  662. package/src/filiale/kelai/android/Outlay.vue +274 -274
  663. package/src/filiale/kelai/android/RepairFirstV.vue +552 -552
  664. package/src/filiale/kelai/android/RepairOrderV.vue +1446 -1446
  665. package/src/filiale/kelai/android/RepairTypeList.vue +170 -170
  666. package/src/filiale/kelai/android/RepairUserInfo.vue +537 -537
  667. package/src/filiale/kelai/pc/CallReport/CallReportMainPage-Kelai.vue +612 -612
  668. package/src/filiale/kelai/pc/CallReport/CumulativeCalls.vue +128 -128
  669. package/src/filiale/kelai/pc/CallReport/IncomingTimedata.vue +69 -69
  670. package/src/filiale/kelai/pc/CallReport/Incomingcallvolume.vue +82 -82
  671. package/src/filiale/kelai/pc/CallReport/SeatStatus.vue +60 -60
  672. package/src/filiale/kelai/pc/CallReport/Time.vue +107 -107
  673. package/src/filiale/kelai/pc/CallReport/WorkorderTypesum.vue +76 -76
  674. package/src/filiale/kelai/pc/CallReport/timeRunning.vue +66 -66
  675. package/src/filiale/kelai/pc/KeLaiMaintenanceReport.vue +297 -297
  676. package/src/filiale/kelai/pc/RecordListLeft.vue +188 -188
  677. package/src/filiale/kelai/pc/Seekwork.vue +308 -308
  678. package/src/filiale/kelai/pc/TelAgentVoiceReport.vue +276 -276
  679. package/src/filiale/kelai/pc/TelFindUser.vue +214 -214
  680. package/src/filiale/kelai/pc/TelLossList.vue +154 -154
  681. package/src/filiale/kelai/pc/TextServer.vue +157 -157
  682. package/src/filiale/kelai/pc/Trafficassess.vue +159 -159
  683. package/src/filiale/kelai/pc/VisitInfo.vue +268 -268
  684. package/src/filiale/kelai/pc/VoiceServer.vue +227 -227
  685. package/src/filiale/kelai/pc/WorkCenterList.vue +315 -315
  686. package/src/filiale/kelai/pc/WorkListAllNew.vue +717 -717
  687. package/src/filiale/kelai/pc/serviceDeleteOrder.vue +55 -55
  688. package/src/filiale/kelai/telephone.js +40 -40
  689. package/src/filiale/kelai/telephoneAndroid.js +17 -17
  690. package/src/filiale/liaoyuan/android/FaultAll.vue +737 -737
  691. package/src/filiale/liaoyuan/android/RepairDetails.vue +493 -493
  692. package/src/filiale/liaoyuan/android/RepairOrderV.vue +831 -831
  693. package/src/filiale/liaoyuan/telephoneAndroid.js +13 -13
  694. package/src/filiale/meihekou/android/Othercharge.vue +443 -443
  695. package/src/filiale/meihekou/android/createQRcode.vue +192 -192
  696. package/src/filiale/meihekou/android/onlineBuyGas.vue +793 -793
  697. package/src/filiale/meihekou/telephone.js +13 -13
  698. package/src/filiale/meihekou/telephoneAndroid.js +18 -18
  699. package/src/filiale/qianneng/android/AppInstallationMaterial.vue +1032 -1032
  700. package/src/filiale/qianneng/android/Examine.vue +513 -513
  701. package/src/filiale/qianneng/android/FaultAll.vue +883 -883
  702. package/src/filiale/qianneng/android/MaterIialOne.vue +123 -123
  703. package/src/filiale/qianneng/android/PhoneStandWork.vue +412 -412
  704. package/src/filiale/qianneng/android/QueryTemporaryRepair.vue +243 -243
  705. package/src/filiale/qianneng/android/RepairDetails.vue +666 -666
  706. package/src/filiale/qianneng/android/RepairFirstV.vue +615 -615
  707. package/src/filiale/qianneng/android/RepairInfo.vue +147 -147
  708. package/src/filiale/qianneng/android/RepairOrderV.vue +874 -874
  709. package/src/filiale/qianneng/android/RepairUserInfo.vue +542 -542
  710. package/src/filiale/qianneng/android/TemporarySingle.vue +512 -512
  711. package/src/filiale/qianneng/android/chargesList.vue +161 -161
  712. package/src/filiale/qianneng/pc/ComplainWork.vue +324 -324
  713. package/src/filiale/qianneng/pc/DistributeWork.vue +182 -182
  714. package/src/filiale/qianneng/pc/FailureEdit.vue +161 -161
  715. package/src/filiale/qianneng/pc/Indoorinstallation.vue +832 -832
  716. package/src/filiale/qianneng/pc/MaterialDetailed.vue +10 -0
  717. package/src/filiale/qianneng/pc/MaterialStatistics.vue +144 -144
  718. package/src/filiale/qianneng/pc/NewRepairPaper.vue +467 -467
  719. package/src/filiale/qianneng/pc/Outdoorinstallation.vue +736 -736
  720. package/src/filiale/qianneng/pc/RepairsWork.vue +12 -2
  721. package/src/filiale/qianneng/pc/Seekwork.vue +308 -308
  722. package/src/filiale/qianneng/pc/WorkHistory.vue +562 -562
  723. package/src/filiale/qianneng/pc/WorkListAllNew.vue +14 -3
  724. package/src/filiale/qianneng/telephone.js +21 -21
  725. package/src/filiale/qianneng/telephoneAndroid.js +22 -22
  726. package/src/filiale/rizhao/android/FaultAll.vue +893 -893
  727. package/src/filiale/rizhao/android/Othercharge.vue +423 -423
  728. package/src/filiale/rizhao/android/RepairFirstV.vue +525 -525
  729. package/src/filiale/rizhao/android/RepairInfo.vue +172 -172
  730. package/src/filiale/rizhao/android/RepairOrderV.vue +1415 -1415
  731. package/src/filiale/rizhao/pc/AnalysisMain.vue +355 -355
  732. package/src/filiale/rizhao/pc/CallRecords.vue +89 -89
  733. package/src/filiale/rizhao/pc/ChangemeterInfo.vue +87 -87
  734. package/src/filiale/rizhao/pc/ComplainWork.vue +357 -357
  735. package/src/filiale/rizhao/pc/Console.vue +456 -456
  736. package/src/filiale/rizhao/pc/DispatchMan.vue +100 -100
  737. package/src/filiale/rizhao/pc/DispatchWork.vue +100 -100
  738. package/src/filiale/rizhao/pc/DistributeWork.vue +188 -188
  739. package/src/filiale/rizhao/pc/FailureEdit.vue +183 -183
  740. package/src/filiale/rizhao/pc/FailureEditFire.vue +169 -169
  741. package/src/filiale/rizhao/pc/FailureEditRepair.vue +174 -174
  742. package/src/filiale/rizhao/pc/IgnitionVentilation.vue +890 -890
  743. package/src/filiale/rizhao/pc/NewRepairPaper.vue +377 -377
  744. package/src/filiale/rizhao/pc/RecordListLeft.vue +189 -189
  745. package/src/filiale/rizhao/pc/ReminderOrder.vue +51 -51
  746. package/src/filiale/rizhao/pc/RepairsWork.vue +936 -936
  747. package/src/filiale/rizhao/pc/Seekwork.vue +339 -339
  748. package/src/filiale/rizhao/pc/SiteSend.vue +258 -258
  749. package/src/filiale/rizhao/pc/StateStatistics.vue +292 -292
  750. package/src/filiale/rizhao/pc/TelFindUser.vue +243 -243
  751. package/src/filiale/rizhao/pc/TelMan.vue +133 -133
  752. package/src/filiale/rizhao/pc/TeleInfo.vue +142 -142
  753. package/src/filiale/rizhao/pc/TelephoneAnaly.vue +72 -72
  754. package/src/filiale/rizhao/pc/TelephoneType.vue +272 -272
  755. package/src/filiale/rizhao/pc/Traffic.vue +91 -91
  756. package/src/filiale/rizhao/pc/UserOperate.vue +49 -49
  757. package/src/filiale/rizhao/pc/VoiceServer.vue +219 -219
  758. package/src/filiale/rizhao/pc/WorkCenterList.vue +294 -294
  759. package/src/filiale/rizhao/pc/WorkHistory.vue +541 -541
  760. package/src/filiale/rizhao/pc/WorkList.vue +783 -783
  761. package/src/filiale/rizhao/pc/WorkListAllNew.vue +673 -673
  762. package/src/filiale/rizhao/pc/WxBaobiaoService.vue +134 -134
  763. package/src/filiale/rizhao/telephone.js +57 -57
  764. package/src/filiale/rizhao/telephoneAndroid.js +16 -16
  765. package/src/filiale/rongcheng/CliWorkListAll.vue +699 -699
  766. package/src/filiale/rongcheng/FaultAll.vue +713 -713
  767. package/src/filiale/rongcheng/RepairFirstV.vue +418 -418
  768. package/src/filiale/rongcheng/RepairOrderV.vue +1445 -1445
  769. package/src/filiale/rongcheng/RepairUserInfo.vue +539 -539
  770. package/src/filiale/rongcheng/ServiceDetails.vue +53 -53
  771. package/src/filiale/rongcheng/WorkListAll.vue +727 -727
  772. package/src/filiale/rongcheng/batchPrintSafeCheckOrder.vue +303 -303
  773. package/src/filiale/rongcheng/checkmsgZG.vue +243 -243
  774. package/src/filiale/rongcheng/onlineBuyGas.vue +799 -799
  775. package/src/filiale/rongcheng/onlineoperation.vue +383 -383
  776. package/src/filiale/rongcheng/onlinequeryuser.vue +460 -460
  777. package/src/filiale/rongcheng/telephone.js +19 -19
  778. package/src/filiale/rongcheng/telephoneAndroid.js +19 -19
  779. package/src/filiale/shanxian/android/RepairFirstV.vue +639 -639
  780. package/src/filiale/shanxian/pc/RepairsWork.vue +826 -826
  781. package/src/filiale/shanxian/pc/WorkList.vue +823 -823
  782. package/src/filiale/shanxian/telephone.js +13 -13
  783. package/src/filiale/shanxian/telephoneAndroid.js +13 -13
  784. package/src/filiale/shaoguan/pc/WorkCenterList.vue +326 -326
  785. package/src/filiale/shaoguan/pc/WorkListAllNew.vue +683 -683
  786. package/src/filiale/shaoguan/telephone.js +14 -14
  787. package/src/filiale/shexian/android/AddMyTask.vue +354 -354
  788. package/src/filiale/shexian/android/CompletedRepair.vue +280 -280
  789. package/src/filiale/shexian/android/FaultAll.vue +847 -847
  790. package/src/filiale/shexian/android/Outlay.vue +266 -266
  791. package/src/filiale/shexian/android/RepairFirstV.vue +775 -775
  792. package/src/filiale/shexian/android/RepairInfo.vue +182 -182
  793. package/src/filiale/shexian/android/RepairOrderV.vue +732 -732
  794. package/src/filiale/shexian/pc/NewRepairPaper.vue +374 -374
  795. package/src/filiale/shexian/pc/TelByOrderMan.vue +109 -109
  796. package/src/filiale/shexian/pc/TelByOrderManCount.vue +124 -124
  797. package/src/filiale/shexian/pc/TelByRepairType.vue +111 -111
  798. package/src/filiale/shexian/pc/WorkList.vue +764 -764
  799. package/src/filiale/shexian/pc/WorkListAllNew.vue +718 -718
  800. package/src/filiale/shexian/telephone.js +18 -18
  801. package/src/filiale/shexian/telephoneAndroid.js +32 -32
  802. package/src/filiale/shimen/pc/ChangemeterInfo.vue +108 -108
  803. package/src/filiale/shimen/pc/ComplainWork.vue +297 -297
  804. package/src/filiale/shimen/pc/DistributeWork.vue +173 -173
  805. package/src/filiale/shimen/pc/InfoTable.vue +122 -122
  806. package/src/filiale/shimen/pc/RepairList.vue +109 -109
  807. package/src/filiale/shimen/pc/RepairsWork.vue +803 -803
  808. package/src/filiale/shimen/pc/Seekwork.vue +307 -307
  809. package/src/filiale/shimen/pc/SellInfo.vue +87 -87
  810. package/src/filiale/shimen/pc/WorkListAllNew.vue +680 -680
  811. package/src/filiale/shimen/telephone.js +23 -23
  812. package/src/filiale/tianke/android/FaultAll.vue +854 -854
  813. package/src/filiale/tianke/android/RepairFirstV.vue +614 -614
  814. package/src/filiale/tianke/android.js +12 -12
  815. package/src/filiale/tianke/pc/DistributeWork.vue +180 -180
  816. package/src/filiale/tianke/pc/IgnitionVentilationWork.vue +801 -801
  817. package/src/filiale/tianke/pc/NewRepairPaper.vue +370 -370
  818. package/src/filiale/tianke/pc/RepairsWork.vue +794 -794
  819. package/src/filiale/tianke/pc/WorkList.vue +769 -769
  820. package/src/filiale/tianke/telephone.js +17 -17
  821. package/src/filiale/tianke/telephoneAndroid.js +13 -13
  822. package/src/filiale/tongchuan/android/AndroidStopGasManager.vue +321 -321
  823. package/src/filiale/tongchuan/android/CompletedRepair.vue +211 -211
  824. package/src/filiale/tongchuan/android/PhoneStandWork.vue +409 -409
  825. package/src/filiale/tongchuan/android/PhoneUpUserinfo.vue +1005 -1005
  826. package/src/filiale/tongchuan/android/RepairFirstV.vue +646 -646
  827. package/src/filiale/tongchuan/android/RepairInfo.vue +172 -172
  828. package/src/filiale/tongchuan/android/RepairOrderV.vue +1446 -1446
  829. package/src/filiale/tongchuan/android/TicketDetails.vue +411 -411
  830. package/src/filiale/tongchuan/pc/AnalysisMain.vue +355 -355
  831. package/src/filiale/tongchuan/pc/CallRecords.vue +96 -96
  832. package/src/filiale/tongchuan/pc/CheckWork.vue +289 -289
  833. package/src/filiale/tongchuan/pc/ComplainWork.vue +324 -324
  834. package/src/filiale/tongchuan/pc/DepRepairManCount.vue +148 -148
  835. package/src/filiale/tongchuan/pc/DistributeWork.vue +179 -179
  836. package/src/filiale/tongchuan/pc/ExportExcel.vue +204 -204
  837. package/src/filiale/tongchuan/pc/HiddenSituationWeixiu.vue +115 -115
  838. package/src/filiale/tongchuan/pc/QueryVisitHistory.vue +236 -236
  839. package/src/filiale/tongchuan/pc/RecordListLeft.vue +216 -216
  840. package/src/filiale/tongchuan/pc/RepairList.vue +102 -102
  841. package/src/filiale/tongchuan/pc/RepairWorkReport.vue +133 -133
  842. package/src/filiale/tongchuan/pc/RepairsWork.vue +836 -836
  843. package/src/filiale/tongchuan/pc/SeatInfo.vue +325 -325
  844. package/src/filiale/tongchuan/pc/Seekwork.vue +307 -307
  845. package/src/filiale/tongchuan/pc/ServiceDetails.vue +112 -112
  846. package/src/filiale/tongchuan/pc/StateStatistics.vue +292 -292
  847. package/src/filiale/tongchuan/pc/TelFindUser.vue +278 -278
  848. package/src/filiale/tongchuan/pc/TelMan.vue +142 -142
  849. package/src/filiale/tongchuan/pc/TelephoneAnaly.vue +102 -102
  850. package/src/filiale/tongchuan/pc/TelephoneType.vue +272 -272
  851. package/src/filiale/tongchuan/pc/Traffic.vue +103 -103
  852. package/src/filiale/tongchuan/pc/UserWork.vue +805 -805
  853. package/src/filiale/tongchuan/pc/VisitInfo.vue +305 -305
  854. package/src/filiale/tongchuan/pc/VisitListWork.vue +251 -251
  855. package/src/filiale/tongchuan/pc/VoiceServer.vue +218 -218
  856. package/src/filiale/tongchuan/pc/WorkCenterList.vue +297 -297
  857. package/src/filiale/tongchuan/pc/WorkHistory.vue +521 -521
  858. package/src/filiale/tongchuan/pc/WorkList.vue +811 -811
  859. package/src/filiale/tongchuan/pc/WorkListAll.vue +731 -731
  860. package/src/filiale/tongchuan/pc/WorkOrderStatistics.vue +294 -294
  861. package/src/filiale/tongchuan/pc/WorkorderCheckDistributePlan.vue +376 -376
  862. package/src/filiale/tongchuan/pc/visitPlanList.vue +342 -342
  863. package/src/filiale/tongchuan/pc/visitPlanManage.vue +599 -599
  864. package/src/filiale/tongchuan/pc/visitServiceList.vue +285 -285
  865. package/src/filiale/tongchuan/telephone.js +52 -52
  866. package/src/filiale/tongchuan/telephoneAndroid.js +22 -22
  867. package/src/filiale/v3new/android/FaultAll.vue +809 -809
  868. package/src/filiale/v3new/android/RepairFirstV.vue +633 -633
  869. package/src/filiale/v3new/pc/SiteBack.vue +83 -83
  870. package/src/filiale/v3new/pc/WorkCenter.vue +104 -104
  871. package/src/filiale/v3new/pc/WorkCenterList.vue +274 -274
  872. package/src/filiale/v3new/pc/WorkHistory.vue +537 -537
  873. package/src/filiale/v3new/pc/WorkList.vue +766 -766
  874. package/src/filiale/v3new/pc/WorkListNew.vue +706 -706
  875. package/src/filiale/v3new/pc/serviceDeleteOrder.vue +51 -51
  876. package/src/filiale/v3new/telephone.js +19 -19
  877. package/src/filiale/v3new/telephoneAndroid.js +15 -15
  878. package/src/filiale/weinanct/android/AppInstallationMaterial.vue +586 -586
  879. package/src/filiale/weinanct/android/FaultAll.vue +854 -854
  880. package/src/filiale/weinanct/android/RepairDetails.vue +508 -508
  881. package/src/filiale/weinanct/android/RepairFirstV.vue +635 -635
  882. package/src/filiale/weinanct/android/RepairOrderV.vue +1443 -1443
  883. package/src/filiale/weinanct/pc/TelFindUser.vue +213 -213
  884. package/src/filiale/weinanct/pc/VoiceServer.vue +208 -208
  885. package/src/filiale/weinanct/telephone.js +14 -14
  886. package/src/filiale/weinanct/telephoneAndroid.js +20 -20
  887. package/src/filiale/weinanct//350/257/264/346/230/216.txt +1 -1
  888. package/src/filiale/wenxi/android/RepairFirstV.vue +537 -537
  889. package/src/filiale/wenxi/android/RepairInfo.vue +168 -168
  890. package/src/filiale/wenxi/android/RepairOrderV.vue +1419 -1419
  891. package/src/filiale/wenxi/pc/DistributeWork.vue +177 -177
  892. package/src/filiale/wenxi/pc/FailureEdit.vue +206 -206
  893. package/src/filiale/wenxi/pc/RepairsWork.vue +774 -774
  894. package/src/filiale/wenxi/pc/TelFindUser.vue +209 -209
  895. package/src/filiale/wenxi/pc/VoiceServer.vue +214 -214
  896. package/src/filiale/wenxi/pc/WorkListAll.vue +650 -650
  897. package/src/filiale/wenxi/telephone.js +18 -18
  898. package/src/filiale/wenxi/telephoneAndroid.js +16 -16
  899. package/src/filiale/wuan/Util.js +461 -461
  900. package/src/filiale/wuan/android/AddMyTask.vue +227 -227
  901. package/src/filiale/wuan/android/RepairInfo.vue +136 -136
  902. package/src/filiale/wuan/android/RepairOrderV.vue +1384 -1384
  903. package/src/filiale/wuan/android/RepairUserInfo.vue +581 -581
  904. package/src/filiale/wuan/pc/BatchList.vue +329 -329
  905. package/src/filiale/wuan/pc/BatchListSanhu.vue +329 -329
  906. package/src/filiale/wuan/pc/BatchOrdersSanhu.vue +115 -115
  907. package/src/filiale/wuan/pc/CheckWork.vue +263 -263
  908. package/src/filiale/wuan/pc/DistributeWork.vue +136 -136
  909. package/src/filiale/wuan/pc/FailureEdit.vue +174 -174
  910. package/src/filiale/wuan/pc/GasWorkSanhu.vue +817 -817
  911. package/src/filiale/wuan/pc/RepairsWork.vue +848 -848
  912. package/src/filiale/wuan/pc/Seekwork.vue +311 -311
  913. package/src/filiale/wuan/pc/TelFindUser.vue +229 -229
  914. package/src/filiale/wuan/pc/WorkListAll.vue +642 -642
  915. package/src/filiale/wuan/telephone.js +23 -23
  916. package/src/filiale/wuan/telephoneAndroid.js +17 -17
  917. package/src/filiale/wuhai/pc/CallRcords.vue +109 -109
  918. package/src/filiale/wuhai/pc/ComplainWork.vue +324 -324
  919. package/src/filiale/wuhai/pc/Console.vue +432 -432
  920. package/src/filiale/wuhai/pc/DistributeWork.vue +173 -173
  921. package/src/filiale/wuhai/pc/FailureEdit.vue +190 -190
  922. package/src/filiale/wuhai/pc/InfoTable.vue +135 -135
  923. package/src/filiale/wuhai/pc/NewRepairPaper.vue +380 -380
  924. package/src/filiale/wuhai/pc/RecordListLeft.vue +202 -202
  925. package/src/filiale/wuhai/pc/RepairsWork.vue +811 -811
  926. package/src/filiale/wuhai/pc/SecuritycheckInfo.vue +92 -92
  927. package/src/filiale/wuhai/pc/Seekwork.vue +361 -361
  928. package/src/filiale/wuhai/pc/ServiceRcords.vue +146 -146
  929. package/src/filiale/wuhai/pc/TelFindUser.vue +256 -256
  930. package/src/filiale/wuhai/pc/VoiceServer.vue +211 -211
  931. package/src/filiale/wuhai/pc/WorkCenter.vue +104 -104
  932. package/src/filiale/wuhai/pc/WorkCenterList.vue +337 -337
  933. package/src/filiale/wuhai/pc/WorkListAllNew.vue +715 -715
  934. package/src/filiale/wuhai/pc/serviceDeleteOrder.vue +54 -54
  935. package/src/filiale/wuhai/telephone.js +35 -35
  936. package/src/filiale/xinkang/android/FaultAll.vue +840 -840
  937. package/src/filiale/xinkang/android/RepairFirstV.vue +484 -484
  938. package/src/filiale/xinkang/telephoneAndroid.js +14 -14
  939. package/src/filiale/yuansheng/android/RepairFirstV.vue +636 -636
  940. package/src/filiale/yuansheng/android/RepairInfo.vue +166 -166
  941. package/src/filiale/yuansheng/pc/DistributeWork.vue +177 -177
  942. package/src/filiale/yuansheng/pc/FailureEdit.vue +188 -188
  943. package/src/filiale/yuansheng/pc/HandplanInfo.vue +78 -78
  944. package/src/filiale/yuansheng/pc/MetereadInfo.vue +83 -83
  945. package/src/filiale/yuansheng/pc/ReservationWork.vue +156 -156
  946. package/src/filiale/yuansheng/pc/TelFindUser.vue +237 -237
  947. package/src/filiale/yuansheng/pc/VoiceServer.vue +208 -208
  948. package/src/filiale/yuansheng/telephone.js +20 -20
  949. package/src/filiale/yuansheng/telephoneAndroid.js +16 -16
  950. package/src/filiale/zhongsheng/android/FailureShow.vue +61 -61
  951. package/src/filiale/zhongsheng/android/FaultAll.vue +830 -830
  952. package/src/filiale/zhongsheng/android/RepairFirstV.vue +464 -464
  953. package/src/filiale/zhongsheng/android/RepairInfo.vue +133 -133
  954. package/src/filiale/zhongsheng/android/RepairOrderV.vue +1430 -1430
  955. package/src/filiale/zhongsheng/android/RepairUserInfo.vue +532 -532
  956. package/src/filiale/zhongsheng/pc/ComplainWork.vue +299 -299
  957. package/src/filiale/zhongsheng/pc/Console.vue +432 -432
  958. package/src/filiale/zhongsheng/pc/DistributeWork.vue +173 -173
  959. package/src/filiale/zhongsheng/pc/IgnitionVentilationWork.vue +836 -836
  960. package/src/filiale/zhongsheng/pc/InfoTable.vue +124 -124
  961. package/src/filiale/zhongsheng/pc/RepairsWork.vue +775 -775
  962. package/src/filiale/zhongsheng/pc/Seekwork.vue +283 -283
  963. package/src/filiale/zhongsheng/pc/TelFindUser.vue +216 -216
  964. package/src/filiale/zhongsheng/pc/WorkList.vue +805 -805
  965. package/src/filiale/zhongsheng/pc/WorkListAll.vue +628 -628
  966. package/src/filiale/zhongsheng/telephone.js +23 -23
  967. package/src/filiale/zhongsheng/telephoneAndroid.js +19 -19
  968. package/src/filiale/zhongyi/android/FaultAll.vue +854 -854
  969. package/src/filiale/zhongyi/android/RepairFirstV.vue +614 -614
  970. package/src/filiale/zhongyi/android.js +12 -12
  971. package/src/filiale/zhongyi/pc/DistributeWork.vue +180 -180
  972. package/src/filiale/zhongyi/pc/IgnitionVentilationWork.vue +801 -801
  973. package/src/filiale/zhongyi/pc/NewRepairPaper.vue +370 -370
  974. package/src/filiale/zhongyi/pc/RepairsWork.vue +794 -794
  975. package/src/filiale/zhongyi/pc/WorkList.vue +769 -769
  976. package/src/filiale/zhongyi/pc/WorkListAllNew.vue +672 -672
  977. package/src/filiale/zhongyi/telephone.js +18 -18
  978. package/src/filiale/zhongyi/telephoneAndroid.js +13 -13
  979. package/src/filiale/zhoukou/android/ChargeBill.vue +201 -201
  980. package/src/filiale/zhoukou/android/FaultAll.vue +779 -779
  981. package/src/filiale/zhoukou/android/Othercharge.vue +591 -591
  982. package/src/filiale/zhoukou/android/OtherchargeZhoukou.vue +574 -574
  983. package/src/filiale/zhoukou/android/Outlay.vue +236 -236
  984. package/src/filiale/zhoukou/android/RepairDetails.vue +544 -544
  985. package/src/filiale/zhoukou/android/RepairFirstV.vue +542 -542
  986. package/src/filiale/zhoukou/android/RepairInfo.vue +136 -136
  987. package/src/filiale/zhoukou/android/RepairOrderV.vue +1383 -1383
  988. package/src/filiale/zhoukou/android/RepairUserInfo.vue +532 -532
  989. package/src/filiale/zhoukou/android/ZkBill.vue +191 -191
  990. package/src/filiale/zhoukou/android/createQRcode.vue +256 -256
  991. package/src/filiale/zhoukou/android/onlineBuyGas.vue +804 -804
  992. package/src/filiale/zhoukou/android/onlineoperation.vue +416 -416
  993. package/src/filiale/zhoukou/android/onlinequeryuser.vue +468 -468
  994. package/src/filiale/zhoukou/pc/ExportExcel.vue +204 -204
  995. package/src/filiale/zhoukou/pc/NewRepairPaper.vue +366 -366
  996. package/src/filiale/zhoukou/pc/SiteSend.vue +265 -265
  997. package/src/filiale/zhoukou/pc/WorkHistory.vue +514 -514
  998. package/src/filiale/zhoukou/pc/WorkList.vue +653 -653
  999. package/src/filiale/zhoukou/pc/WorkListAllNew.vue +675 -675
  1000. package/src/filiale/zhoukou/telephone.js +18 -18
  1001. package/src/filiale/zhoukou/telephoneAndroid.js +33 -33
  1002. package/src/index.js +15 -15
  1003. package/src/main.js +1 -1
  1004. package/src/plugins/DataSql.js +569 -569
  1005. package/src/plugins/EmojiData.js +514 -514
  1006. package/src/plugins/EncryptUtil.js +53 -53
  1007. package/src/plugins/HttpLoad.js +93 -93
  1008. package/src/plugins/LoadData.js +40 -40
  1009. package/src/plugins/LoadParams.js +54 -54
  1010. package/src/plugins/LocalPagedList.js +107 -107
  1011. package/src/plugins/ObjTree.js +532 -532
  1012. package/src/plugins/TelGetSaleParams.js +63 -63
  1013. package/src/qrcode.js +618 -618
  1014. package/src/qrcode.min.js +1 -1
  1015. package/src/stores/exportConfig.js +10 -10
  1016. package/src/stores/wxconfig.js +10 -10
  1017. package/src/telephone-android.js +367 -367
  1018. package/src/telephone-shaoguan.js +256 -256
  1019. package/src/telephone-tongcheng.js +254 -254
  1020. package/src/telephone.js +743 -743
  1021. package/src/telephoneanaly.less +704 -704
  1022. package/src/utils/LdapHelper.js +99 -99
  1023. package/src/weinan-android.js +350 -350
  1024. package/src/weinan.js +537 -537
  1025. package/static/fonts/font.css +6 -6
  1026. package/static/js/adapter.min.js +2049 -2049
  1027. package/static/js/bootstrap.min.js +7 -7
  1028. package/static/js/ctilink.js +1303 -1303
  1029. package/static/js/ctimsg.js +655 -655
  1030. package/static/js/janus.js +4034 -4034
  1031. package/static/js/jquery-2.1.1.min.js +5 -5
  1032. package/yarn-error.log +7872 -7872
  1033. package//345/221/274/345/217/253/345/267/245/345/215/225/351/205/215/347/275/256/350/257/264/346/230/216.md +6 -6
@@ -1,2377 +1,2377 @@
1
- /*!
2
- * Bootstrap v3.3.7 (http://getbootstrap.com)
3
- * Copyright 2011-2016 Twitter, Inc.
4
- * Licensed under the MIT license
5
- */
6
-
7
- if (typeof jQuery === 'undefined') {
8
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
9
- }
10
-
11
- +function ($) {
12
- 'use strict';
13
- var version = $.fn.jquery.split(' ')[0].split('.')
14
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
15
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
16
- }
17
- }(jQuery);
18
-
19
- /* ========================================================================
20
- * Bootstrap: transition.js v3.3.7
21
- * http://getbootstrap.com/javascript/#transitions
22
- * ========================================================================
23
- * Copyright 2011-2016 Twitter, Inc.
24
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25
- * ======================================================================== */
26
-
27
-
28
- +function ($) {
29
- 'use strict';
30
-
31
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
32
- // ============================================================
33
-
34
- function transitionEnd() {
35
- var el = document.createElement('bootstrap')
36
-
37
- var transEndEventNames = {
38
- WebkitTransition : 'webkitTransitionEnd',
39
- MozTransition : 'transitionend',
40
- OTransition : 'oTransitionEnd otransitionend',
41
- transition : 'transitionend'
42
- }
43
-
44
- for (var name in transEndEventNames) {
45
- if (el.style[name] !== undefined) {
46
- return { end: transEndEventNames[name] }
47
- }
48
- }
49
-
50
- return false // explicit for ie8 ( ._.)
51
- }
52
-
53
- // http://blog.alexmaccaw.com/css-transitions
54
- $.fn.emulateTransitionEnd = function (duration) {
55
- var called = false
56
- var $el = this
57
- $(this).one('bsTransitionEnd', function () { called = true })
58
- var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
59
- setTimeout(callback, duration)
60
- return this
61
- }
62
-
63
- $(function () {
64
- $.support.transition = transitionEnd()
65
-
66
- if (!$.support.transition) return
67
-
68
- $.event.special.bsTransitionEnd = {
69
- bindType: $.support.transition.end,
70
- delegateType: $.support.transition.end,
71
- handle: function (e) {
72
- if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
73
- }
74
- }
75
- })
76
-
77
- }(jQuery);
78
-
79
- /* ========================================================================
80
- * Bootstrap: alert.js v3.3.7
81
- * http://getbootstrap.com/javascript/#alerts
82
- * ========================================================================
83
- * Copyright 2011-2016 Twitter, Inc.
84
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
85
- * ======================================================================== */
86
-
87
-
88
- +function ($) {
89
- 'use strict';
90
-
91
- // ALERT CLASS DEFINITION
92
- // ======================
93
-
94
- var dismiss = '[data-dismiss="alert"]'
95
- var Alert = function (el) {
96
- $(el).on('click', dismiss, this.close)
97
- }
98
-
99
- Alert.VERSION = '3.3.7'
100
-
101
- Alert.TRANSITION_DURATION = 150
102
-
103
- Alert.prototype.close = function (e) {
104
- var $this = $(this)
105
- var selector = $this.attr('data-target')
106
-
107
- if (!selector) {
108
- selector = $this.attr('href')
109
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
110
- }
111
-
112
- var $parent = $(selector === '#' ? [] : selector)
113
-
114
- if (e) e.preventDefault()
115
-
116
- if (!$parent.length) {
117
- $parent = $this.closest('.alert')
118
- }
119
-
120
- $parent.trigger(e = $.Event('close.bs.alert'))
121
-
122
- if (e.isDefaultPrevented()) return
123
-
124
- $parent.removeClass('in')
125
-
126
- function removeElement() {
127
- // detach from parent, fire event then clean up data
128
- $parent.detach().trigger('closed.bs.alert').remove()
129
- }
130
-
131
- $.support.transition && $parent.hasClass('fade') ?
132
- $parent
133
- .one('bsTransitionEnd', removeElement)
134
- .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
135
- removeElement()
136
- }
137
-
138
-
139
- // ALERT PLUGIN DEFINITION
140
- // =======================
141
-
142
- function Plugin(option) {
143
- return this.each(function () {
144
- var $this = $(this)
145
- var data = $this.data('bs.alert')
146
-
147
- if (!data) $this.data('bs.alert', (data = new Alert(this)))
148
- if (typeof option == 'string') data[option].call($this)
149
- })
150
- }
151
-
152
- var old = $.fn.alert
153
-
154
- $.fn.alert = Plugin
155
- $.fn.alert.Constructor = Alert
156
-
157
-
158
- // ALERT NO CONFLICT
159
- // =================
160
-
161
- $.fn.alert.noConflict = function () {
162
- $.fn.alert = old
163
- return this
164
- }
165
-
166
-
167
- // ALERT DATA-API
168
- // ==============
169
-
170
- $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
171
-
172
- }(jQuery);
173
-
174
- /* ========================================================================
175
- * Bootstrap: button.js v3.3.7
176
- * http://getbootstrap.com/javascript/#buttons
177
- * ========================================================================
178
- * Copyright 2011-2016 Twitter, Inc.
179
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
180
- * ======================================================================== */
181
-
182
-
183
- +function ($) {
184
- 'use strict';
185
-
186
- // BUTTON PUBLIC CLASS DEFINITION
187
- // ==============================
188
-
189
- var Button = function (element, options) {
190
- this.$element = $(element)
191
- this.options = $.extend({}, Button.DEFAULTS, options)
192
- this.isLoading = false
193
- }
194
-
195
- Button.VERSION = '3.3.7'
196
-
197
- Button.DEFAULTS = {
198
- loadingText: 'loading...'
199
- }
200
-
201
- Button.prototype.setState = function (state) {
202
- var d = 'disabled'
203
- var $el = this.$element
204
- var val = $el.is('input') ? 'val' : 'html'
205
- var data = $el.data()
206
-
207
- state += 'Text'
208
-
209
- if (data.resetText == null) $el.data('resetText', $el[val]())
210
-
211
- // push to event loop to allow forms to submit
212
- setTimeout($.proxy(function () {
213
- $el[val](data[state] == null ? this.options[state] : data[state])
214
-
215
- if (state == 'loadingText') {
216
- this.isLoading = true
217
- $el.addClass(d).attr(d, d).prop(d, true)
218
- } else if (this.isLoading) {
219
- this.isLoading = false
220
- $el.removeClass(d).removeAttr(d).prop(d, false)
221
- }
222
- }, this), 0)
223
- }
224
-
225
- Button.prototype.toggle = function () {
226
- var changed = true
227
- var $parent = this.$element.closest('[data-toggle="buttons"]')
228
-
229
- if ($parent.length) {
230
- var $input = this.$element.find('input')
231
- if ($input.prop('type') == 'radio') {
232
- if ($input.prop('checked')) changed = false
233
- $parent.find('.active').removeClass('active')
234
- this.$element.addClass('active')
235
- } else if ($input.prop('type') == 'checkbox') {
236
- if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
237
- this.$element.toggleClass('active')
238
- }
239
- $input.prop('checked', this.$element.hasClass('active'))
240
- if (changed) $input.trigger('change')
241
- } else {
242
- this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
243
- this.$element.toggleClass('active')
244
- }
245
- }
246
-
247
-
248
- // BUTTON PLUGIN DEFINITION
249
- // ========================
250
-
251
- function Plugin(option) {
252
- return this.each(function () {
253
- var $this = $(this)
254
- var data = $this.data('bs.button')
255
- var options = typeof option == 'object' && option
256
-
257
- if (!data) $this.data('bs.button', (data = new Button(this, options)))
258
-
259
- if (option == 'toggle') data.toggle()
260
- else if (option) data.setState(option)
261
- })
262
- }
263
-
264
- var old = $.fn.button
265
-
266
- $.fn.button = Plugin
267
- $.fn.button.Constructor = Button
268
-
269
-
270
- // BUTTON NO CONFLICT
271
- // ==================
272
-
273
- $.fn.button.noConflict = function () {
274
- $.fn.button = old
275
- return this
276
- }
277
-
278
-
279
- // BUTTON DATA-API
280
- // ===============
281
-
282
- $(document)
283
- .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
284
- var $btn = $(e.target).closest('.btn')
285
- Plugin.call($btn, 'toggle')
286
- if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
287
- // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
288
- e.preventDefault()
289
- // The target component still receive the focus
290
- if ($btn.is('input,button')) $btn.trigger('focus')
291
- else $btn.find('input:visible,button:visible').first().trigger('focus')
292
- }
293
- })
294
- .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
295
- $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
296
- })
297
-
298
- }(jQuery);
299
-
300
- /* ========================================================================
301
- * Bootstrap: carousel.js v3.3.7
302
- * http://getbootstrap.com/javascript/#carousel
303
- * ========================================================================
304
- * Copyright 2011-2016 Twitter, Inc.
305
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
306
- * ======================================================================== */
307
-
308
-
309
- +function ($) {
310
- 'use strict';
311
-
312
- // CAROUSEL CLASS DEFINITION
313
- // =========================
314
-
315
- var Carousel = function (element, options) {
316
- this.$element = $(element)
317
- this.$indicators = this.$element.find('.carousel-indicators')
318
- this.options = options
319
- this.paused = null
320
- this.sliding = null
321
- this.interval = null
322
- this.$active = null
323
- this.$items = null
324
-
325
- this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
326
-
327
- this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
328
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
329
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
330
- }
331
-
332
- Carousel.VERSION = '3.3.7'
333
-
334
- Carousel.TRANSITION_DURATION = 600
335
-
336
- Carousel.DEFAULTS = {
337
- interval: 5000,
338
- pause: 'hover',
339
- wrap: true,
340
- keyboard: true
341
- }
342
-
343
- Carousel.prototype.keydown = function (e) {
344
- if (/input|textarea/i.test(e.target.tagName)) return
345
- switch (e.which) {
346
- case 37: this.prev(); break
347
- case 39: this.next(); break
348
- default: return
349
- }
350
-
351
- e.preventDefault()
352
- }
353
-
354
- Carousel.prototype.cycle = function (e) {
355
- e || (this.paused = false)
356
-
357
- this.interval && clearInterval(this.interval)
358
-
359
- this.options.interval
360
- && !this.paused
361
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
362
-
363
- return this
364
- }
365
-
366
- Carousel.prototype.getItemIndex = function (item) {
367
- this.$items = item.parent().children('.item')
368
- return this.$items.index(item || this.$active)
369
- }
370
-
371
- Carousel.prototype.getItemForDirection = function (direction, active) {
372
- var activeIndex = this.getItemIndex(active)
373
- var willWrap = (direction == 'prev' && activeIndex === 0)
374
- || (direction == 'next' && activeIndex == (this.$items.length - 1))
375
- if (willWrap && !this.options.wrap) return active
376
- var delta = direction == 'prev' ? -1 : 1
377
- var itemIndex = (activeIndex + delta) % this.$items.length
378
- return this.$items.eq(itemIndex)
379
- }
380
-
381
- Carousel.prototype.to = function (pos) {
382
- var that = this
383
- var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
384
-
385
- if (pos > (this.$items.length - 1) || pos < 0) return
386
-
387
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
388
- if (activeIndex == pos) return this.pause().cycle()
389
-
390
- return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
391
- }
392
-
393
- Carousel.prototype.pause = function (e) {
394
- e || (this.paused = true)
395
-
396
- if (this.$element.find('.next, .prev').length && $.support.transition) {
397
- this.$element.trigger($.support.transition.end)
398
- this.cycle(true)
399
- }
400
-
401
- this.interval = clearInterval(this.interval)
402
-
403
- return this
404
- }
405
-
406
- Carousel.prototype.next = function () {
407
- if (this.sliding) return
408
- return this.slide('next')
409
- }
410
-
411
- Carousel.prototype.prev = function () {
412
- if (this.sliding) return
413
- return this.slide('prev')
414
- }
415
-
416
- Carousel.prototype.slide = function (type, next) {
417
- var $active = this.$element.find('.item.active')
418
- var $next = next || this.getItemForDirection(type, $active)
419
- var isCycling = this.interval
420
- var direction = type == 'next' ? 'left' : 'right'
421
- var that = this
422
-
423
- if ($next.hasClass('active')) return (this.sliding = false)
424
-
425
- var relatedTarget = $next[0]
426
- var slideEvent = $.Event('slide.bs.carousel', {
427
- relatedTarget: relatedTarget,
428
- direction: direction
429
- })
430
- this.$element.trigger(slideEvent)
431
- if (slideEvent.isDefaultPrevented()) return
432
-
433
- this.sliding = true
434
-
435
- isCycling && this.pause()
436
-
437
- if (this.$indicators.length) {
438
- this.$indicators.find('.active').removeClass('active')
439
- var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
440
- $nextIndicator && $nextIndicator.addClass('active')
441
- }
442
-
443
- var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
444
- if ($.support.transition && this.$element.hasClass('slide')) {
445
- $next.addClass(type)
446
- $next[0].offsetWidth // force reflow
447
- $active.addClass(direction)
448
- $next.addClass(direction)
449
- $active
450
- .one('bsTransitionEnd', function () {
451
- $next.removeClass([type, direction].join(' ')).addClass('active')
452
- $active.removeClass(['active', direction].join(' '))
453
- that.sliding = false
454
- setTimeout(function () {
455
- that.$element.trigger(slidEvent)
456
- }, 0)
457
- })
458
- .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
459
- } else {
460
- $active.removeClass('active')
461
- $next.addClass('active')
462
- this.sliding = false
463
- this.$element.trigger(slidEvent)
464
- }
465
-
466
- isCycling && this.cycle()
467
-
468
- return this
469
- }
470
-
471
-
472
- // CAROUSEL PLUGIN DEFINITION
473
- // ==========================
474
-
475
- function Plugin(option) {
476
- return this.each(function () {
477
- var $this = $(this)
478
- var data = $this.data('bs.carousel')
479
- var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
480
- var action = typeof option == 'string' ? option : options.slide
481
-
482
- if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
483
- if (typeof option == 'number') data.to(option)
484
- else if (action) data[action]()
485
- else if (options.interval) data.pause().cycle()
486
- })
487
- }
488
-
489
- var old = $.fn.carousel
490
-
491
- $.fn.carousel = Plugin
492
- $.fn.carousel.Constructor = Carousel
493
-
494
-
495
- // CAROUSEL NO CONFLICT
496
- // ====================
497
-
498
- $.fn.carousel.noConflict = function () {
499
- $.fn.carousel = old
500
- return this
501
- }
502
-
503
-
504
- // CAROUSEL DATA-API
505
- // =================
506
-
507
- var clickHandler = function (e) {
508
- var href
509
- var $this = $(this)
510
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
511
- if (!$target.hasClass('carousel')) return
512
- var options = $.extend({}, $target.data(), $this.data())
513
- var slideIndex = $this.attr('data-slide-to')
514
- if (slideIndex) options.interval = false
515
-
516
- Plugin.call($target, options)
517
-
518
- if (slideIndex) {
519
- $target.data('bs.carousel').to(slideIndex)
520
- }
521
-
522
- e.preventDefault()
523
- }
524
-
525
- $(document)
526
- .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
527
- .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
528
-
529
- $(window).on('load', function () {
530
- $('[data-ride="carousel"]').each(function () {
531
- var $carousel = $(this)
532
- Plugin.call($carousel, $carousel.data())
533
- })
534
- })
535
-
536
- }(jQuery);
537
-
538
- /* ========================================================================
539
- * Bootstrap: collapse.js v3.3.7
540
- * http://getbootstrap.com/javascript/#collapse
541
- * ========================================================================
542
- * Copyright 2011-2016 Twitter, Inc.
543
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
544
- * ======================================================================== */
545
-
546
- /* jshint latedef: false */
547
-
548
- +function ($) {
549
- 'use strict';
550
-
551
- // COLLAPSE PUBLIC CLASS DEFINITION
552
- // ================================
553
-
554
- var Collapse = function (element, options) {
555
- this.$element = $(element)
556
- this.options = $.extend({}, Collapse.DEFAULTS, options)
557
- this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
558
- '[data-toggle="collapse"][data-target="#' + element.id + '"]')
559
- this.transitioning = null
560
-
561
- if (this.options.parent) {
562
- this.$parent = this.getParent()
563
- } else {
564
- this.addAriaAndCollapsedClass(this.$element, this.$trigger)
565
- }
566
-
567
- if (this.options.toggle) this.toggle()
568
- }
569
-
570
- Collapse.VERSION = '3.3.7'
571
-
572
- Collapse.TRANSITION_DURATION = 350
573
-
574
- Collapse.DEFAULTS = {
575
- toggle: true
576
- }
577
-
578
- Collapse.prototype.dimension = function () {
579
- var hasWidth = this.$element.hasClass('width')
580
- return hasWidth ? 'width' : 'height'
581
- }
582
-
583
- Collapse.prototype.show = function () {
584
- if (this.transitioning || this.$element.hasClass('in')) return
585
-
586
- var activesData
587
- var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
588
-
589
- if (actives && actives.length) {
590
- activesData = actives.data('bs.collapse')
591
- if (activesData && activesData.transitioning) return
592
- }
593
-
594
- var startEvent = $.Event('show.bs.collapse')
595
- this.$element.trigger(startEvent)
596
- if (startEvent.isDefaultPrevented()) return
597
-
598
- if (actives && actives.length) {
599
- Plugin.call(actives, 'hide')
600
- activesData || actives.data('bs.collapse', null)
601
- }
602
-
603
- var dimension = this.dimension()
604
-
605
- this.$element
606
- .removeClass('collapse')
607
- .addClass('collapsing')[dimension](0)
608
- .attr('aria-expanded', true)
609
-
610
- this.$trigger
611
- .removeClass('collapsed')
612
- .attr('aria-expanded', true)
613
-
614
- this.transitioning = 1
615
-
616
- var complete = function () {
617
- this.$element
618
- .removeClass('collapsing')
619
- .addClass('collapse in')[dimension]('')
620
- this.transitioning = 0
621
- this.$element
622
- .trigger('shown.bs.collapse')
623
- }
624
-
625
- if (!$.support.transition) return complete.call(this)
626
-
627
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
628
-
629
- this.$element
630
- .one('bsTransitionEnd', $.proxy(complete, this))
631
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
632
- }
633
-
634
- Collapse.prototype.hide = function () {
635
- if (this.transitioning || !this.$element.hasClass('in')) return
636
-
637
- var startEvent = $.Event('hide.bs.collapse')
638
- this.$element.trigger(startEvent)
639
- if (startEvent.isDefaultPrevented()) return
640
-
641
- var dimension = this.dimension()
642
-
643
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
644
-
645
- this.$element
646
- .addClass('collapsing')
647
- .removeClass('collapse in')
648
- .attr('aria-expanded', false)
649
-
650
- this.$trigger
651
- .addClass('collapsed')
652
- .attr('aria-expanded', false)
653
-
654
- this.transitioning = 1
655
-
656
- var complete = function () {
657
- this.transitioning = 0
658
- this.$element
659
- .removeClass('collapsing')
660
- .addClass('collapse')
661
- .trigger('hidden.bs.collapse')
662
- }
663
-
664
- if (!$.support.transition) return complete.call(this)
665
-
666
- this.$element
667
- [dimension](0)
668
- .one('bsTransitionEnd', $.proxy(complete, this))
669
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
670
- }
671
-
672
- Collapse.prototype.toggle = function () {
673
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
674
- }
675
-
676
- Collapse.prototype.getParent = function () {
677
- return $(this.options.parent)
678
- .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
679
- .each($.proxy(function (i, element) {
680
- var $element = $(element)
681
- this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
682
- }, this))
683
- .end()
684
- }
685
-
686
- Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
687
- var isOpen = $element.hasClass('in')
688
-
689
- $element.attr('aria-expanded', isOpen)
690
- $trigger
691
- .toggleClass('collapsed', !isOpen)
692
- .attr('aria-expanded', isOpen)
693
- }
694
-
695
- function getTargetFromTrigger($trigger) {
696
- var href
697
- var target = $trigger.attr('data-target')
698
- || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
699
-
700
- return $(target)
701
- }
702
-
703
-
704
- // COLLAPSE PLUGIN DEFINITION
705
- // ==========================
706
-
707
- function Plugin(option) {
708
- return this.each(function () {
709
- var $this = $(this)
710
- var data = $this.data('bs.collapse')
711
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
712
-
713
- if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
714
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
715
- if (typeof option == 'string') data[option]()
716
- })
717
- }
718
-
719
- var old = $.fn.collapse
720
-
721
- $.fn.collapse = Plugin
722
- $.fn.collapse.Constructor = Collapse
723
-
724
-
725
- // COLLAPSE NO CONFLICT
726
- // ====================
727
-
728
- $.fn.collapse.noConflict = function () {
729
- $.fn.collapse = old
730
- return this
731
- }
732
-
733
-
734
- // COLLAPSE DATA-API
735
- // =================
736
-
737
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
738
- var $this = $(this)
739
-
740
- if (!$this.attr('data-target')) e.preventDefault()
741
-
742
- var $target = getTargetFromTrigger($this)
743
- var data = $target.data('bs.collapse')
744
- var option = data ? 'toggle' : $this.data()
745
-
746
- Plugin.call($target, option)
747
- })
748
-
749
- }(jQuery);
750
-
751
- /* ========================================================================
752
- * Bootstrap: dropdown.js v3.3.7
753
- * http://getbootstrap.com/javascript/#dropdowns
754
- * ========================================================================
755
- * Copyright 2011-2016 Twitter, Inc.
756
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
757
- * ======================================================================== */
758
-
759
-
760
- +function ($) {
761
- 'use strict';
762
-
763
- // DROPDOWN CLASS DEFINITION
764
- // =========================
765
-
766
- var backdrop = '.dropdown-backdrop'
767
- var toggle = '[data-toggle="dropdown"]'
768
- var Dropdown = function (element) {
769
- $(element).on('click.bs.dropdown', this.toggle)
770
- }
771
-
772
- Dropdown.VERSION = '3.3.7'
773
-
774
- function getParent($this) {
775
- var selector = $this.attr('data-target')
776
-
777
- if (!selector) {
778
- selector = $this.attr('href')
779
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
780
- }
781
-
782
- var $parent = selector && $(selector)
783
-
784
- return $parent && $parent.length ? $parent : $this.parent()
785
- }
786
-
787
- function clearMenus(e) {
788
- if (e && e.which === 3) return
789
- $(backdrop).remove()
790
- $(toggle).each(function () {
791
- var $this = $(this)
792
- var $parent = getParent($this)
793
- var relatedTarget = { relatedTarget: this }
794
-
795
- if (!$parent.hasClass('open')) return
796
-
797
- if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
798
-
799
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
800
-
801
- if (e.isDefaultPrevented()) return
802
-
803
- $this.attr('aria-expanded', 'false')
804
- $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
805
- })
806
- }
807
-
808
- Dropdown.prototype.toggle = function (e) {
809
- var $this = $(this)
810
-
811
- if ($this.is('.disabled, :disabled')) return
812
-
813
- var $parent = getParent($this)
814
- var isActive = $parent.hasClass('open')
815
-
816
- clearMenus()
817
-
818
- if (!isActive) {
819
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
820
- // if mobile we use a backdrop because click events don't delegate
821
- $(document.createElement('div'))
822
- .addClass('dropdown-backdrop')
823
- .insertAfter($(this))
824
- .on('click', clearMenus)
825
- }
826
-
827
- var relatedTarget = { relatedTarget: this }
828
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
829
-
830
- if (e.isDefaultPrevented()) return
831
-
832
- $this
833
- .trigger('focus')
834
- .attr('aria-expanded', 'true')
835
-
836
- $parent
837
- .toggleClass('open')
838
- .trigger($.Event('shown.bs.dropdown', relatedTarget))
839
- }
840
-
841
- return false
842
- }
843
-
844
- Dropdown.prototype.keydown = function (e) {
845
- if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
846
-
847
- var $this = $(this)
848
-
849
- e.preventDefault()
850
- e.stopPropagation()
851
-
852
- if ($this.is('.disabled, :disabled')) return
853
-
854
- var $parent = getParent($this)
855
- var isActive = $parent.hasClass('open')
856
-
857
- if (!isActive && e.which != 27 || isActive && e.which == 27) {
858
- if (e.which == 27) $parent.find(toggle).trigger('focus')
859
- return $this.trigger('click')
860
- }
861
-
862
- var desc = ' li:not(.disabled):visible a'
863
- var $items = $parent.find('.dropdown-menu' + desc)
864
-
865
- if (!$items.length) return
866
-
867
- var index = $items.index(e.target)
868
-
869
- if (e.which == 38 && index > 0) index-- // up
870
- if (e.which == 40 && index < $items.length - 1) index++ // down
871
- if (!~index) index = 0
872
-
873
- $items.eq(index).trigger('focus')
874
- }
875
-
876
-
877
- // DROPDOWN PLUGIN DEFINITION
878
- // ==========================
879
-
880
- function Plugin(option) {
881
- return this.each(function () {
882
- var $this = $(this)
883
- var data = $this.data('bs.dropdown')
884
-
885
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
886
- if (typeof option == 'string') data[option].call($this)
887
- })
888
- }
889
-
890
- var old = $.fn.dropdown
891
-
892
- $.fn.dropdown = Plugin
893
- $.fn.dropdown.Constructor = Dropdown
894
-
895
-
896
- // DROPDOWN NO CONFLICT
897
- // ====================
898
-
899
- $.fn.dropdown.noConflict = function () {
900
- $.fn.dropdown = old
901
- return this
902
- }
903
-
904
-
905
- // APPLY TO STANDARD DROPDOWN ELEMENTS
906
- // ===================================
907
-
908
- $(document)
909
- .on('click.bs.dropdown.data-api', clearMenus)
910
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
911
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
912
- .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
913
- .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
914
-
915
- }(jQuery);
916
-
917
- /* ========================================================================
918
- * Bootstrap: modal.js v3.3.7
919
- * http://getbootstrap.com/javascript/#modals
920
- * ========================================================================
921
- * Copyright 2011-2016 Twitter, Inc.
922
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
923
- * ======================================================================== */
924
-
925
-
926
- +function ($) {
927
- 'use strict';
928
-
929
- // MODAL CLASS DEFINITION
930
- // ======================
931
-
932
- var Modal = function (element, options) {
933
- this.options = options
934
- this.$body = $(document.body)
935
- this.$element = $(element)
936
- this.$dialog = this.$element.find('.modal-dialog')
937
- this.$backdrop = null
938
- this.isShown = null
939
- this.originalBodyPad = null
940
- this.scrollbarWidth = 0
941
- this.ignoreBackdropClick = false
942
-
943
- if (this.options.remote) {
944
- this.$element
945
- .find('.modal-content')
946
- .load(this.options.remote, $.proxy(function () {
947
- this.$element.trigger('loaded.bs.modal')
948
- }, this))
949
- }
950
- }
951
-
952
- Modal.VERSION = '3.3.7'
953
-
954
- Modal.TRANSITION_DURATION = 300
955
- Modal.BACKDROP_TRANSITION_DURATION = 150
956
-
957
- Modal.DEFAULTS = {
958
- backdrop: true,
959
- keyboard: true,
960
- show: true
961
- }
962
-
963
- Modal.prototype.toggle = function (_relatedTarget) {
964
- return this.isShown ? this.hide() : this.show(_relatedTarget)
965
- }
966
-
967
- Modal.prototype.show = function (_relatedTarget) {
968
- var that = this
969
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
970
-
971
- this.$element.trigger(e)
972
-
973
- if (this.isShown || e.isDefaultPrevented()) return
974
-
975
- this.isShown = true
976
-
977
- this.checkScrollbar()
978
- this.setScrollbar()
979
- this.$body.addClass('modal-open')
980
-
981
- this.escape()
982
- this.resize()
983
-
984
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
985
-
986
- this.$dialog.on('mousedown.dismiss.bs.modal', function () {
987
- that.$element.one('mouseup.dismiss.bs.modal', function (e) {
988
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
989
- })
990
- })
991
-
992
- this.backdrop(function () {
993
- var transition = $.support.transition && that.$element.hasClass('fade')
994
-
995
- if (!that.$element.parent().length) {
996
- that.$element.appendTo(that.$body) // don't move modals dom position
997
- }
998
-
999
- that.$element
1000
- .show()
1001
- .scrollTop(0)
1002
-
1003
- that.adjustDialog()
1004
-
1005
- if (transition) {
1006
- that.$element[0].offsetWidth // force reflow
1007
- }
1008
-
1009
- that.$element.addClass('in')
1010
-
1011
- that.enforceFocus()
1012
-
1013
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
1014
-
1015
- transition ?
1016
- that.$dialog // wait for modal to slide in
1017
- .one('bsTransitionEnd', function () {
1018
- that.$element.trigger('focus').trigger(e)
1019
- })
1020
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
1021
- that.$element.trigger('focus').trigger(e)
1022
- })
1023
- }
1024
-
1025
- Modal.prototype.hide = function (e) {
1026
- if (e) e.preventDefault()
1027
-
1028
- e = $.Event('hide.bs.modal')
1029
-
1030
- this.$element.trigger(e)
1031
-
1032
- if (!this.isShown || e.isDefaultPrevented()) return
1033
-
1034
- this.isShown = false
1035
-
1036
- this.escape()
1037
- this.resize()
1038
-
1039
- $(document).off('focusin.bs.modal')
1040
-
1041
- this.$element
1042
- .removeClass('in')
1043
- .off('click.dismiss.bs.modal')
1044
- .off('mouseup.dismiss.bs.modal')
1045
-
1046
- this.$dialog.off('mousedown.dismiss.bs.modal')
1047
-
1048
- $.support.transition && this.$element.hasClass('fade') ?
1049
- this.$element
1050
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
1051
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
1052
- this.hideModal()
1053
- }
1054
-
1055
- Modal.prototype.enforceFocus = function () {
1056
- $(document)
1057
- .off('focusin.bs.modal') // guard against infinite focus loop
1058
- .on('focusin.bs.modal', $.proxy(function (e) {
1059
- if (document !== e.target &&
1060
- this.$element[0] !== e.target &&
1061
- !this.$element.has(e.target).length) {
1062
- this.$element.trigger('focus')
1063
- }
1064
- }, this))
1065
- }
1066
-
1067
- Modal.prototype.escape = function () {
1068
- if (this.isShown && this.options.keyboard) {
1069
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
1070
- e.which == 27 && this.hide()
1071
- }, this))
1072
- } else if (!this.isShown) {
1073
- this.$element.off('keydown.dismiss.bs.modal')
1074
- }
1075
- }
1076
-
1077
- Modal.prototype.resize = function () {
1078
- if (this.isShown) {
1079
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
1080
- } else {
1081
- $(window).off('resize.bs.modal')
1082
- }
1083
- }
1084
-
1085
- Modal.prototype.hideModal = function () {
1086
- var that = this
1087
- this.$element.hide()
1088
- this.backdrop(function () {
1089
- that.$body.removeClass('modal-open')
1090
- that.resetAdjustments()
1091
- that.resetScrollbar()
1092
- that.$element.trigger('hidden.bs.modal')
1093
- })
1094
- }
1095
-
1096
- Modal.prototype.removeBackdrop = function () {
1097
- this.$backdrop && this.$backdrop.remove()
1098
- this.$backdrop = null
1099
- }
1100
-
1101
- Modal.prototype.backdrop = function (callback) {
1102
- var that = this
1103
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
1104
-
1105
- if (this.isShown && this.options.backdrop) {
1106
- var doAnimate = $.support.transition && animate
1107
-
1108
- this.$backdrop = $(document.createElement('div'))
1109
- .addClass('modal-backdrop ' + animate)
1110
- .appendTo(this.$body)
1111
-
1112
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
1113
- if (this.ignoreBackdropClick) {
1114
- this.ignoreBackdropClick = false
1115
- return
1116
- }
1117
- if (e.target !== e.currentTarget) return
1118
- this.options.backdrop == 'static'
1119
- ? this.$element[0].focus()
1120
- : this.hide()
1121
- }, this))
1122
-
1123
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
1124
-
1125
- this.$backdrop.addClass('in')
1126
-
1127
- if (!callback) return
1128
-
1129
- doAnimate ?
1130
- this.$backdrop
1131
- .one('bsTransitionEnd', callback)
1132
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
1133
- callback()
1134
-
1135
- } else if (!this.isShown && this.$backdrop) {
1136
- this.$backdrop.removeClass('in')
1137
-
1138
- var callbackRemove = function () {
1139
- that.removeBackdrop()
1140
- callback && callback()
1141
- }
1142
- $.support.transition && this.$element.hasClass('fade') ?
1143
- this.$backdrop
1144
- .one('bsTransitionEnd', callbackRemove)
1145
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
1146
- callbackRemove()
1147
-
1148
- } else if (callback) {
1149
- callback()
1150
- }
1151
- }
1152
-
1153
- // these following methods are used to handle overflowing modals
1154
-
1155
- Modal.prototype.handleUpdate = function () {
1156
- this.adjustDialog()
1157
- }
1158
-
1159
- Modal.prototype.adjustDialog = function () {
1160
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
1161
-
1162
- this.$element.css({
1163
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
1164
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
1165
- })
1166
- }
1167
-
1168
- Modal.prototype.resetAdjustments = function () {
1169
- this.$element.css({
1170
- paddingLeft: '',
1171
- paddingRight: ''
1172
- })
1173
- }
1174
-
1175
- Modal.prototype.checkScrollbar = function () {
1176
- var fullWindowWidth = window.innerWidth
1177
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
1178
- var documentElementRect = document.documentElement.getBoundingClientRect()
1179
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
1180
- }
1181
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
1182
- this.scrollbarWidth = this.measureScrollbar()
1183
- }
1184
-
1185
- Modal.prototype.setScrollbar = function () {
1186
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
1187
- this.originalBodyPad = document.body.style.paddingRight || ''
1188
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
1189
- }
1190
-
1191
- Modal.prototype.resetScrollbar = function () {
1192
- this.$body.css('padding-right', this.originalBodyPad)
1193
- }
1194
-
1195
- Modal.prototype.measureScrollbar = function () { // thx walsh
1196
- var scrollDiv = document.createElement('div')
1197
- scrollDiv.className = 'modal-scrollbar-measure'
1198
- this.$body.append(scrollDiv)
1199
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
1200
- this.$body[0].removeChild(scrollDiv)
1201
- return scrollbarWidth
1202
- }
1203
-
1204
-
1205
- // MODAL PLUGIN DEFINITION
1206
- // =======================
1207
-
1208
- function Plugin(option, _relatedTarget) {
1209
- return this.each(function () {
1210
- var $this = $(this)
1211
- var data = $this.data('bs.modal')
1212
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
1213
-
1214
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
1215
- if (typeof option == 'string') data[option](_relatedTarget)
1216
- else if (options.show) data.show(_relatedTarget)
1217
- })
1218
- }
1219
-
1220
- var old = $.fn.modal
1221
-
1222
- $.fn.modal = Plugin
1223
- $.fn.modal.Constructor = Modal
1224
-
1225
-
1226
- // MODAL NO CONFLICT
1227
- // =================
1228
-
1229
- $.fn.modal.noConflict = function () {
1230
- $.fn.modal = old
1231
- return this
1232
- }
1233
-
1234
-
1235
- // MODAL DATA-API
1236
- // ==============
1237
-
1238
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1239
- var $this = $(this)
1240
- var href = $this.attr('href')
1241
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
1242
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1243
-
1244
- if ($this.is('a')) e.preventDefault()
1245
-
1246
- $target.one('show.bs.modal', function (showEvent) {
1247
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
1248
- $target.one('hidden.bs.modal', function () {
1249
- $this.is(':visible') && $this.trigger('focus')
1250
- })
1251
- })
1252
- Plugin.call($target, option, this)
1253
- })
1254
-
1255
- }(jQuery);
1256
-
1257
- /* ========================================================================
1258
- * Bootstrap: tooltip.js v3.3.7
1259
- * http://getbootstrap.com/javascript/#tooltip
1260
- * Inspired by the original jQuery.tipsy by Jason Frame
1261
- * ========================================================================
1262
- * Copyright 2011-2016 Twitter, Inc.
1263
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1264
- * ======================================================================== */
1265
-
1266
-
1267
- +function ($) {
1268
- 'use strict';
1269
-
1270
- // TOOLTIP PUBLIC CLASS DEFINITION
1271
- // ===============================
1272
-
1273
- var Tooltip = function (element, options) {
1274
- this.type = null
1275
- this.options = null
1276
- this.enabled = null
1277
- this.timeout = null
1278
- this.hoverState = null
1279
- this.$element = null
1280
- this.inState = null
1281
-
1282
- this.init('tooltip', element, options)
1283
- }
1284
-
1285
- Tooltip.VERSION = '3.3.7'
1286
-
1287
- Tooltip.TRANSITION_DURATION = 150
1288
-
1289
- Tooltip.DEFAULTS = {
1290
- animation: true,
1291
- placement: 'top',
1292
- selector: false,
1293
- template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
1294
- trigger: 'hover focus',
1295
- title: '',
1296
- delay: 0,
1297
- html: false,
1298
- container: false,
1299
- viewport: {
1300
- selector: 'body',
1301
- padding: 0
1302
- }
1303
- }
1304
-
1305
- Tooltip.prototype.init = function (type, element, options) {
1306
- this.enabled = true
1307
- this.type = type
1308
- this.$element = $(element)
1309
- this.options = this.getOptions(options)
1310
- this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
1311
- this.inState = { click: false, hover: false, focus: false }
1312
-
1313
- if (this.$element[0] instanceof document.constructor && !this.options.selector) {
1314
- throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
1315
- }
1316
-
1317
- var triggers = this.options.trigger.split(' ')
1318
-
1319
- for (var i = triggers.length; i--;) {
1320
- var trigger = triggers[i]
1321
-
1322
- if (trigger == 'click') {
1323
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1324
- } else if (trigger != 'manual') {
1325
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
1326
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
1327
-
1328
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1329
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1330
- }
1331
- }
1332
-
1333
- this.options.selector ?
1334
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1335
- this.fixTitle()
1336
- }
1337
-
1338
- Tooltip.prototype.getDefaults = function () {
1339
- return Tooltip.DEFAULTS
1340
- }
1341
-
1342
- Tooltip.prototype.getOptions = function (options) {
1343
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
1344
-
1345
- if (options.delay && typeof options.delay == 'number') {
1346
- options.delay = {
1347
- show: options.delay,
1348
- hide: options.delay
1349
- }
1350
- }
1351
-
1352
- return options
1353
- }
1354
-
1355
- Tooltip.prototype.getDelegateOptions = function () {
1356
- var options = {}
1357
- var defaults = this.getDefaults()
1358
-
1359
- this._options && $.each(this._options, function (key, value) {
1360
- if (defaults[key] != value) options[key] = value
1361
- })
1362
-
1363
- return options
1364
- }
1365
-
1366
- Tooltip.prototype.enter = function (obj) {
1367
- var self = obj instanceof this.constructor ?
1368
- obj : $(obj.currentTarget).data('bs.' + this.type)
1369
-
1370
- if (!self) {
1371
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1372
- $(obj.currentTarget).data('bs.' + this.type, self)
1373
- }
1374
-
1375
- if (obj instanceof $.Event) {
1376
- self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
1377
- }
1378
-
1379
- if (self.tip().hasClass('in') || self.hoverState == 'in') {
1380
- self.hoverState = 'in'
1381
- return
1382
- }
1383
-
1384
- clearTimeout(self.timeout)
1385
-
1386
- self.hoverState = 'in'
1387
-
1388
- if (!self.options.delay || !self.options.delay.show) return self.show()
1389
-
1390
- self.timeout = setTimeout(function () {
1391
- if (self.hoverState == 'in') self.show()
1392
- }, self.options.delay.show)
1393
- }
1394
-
1395
- Tooltip.prototype.isInStateTrue = function () {
1396
- for (var key in this.inState) {
1397
- if (this.inState[key]) return true
1398
- }
1399
-
1400
- return false
1401
- }
1402
-
1403
- Tooltip.prototype.leave = function (obj) {
1404
- var self = obj instanceof this.constructor ?
1405
- obj : $(obj.currentTarget).data('bs.' + this.type)
1406
-
1407
- if (!self) {
1408
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1409
- $(obj.currentTarget).data('bs.' + this.type, self)
1410
- }
1411
-
1412
- if (obj instanceof $.Event) {
1413
- self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
1414
- }
1415
-
1416
- if (self.isInStateTrue()) return
1417
-
1418
- clearTimeout(self.timeout)
1419
-
1420
- self.hoverState = 'out'
1421
-
1422
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
1423
-
1424
- self.timeout = setTimeout(function () {
1425
- if (self.hoverState == 'out') self.hide()
1426
- }, self.options.delay.hide)
1427
- }
1428
-
1429
- Tooltip.prototype.show = function () {
1430
- var e = $.Event('show.bs.' + this.type)
1431
-
1432
- if (this.hasContent() && this.enabled) {
1433
- this.$element.trigger(e)
1434
-
1435
- var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
1436
- if (e.isDefaultPrevented() || !inDom) return
1437
- var that = this
1438
-
1439
- var $tip = this.tip()
1440
-
1441
- var tipId = this.getUID(this.type)
1442
-
1443
- this.setContent()
1444
- $tip.attr('id', tipId)
1445
- this.$element.attr('aria-describedby', tipId)
1446
-
1447
- if (this.options.animation) $tip.addClass('fade')
1448
-
1449
- var placement = typeof this.options.placement == 'function' ?
1450
- this.options.placement.call(this, $tip[0], this.$element[0]) :
1451
- this.options.placement
1452
-
1453
- var autoToken = /\s?auto?\s?/i
1454
- var autoPlace = autoToken.test(placement)
1455
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
1456
-
1457
- $tip
1458
- .detach()
1459
- .css({ top: 0, left: 0, display: 'block' })
1460
- .addClass(placement)
1461
- .data('bs.' + this.type, this)
1462
-
1463
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1464
- this.$element.trigger('inserted.bs.' + this.type)
1465
-
1466
- var pos = this.getPosition()
1467
- var actualWidth = $tip[0].offsetWidth
1468
- var actualHeight = $tip[0].offsetHeight
1469
-
1470
- if (autoPlace) {
1471
- var orgPlacement = placement
1472
- var viewportDim = this.getPosition(this.$viewport)
1473
-
1474
- placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
1475
- placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
1476
- placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
1477
- placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
1478
- placement
1479
-
1480
- $tip
1481
- .removeClass(orgPlacement)
1482
- .addClass(placement)
1483
- }
1484
-
1485
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1486
-
1487
- this.applyPlacement(calculatedOffset, placement)
1488
-
1489
- var complete = function () {
1490
- var prevHoverState = that.hoverState
1491
- that.$element.trigger('shown.bs.' + that.type)
1492
- that.hoverState = null
1493
-
1494
- if (prevHoverState == 'out') that.leave(that)
1495
- }
1496
-
1497
- $.support.transition && this.$tip.hasClass('fade') ?
1498
- $tip
1499
- .one('bsTransitionEnd', complete)
1500
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1501
- complete()
1502
- }
1503
- }
1504
-
1505
- Tooltip.prototype.applyPlacement = function (offset, placement) {
1506
- var $tip = this.tip()
1507
- var width = $tip[0].offsetWidth
1508
- var height = $tip[0].offsetHeight
1509
-
1510
- // manually read margins because getBoundingClientRect includes difference
1511
- var marginTop = parseInt($tip.css('margin-top'), 10)
1512
- var marginLeft = parseInt($tip.css('margin-left'), 10)
1513
-
1514
- // we must check for NaN for ie 8/9
1515
- if (isNaN(marginTop)) marginTop = 0
1516
- if (isNaN(marginLeft)) marginLeft = 0
1517
-
1518
- offset.top += marginTop
1519
- offset.left += marginLeft
1520
-
1521
- // $.fn.offset doesn't round pixel values
1522
- // so we use setOffset directly with our own function B-0
1523
- $.offset.setOffset($tip[0], $.extend({
1524
- using: function (props) {
1525
- $tip.css({
1526
- top: Math.round(props.top),
1527
- left: Math.round(props.left)
1528
- })
1529
- }
1530
- }, offset), 0)
1531
-
1532
- $tip.addClass('in')
1533
-
1534
- // check to see if placing tip in new offset caused the tip to resize itself
1535
- var actualWidth = $tip[0].offsetWidth
1536
- var actualHeight = $tip[0].offsetHeight
1537
-
1538
- if (placement == 'top' && actualHeight != height) {
1539
- offset.top = offset.top + height - actualHeight
1540
- }
1541
-
1542
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
1543
-
1544
- if (delta.left) offset.left += delta.left
1545
- else offset.top += delta.top
1546
-
1547
- var isVertical = /top|bottom/.test(placement)
1548
- var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
1549
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
1550
-
1551
- $tip.offset(offset)
1552
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
1553
- }
1554
-
1555
- Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
1556
- this.arrow()
1557
- .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
1558
- .css(isVertical ? 'top' : 'left', '')
1559
- }
1560
-
1561
- Tooltip.prototype.setContent = function () {
1562
- var $tip = this.tip()
1563
- var title = this.getTitle()
1564
-
1565
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1566
- $tip.removeClass('fade in top bottom left right')
1567
- }
1568
-
1569
- Tooltip.prototype.hide = function (callback) {
1570
- var that = this
1571
- var $tip = $(this.$tip)
1572
- var e = $.Event('hide.bs.' + this.type)
1573
-
1574
- function complete() {
1575
- if (that.hoverState != 'in') $tip.detach()
1576
- if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
1577
- that.$element
1578
- .removeAttr('aria-describedby')
1579
- .trigger('hidden.bs.' + that.type)
1580
- }
1581
- callback && callback()
1582
- }
1583
-
1584
- this.$element.trigger(e)
1585
-
1586
- if (e.isDefaultPrevented()) return
1587
-
1588
- $tip.removeClass('in')
1589
-
1590
- $.support.transition && $tip.hasClass('fade') ?
1591
- $tip
1592
- .one('bsTransitionEnd', complete)
1593
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1594
- complete()
1595
-
1596
- this.hoverState = null
1597
-
1598
- return this
1599
- }
1600
-
1601
- Tooltip.prototype.fixTitle = function () {
1602
- var $e = this.$element
1603
- if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
1604
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1605
- }
1606
- }
1607
-
1608
- Tooltip.prototype.hasContent = function () {
1609
- return this.getTitle()
1610
- }
1611
-
1612
- Tooltip.prototype.getPosition = function ($element) {
1613
- $element = $element || this.$element
1614
-
1615
- var el = $element[0]
1616
- var isBody = el.tagName == 'BODY'
1617
-
1618
- var elRect = el.getBoundingClientRect()
1619
- if (elRect.width == null) {
1620
- // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
1621
- elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
1622
- }
1623
- var isSvg = window.SVGElement && el instanceof window.SVGElement
1624
- // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
1625
- // See https://github.com/twbs/bootstrap/issues/20280
1626
- var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
1627
- var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
1628
- var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
1629
-
1630
- return $.extend({}, elRect, scroll, outerDims, elOffset)
1631
- }
1632
-
1633
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
1634
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1635
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1636
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1637
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1638
-
1639
- }
1640
-
1641
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1642
- var delta = { top: 0, left: 0 }
1643
- if (!this.$viewport) return delta
1644
-
1645
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1646
- var viewportDimensions = this.getPosition(this.$viewport)
1647
-
1648
- if (/right|left/.test(placement)) {
1649
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1650
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1651
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
1652
- delta.top = viewportDimensions.top - topEdgeOffset
1653
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1654
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1655
- }
1656
- } else {
1657
- var leftEdgeOffset = pos.left - viewportPadding
1658
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1659
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1660
- delta.left = viewportDimensions.left - leftEdgeOffset
1661
- } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
1662
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1663
- }
1664
- }
1665
-
1666
- return delta
1667
- }
1668
-
1669
- Tooltip.prototype.getTitle = function () {
1670
- var title
1671
- var $e = this.$element
1672
- var o = this.options
1673
-
1674
- title = $e.attr('data-original-title')
1675
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1676
-
1677
- return title
1678
- }
1679
-
1680
- Tooltip.prototype.getUID = function (prefix) {
1681
- do prefix += ~~(Math.random() * 1000000)
1682
- while (document.getElementById(prefix))
1683
- return prefix
1684
- }
1685
-
1686
- Tooltip.prototype.tip = function () {
1687
- if (!this.$tip) {
1688
- this.$tip = $(this.options.template)
1689
- if (this.$tip.length != 1) {
1690
- throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
1691
- }
1692
- }
1693
- return this.$tip
1694
- }
1695
-
1696
- Tooltip.prototype.arrow = function () {
1697
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
1698
- }
1699
-
1700
- Tooltip.prototype.enable = function () {
1701
- this.enabled = true
1702
- }
1703
-
1704
- Tooltip.prototype.disable = function () {
1705
- this.enabled = false
1706
- }
1707
-
1708
- Tooltip.prototype.toggleEnabled = function () {
1709
- this.enabled = !this.enabled
1710
- }
1711
-
1712
- Tooltip.prototype.toggle = function (e) {
1713
- var self = this
1714
- if (e) {
1715
- self = $(e.currentTarget).data('bs.' + this.type)
1716
- if (!self) {
1717
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1718
- $(e.currentTarget).data('bs.' + this.type, self)
1719
- }
1720
- }
1721
-
1722
- if (e) {
1723
- self.inState.click = !self.inState.click
1724
- if (self.isInStateTrue()) self.enter(self)
1725
- else self.leave(self)
1726
- } else {
1727
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1728
- }
1729
- }
1730
-
1731
- Tooltip.prototype.destroy = function () {
1732
- var that = this
1733
- clearTimeout(this.timeout)
1734
- this.hide(function () {
1735
- that.$element.off('.' + that.type).removeData('bs.' + that.type)
1736
- if (that.$tip) {
1737
- that.$tip.detach()
1738
- }
1739
- that.$tip = null
1740
- that.$arrow = null
1741
- that.$viewport = null
1742
- that.$element = null
1743
- })
1744
- }
1745
-
1746
-
1747
- // TOOLTIP PLUGIN DEFINITION
1748
- // =========================
1749
-
1750
- function Plugin(option) {
1751
- return this.each(function () {
1752
- var $this = $(this)
1753
- var data = $this.data('bs.tooltip')
1754
- var options = typeof option == 'object' && option
1755
-
1756
- if (!data && /destroy|hide/.test(option)) return
1757
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
1758
- if (typeof option == 'string') data[option]()
1759
- })
1760
- }
1761
-
1762
- var old = $.fn.tooltip
1763
-
1764
- $.fn.tooltip = Plugin
1765
- $.fn.tooltip.Constructor = Tooltip
1766
-
1767
-
1768
- // TOOLTIP NO CONFLICT
1769
- // ===================
1770
-
1771
- $.fn.tooltip.noConflict = function () {
1772
- $.fn.tooltip = old
1773
- return this
1774
- }
1775
-
1776
- }(jQuery);
1777
-
1778
- /* ========================================================================
1779
- * Bootstrap: popover.js v3.3.7
1780
- * http://getbootstrap.com/javascript/#popovers
1781
- * ========================================================================
1782
- * Copyright 2011-2016 Twitter, Inc.
1783
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1784
- * ======================================================================== */
1785
-
1786
-
1787
- +function ($) {
1788
- 'use strict';
1789
-
1790
- // POPOVER PUBLIC CLASS DEFINITION
1791
- // ===============================
1792
-
1793
- var Popover = function (element, options) {
1794
- this.init('popover', element, options)
1795
- }
1796
-
1797
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1798
-
1799
- Popover.VERSION = '3.3.7'
1800
-
1801
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1802
- placement: 'right',
1803
- trigger: 'click',
1804
- content: '',
1805
- template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1806
- })
1807
-
1808
-
1809
- // NOTE: POPOVER EXTENDS tooltip.js
1810
- // ================================
1811
-
1812
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
1813
-
1814
- Popover.prototype.constructor = Popover
1815
-
1816
- Popover.prototype.getDefaults = function () {
1817
- return Popover.DEFAULTS
1818
- }
1819
-
1820
- Popover.prototype.setContent = function () {
1821
- var $tip = this.tip()
1822
- var title = this.getTitle()
1823
- var content = this.getContent()
1824
-
1825
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1826
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
1827
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1828
- ](content)
1829
-
1830
- $tip.removeClass('fade top bottom left right in')
1831
-
1832
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
1833
- // this manually by checking the contents.
1834
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
1835
- }
1836
-
1837
- Popover.prototype.hasContent = function () {
1838
- return this.getTitle() || this.getContent()
1839
- }
1840
-
1841
- Popover.prototype.getContent = function () {
1842
- var $e = this.$element
1843
- var o = this.options
1844
-
1845
- return $e.attr('data-content')
1846
- || (typeof o.content == 'function' ?
1847
- o.content.call($e[0]) :
1848
- o.content)
1849
- }
1850
-
1851
- Popover.prototype.arrow = function () {
1852
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1853
- }
1854
-
1855
-
1856
- // POPOVER PLUGIN DEFINITION
1857
- // =========================
1858
-
1859
- function Plugin(option) {
1860
- return this.each(function () {
1861
- var $this = $(this)
1862
- var data = $this.data('bs.popover')
1863
- var options = typeof option == 'object' && option
1864
-
1865
- if (!data && /destroy|hide/.test(option)) return
1866
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
1867
- if (typeof option == 'string') data[option]()
1868
- })
1869
- }
1870
-
1871
- var old = $.fn.popover
1872
-
1873
- $.fn.popover = Plugin
1874
- $.fn.popover.Constructor = Popover
1875
-
1876
-
1877
- // POPOVER NO CONFLICT
1878
- // ===================
1879
-
1880
- $.fn.popover.noConflict = function () {
1881
- $.fn.popover = old
1882
- return this
1883
- }
1884
-
1885
- }(jQuery);
1886
-
1887
- /* ========================================================================
1888
- * Bootstrap: scrollspy.js v3.3.7
1889
- * http://getbootstrap.com/javascript/#scrollspy
1890
- * ========================================================================
1891
- * Copyright 2011-2016 Twitter, Inc.
1892
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1893
- * ======================================================================== */
1894
-
1895
-
1896
- +function ($) {
1897
- 'use strict';
1898
-
1899
- // SCROLLSPY CLASS DEFINITION
1900
- // ==========================
1901
-
1902
- function ScrollSpy(element, options) {
1903
- this.$body = $(document.body)
1904
- this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
1905
- this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1906
- this.selector = (this.options.target || '') + ' .nav li > a'
1907
- this.offsets = []
1908
- this.targets = []
1909
- this.activeTarget = null
1910
- this.scrollHeight = 0
1911
-
1912
- this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
1913
- this.refresh()
1914
- this.process()
1915
- }
1916
-
1917
- ScrollSpy.VERSION = '3.3.7'
1918
-
1919
- ScrollSpy.DEFAULTS = {
1920
- offset: 10
1921
- }
1922
-
1923
- ScrollSpy.prototype.getScrollHeight = function () {
1924
- return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
1925
- }
1926
-
1927
- ScrollSpy.prototype.refresh = function () {
1928
- var that = this
1929
- var offsetMethod = 'offset'
1930
- var offsetBase = 0
1931
-
1932
- this.offsets = []
1933
- this.targets = []
1934
- this.scrollHeight = this.getScrollHeight()
1935
-
1936
- if (!$.isWindow(this.$scrollElement[0])) {
1937
- offsetMethod = 'position'
1938
- offsetBase = this.$scrollElement.scrollTop()
1939
- }
1940
-
1941
- this.$body
1942
- .find(this.selector)
1943
- .map(function () {
1944
- var $el = $(this)
1945
- var href = $el.data('target') || $el.attr('href')
1946
- var $href = /^#./.test(href) && $(href)
1947
-
1948
- return ($href
1949
- && $href.length
1950
- && $href.is(':visible')
1951
- && [[$href[offsetMethod]().top + offsetBase, href]]) || null
1952
- })
1953
- .sort(function (a, b) { return a[0] - b[0] })
1954
- .each(function () {
1955
- that.offsets.push(this[0])
1956
- that.targets.push(this[1])
1957
- })
1958
- }
1959
-
1960
- ScrollSpy.prototype.process = function () {
1961
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1962
- var scrollHeight = this.getScrollHeight()
1963
- var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
1964
- var offsets = this.offsets
1965
- var targets = this.targets
1966
- var activeTarget = this.activeTarget
1967
- var i
1968
-
1969
- if (this.scrollHeight != scrollHeight) {
1970
- this.refresh()
1971
- }
1972
-
1973
- if (scrollTop >= maxScroll) {
1974
- return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
1975
- }
1976
-
1977
- if (activeTarget && scrollTop < offsets[0]) {
1978
- this.activeTarget = null
1979
- return this.clear()
1980
- }
1981
-
1982
- for (i = offsets.length; i--;) {
1983
- activeTarget != targets[i]
1984
- && scrollTop >= offsets[i]
1985
- && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
1986
- && this.activate(targets[i])
1987
- }
1988
- }
1989
-
1990
- ScrollSpy.prototype.activate = function (target) {
1991
- this.activeTarget = target
1992
-
1993
- this.clear()
1994
-
1995
- var selector = this.selector +
1996
- '[data-target="' + target + '"],' +
1997
- this.selector + '[href="' + target + '"]'
1998
-
1999
- var active = $(selector)
2000
- .parents('li')
2001
- .addClass('active')
2002
-
2003
- if (active.parent('.dropdown-menu').length) {
2004
- active = active
2005
- .closest('li.dropdown')
2006
- .addClass('active')
2007
- }
2008
-
2009
- active.trigger('activate.bs.scrollspy')
2010
- }
2011
-
2012
- ScrollSpy.prototype.clear = function () {
2013
- $(this.selector)
2014
- .parentsUntil(this.options.target, '.active')
2015
- .removeClass('active')
2016
- }
2017
-
2018
-
2019
- // SCROLLSPY PLUGIN DEFINITION
2020
- // ===========================
2021
-
2022
- function Plugin(option) {
2023
- return this.each(function () {
2024
- var $this = $(this)
2025
- var data = $this.data('bs.scrollspy')
2026
- var options = typeof option == 'object' && option
2027
-
2028
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
2029
- if (typeof option == 'string') data[option]()
2030
- })
2031
- }
2032
-
2033
- var old = $.fn.scrollspy
2034
-
2035
- $.fn.scrollspy = Plugin
2036
- $.fn.scrollspy.Constructor = ScrollSpy
2037
-
2038
-
2039
- // SCROLLSPY NO CONFLICT
2040
- // =====================
2041
-
2042
- $.fn.scrollspy.noConflict = function () {
2043
- $.fn.scrollspy = old
2044
- return this
2045
- }
2046
-
2047
-
2048
- // SCROLLSPY DATA-API
2049
- // ==================
2050
-
2051
- $(window).on('load.bs.scrollspy.data-api', function () {
2052
- $('[data-spy="scroll"]').each(function () {
2053
- var $spy = $(this)
2054
- Plugin.call($spy, $spy.data())
2055
- })
2056
- })
2057
-
2058
- }(jQuery);
2059
-
2060
- /* ========================================================================
2061
- * Bootstrap: tab.js v3.3.7
2062
- * http://getbootstrap.com/javascript/#tabs
2063
- * ========================================================================
2064
- * Copyright 2011-2016 Twitter, Inc.
2065
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2066
- * ======================================================================== */
2067
-
2068
-
2069
- +function ($) {
2070
- 'use strict';
2071
-
2072
- // TAB CLASS DEFINITION
2073
- // ====================
2074
-
2075
- var Tab = function (element) {
2076
- // jscs:disable requireDollarBeforejQueryAssignment
2077
- this.element = $(element)
2078
- // jscs:enable requireDollarBeforejQueryAssignment
2079
- }
2080
-
2081
- Tab.VERSION = '3.3.7'
2082
-
2083
- Tab.TRANSITION_DURATION = 150
2084
-
2085
- Tab.prototype.show = function () {
2086
- var $this = this.element
2087
- var $ul = $this.closest('ul:not(.dropdown-menu)')
2088
- var selector = $this.data('target')
2089
-
2090
- if (!selector) {
2091
- selector = $this.attr('href')
2092
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
2093
- }
2094
-
2095
- if ($this.parent('li').hasClass('active')) return
2096
-
2097
- var $previous = $ul.find('.active:last a')
2098
- var hideEvent = $.Event('hide.bs.tab', {
2099
- relatedTarget: $this[0]
2100
- })
2101
- var showEvent = $.Event('show.bs.tab', {
2102
- relatedTarget: $previous[0]
2103
- })
2104
-
2105
- $previous.trigger(hideEvent)
2106
- $this.trigger(showEvent)
2107
-
2108
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
2109
-
2110
- var $target = $(selector)
2111
-
2112
- this.activate($this.closest('li'), $ul)
2113
- this.activate($target, $target.parent(), function () {
2114
- $previous.trigger({
2115
- type: 'hidden.bs.tab',
2116
- relatedTarget: $this[0]
2117
- })
2118
- $this.trigger({
2119
- type: 'shown.bs.tab',
2120
- relatedTarget: $previous[0]
2121
- })
2122
- })
2123
- }
2124
-
2125
- Tab.prototype.activate = function (element, container, callback) {
2126
- var $active = container.find('> .active')
2127
- var transition = callback
2128
- && $.support.transition
2129
- && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
2130
-
2131
- function next() {
2132
- $active
2133
- .removeClass('active')
2134
- .find('> .dropdown-menu > .active')
2135
- .removeClass('active')
2136
- .end()
2137
- .find('[data-toggle="tab"]')
2138
- .attr('aria-expanded', false)
2139
-
2140
- element
2141
- .addClass('active')
2142
- .find('[data-toggle="tab"]')
2143
- .attr('aria-expanded', true)
2144
-
2145
- if (transition) {
2146
- element[0].offsetWidth // reflow for transition
2147
- element.addClass('in')
2148
- } else {
2149
- element.removeClass('fade')
2150
- }
2151
-
2152
- if (element.parent('.dropdown-menu').length) {
2153
- element
2154
- .closest('li.dropdown')
2155
- .addClass('active')
2156
- .end()
2157
- .find('[data-toggle="tab"]')
2158
- .attr('aria-expanded', true)
2159
- }
2160
-
2161
- callback && callback()
2162
- }
2163
-
2164
- $active.length && transition ?
2165
- $active
2166
- .one('bsTransitionEnd', next)
2167
- .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
2168
- next()
2169
-
2170
- $active.removeClass('in')
2171
- }
2172
-
2173
-
2174
- // TAB PLUGIN DEFINITION
2175
- // =====================
2176
-
2177
- function Plugin(option) {
2178
- return this.each(function () {
2179
- var $this = $(this)
2180
- var data = $this.data('bs.tab')
2181
-
2182
- if (!data) $this.data('bs.tab', (data = new Tab(this)))
2183
- if (typeof option == 'string') data[option]()
2184
- })
2185
- }
2186
-
2187
- var old = $.fn.tab
2188
-
2189
- $.fn.tab = Plugin
2190
- $.fn.tab.Constructor = Tab
2191
-
2192
-
2193
- // TAB NO CONFLICT
2194
- // ===============
2195
-
2196
- $.fn.tab.noConflict = function () {
2197
- $.fn.tab = old
2198
- return this
2199
- }
2200
-
2201
-
2202
- // TAB DATA-API
2203
- // ============
2204
-
2205
- var clickHandler = function (e) {
2206
- e.preventDefault()
2207
- Plugin.call($(this), 'show')
2208
- }
2209
-
2210
- $(document)
2211
- .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
2212
- .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
2213
-
2214
- }(jQuery);
2215
-
2216
- /* ========================================================================
2217
- * Bootstrap: affix.js v3.3.7
2218
- * http://getbootstrap.com/javascript/#affix
2219
- * ========================================================================
2220
- * Copyright 2011-2016 Twitter, Inc.
2221
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2222
- * ======================================================================== */
2223
-
2224
-
2225
- +function ($) {
2226
- 'use strict';
2227
-
2228
- // AFFIX CLASS DEFINITION
2229
- // ======================
2230
-
2231
- var Affix = function (element, options) {
2232
- this.options = $.extend({}, Affix.DEFAULTS, options)
2233
-
2234
- this.$target = $(this.options.target)
2235
- .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
2236
- .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
2237
-
2238
- this.$element = $(element)
2239
- this.affixed = null
2240
- this.unpin = null
2241
- this.pinnedOffset = null
2242
-
2243
- this.checkPosition()
2244
- }
2245
-
2246
- Affix.VERSION = '3.3.7'
2247
-
2248
- Affix.RESET = 'affix affix-top affix-bottom'
2249
-
2250
- Affix.DEFAULTS = {
2251
- offset: 0,
2252
- target: window
2253
- }
2254
-
2255
- Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
2256
- var scrollTop = this.$target.scrollTop()
2257
- var position = this.$element.offset()
2258
- var targetHeight = this.$target.height()
2259
-
2260
- if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
2261
-
2262
- if (this.affixed == 'bottom') {
2263
- if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
2264
- return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
2265
- }
2266
-
2267
- var initializing = this.affixed == null
2268
- var colliderTop = initializing ? scrollTop : position.top
2269
- var colliderHeight = initializing ? targetHeight : height
2270
-
2271
- if (offsetTop != null && scrollTop <= offsetTop) return 'top'
2272
- if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
2273
-
2274
- return false
2275
- }
2276
-
2277
- Affix.prototype.getPinnedOffset = function () {
2278
- if (this.pinnedOffset) return this.pinnedOffset
2279
- this.$element.removeClass(Affix.RESET).addClass('affix')
2280
- var scrollTop = this.$target.scrollTop()
2281
- var position = this.$element.offset()
2282
- return (this.pinnedOffset = position.top - scrollTop)
2283
- }
2284
-
2285
- Affix.prototype.checkPositionWithEventLoop = function () {
2286
- setTimeout($.proxy(this.checkPosition, this), 1)
2287
- }
2288
-
2289
- Affix.prototype.checkPosition = function () {
2290
- if (!this.$element.is(':visible')) return
2291
-
2292
- var height = this.$element.height()
2293
- var offset = this.options.offset
2294
- var offsetTop = offset.top
2295
- var offsetBottom = offset.bottom
2296
- var scrollHeight = Math.max($(document).height(), $(document.body).height())
2297
-
2298
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
2299
- if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
2300
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
2301
-
2302
- var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
2303
-
2304
- if (this.affixed != affix) {
2305
- if (this.unpin != null) this.$element.css('top', '')
2306
-
2307
- var affixType = 'affix' + (affix ? '-' + affix : '')
2308
- var e = $.Event(affixType + '.bs.affix')
2309
-
2310
- this.$element.trigger(e)
2311
-
2312
- if (e.isDefaultPrevented()) return
2313
-
2314
- this.affixed = affix
2315
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
2316
-
2317
- this.$element
2318
- .removeClass(Affix.RESET)
2319
- .addClass(affixType)
2320
- .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
2321
- }
2322
-
2323
- if (affix == 'bottom') {
2324
- this.$element.offset({
2325
- top: scrollHeight - height - offsetBottom
2326
- })
2327
- }
2328
- }
2329
-
2330
-
2331
- // AFFIX PLUGIN DEFINITION
2332
- // =======================
2333
-
2334
- function Plugin(option) {
2335
- return this.each(function () {
2336
- var $this = $(this)
2337
- var data = $this.data('bs.affix')
2338
- var options = typeof option == 'object' && option
2339
-
2340
- if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
2341
- if (typeof option == 'string') data[option]()
2342
- })
2343
- }
2344
-
2345
- var old = $.fn.affix
2346
-
2347
- $.fn.affix = Plugin
2348
- $.fn.affix.Constructor = Affix
2349
-
2350
-
2351
- // AFFIX NO CONFLICT
2352
- // =================
2353
-
2354
- $.fn.affix.noConflict = function () {
2355
- $.fn.affix = old
2356
- return this
2357
- }
2358
-
2359
-
2360
- // AFFIX DATA-API
2361
- // ==============
2362
-
2363
- $(window).on('load', function () {
2364
- $('[data-spy="affix"]').each(function () {
2365
- var $spy = $(this)
2366
- var data = $spy.data()
2367
-
2368
- data.offset = data.offset || {}
2369
-
2370
- if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
2371
- if (data.offsetTop != null) data.offset.top = data.offsetTop
2372
-
2373
- Plugin.call($spy, data)
2374
- })
2375
- })
2376
-
2377
- }(jQuery);
1
+ /*!
2
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
3
+ * Copyright 2011-2016 Twitter, Inc.
4
+ * Licensed under the MIT license
5
+ */
6
+
7
+ if (typeof jQuery === 'undefined') {
8
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
9
+ }
10
+
11
+ +function ($) {
12
+ 'use strict';
13
+ var version = $.fn.jquery.split(' ')[0].split('.')
14
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
15
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
16
+ }
17
+ }(jQuery);
18
+
19
+ /* ========================================================================
20
+ * Bootstrap: transition.js v3.3.7
21
+ * http://getbootstrap.com/javascript/#transitions
22
+ * ========================================================================
23
+ * Copyright 2011-2016 Twitter, Inc.
24
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25
+ * ======================================================================== */
26
+
27
+
28
+ +function ($) {
29
+ 'use strict';
30
+
31
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
32
+ // ============================================================
33
+
34
+ function transitionEnd() {
35
+ var el = document.createElement('bootstrap')
36
+
37
+ var transEndEventNames = {
38
+ WebkitTransition : 'webkitTransitionEnd',
39
+ MozTransition : 'transitionend',
40
+ OTransition : 'oTransitionEnd otransitionend',
41
+ transition : 'transitionend'
42
+ }
43
+
44
+ for (var name in transEndEventNames) {
45
+ if (el.style[name] !== undefined) {
46
+ return { end: transEndEventNames[name] }
47
+ }
48
+ }
49
+
50
+ return false // explicit for ie8 ( ._.)
51
+ }
52
+
53
+ // http://blog.alexmaccaw.com/css-transitions
54
+ $.fn.emulateTransitionEnd = function (duration) {
55
+ var called = false
56
+ var $el = this
57
+ $(this).one('bsTransitionEnd', function () { called = true })
58
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
59
+ setTimeout(callback, duration)
60
+ return this
61
+ }
62
+
63
+ $(function () {
64
+ $.support.transition = transitionEnd()
65
+
66
+ if (!$.support.transition) return
67
+
68
+ $.event.special.bsTransitionEnd = {
69
+ bindType: $.support.transition.end,
70
+ delegateType: $.support.transition.end,
71
+ handle: function (e) {
72
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
73
+ }
74
+ }
75
+ })
76
+
77
+ }(jQuery);
78
+
79
+ /* ========================================================================
80
+ * Bootstrap: alert.js v3.3.7
81
+ * http://getbootstrap.com/javascript/#alerts
82
+ * ========================================================================
83
+ * Copyright 2011-2016 Twitter, Inc.
84
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
85
+ * ======================================================================== */
86
+
87
+
88
+ +function ($) {
89
+ 'use strict';
90
+
91
+ // ALERT CLASS DEFINITION
92
+ // ======================
93
+
94
+ var dismiss = '[data-dismiss="alert"]'
95
+ var Alert = function (el) {
96
+ $(el).on('click', dismiss, this.close)
97
+ }
98
+
99
+ Alert.VERSION = '3.3.7'
100
+
101
+ Alert.TRANSITION_DURATION = 150
102
+
103
+ Alert.prototype.close = function (e) {
104
+ var $this = $(this)
105
+ var selector = $this.attr('data-target')
106
+
107
+ if (!selector) {
108
+ selector = $this.attr('href')
109
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
110
+ }
111
+
112
+ var $parent = $(selector === '#' ? [] : selector)
113
+
114
+ if (e) e.preventDefault()
115
+
116
+ if (!$parent.length) {
117
+ $parent = $this.closest('.alert')
118
+ }
119
+
120
+ $parent.trigger(e = $.Event('close.bs.alert'))
121
+
122
+ if (e.isDefaultPrevented()) return
123
+
124
+ $parent.removeClass('in')
125
+
126
+ function removeElement() {
127
+ // detach from parent, fire event then clean up data
128
+ $parent.detach().trigger('closed.bs.alert').remove()
129
+ }
130
+
131
+ $.support.transition && $parent.hasClass('fade') ?
132
+ $parent
133
+ .one('bsTransitionEnd', removeElement)
134
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
135
+ removeElement()
136
+ }
137
+
138
+
139
+ // ALERT PLUGIN DEFINITION
140
+ // =======================
141
+
142
+ function Plugin(option) {
143
+ return this.each(function () {
144
+ var $this = $(this)
145
+ var data = $this.data('bs.alert')
146
+
147
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
148
+ if (typeof option == 'string') data[option].call($this)
149
+ })
150
+ }
151
+
152
+ var old = $.fn.alert
153
+
154
+ $.fn.alert = Plugin
155
+ $.fn.alert.Constructor = Alert
156
+
157
+
158
+ // ALERT NO CONFLICT
159
+ // =================
160
+
161
+ $.fn.alert.noConflict = function () {
162
+ $.fn.alert = old
163
+ return this
164
+ }
165
+
166
+
167
+ // ALERT DATA-API
168
+ // ==============
169
+
170
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
171
+
172
+ }(jQuery);
173
+
174
+ /* ========================================================================
175
+ * Bootstrap: button.js v3.3.7
176
+ * http://getbootstrap.com/javascript/#buttons
177
+ * ========================================================================
178
+ * Copyright 2011-2016 Twitter, Inc.
179
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
180
+ * ======================================================================== */
181
+
182
+
183
+ +function ($) {
184
+ 'use strict';
185
+
186
+ // BUTTON PUBLIC CLASS DEFINITION
187
+ // ==============================
188
+
189
+ var Button = function (element, options) {
190
+ this.$element = $(element)
191
+ this.options = $.extend({}, Button.DEFAULTS, options)
192
+ this.isLoading = false
193
+ }
194
+
195
+ Button.VERSION = '3.3.7'
196
+
197
+ Button.DEFAULTS = {
198
+ loadingText: 'loading...'
199
+ }
200
+
201
+ Button.prototype.setState = function (state) {
202
+ var d = 'disabled'
203
+ var $el = this.$element
204
+ var val = $el.is('input') ? 'val' : 'html'
205
+ var data = $el.data()
206
+
207
+ state += 'Text'
208
+
209
+ if (data.resetText == null) $el.data('resetText', $el[val]())
210
+
211
+ // push to event loop to allow forms to submit
212
+ setTimeout($.proxy(function () {
213
+ $el[val](data[state] == null ? this.options[state] : data[state])
214
+
215
+ if (state == 'loadingText') {
216
+ this.isLoading = true
217
+ $el.addClass(d).attr(d, d).prop(d, true)
218
+ } else if (this.isLoading) {
219
+ this.isLoading = false
220
+ $el.removeClass(d).removeAttr(d).prop(d, false)
221
+ }
222
+ }, this), 0)
223
+ }
224
+
225
+ Button.prototype.toggle = function () {
226
+ var changed = true
227
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
228
+
229
+ if ($parent.length) {
230
+ var $input = this.$element.find('input')
231
+ if ($input.prop('type') == 'radio') {
232
+ if ($input.prop('checked')) changed = false
233
+ $parent.find('.active').removeClass('active')
234
+ this.$element.addClass('active')
235
+ } else if ($input.prop('type') == 'checkbox') {
236
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
237
+ this.$element.toggleClass('active')
238
+ }
239
+ $input.prop('checked', this.$element.hasClass('active'))
240
+ if (changed) $input.trigger('change')
241
+ } else {
242
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
243
+ this.$element.toggleClass('active')
244
+ }
245
+ }
246
+
247
+
248
+ // BUTTON PLUGIN DEFINITION
249
+ // ========================
250
+
251
+ function Plugin(option) {
252
+ return this.each(function () {
253
+ var $this = $(this)
254
+ var data = $this.data('bs.button')
255
+ var options = typeof option == 'object' && option
256
+
257
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
258
+
259
+ if (option == 'toggle') data.toggle()
260
+ else if (option) data.setState(option)
261
+ })
262
+ }
263
+
264
+ var old = $.fn.button
265
+
266
+ $.fn.button = Plugin
267
+ $.fn.button.Constructor = Button
268
+
269
+
270
+ // BUTTON NO CONFLICT
271
+ // ==================
272
+
273
+ $.fn.button.noConflict = function () {
274
+ $.fn.button = old
275
+ return this
276
+ }
277
+
278
+
279
+ // BUTTON DATA-API
280
+ // ===============
281
+
282
+ $(document)
283
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
284
+ var $btn = $(e.target).closest('.btn')
285
+ Plugin.call($btn, 'toggle')
286
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
287
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
288
+ e.preventDefault()
289
+ // The target component still receive the focus
290
+ if ($btn.is('input,button')) $btn.trigger('focus')
291
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
292
+ }
293
+ })
294
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
295
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
296
+ })
297
+
298
+ }(jQuery);
299
+
300
+ /* ========================================================================
301
+ * Bootstrap: carousel.js v3.3.7
302
+ * http://getbootstrap.com/javascript/#carousel
303
+ * ========================================================================
304
+ * Copyright 2011-2016 Twitter, Inc.
305
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
306
+ * ======================================================================== */
307
+
308
+
309
+ +function ($) {
310
+ 'use strict';
311
+
312
+ // CAROUSEL CLASS DEFINITION
313
+ // =========================
314
+
315
+ var Carousel = function (element, options) {
316
+ this.$element = $(element)
317
+ this.$indicators = this.$element.find('.carousel-indicators')
318
+ this.options = options
319
+ this.paused = null
320
+ this.sliding = null
321
+ this.interval = null
322
+ this.$active = null
323
+ this.$items = null
324
+
325
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
326
+
327
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
328
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
329
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
330
+ }
331
+
332
+ Carousel.VERSION = '3.3.7'
333
+
334
+ Carousel.TRANSITION_DURATION = 600
335
+
336
+ Carousel.DEFAULTS = {
337
+ interval: 5000,
338
+ pause: 'hover',
339
+ wrap: true,
340
+ keyboard: true
341
+ }
342
+
343
+ Carousel.prototype.keydown = function (e) {
344
+ if (/input|textarea/i.test(e.target.tagName)) return
345
+ switch (e.which) {
346
+ case 37: this.prev(); break
347
+ case 39: this.next(); break
348
+ default: return
349
+ }
350
+
351
+ e.preventDefault()
352
+ }
353
+
354
+ Carousel.prototype.cycle = function (e) {
355
+ e || (this.paused = false)
356
+
357
+ this.interval && clearInterval(this.interval)
358
+
359
+ this.options.interval
360
+ && !this.paused
361
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
362
+
363
+ return this
364
+ }
365
+
366
+ Carousel.prototype.getItemIndex = function (item) {
367
+ this.$items = item.parent().children('.item')
368
+ return this.$items.index(item || this.$active)
369
+ }
370
+
371
+ Carousel.prototype.getItemForDirection = function (direction, active) {
372
+ var activeIndex = this.getItemIndex(active)
373
+ var willWrap = (direction == 'prev' && activeIndex === 0)
374
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
375
+ if (willWrap && !this.options.wrap) return active
376
+ var delta = direction == 'prev' ? -1 : 1
377
+ var itemIndex = (activeIndex + delta) % this.$items.length
378
+ return this.$items.eq(itemIndex)
379
+ }
380
+
381
+ Carousel.prototype.to = function (pos) {
382
+ var that = this
383
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
384
+
385
+ if (pos > (this.$items.length - 1) || pos < 0) return
386
+
387
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
388
+ if (activeIndex == pos) return this.pause().cycle()
389
+
390
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
391
+ }
392
+
393
+ Carousel.prototype.pause = function (e) {
394
+ e || (this.paused = true)
395
+
396
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
397
+ this.$element.trigger($.support.transition.end)
398
+ this.cycle(true)
399
+ }
400
+
401
+ this.interval = clearInterval(this.interval)
402
+
403
+ return this
404
+ }
405
+
406
+ Carousel.prototype.next = function () {
407
+ if (this.sliding) return
408
+ return this.slide('next')
409
+ }
410
+
411
+ Carousel.prototype.prev = function () {
412
+ if (this.sliding) return
413
+ return this.slide('prev')
414
+ }
415
+
416
+ Carousel.prototype.slide = function (type, next) {
417
+ var $active = this.$element.find('.item.active')
418
+ var $next = next || this.getItemForDirection(type, $active)
419
+ var isCycling = this.interval
420
+ var direction = type == 'next' ? 'left' : 'right'
421
+ var that = this
422
+
423
+ if ($next.hasClass('active')) return (this.sliding = false)
424
+
425
+ var relatedTarget = $next[0]
426
+ var slideEvent = $.Event('slide.bs.carousel', {
427
+ relatedTarget: relatedTarget,
428
+ direction: direction
429
+ })
430
+ this.$element.trigger(slideEvent)
431
+ if (slideEvent.isDefaultPrevented()) return
432
+
433
+ this.sliding = true
434
+
435
+ isCycling && this.pause()
436
+
437
+ if (this.$indicators.length) {
438
+ this.$indicators.find('.active').removeClass('active')
439
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
440
+ $nextIndicator && $nextIndicator.addClass('active')
441
+ }
442
+
443
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
444
+ if ($.support.transition && this.$element.hasClass('slide')) {
445
+ $next.addClass(type)
446
+ $next[0].offsetWidth // force reflow
447
+ $active.addClass(direction)
448
+ $next.addClass(direction)
449
+ $active
450
+ .one('bsTransitionEnd', function () {
451
+ $next.removeClass([type, direction].join(' ')).addClass('active')
452
+ $active.removeClass(['active', direction].join(' '))
453
+ that.sliding = false
454
+ setTimeout(function () {
455
+ that.$element.trigger(slidEvent)
456
+ }, 0)
457
+ })
458
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
459
+ } else {
460
+ $active.removeClass('active')
461
+ $next.addClass('active')
462
+ this.sliding = false
463
+ this.$element.trigger(slidEvent)
464
+ }
465
+
466
+ isCycling && this.cycle()
467
+
468
+ return this
469
+ }
470
+
471
+
472
+ // CAROUSEL PLUGIN DEFINITION
473
+ // ==========================
474
+
475
+ function Plugin(option) {
476
+ return this.each(function () {
477
+ var $this = $(this)
478
+ var data = $this.data('bs.carousel')
479
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
480
+ var action = typeof option == 'string' ? option : options.slide
481
+
482
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
483
+ if (typeof option == 'number') data.to(option)
484
+ else if (action) data[action]()
485
+ else if (options.interval) data.pause().cycle()
486
+ })
487
+ }
488
+
489
+ var old = $.fn.carousel
490
+
491
+ $.fn.carousel = Plugin
492
+ $.fn.carousel.Constructor = Carousel
493
+
494
+
495
+ // CAROUSEL NO CONFLICT
496
+ // ====================
497
+
498
+ $.fn.carousel.noConflict = function () {
499
+ $.fn.carousel = old
500
+ return this
501
+ }
502
+
503
+
504
+ // CAROUSEL DATA-API
505
+ // =================
506
+
507
+ var clickHandler = function (e) {
508
+ var href
509
+ var $this = $(this)
510
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
511
+ if (!$target.hasClass('carousel')) return
512
+ var options = $.extend({}, $target.data(), $this.data())
513
+ var slideIndex = $this.attr('data-slide-to')
514
+ if (slideIndex) options.interval = false
515
+
516
+ Plugin.call($target, options)
517
+
518
+ if (slideIndex) {
519
+ $target.data('bs.carousel').to(slideIndex)
520
+ }
521
+
522
+ e.preventDefault()
523
+ }
524
+
525
+ $(document)
526
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
527
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
528
+
529
+ $(window).on('load', function () {
530
+ $('[data-ride="carousel"]').each(function () {
531
+ var $carousel = $(this)
532
+ Plugin.call($carousel, $carousel.data())
533
+ })
534
+ })
535
+
536
+ }(jQuery);
537
+
538
+ /* ========================================================================
539
+ * Bootstrap: collapse.js v3.3.7
540
+ * http://getbootstrap.com/javascript/#collapse
541
+ * ========================================================================
542
+ * Copyright 2011-2016 Twitter, Inc.
543
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
544
+ * ======================================================================== */
545
+
546
+ /* jshint latedef: false */
547
+
548
+ +function ($) {
549
+ 'use strict';
550
+
551
+ // COLLAPSE PUBLIC CLASS DEFINITION
552
+ // ================================
553
+
554
+ var Collapse = function (element, options) {
555
+ this.$element = $(element)
556
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
557
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
558
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
559
+ this.transitioning = null
560
+
561
+ if (this.options.parent) {
562
+ this.$parent = this.getParent()
563
+ } else {
564
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
565
+ }
566
+
567
+ if (this.options.toggle) this.toggle()
568
+ }
569
+
570
+ Collapse.VERSION = '3.3.7'
571
+
572
+ Collapse.TRANSITION_DURATION = 350
573
+
574
+ Collapse.DEFAULTS = {
575
+ toggle: true
576
+ }
577
+
578
+ Collapse.prototype.dimension = function () {
579
+ var hasWidth = this.$element.hasClass('width')
580
+ return hasWidth ? 'width' : 'height'
581
+ }
582
+
583
+ Collapse.prototype.show = function () {
584
+ if (this.transitioning || this.$element.hasClass('in')) return
585
+
586
+ var activesData
587
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
588
+
589
+ if (actives && actives.length) {
590
+ activesData = actives.data('bs.collapse')
591
+ if (activesData && activesData.transitioning) return
592
+ }
593
+
594
+ var startEvent = $.Event('show.bs.collapse')
595
+ this.$element.trigger(startEvent)
596
+ if (startEvent.isDefaultPrevented()) return
597
+
598
+ if (actives && actives.length) {
599
+ Plugin.call(actives, 'hide')
600
+ activesData || actives.data('bs.collapse', null)
601
+ }
602
+
603
+ var dimension = this.dimension()
604
+
605
+ this.$element
606
+ .removeClass('collapse')
607
+ .addClass('collapsing')[dimension](0)
608
+ .attr('aria-expanded', true)
609
+
610
+ this.$trigger
611
+ .removeClass('collapsed')
612
+ .attr('aria-expanded', true)
613
+
614
+ this.transitioning = 1
615
+
616
+ var complete = function () {
617
+ this.$element
618
+ .removeClass('collapsing')
619
+ .addClass('collapse in')[dimension]('')
620
+ this.transitioning = 0
621
+ this.$element
622
+ .trigger('shown.bs.collapse')
623
+ }
624
+
625
+ if (!$.support.transition) return complete.call(this)
626
+
627
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
628
+
629
+ this.$element
630
+ .one('bsTransitionEnd', $.proxy(complete, this))
631
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
632
+ }
633
+
634
+ Collapse.prototype.hide = function () {
635
+ if (this.transitioning || !this.$element.hasClass('in')) return
636
+
637
+ var startEvent = $.Event('hide.bs.collapse')
638
+ this.$element.trigger(startEvent)
639
+ if (startEvent.isDefaultPrevented()) return
640
+
641
+ var dimension = this.dimension()
642
+
643
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
644
+
645
+ this.$element
646
+ .addClass('collapsing')
647
+ .removeClass('collapse in')
648
+ .attr('aria-expanded', false)
649
+
650
+ this.$trigger
651
+ .addClass('collapsed')
652
+ .attr('aria-expanded', false)
653
+
654
+ this.transitioning = 1
655
+
656
+ var complete = function () {
657
+ this.transitioning = 0
658
+ this.$element
659
+ .removeClass('collapsing')
660
+ .addClass('collapse')
661
+ .trigger('hidden.bs.collapse')
662
+ }
663
+
664
+ if (!$.support.transition) return complete.call(this)
665
+
666
+ this.$element
667
+ [dimension](0)
668
+ .one('bsTransitionEnd', $.proxy(complete, this))
669
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
670
+ }
671
+
672
+ Collapse.prototype.toggle = function () {
673
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
674
+ }
675
+
676
+ Collapse.prototype.getParent = function () {
677
+ return $(this.options.parent)
678
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
679
+ .each($.proxy(function (i, element) {
680
+ var $element = $(element)
681
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
682
+ }, this))
683
+ .end()
684
+ }
685
+
686
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
687
+ var isOpen = $element.hasClass('in')
688
+
689
+ $element.attr('aria-expanded', isOpen)
690
+ $trigger
691
+ .toggleClass('collapsed', !isOpen)
692
+ .attr('aria-expanded', isOpen)
693
+ }
694
+
695
+ function getTargetFromTrigger($trigger) {
696
+ var href
697
+ var target = $trigger.attr('data-target')
698
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
699
+
700
+ return $(target)
701
+ }
702
+
703
+
704
+ // COLLAPSE PLUGIN DEFINITION
705
+ // ==========================
706
+
707
+ function Plugin(option) {
708
+ return this.each(function () {
709
+ var $this = $(this)
710
+ var data = $this.data('bs.collapse')
711
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
712
+
713
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
714
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
715
+ if (typeof option == 'string') data[option]()
716
+ })
717
+ }
718
+
719
+ var old = $.fn.collapse
720
+
721
+ $.fn.collapse = Plugin
722
+ $.fn.collapse.Constructor = Collapse
723
+
724
+
725
+ // COLLAPSE NO CONFLICT
726
+ // ====================
727
+
728
+ $.fn.collapse.noConflict = function () {
729
+ $.fn.collapse = old
730
+ return this
731
+ }
732
+
733
+
734
+ // COLLAPSE DATA-API
735
+ // =================
736
+
737
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
738
+ var $this = $(this)
739
+
740
+ if (!$this.attr('data-target')) e.preventDefault()
741
+
742
+ var $target = getTargetFromTrigger($this)
743
+ var data = $target.data('bs.collapse')
744
+ var option = data ? 'toggle' : $this.data()
745
+
746
+ Plugin.call($target, option)
747
+ })
748
+
749
+ }(jQuery);
750
+
751
+ /* ========================================================================
752
+ * Bootstrap: dropdown.js v3.3.7
753
+ * http://getbootstrap.com/javascript/#dropdowns
754
+ * ========================================================================
755
+ * Copyright 2011-2016 Twitter, Inc.
756
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
757
+ * ======================================================================== */
758
+
759
+
760
+ +function ($) {
761
+ 'use strict';
762
+
763
+ // DROPDOWN CLASS DEFINITION
764
+ // =========================
765
+
766
+ var backdrop = '.dropdown-backdrop'
767
+ var toggle = '[data-toggle="dropdown"]'
768
+ var Dropdown = function (element) {
769
+ $(element).on('click.bs.dropdown', this.toggle)
770
+ }
771
+
772
+ Dropdown.VERSION = '3.3.7'
773
+
774
+ function getParent($this) {
775
+ var selector = $this.attr('data-target')
776
+
777
+ if (!selector) {
778
+ selector = $this.attr('href')
779
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
780
+ }
781
+
782
+ var $parent = selector && $(selector)
783
+
784
+ return $parent && $parent.length ? $parent : $this.parent()
785
+ }
786
+
787
+ function clearMenus(e) {
788
+ if (e && e.which === 3) return
789
+ $(backdrop).remove()
790
+ $(toggle).each(function () {
791
+ var $this = $(this)
792
+ var $parent = getParent($this)
793
+ var relatedTarget = { relatedTarget: this }
794
+
795
+ if (!$parent.hasClass('open')) return
796
+
797
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
798
+
799
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
800
+
801
+ if (e.isDefaultPrevented()) return
802
+
803
+ $this.attr('aria-expanded', 'false')
804
+ $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
805
+ })
806
+ }
807
+
808
+ Dropdown.prototype.toggle = function (e) {
809
+ var $this = $(this)
810
+
811
+ if ($this.is('.disabled, :disabled')) return
812
+
813
+ var $parent = getParent($this)
814
+ var isActive = $parent.hasClass('open')
815
+
816
+ clearMenus()
817
+
818
+ if (!isActive) {
819
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
820
+ // if mobile we use a backdrop because click events don't delegate
821
+ $(document.createElement('div'))
822
+ .addClass('dropdown-backdrop')
823
+ .insertAfter($(this))
824
+ .on('click', clearMenus)
825
+ }
826
+
827
+ var relatedTarget = { relatedTarget: this }
828
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
829
+
830
+ if (e.isDefaultPrevented()) return
831
+
832
+ $this
833
+ .trigger('focus')
834
+ .attr('aria-expanded', 'true')
835
+
836
+ $parent
837
+ .toggleClass('open')
838
+ .trigger($.Event('shown.bs.dropdown', relatedTarget))
839
+ }
840
+
841
+ return false
842
+ }
843
+
844
+ Dropdown.prototype.keydown = function (e) {
845
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
846
+
847
+ var $this = $(this)
848
+
849
+ e.preventDefault()
850
+ e.stopPropagation()
851
+
852
+ if ($this.is('.disabled, :disabled')) return
853
+
854
+ var $parent = getParent($this)
855
+ var isActive = $parent.hasClass('open')
856
+
857
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
858
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
859
+ return $this.trigger('click')
860
+ }
861
+
862
+ var desc = ' li:not(.disabled):visible a'
863
+ var $items = $parent.find('.dropdown-menu' + desc)
864
+
865
+ if (!$items.length) return
866
+
867
+ var index = $items.index(e.target)
868
+
869
+ if (e.which == 38 && index > 0) index-- // up
870
+ if (e.which == 40 && index < $items.length - 1) index++ // down
871
+ if (!~index) index = 0
872
+
873
+ $items.eq(index).trigger('focus')
874
+ }
875
+
876
+
877
+ // DROPDOWN PLUGIN DEFINITION
878
+ // ==========================
879
+
880
+ function Plugin(option) {
881
+ return this.each(function () {
882
+ var $this = $(this)
883
+ var data = $this.data('bs.dropdown')
884
+
885
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
886
+ if (typeof option == 'string') data[option].call($this)
887
+ })
888
+ }
889
+
890
+ var old = $.fn.dropdown
891
+
892
+ $.fn.dropdown = Plugin
893
+ $.fn.dropdown.Constructor = Dropdown
894
+
895
+
896
+ // DROPDOWN NO CONFLICT
897
+ // ====================
898
+
899
+ $.fn.dropdown.noConflict = function () {
900
+ $.fn.dropdown = old
901
+ return this
902
+ }
903
+
904
+
905
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
906
+ // ===================================
907
+
908
+ $(document)
909
+ .on('click.bs.dropdown.data-api', clearMenus)
910
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
911
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
912
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
913
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
914
+
915
+ }(jQuery);
916
+
917
+ /* ========================================================================
918
+ * Bootstrap: modal.js v3.3.7
919
+ * http://getbootstrap.com/javascript/#modals
920
+ * ========================================================================
921
+ * Copyright 2011-2016 Twitter, Inc.
922
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
923
+ * ======================================================================== */
924
+
925
+
926
+ +function ($) {
927
+ 'use strict';
928
+
929
+ // MODAL CLASS DEFINITION
930
+ // ======================
931
+
932
+ var Modal = function (element, options) {
933
+ this.options = options
934
+ this.$body = $(document.body)
935
+ this.$element = $(element)
936
+ this.$dialog = this.$element.find('.modal-dialog')
937
+ this.$backdrop = null
938
+ this.isShown = null
939
+ this.originalBodyPad = null
940
+ this.scrollbarWidth = 0
941
+ this.ignoreBackdropClick = false
942
+
943
+ if (this.options.remote) {
944
+ this.$element
945
+ .find('.modal-content')
946
+ .load(this.options.remote, $.proxy(function () {
947
+ this.$element.trigger('loaded.bs.modal')
948
+ }, this))
949
+ }
950
+ }
951
+
952
+ Modal.VERSION = '3.3.7'
953
+
954
+ Modal.TRANSITION_DURATION = 300
955
+ Modal.BACKDROP_TRANSITION_DURATION = 150
956
+
957
+ Modal.DEFAULTS = {
958
+ backdrop: true,
959
+ keyboard: true,
960
+ show: true
961
+ }
962
+
963
+ Modal.prototype.toggle = function (_relatedTarget) {
964
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
965
+ }
966
+
967
+ Modal.prototype.show = function (_relatedTarget) {
968
+ var that = this
969
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
970
+
971
+ this.$element.trigger(e)
972
+
973
+ if (this.isShown || e.isDefaultPrevented()) return
974
+
975
+ this.isShown = true
976
+
977
+ this.checkScrollbar()
978
+ this.setScrollbar()
979
+ this.$body.addClass('modal-open')
980
+
981
+ this.escape()
982
+ this.resize()
983
+
984
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
985
+
986
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
987
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
988
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
989
+ })
990
+ })
991
+
992
+ this.backdrop(function () {
993
+ var transition = $.support.transition && that.$element.hasClass('fade')
994
+
995
+ if (!that.$element.parent().length) {
996
+ that.$element.appendTo(that.$body) // don't move modals dom position
997
+ }
998
+
999
+ that.$element
1000
+ .show()
1001
+ .scrollTop(0)
1002
+
1003
+ that.adjustDialog()
1004
+
1005
+ if (transition) {
1006
+ that.$element[0].offsetWidth // force reflow
1007
+ }
1008
+
1009
+ that.$element.addClass('in')
1010
+
1011
+ that.enforceFocus()
1012
+
1013
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
1014
+
1015
+ transition ?
1016
+ that.$dialog // wait for modal to slide in
1017
+ .one('bsTransitionEnd', function () {
1018
+ that.$element.trigger('focus').trigger(e)
1019
+ })
1020
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
1021
+ that.$element.trigger('focus').trigger(e)
1022
+ })
1023
+ }
1024
+
1025
+ Modal.prototype.hide = function (e) {
1026
+ if (e) e.preventDefault()
1027
+
1028
+ e = $.Event('hide.bs.modal')
1029
+
1030
+ this.$element.trigger(e)
1031
+
1032
+ if (!this.isShown || e.isDefaultPrevented()) return
1033
+
1034
+ this.isShown = false
1035
+
1036
+ this.escape()
1037
+ this.resize()
1038
+
1039
+ $(document).off('focusin.bs.modal')
1040
+
1041
+ this.$element
1042
+ .removeClass('in')
1043
+ .off('click.dismiss.bs.modal')
1044
+ .off('mouseup.dismiss.bs.modal')
1045
+
1046
+ this.$dialog.off('mousedown.dismiss.bs.modal')
1047
+
1048
+ $.support.transition && this.$element.hasClass('fade') ?
1049
+ this.$element
1050
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
1051
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
1052
+ this.hideModal()
1053
+ }
1054
+
1055
+ Modal.prototype.enforceFocus = function () {
1056
+ $(document)
1057
+ .off('focusin.bs.modal') // guard against infinite focus loop
1058
+ .on('focusin.bs.modal', $.proxy(function (e) {
1059
+ if (document !== e.target &&
1060
+ this.$element[0] !== e.target &&
1061
+ !this.$element.has(e.target).length) {
1062
+ this.$element.trigger('focus')
1063
+ }
1064
+ }, this))
1065
+ }
1066
+
1067
+ Modal.prototype.escape = function () {
1068
+ if (this.isShown && this.options.keyboard) {
1069
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
1070
+ e.which == 27 && this.hide()
1071
+ }, this))
1072
+ } else if (!this.isShown) {
1073
+ this.$element.off('keydown.dismiss.bs.modal')
1074
+ }
1075
+ }
1076
+
1077
+ Modal.prototype.resize = function () {
1078
+ if (this.isShown) {
1079
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
1080
+ } else {
1081
+ $(window).off('resize.bs.modal')
1082
+ }
1083
+ }
1084
+
1085
+ Modal.prototype.hideModal = function () {
1086
+ var that = this
1087
+ this.$element.hide()
1088
+ this.backdrop(function () {
1089
+ that.$body.removeClass('modal-open')
1090
+ that.resetAdjustments()
1091
+ that.resetScrollbar()
1092
+ that.$element.trigger('hidden.bs.modal')
1093
+ })
1094
+ }
1095
+
1096
+ Modal.prototype.removeBackdrop = function () {
1097
+ this.$backdrop && this.$backdrop.remove()
1098
+ this.$backdrop = null
1099
+ }
1100
+
1101
+ Modal.prototype.backdrop = function (callback) {
1102
+ var that = this
1103
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
1104
+
1105
+ if (this.isShown && this.options.backdrop) {
1106
+ var doAnimate = $.support.transition && animate
1107
+
1108
+ this.$backdrop = $(document.createElement('div'))
1109
+ .addClass('modal-backdrop ' + animate)
1110
+ .appendTo(this.$body)
1111
+
1112
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
1113
+ if (this.ignoreBackdropClick) {
1114
+ this.ignoreBackdropClick = false
1115
+ return
1116
+ }
1117
+ if (e.target !== e.currentTarget) return
1118
+ this.options.backdrop == 'static'
1119
+ ? this.$element[0].focus()
1120
+ : this.hide()
1121
+ }, this))
1122
+
1123
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
1124
+
1125
+ this.$backdrop.addClass('in')
1126
+
1127
+ if (!callback) return
1128
+
1129
+ doAnimate ?
1130
+ this.$backdrop
1131
+ .one('bsTransitionEnd', callback)
1132
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
1133
+ callback()
1134
+
1135
+ } else if (!this.isShown && this.$backdrop) {
1136
+ this.$backdrop.removeClass('in')
1137
+
1138
+ var callbackRemove = function () {
1139
+ that.removeBackdrop()
1140
+ callback && callback()
1141
+ }
1142
+ $.support.transition && this.$element.hasClass('fade') ?
1143
+ this.$backdrop
1144
+ .one('bsTransitionEnd', callbackRemove)
1145
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
1146
+ callbackRemove()
1147
+
1148
+ } else if (callback) {
1149
+ callback()
1150
+ }
1151
+ }
1152
+
1153
+ // these following methods are used to handle overflowing modals
1154
+
1155
+ Modal.prototype.handleUpdate = function () {
1156
+ this.adjustDialog()
1157
+ }
1158
+
1159
+ Modal.prototype.adjustDialog = function () {
1160
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
1161
+
1162
+ this.$element.css({
1163
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
1164
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
1165
+ })
1166
+ }
1167
+
1168
+ Modal.prototype.resetAdjustments = function () {
1169
+ this.$element.css({
1170
+ paddingLeft: '',
1171
+ paddingRight: ''
1172
+ })
1173
+ }
1174
+
1175
+ Modal.prototype.checkScrollbar = function () {
1176
+ var fullWindowWidth = window.innerWidth
1177
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
1178
+ var documentElementRect = document.documentElement.getBoundingClientRect()
1179
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
1180
+ }
1181
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
1182
+ this.scrollbarWidth = this.measureScrollbar()
1183
+ }
1184
+
1185
+ Modal.prototype.setScrollbar = function () {
1186
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
1187
+ this.originalBodyPad = document.body.style.paddingRight || ''
1188
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
1189
+ }
1190
+
1191
+ Modal.prototype.resetScrollbar = function () {
1192
+ this.$body.css('padding-right', this.originalBodyPad)
1193
+ }
1194
+
1195
+ Modal.prototype.measureScrollbar = function () { // thx walsh
1196
+ var scrollDiv = document.createElement('div')
1197
+ scrollDiv.className = 'modal-scrollbar-measure'
1198
+ this.$body.append(scrollDiv)
1199
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
1200
+ this.$body[0].removeChild(scrollDiv)
1201
+ return scrollbarWidth
1202
+ }
1203
+
1204
+
1205
+ // MODAL PLUGIN DEFINITION
1206
+ // =======================
1207
+
1208
+ function Plugin(option, _relatedTarget) {
1209
+ return this.each(function () {
1210
+ var $this = $(this)
1211
+ var data = $this.data('bs.modal')
1212
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
1213
+
1214
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
1215
+ if (typeof option == 'string') data[option](_relatedTarget)
1216
+ else if (options.show) data.show(_relatedTarget)
1217
+ })
1218
+ }
1219
+
1220
+ var old = $.fn.modal
1221
+
1222
+ $.fn.modal = Plugin
1223
+ $.fn.modal.Constructor = Modal
1224
+
1225
+
1226
+ // MODAL NO CONFLICT
1227
+ // =================
1228
+
1229
+ $.fn.modal.noConflict = function () {
1230
+ $.fn.modal = old
1231
+ return this
1232
+ }
1233
+
1234
+
1235
+ // MODAL DATA-API
1236
+ // ==============
1237
+
1238
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1239
+ var $this = $(this)
1240
+ var href = $this.attr('href')
1241
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
1242
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1243
+
1244
+ if ($this.is('a')) e.preventDefault()
1245
+
1246
+ $target.one('show.bs.modal', function (showEvent) {
1247
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
1248
+ $target.one('hidden.bs.modal', function () {
1249
+ $this.is(':visible') && $this.trigger('focus')
1250
+ })
1251
+ })
1252
+ Plugin.call($target, option, this)
1253
+ })
1254
+
1255
+ }(jQuery);
1256
+
1257
+ /* ========================================================================
1258
+ * Bootstrap: tooltip.js v3.3.7
1259
+ * http://getbootstrap.com/javascript/#tooltip
1260
+ * Inspired by the original jQuery.tipsy by Jason Frame
1261
+ * ========================================================================
1262
+ * Copyright 2011-2016 Twitter, Inc.
1263
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1264
+ * ======================================================================== */
1265
+
1266
+
1267
+ +function ($) {
1268
+ 'use strict';
1269
+
1270
+ // TOOLTIP PUBLIC CLASS DEFINITION
1271
+ // ===============================
1272
+
1273
+ var Tooltip = function (element, options) {
1274
+ this.type = null
1275
+ this.options = null
1276
+ this.enabled = null
1277
+ this.timeout = null
1278
+ this.hoverState = null
1279
+ this.$element = null
1280
+ this.inState = null
1281
+
1282
+ this.init('tooltip', element, options)
1283
+ }
1284
+
1285
+ Tooltip.VERSION = '3.3.7'
1286
+
1287
+ Tooltip.TRANSITION_DURATION = 150
1288
+
1289
+ Tooltip.DEFAULTS = {
1290
+ animation: true,
1291
+ placement: 'top',
1292
+ selector: false,
1293
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
1294
+ trigger: 'hover focus',
1295
+ title: '',
1296
+ delay: 0,
1297
+ html: false,
1298
+ container: false,
1299
+ viewport: {
1300
+ selector: 'body',
1301
+ padding: 0
1302
+ }
1303
+ }
1304
+
1305
+ Tooltip.prototype.init = function (type, element, options) {
1306
+ this.enabled = true
1307
+ this.type = type
1308
+ this.$element = $(element)
1309
+ this.options = this.getOptions(options)
1310
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
1311
+ this.inState = { click: false, hover: false, focus: false }
1312
+
1313
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
1314
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
1315
+ }
1316
+
1317
+ var triggers = this.options.trigger.split(' ')
1318
+
1319
+ for (var i = triggers.length; i--;) {
1320
+ var trigger = triggers[i]
1321
+
1322
+ if (trigger == 'click') {
1323
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1324
+ } else if (trigger != 'manual') {
1325
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
1326
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
1327
+
1328
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1329
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1330
+ }
1331
+ }
1332
+
1333
+ this.options.selector ?
1334
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1335
+ this.fixTitle()
1336
+ }
1337
+
1338
+ Tooltip.prototype.getDefaults = function () {
1339
+ return Tooltip.DEFAULTS
1340
+ }
1341
+
1342
+ Tooltip.prototype.getOptions = function (options) {
1343
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
1344
+
1345
+ if (options.delay && typeof options.delay == 'number') {
1346
+ options.delay = {
1347
+ show: options.delay,
1348
+ hide: options.delay
1349
+ }
1350
+ }
1351
+
1352
+ return options
1353
+ }
1354
+
1355
+ Tooltip.prototype.getDelegateOptions = function () {
1356
+ var options = {}
1357
+ var defaults = this.getDefaults()
1358
+
1359
+ this._options && $.each(this._options, function (key, value) {
1360
+ if (defaults[key] != value) options[key] = value
1361
+ })
1362
+
1363
+ return options
1364
+ }
1365
+
1366
+ Tooltip.prototype.enter = function (obj) {
1367
+ var self = obj instanceof this.constructor ?
1368
+ obj : $(obj.currentTarget).data('bs.' + this.type)
1369
+
1370
+ if (!self) {
1371
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1372
+ $(obj.currentTarget).data('bs.' + this.type, self)
1373
+ }
1374
+
1375
+ if (obj instanceof $.Event) {
1376
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
1377
+ }
1378
+
1379
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
1380
+ self.hoverState = 'in'
1381
+ return
1382
+ }
1383
+
1384
+ clearTimeout(self.timeout)
1385
+
1386
+ self.hoverState = 'in'
1387
+
1388
+ if (!self.options.delay || !self.options.delay.show) return self.show()
1389
+
1390
+ self.timeout = setTimeout(function () {
1391
+ if (self.hoverState == 'in') self.show()
1392
+ }, self.options.delay.show)
1393
+ }
1394
+
1395
+ Tooltip.prototype.isInStateTrue = function () {
1396
+ for (var key in this.inState) {
1397
+ if (this.inState[key]) return true
1398
+ }
1399
+
1400
+ return false
1401
+ }
1402
+
1403
+ Tooltip.prototype.leave = function (obj) {
1404
+ var self = obj instanceof this.constructor ?
1405
+ obj : $(obj.currentTarget).data('bs.' + this.type)
1406
+
1407
+ if (!self) {
1408
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1409
+ $(obj.currentTarget).data('bs.' + this.type, self)
1410
+ }
1411
+
1412
+ if (obj instanceof $.Event) {
1413
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
1414
+ }
1415
+
1416
+ if (self.isInStateTrue()) return
1417
+
1418
+ clearTimeout(self.timeout)
1419
+
1420
+ self.hoverState = 'out'
1421
+
1422
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
1423
+
1424
+ self.timeout = setTimeout(function () {
1425
+ if (self.hoverState == 'out') self.hide()
1426
+ }, self.options.delay.hide)
1427
+ }
1428
+
1429
+ Tooltip.prototype.show = function () {
1430
+ var e = $.Event('show.bs.' + this.type)
1431
+
1432
+ if (this.hasContent() && this.enabled) {
1433
+ this.$element.trigger(e)
1434
+
1435
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
1436
+ if (e.isDefaultPrevented() || !inDom) return
1437
+ var that = this
1438
+
1439
+ var $tip = this.tip()
1440
+
1441
+ var tipId = this.getUID(this.type)
1442
+
1443
+ this.setContent()
1444
+ $tip.attr('id', tipId)
1445
+ this.$element.attr('aria-describedby', tipId)
1446
+
1447
+ if (this.options.animation) $tip.addClass('fade')
1448
+
1449
+ var placement = typeof this.options.placement == 'function' ?
1450
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
1451
+ this.options.placement
1452
+
1453
+ var autoToken = /\s?auto?\s?/i
1454
+ var autoPlace = autoToken.test(placement)
1455
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
1456
+
1457
+ $tip
1458
+ .detach()
1459
+ .css({ top: 0, left: 0, display: 'block' })
1460
+ .addClass(placement)
1461
+ .data('bs.' + this.type, this)
1462
+
1463
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1464
+ this.$element.trigger('inserted.bs.' + this.type)
1465
+
1466
+ var pos = this.getPosition()
1467
+ var actualWidth = $tip[0].offsetWidth
1468
+ var actualHeight = $tip[0].offsetHeight
1469
+
1470
+ if (autoPlace) {
1471
+ var orgPlacement = placement
1472
+ var viewportDim = this.getPosition(this.$viewport)
1473
+
1474
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
1475
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
1476
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
1477
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
1478
+ placement
1479
+
1480
+ $tip
1481
+ .removeClass(orgPlacement)
1482
+ .addClass(placement)
1483
+ }
1484
+
1485
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1486
+
1487
+ this.applyPlacement(calculatedOffset, placement)
1488
+
1489
+ var complete = function () {
1490
+ var prevHoverState = that.hoverState
1491
+ that.$element.trigger('shown.bs.' + that.type)
1492
+ that.hoverState = null
1493
+
1494
+ if (prevHoverState == 'out') that.leave(that)
1495
+ }
1496
+
1497
+ $.support.transition && this.$tip.hasClass('fade') ?
1498
+ $tip
1499
+ .one('bsTransitionEnd', complete)
1500
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1501
+ complete()
1502
+ }
1503
+ }
1504
+
1505
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
1506
+ var $tip = this.tip()
1507
+ var width = $tip[0].offsetWidth
1508
+ var height = $tip[0].offsetHeight
1509
+
1510
+ // manually read margins because getBoundingClientRect includes difference
1511
+ var marginTop = parseInt($tip.css('margin-top'), 10)
1512
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
1513
+
1514
+ // we must check for NaN for ie 8/9
1515
+ if (isNaN(marginTop)) marginTop = 0
1516
+ if (isNaN(marginLeft)) marginLeft = 0
1517
+
1518
+ offset.top += marginTop
1519
+ offset.left += marginLeft
1520
+
1521
+ // $.fn.offset doesn't round pixel values
1522
+ // so we use setOffset directly with our own function B-0
1523
+ $.offset.setOffset($tip[0], $.extend({
1524
+ using: function (props) {
1525
+ $tip.css({
1526
+ top: Math.round(props.top),
1527
+ left: Math.round(props.left)
1528
+ })
1529
+ }
1530
+ }, offset), 0)
1531
+
1532
+ $tip.addClass('in')
1533
+
1534
+ // check to see if placing tip in new offset caused the tip to resize itself
1535
+ var actualWidth = $tip[0].offsetWidth
1536
+ var actualHeight = $tip[0].offsetHeight
1537
+
1538
+ if (placement == 'top' && actualHeight != height) {
1539
+ offset.top = offset.top + height - actualHeight
1540
+ }
1541
+
1542
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
1543
+
1544
+ if (delta.left) offset.left += delta.left
1545
+ else offset.top += delta.top
1546
+
1547
+ var isVertical = /top|bottom/.test(placement)
1548
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
1549
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
1550
+
1551
+ $tip.offset(offset)
1552
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
1553
+ }
1554
+
1555
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
1556
+ this.arrow()
1557
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
1558
+ .css(isVertical ? 'top' : 'left', '')
1559
+ }
1560
+
1561
+ Tooltip.prototype.setContent = function () {
1562
+ var $tip = this.tip()
1563
+ var title = this.getTitle()
1564
+
1565
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1566
+ $tip.removeClass('fade in top bottom left right')
1567
+ }
1568
+
1569
+ Tooltip.prototype.hide = function (callback) {
1570
+ var that = this
1571
+ var $tip = $(this.$tip)
1572
+ var e = $.Event('hide.bs.' + this.type)
1573
+
1574
+ function complete() {
1575
+ if (that.hoverState != 'in') $tip.detach()
1576
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
1577
+ that.$element
1578
+ .removeAttr('aria-describedby')
1579
+ .trigger('hidden.bs.' + that.type)
1580
+ }
1581
+ callback && callback()
1582
+ }
1583
+
1584
+ this.$element.trigger(e)
1585
+
1586
+ if (e.isDefaultPrevented()) return
1587
+
1588
+ $tip.removeClass('in')
1589
+
1590
+ $.support.transition && $tip.hasClass('fade') ?
1591
+ $tip
1592
+ .one('bsTransitionEnd', complete)
1593
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
1594
+ complete()
1595
+
1596
+ this.hoverState = null
1597
+
1598
+ return this
1599
+ }
1600
+
1601
+ Tooltip.prototype.fixTitle = function () {
1602
+ var $e = this.$element
1603
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
1604
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1605
+ }
1606
+ }
1607
+
1608
+ Tooltip.prototype.hasContent = function () {
1609
+ return this.getTitle()
1610
+ }
1611
+
1612
+ Tooltip.prototype.getPosition = function ($element) {
1613
+ $element = $element || this.$element
1614
+
1615
+ var el = $element[0]
1616
+ var isBody = el.tagName == 'BODY'
1617
+
1618
+ var elRect = el.getBoundingClientRect()
1619
+ if (elRect.width == null) {
1620
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
1621
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
1622
+ }
1623
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
1624
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
1625
+ // See https://github.com/twbs/bootstrap/issues/20280
1626
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
1627
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
1628
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
1629
+
1630
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
1631
+ }
1632
+
1633
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
1634
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1635
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1636
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1637
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1638
+
1639
+ }
1640
+
1641
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1642
+ var delta = { top: 0, left: 0 }
1643
+ if (!this.$viewport) return delta
1644
+
1645
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1646
+ var viewportDimensions = this.getPosition(this.$viewport)
1647
+
1648
+ if (/right|left/.test(placement)) {
1649
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1650
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1651
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
1652
+ delta.top = viewportDimensions.top - topEdgeOffset
1653
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1654
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1655
+ }
1656
+ } else {
1657
+ var leftEdgeOffset = pos.left - viewportPadding
1658
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1659
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1660
+ delta.left = viewportDimensions.left - leftEdgeOffset
1661
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
1662
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1663
+ }
1664
+ }
1665
+
1666
+ return delta
1667
+ }
1668
+
1669
+ Tooltip.prototype.getTitle = function () {
1670
+ var title
1671
+ var $e = this.$element
1672
+ var o = this.options
1673
+
1674
+ title = $e.attr('data-original-title')
1675
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1676
+
1677
+ return title
1678
+ }
1679
+
1680
+ Tooltip.prototype.getUID = function (prefix) {
1681
+ do prefix += ~~(Math.random() * 1000000)
1682
+ while (document.getElementById(prefix))
1683
+ return prefix
1684
+ }
1685
+
1686
+ Tooltip.prototype.tip = function () {
1687
+ if (!this.$tip) {
1688
+ this.$tip = $(this.options.template)
1689
+ if (this.$tip.length != 1) {
1690
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
1691
+ }
1692
+ }
1693
+ return this.$tip
1694
+ }
1695
+
1696
+ Tooltip.prototype.arrow = function () {
1697
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
1698
+ }
1699
+
1700
+ Tooltip.prototype.enable = function () {
1701
+ this.enabled = true
1702
+ }
1703
+
1704
+ Tooltip.prototype.disable = function () {
1705
+ this.enabled = false
1706
+ }
1707
+
1708
+ Tooltip.prototype.toggleEnabled = function () {
1709
+ this.enabled = !this.enabled
1710
+ }
1711
+
1712
+ Tooltip.prototype.toggle = function (e) {
1713
+ var self = this
1714
+ if (e) {
1715
+ self = $(e.currentTarget).data('bs.' + this.type)
1716
+ if (!self) {
1717
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1718
+ $(e.currentTarget).data('bs.' + this.type, self)
1719
+ }
1720
+ }
1721
+
1722
+ if (e) {
1723
+ self.inState.click = !self.inState.click
1724
+ if (self.isInStateTrue()) self.enter(self)
1725
+ else self.leave(self)
1726
+ } else {
1727
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1728
+ }
1729
+ }
1730
+
1731
+ Tooltip.prototype.destroy = function () {
1732
+ var that = this
1733
+ clearTimeout(this.timeout)
1734
+ this.hide(function () {
1735
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
1736
+ if (that.$tip) {
1737
+ that.$tip.detach()
1738
+ }
1739
+ that.$tip = null
1740
+ that.$arrow = null
1741
+ that.$viewport = null
1742
+ that.$element = null
1743
+ })
1744
+ }
1745
+
1746
+
1747
+ // TOOLTIP PLUGIN DEFINITION
1748
+ // =========================
1749
+
1750
+ function Plugin(option) {
1751
+ return this.each(function () {
1752
+ var $this = $(this)
1753
+ var data = $this.data('bs.tooltip')
1754
+ var options = typeof option == 'object' && option
1755
+
1756
+ if (!data && /destroy|hide/.test(option)) return
1757
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
1758
+ if (typeof option == 'string') data[option]()
1759
+ })
1760
+ }
1761
+
1762
+ var old = $.fn.tooltip
1763
+
1764
+ $.fn.tooltip = Plugin
1765
+ $.fn.tooltip.Constructor = Tooltip
1766
+
1767
+
1768
+ // TOOLTIP NO CONFLICT
1769
+ // ===================
1770
+
1771
+ $.fn.tooltip.noConflict = function () {
1772
+ $.fn.tooltip = old
1773
+ return this
1774
+ }
1775
+
1776
+ }(jQuery);
1777
+
1778
+ /* ========================================================================
1779
+ * Bootstrap: popover.js v3.3.7
1780
+ * http://getbootstrap.com/javascript/#popovers
1781
+ * ========================================================================
1782
+ * Copyright 2011-2016 Twitter, Inc.
1783
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1784
+ * ======================================================================== */
1785
+
1786
+
1787
+ +function ($) {
1788
+ 'use strict';
1789
+
1790
+ // POPOVER PUBLIC CLASS DEFINITION
1791
+ // ===============================
1792
+
1793
+ var Popover = function (element, options) {
1794
+ this.init('popover', element, options)
1795
+ }
1796
+
1797
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1798
+
1799
+ Popover.VERSION = '3.3.7'
1800
+
1801
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1802
+ placement: 'right',
1803
+ trigger: 'click',
1804
+ content: '',
1805
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1806
+ })
1807
+
1808
+
1809
+ // NOTE: POPOVER EXTENDS tooltip.js
1810
+ // ================================
1811
+
1812
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
1813
+
1814
+ Popover.prototype.constructor = Popover
1815
+
1816
+ Popover.prototype.getDefaults = function () {
1817
+ return Popover.DEFAULTS
1818
+ }
1819
+
1820
+ Popover.prototype.setContent = function () {
1821
+ var $tip = this.tip()
1822
+ var title = this.getTitle()
1823
+ var content = this.getContent()
1824
+
1825
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1826
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
1827
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1828
+ ](content)
1829
+
1830
+ $tip.removeClass('fade top bottom left right in')
1831
+
1832
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
1833
+ // this manually by checking the contents.
1834
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
1835
+ }
1836
+
1837
+ Popover.prototype.hasContent = function () {
1838
+ return this.getTitle() || this.getContent()
1839
+ }
1840
+
1841
+ Popover.prototype.getContent = function () {
1842
+ var $e = this.$element
1843
+ var o = this.options
1844
+
1845
+ return $e.attr('data-content')
1846
+ || (typeof o.content == 'function' ?
1847
+ o.content.call($e[0]) :
1848
+ o.content)
1849
+ }
1850
+
1851
+ Popover.prototype.arrow = function () {
1852
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1853
+ }
1854
+
1855
+
1856
+ // POPOVER PLUGIN DEFINITION
1857
+ // =========================
1858
+
1859
+ function Plugin(option) {
1860
+ return this.each(function () {
1861
+ var $this = $(this)
1862
+ var data = $this.data('bs.popover')
1863
+ var options = typeof option == 'object' && option
1864
+
1865
+ if (!data && /destroy|hide/.test(option)) return
1866
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
1867
+ if (typeof option == 'string') data[option]()
1868
+ })
1869
+ }
1870
+
1871
+ var old = $.fn.popover
1872
+
1873
+ $.fn.popover = Plugin
1874
+ $.fn.popover.Constructor = Popover
1875
+
1876
+
1877
+ // POPOVER NO CONFLICT
1878
+ // ===================
1879
+
1880
+ $.fn.popover.noConflict = function () {
1881
+ $.fn.popover = old
1882
+ return this
1883
+ }
1884
+
1885
+ }(jQuery);
1886
+
1887
+ /* ========================================================================
1888
+ * Bootstrap: scrollspy.js v3.3.7
1889
+ * http://getbootstrap.com/javascript/#scrollspy
1890
+ * ========================================================================
1891
+ * Copyright 2011-2016 Twitter, Inc.
1892
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1893
+ * ======================================================================== */
1894
+
1895
+
1896
+ +function ($) {
1897
+ 'use strict';
1898
+
1899
+ // SCROLLSPY CLASS DEFINITION
1900
+ // ==========================
1901
+
1902
+ function ScrollSpy(element, options) {
1903
+ this.$body = $(document.body)
1904
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
1905
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1906
+ this.selector = (this.options.target || '') + ' .nav li > a'
1907
+ this.offsets = []
1908
+ this.targets = []
1909
+ this.activeTarget = null
1910
+ this.scrollHeight = 0
1911
+
1912
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
1913
+ this.refresh()
1914
+ this.process()
1915
+ }
1916
+
1917
+ ScrollSpy.VERSION = '3.3.7'
1918
+
1919
+ ScrollSpy.DEFAULTS = {
1920
+ offset: 10
1921
+ }
1922
+
1923
+ ScrollSpy.prototype.getScrollHeight = function () {
1924
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
1925
+ }
1926
+
1927
+ ScrollSpy.prototype.refresh = function () {
1928
+ var that = this
1929
+ var offsetMethod = 'offset'
1930
+ var offsetBase = 0
1931
+
1932
+ this.offsets = []
1933
+ this.targets = []
1934
+ this.scrollHeight = this.getScrollHeight()
1935
+
1936
+ if (!$.isWindow(this.$scrollElement[0])) {
1937
+ offsetMethod = 'position'
1938
+ offsetBase = this.$scrollElement.scrollTop()
1939
+ }
1940
+
1941
+ this.$body
1942
+ .find(this.selector)
1943
+ .map(function () {
1944
+ var $el = $(this)
1945
+ var href = $el.data('target') || $el.attr('href')
1946
+ var $href = /^#./.test(href) && $(href)
1947
+
1948
+ return ($href
1949
+ && $href.length
1950
+ && $href.is(':visible')
1951
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
1952
+ })
1953
+ .sort(function (a, b) { return a[0] - b[0] })
1954
+ .each(function () {
1955
+ that.offsets.push(this[0])
1956
+ that.targets.push(this[1])
1957
+ })
1958
+ }
1959
+
1960
+ ScrollSpy.prototype.process = function () {
1961
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1962
+ var scrollHeight = this.getScrollHeight()
1963
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
1964
+ var offsets = this.offsets
1965
+ var targets = this.targets
1966
+ var activeTarget = this.activeTarget
1967
+ var i
1968
+
1969
+ if (this.scrollHeight != scrollHeight) {
1970
+ this.refresh()
1971
+ }
1972
+
1973
+ if (scrollTop >= maxScroll) {
1974
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
1975
+ }
1976
+
1977
+ if (activeTarget && scrollTop < offsets[0]) {
1978
+ this.activeTarget = null
1979
+ return this.clear()
1980
+ }
1981
+
1982
+ for (i = offsets.length; i--;) {
1983
+ activeTarget != targets[i]
1984
+ && scrollTop >= offsets[i]
1985
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
1986
+ && this.activate(targets[i])
1987
+ }
1988
+ }
1989
+
1990
+ ScrollSpy.prototype.activate = function (target) {
1991
+ this.activeTarget = target
1992
+
1993
+ this.clear()
1994
+
1995
+ var selector = this.selector +
1996
+ '[data-target="' + target + '"],' +
1997
+ this.selector + '[href="' + target + '"]'
1998
+
1999
+ var active = $(selector)
2000
+ .parents('li')
2001
+ .addClass('active')
2002
+
2003
+ if (active.parent('.dropdown-menu').length) {
2004
+ active = active
2005
+ .closest('li.dropdown')
2006
+ .addClass('active')
2007
+ }
2008
+
2009
+ active.trigger('activate.bs.scrollspy')
2010
+ }
2011
+
2012
+ ScrollSpy.prototype.clear = function () {
2013
+ $(this.selector)
2014
+ .parentsUntil(this.options.target, '.active')
2015
+ .removeClass('active')
2016
+ }
2017
+
2018
+
2019
+ // SCROLLSPY PLUGIN DEFINITION
2020
+ // ===========================
2021
+
2022
+ function Plugin(option) {
2023
+ return this.each(function () {
2024
+ var $this = $(this)
2025
+ var data = $this.data('bs.scrollspy')
2026
+ var options = typeof option == 'object' && option
2027
+
2028
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
2029
+ if (typeof option == 'string') data[option]()
2030
+ })
2031
+ }
2032
+
2033
+ var old = $.fn.scrollspy
2034
+
2035
+ $.fn.scrollspy = Plugin
2036
+ $.fn.scrollspy.Constructor = ScrollSpy
2037
+
2038
+
2039
+ // SCROLLSPY NO CONFLICT
2040
+ // =====================
2041
+
2042
+ $.fn.scrollspy.noConflict = function () {
2043
+ $.fn.scrollspy = old
2044
+ return this
2045
+ }
2046
+
2047
+
2048
+ // SCROLLSPY DATA-API
2049
+ // ==================
2050
+
2051
+ $(window).on('load.bs.scrollspy.data-api', function () {
2052
+ $('[data-spy="scroll"]').each(function () {
2053
+ var $spy = $(this)
2054
+ Plugin.call($spy, $spy.data())
2055
+ })
2056
+ })
2057
+
2058
+ }(jQuery);
2059
+
2060
+ /* ========================================================================
2061
+ * Bootstrap: tab.js v3.3.7
2062
+ * http://getbootstrap.com/javascript/#tabs
2063
+ * ========================================================================
2064
+ * Copyright 2011-2016 Twitter, Inc.
2065
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2066
+ * ======================================================================== */
2067
+
2068
+
2069
+ +function ($) {
2070
+ 'use strict';
2071
+
2072
+ // TAB CLASS DEFINITION
2073
+ // ====================
2074
+
2075
+ var Tab = function (element) {
2076
+ // jscs:disable requireDollarBeforejQueryAssignment
2077
+ this.element = $(element)
2078
+ // jscs:enable requireDollarBeforejQueryAssignment
2079
+ }
2080
+
2081
+ Tab.VERSION = '3.3.7'
2082
+
2083
+ Tab.TRANSITION_DURATION = 150
2084
+
2085
+ Tab.prototype.show = function () {
2086
+ var $this = this.element
2087
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
2088
+ var selector = $this.data('target')
2089
+
2090
+ if (!selector) {
2091
+ selector = $this.attr('href')
2092
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
2093
+ }
2094
+
2095
+ if ($this.parent('li').hasClass('active')) return
2096
+
2097
+ var $previous = $ul.find('.active:last a')
2098
+ var hideEvent = $.Event('hide.bs.tab', {
2099
+ relatedTarget: $this[0]
2100
+ })
2101
+ var showEvent = $.Event('show.bs.tab', {
2102
+ relatedTarget: $previous[0]
2103
+ })
2104
+
2105
+ $previous.trigger(hideEvent)
2106
+ $this.trigger(showEvent)
2107
+
2108
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
2109
+
2110
+ var $target = $(selector)
2111
+
2112
+ this.activate($this.closest('li'), $ul)
2113
+ this.activate($target, $target.parent(), function () {
2114
+ $previous.trigger({
2115
+ type: 'hidden.bs.tab',
2116
+ relatedTarget: $this[0]
2117
+ })
2118
+ $this.trigger({
2119
+ type: 'shown.bs.tab',
2120
+ relatedTarget: $previous[0]
2121
+ })
2122
+ })
2123
+ }
2124
+
2125
+ Tab.prototype.activate = function (element, container, callback) {
2126
+ var $active = container.find('> .active')
2127
+ var transition = callback
2128
+ && $.support.transition
2129
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
2130
+
2131
+ function next() {
2132
+ $active
2133
+ .removeClass('active')
2134
+ .find('> .dropdown-menu > .active')
2135
+ .removeClass('active')
2136
+ .end()
2137
+ .find('[data-toggle="tab"]')
2138
+ .attr('aria-expanded', false)
2139
+
2140
+ element
2141
+ .addClass('active')
2142
+ .find('[data-toggle="tab"]')
2143
+ .attr('aria-expanded', true)
2144
+
2145
+ if (transition) {
2146
+ element[0].offsetWidth // reflow for transition
2147
+ element.addClass('in')
2148
+ } else {
2149
+ element.removeClass('fade')
2150
+ }
2151
+
2152
+ if (element.parent('.dropdown-menu').length) {
2153
+ element
2154
+ .closest('li.dropdown')
2155
+ .addClass('active')
2156
+ .end()
2157
+ .find('[data-toggle="tab"]')
2158
+ .attr('aria-expanded', true)
2159
+ }
2160
+
2161
+ callback && callback()
2162
+ }
2163
+
2164
+ $active.length && transition ?
2165
+ $active
2166
+ .one('bsTransitionEnd', next)
2167
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
2168
+ next()
2169
+
2170
+ $active.removeClass('in')
2171
+ }
2172
+
2173
+
2174
+ // TAB PLUGIN DEFINITION
2175
+ // =====================
2176
+
2177
+ function Plugin(option) {
2178
+ return this.each(function () {
2179
+ var $this = $(this)
2180
+ var data = $this.data('bs.tab')
2181
+
2182
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
2183
+ if (typeof option == 'string') data[option]()
2184
+ })
2185
+ }
2186
+
2187
+ var old = $.fn.tab
2188
+
2189
+ $.fn.tab = Plugin
2190
+ $.fn.tab.Constructor = Tab
2191
+
2192
+
2193
+ // TAB NO CONFLICT
2194
+ // ===============
2195
+
2196
+ $.fn.tab.noConflict = function () {
2197
+ $.fn.tab = old
2198
+ return this
2199
+ }
2200
+
2201
+
2202
+ // TAB DATA-API
2203
+ // ============
2204
+
2205
+ var clickHandler = function (e) {
2206
+ e.preventDefault()
2207
+ Plugin.call($(this), 'show')
2208
+ }
2209
+
2210
+ $(document)
2211
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
2212
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
2213
+
2214
+ }(jQuery);
2215
+
2216
+ /* ========================================================================
2217
+ * Bootstrap: affix.js v3.3.7
2218
+ * http://getbootstrap.com/javascript/#affix
2219
+ * ========================================================================
2220
+ * Copyright 2011-2016 Twitter, Inc.
2221
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2222
+ * ======================================================================== */
2223
+
2224
+
2225
+ +function ($) {
2226
+ 'use strict';
2227
+
2228
+ // AFFIX CLASS DEFINITION
2229
+ // ======================
2230
+
2231
+ var Affix = function (element, options) {
2232
+ this.options = $.extend({}, Affix.DEFAULTS, options)
2233
+
2234
+ this.$target = $(this.options.target)
2235
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
2236
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
2237
+
2238
+ this.$element = $(element)
2239
+ this.affixed = null
2240
+ this.unpin = null
2241
+ this.pinnedOffset = null
2242
+
2243
+ this.checkPosition()
2244
+ }
2245
+
2246
+ Affix.VERSION = '3.3.7'
2247
+
2248
+ Affix.RESET = 'affix affix-top affix-bottom'
2249
+
2250
+ Affix.DEFAULTS = {
2251
+ offset: 0,
2252
+ target: window
2253
+ }
2254
+
2255
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
2256
+ var scrollTop = this.$target.scrollTop()
2257
+ var position = this.$element.offset()
2258
+ var targetHeight = this.$target.height()
2259
+
2260
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
2261
+
2262
+ if (this.affixed == 'bottom') {
2263
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
2264
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
2265
+ }
2266
+
2267
+ var initializing = this.affixed == null
2268
+ var colliderTop = initializing ? scrollTop : position.top
2269
+ var colliderHeight = initializing ? targetHeight : height
2270
+
2271
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
2272
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
2273
+
2274
+ return false
2275
+ }
2276
+
2277
+ Affix.prototype.getPinnedOffset = function () {
2278
+ if (this.pinnedOffset) return this.pinnedOffset
2279
+ this.$element.removeClass(Affix.RESET).addClass('affix')
2280
+ var scrollTop = this.$target.scrollTop()
2281
+ var position = this.$element.offset()
2282
+ return (this.pinnedOffset = position.top - scrollTop)
2283
+ }
2284
+
2285
+ Affix.prototype.checkPositionWithEventLoop = function () {
2286
+ setTimeout($.proxy(this.checkPosition, this), 1)
2287
+ }
2288
+
2289
+ Affix.prototype.checkPosition = function () {
2290
+ if (!this.$element.is(':visible')) return
2291
+
2292
+ var height = this.$element.height()
2293
+ var offset = this.options.offset
2294
+ var offsetTop = offset.top
2295
+ var offsetBottom = offset.bottom
2296
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
2297
+
2298
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
2299
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
2300
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
2301
+
2302
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
2303
+
2304
+ if (this.affixed != affix) {
2305
+ if (this.unpin != null) this.$element.css('top', '')
2306
+
2307
+ var affixType = 'affix' + (affix ? '-' + affix : '')
2308
+ var e = $.Event(affixType + '.bs.affix')
2309
+
2310
+ this.$element.trigger(e)
2311
+
2312
+ if (e.isDefaultPrevented()) return
2313
+
2314
+ this.affixed = affix
2315
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
2316
+
2317
+ this.$element
2318
+ .removeClass(Affix.RESET)
2319
+ .addClass(affixType)
2320
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
2321
+ }
2322
+
2323
+ if (affix == 'bottom') {
2324
+ this.$element.offset({
2325
+ top: scrollHeight - height - offsetBottom
2326
+ })
2327
+ }
2328
+ }
2329
+
2330
+
2331
+ // AFFIX PLUGIN DEFINITION
2332
+ // =======================
2333
+
2334
+ function Plugin(option) {
2335
+ return this.each(function () {
2336
+ var $this = $(this)
2337
+ var data = $this.data('bs.affix')
2338
+ var options = typeof option == 'object' && option
2339
+
2340
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
2341
+ if (typeof option == 'string') data[option]()
2342
+ })
2343
+ }
2344
+
2345
+ var old = $.fn.affix
2346
+
2347
+ $.fn.affix = Plugin
2348
+ $.fn.affix.Constructor = Affix
2349
+
2350
+
2351
+ // AFFIX NO CONFLICT
2352
+ // =================
2353
+
2354
+ $.fn.affix.noConflict = function () {
2355
+ $.fn.affix = old
2356
+ return this
2357
+ }
2358
+
2359
+
2360
+ // AFFIX DATA-API
2361
+ // ==============
2362
+
2363
+ $(window).on('load', function () {
2364
+ $('[data-spy="affix"]').each(function () {
2365
+ var $spy = $(this)
2366
+ var data = $spy.data()
2367
+
2368
+ data.offset = data.offset || {}
2369
+
2370
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
2371
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
2372
+
2373
+ Plugin.call($spy, data)
2374
+ })
2375
+ })
2376
+
2377
+ }(jQuery);