telephone-clients 3.0.103-58 → 3.0.103-59

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 (1032) 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 +1 -1
  12. package/release.bat +5 -5
  13. package/src/AndroidApp.vue +33 -33
  14. package/src/App.vue +54 -54
  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/TelePhoneUpload.vue +279 -279
  121. package/src/components/Util.js +600 -600
  122. package/src/components/android/AddMyTask.vue +353 -353
  123. package/src/components/android/AppHeader.vue +69 -69
  124. package/src/components/android/CameraImg.vue +111 -111
  125. package/src/components/android/CompletedRepair.vue +264 -264
  126. package/src/components/android/EmployeeInfo.vue +59 -59
  127. package/src/components/android/EmployeePage.vue +71 -71
  128. package/src/components/android/Lbt.vue +103 -103
  129. package/src/components/android/LoginApp.vue +374 -374
  130. package/src/components/android/NavBottom.vue +104 -104
  131. package/src/components/changemeter/ChangeMeterAll.vue +189 -189
  132. package/src/components/changemeter/ChangeMeterDetail.vue +300 -300
  133. package/src/components/changemeter/ChangeMeterMain.vue +37 -37
  134. package/src/components/eachart/BarBrokenline.vue +206 -206
  135. package/src/components/eachart/BarChart.vue +165 -165
  136. package/src/components/eachart/PieChart.vue +182 -182
  137. package/src/components/eachart/datesumchart.vue +165 -165
  138. package/src/components/eachart/statework.vue +226 -226
  139. package/src/components/eachart/workorderchart.vue +183 -183
  140. package/src/components/guoxin/Console.vue +356 -356
  141. package/src/components/guoxin/RecordInfoRight.vue +75 -75
  142. package/src/components/guoxin/VisitInfo.vue +281 -281
  143. package/src/components/guoxin/call.state.api.js +215 -215
  144. package/src/components/guoxin/reconnecting-websocket.min.js +1 -1
  145. package/src/components/guoxin/telephone.js +15 -15
  146. package/src/components/map/AMapTrailShowWx.vue +178 -178
  147. package/src/components/map/CallMap.vue +403 -403
  148. package/src/components/map/CriteriaData.vue +81 -81
  149. package/src/components/map/OlMap.vue +831 -831
  150. package/src/components/map/OrderService.vue +249 -249
  151. package/src/components/map/PipeMap.vue +154 -154
  152. package/src/components/map/dragbox.js +234 -234
  153. package/src/components/pay/createQRcode.vue +192 -192
  154. package/src/components/pay/telReadCard.vue +59 -59
  155. package/src/components/pc/AllUser.vue +615 -615
  156. package/src/components/pc/AllUserNew.vue +638 -638
  157. package/src/components/pc/ArrearsList.vue +397 -397
  158. package/src/components/pc/AttendantCallStat.vue +213 -213
  159. package/src/components/pc/AttendantWorkHistory.vue +98 -98
  160. package/src/components/pc/Auxfunc.vue +76 -76
  161. package/src/components/pc/BottleGas/BottleGasManage.vue +304 -304
  162. package/src/components/pc/BottleGasWork.vue +214 -214
  163. package/src/components/pc/BuildReport.vue +60 -60
  164. package/src/components/pc/CallerInfoList.vue +98 -98
  165. package/src/components/pc/ChatMsg.vue +338 -338
  166. package/src/components/pc/ComplainWork.vue +326 -326
  167. package/src/components/pc/Console.vue +617 -617
  168. package/src/components/pc/DelayReply.vue +60 -60
  169. package/src/components/pc/DistributeWork.vue +177 -177
  170. package/src/components/pc/ElseWork.vue +44 -44
  171. package/src/components/pc/ElseWorkList.vue +267 -267
  172. package/src/components/pc/Emoji.vue +64 -64
  173. package/src/components/pc/Evaluate.vue +145 -145
  174. package/src/components/pc/EvaluateList.vue +195 -195
  175. package/src/components/pc/EvaluateModel.vue +53 -53
  176. package/src/components/pc/FailureEdit.vue +192 -192
  177. package/src/components/pc/FailureShow.vue +61 -61
  178. package/src/components/pc/FireQuery.vue +165 -165
  179. package/src/components/pc/FootPrintList.vue +40 -40
  180. package/src/components/pc/GasWork.vue +764 -764
  181. package/src/components/pc/GroupResend.vue +111 -111
  182. package/src/components/pc/InstallWork.vue +734 -734
  183. package/src/components/pc/ManageMaterial.vue +282 -282
  184. package/src/components/pc/MessageList.vue +635 -635
  185. package/src/components/pc/MessageManage.vue +136 -136
  186. package/src/components/pc/MessageManageList.vue +127 -127
  187. package/src/components/pc/MessageManageNew.vue +121 -121
  188. package/src/components/pc/MonitorGroup.vue +82 -82
  189. package/src/components/pc/NewRepairPaper.vue +370 -370
  190. package/src/components/pc/OrderService.vue +182 -182
  191. package/src/components/pc/ProgressBar.vue +50 -50
  192. package/src/components/pc/QueryJoinlv.vue +136 -136
  193. package/src/components/pc/QueryTeleHistory.vue +95 -95
  194. package/src/components/pc/QueryTextHistory.vue +98 -98
  195. package/src/components/pc/QueryVisitHistory.vue +217 -217
  196. package/src/components/pc/ReVisitList.vue +208 -208
  197. package/src/components/pc/RecordInfoRight.vue +84 -84
  198. package/src/components/pc/RecordList.vue +53 -53
  199. package/src/components/pc/RecordList2.vue +155 -155
  200. package/src/components/pc/RecordListLeft.vue +188 -188
  201. package/src/components/pc/RecordReport.vue +181 -181
  202. package/src/components/pc/ReminderOrder.vue +52 -52
  203. package/src/components/pc/RepairHistoryList.vue +152 -152
  204. package/src/components/pc/RepairsWork.vue +839 -839
  205. package/src/components/pc/ReturnRecord.vue +126 -126
  206. package/src/components/pc/RoleSelector.vue +139 -139
  207. package/src/components/pc/SeatInfo.vue +207 -207
  208. package/src/components/pc/Seekwork.vue +310 -310
  209. package/src/components/pc/ServerAppendixInfo.vue +52 -52
  210. package/src/components/pc/ServiceBack.vue +49 -49
  211. package/src/components/pc/ServiceDetails.vue +53 -53
  212. package/src/components/pc/ServiceDetailsNew.vue +53 -53
  213. package/src/components/pc/SiteBack.vue +84 -84
  214. package/src/components/pc/SiteCase.vue +87 -87
  215. package/src/components/pc/SiteSend.vue +281 -281
  216. package/src/components/pc/StandSend.vue +600 -600
  217. package/src/components/pc/StandServer.vue +25 -25
  218. package/src/components/pc/StandWork.vue +91 -91
  219. package/src/components/pc/StandWorkNew.vue +91 -91
  220. package/src/components/pc/TelFindUser.vue +304 -304
  221. package/src/components/pc/TelListener.vue +174 -174
  222. package/src/components/pc/TelLossList.vue +247 -247
  223. package/src/components/pc/TelMaterSelect.vue +225 -225
  224. package/src/components/pc/TelUserMaterSend.vue +171 -171
  225. package/src/components/pc/TeleInfo.vue +140 -140
  226. package/src/components/pc/TeleList.vue +99 -99
  227. package/src/components/pc/TeleOperKl.vue +91 -91
  228. package/src/components/pc/TemplateMessage.vue +92 -92
  229. package/src/components/pc/TextControl.vue +113 -113
  230. package/src/components/pc/TextInfoRight.vue +84 -84
  231. package/src/components/pc/TextList.vue +45 -45
  232. package/src/components/pc/TextListLeft.vue +156 -156
  233. package/src/components/pc/TextServer.vue +154 -154
  234. package/src/components/pc/TextService.vue +849 -849
  235. package/src/components/pc/UserDefinedMessage.vue +90 -90
  236. package/src/components/pc/UserDefinedMessageNew.vue +121 -121
  237. package/src/components/pc/UserOperate.vue +48 -48
  238. package/src/components/pc/VideoPlayer.vue +73 -73
  239. package/src/components/pc/VisitInfo.vue +284 -284
  240. package/src/components/pc/VoiceServer.vue +208 -208
  241. package/src/components/pc/WorkCenter.vue +105 -105
  242. package/src/components/pc/WorkCenterContent.vue +100 -100
  243. package/src/components/pc/WorkCenterList.vue +292 -292
  244. package/src/components/pc/WorkFind.vue +128 -128
  245. package/src/components/pc/WorkHistory.vue +560 -560
  246. package/src/components/pc/WorkList.vue +743 -743
  247. package/src/components/pc/WorkListAll.vue +630 -630
  248. package/src/components/pc/WorkListAllNew.vue +700 -700
  249. package/src/components/pc/WorkListNew.vue +706 -706
  250. package/src/components/pc/WorkMsg.vue +105 -105
  251. package/src/components/pc/analysis/AnalysisMain.vue +423 -423
  252. package/src/components/pc/analysis/StateStatistics.vue +292 -292
  253. package/src/components/pc/analysis/TelephoneAnaly.vue +104 -104
  254. package/src/components/pc/analysis/TelephoneType.vue +270 -270
  255. package/src/components/pc/config/DefaultPrint.js +7 -7
  256. package/src/components/pc/dataManager/KlCatalog.vue +293 -293
  257. package/src/components/pc/dataManager/KlContent.vue +193 -193
  258. package/src/components/pc/dataManager/Knowledge.vue +21 -21
  259. package/src/components/pc/dataManager/Materials.vue +553 -553
  260. package/src/components/pc/dataManager/OutletsList.vue +85 -85
  261. package/src/components/pc/dataManager/SafeEditor.vue +91 -91
  262. package/src/components/pc/dataManager/SafeList.vue +77 -77
  263. package/src/components/pc/dataManager/ShowMaterials.vue +159 -159
  264. package/src/components/pc/dataManager/StopGasManager.vue +320 -320
  265. package/src/components/pc/imgmove.vue +192 -192
  266. package/src/components/pc/olddata/OldWorkList.vue +193 -193
  267. package/src/components/pc/serviceDeleteOrder.vue +53 -53
  268. package/src/components/pc/wx/BookingService.vue +407 -407
  269. package/src/components/pc/wx/CustomMenu.vue +154 -154
  270. package/src/components/pc/wx/MenuView.vue +249 -249
  271. package/src/components/pc/wx/MobileView.vue +273 -273
  272. package/src/components/pc/wx/NewsMaterial.vue +144 -144
  273. package/src/components/pc/wx/SelectMaterial.vue +100 -100
  274. package/src/components/pc/wx/TelOutletsManager.vue +186 -186
  275. package/src/components/pos/Init.vue +213 -213
  276. package/src/components/pos/Main.vue +123 -123
  277. package/src/components/pos/Plugin/AndroidPlugin.js +148 -148
  278. package/src/components/pos/Plugin/PosUtil.js +315 -315
  279. package/src/components/pos/aotePos.js +55 -55
  280. package/src/components/pos/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  281. package/src/components/pos/bootstrap/less/.csscomb.json +304 -304
  282. package/src/components/pos/bootstrap/less/.csslintrc +19 -19
  283. package/src/components/pos/bootstrap/less/alerts.less +73 -73
  284. package/src/components/pos/bootstrap/less/badges.less +66 -66
  285. package/src/components/pos/bootstrap/less/bootstrap.less +56 -56
  286. package/src/components/pos/bootstrap/less/breadcrumbs.less +26 -26
  287. package/src/components/pos/bootstrap/less/button-groups.less +247 -247
  288. package/src/components/pos/bootstrap/less/buttons.less +172 -172
  289. package/src/components/pos/bootstrap/less/carousel.less +269 -269
  290. package/src/components/pos/bootstrap/less/close.less +34 -34
  291. package/src/components/pos/bootstrap/less/code.less +69 -69
  292. package/src/components/pos/bootstrap/less/component-animations.less +33 -33
  293. package/src/components/pos/bootstrap/less/dropdowns.less +216 -216
  294. package/src/components/pos/bootstrap/less/forms.less +626 -626
  295. package/src/components/pos/bootstrap/less/glyphicons.less +305 -305
  296. package/src/components/pos/bootstrap/less/grid.less +84 -84
  297. package/src/components/pos/bootstrap/less/input-groups.less +167 -167
  298. package/src/components/pos/bootstrap/less/jumbotron.less +52 -52
  299. package/src/components/pos/bootstrap/less/labels.less +64 -64
  300. package/src/components/pos/bootstrap/less/list-group.less +141 -141
  301. package/src/components/pos/bootstrap/less/media.less +66 -66
  302. package/src/components/pos/bootstrap/less/mixins/alerts.less +14 -14
  303. package/src/components/pos/bootstrap/less/mixins/background-variant.less +9 -9
  304. package/src/components/pos/bootstrap/less/mixins/border-radius.less +18 -18
  305. package/src/components/pos/bootstrap/less/mixins/buttons.less +69 -69
  306. package/src/components/pos/bootstrap/less/mixins/center-block.less +7 -7
  307. package/src/components/pos/bootstrap/less/mixins/clearfix.less +22 -22
  308. package/src/components/pos/bootstrap/less/mixins/forms.less +90 -90
  309. package/src/components/pos/bootstrap/less/mixins/gradients.less +59 -59
  310. package/src/components/pos/bootstrap/less/mixins/grid-framework.less +92 -92
  311. package/src/components/pos/bootstrap/less/mixins/grid.less +122 -122
  312. package/src/components/pos/bootstrap/less/mixins/hide-text.less +21 -21
  313. package/src/components/pos/bootstrap/less/mixins/image.less +33 -33
  314. package/src/components/pos/bootstrap/less/mixins/labels.less +12 -12
  315. package/src/components/pos/bootstrap/less/mixins/list-group.less +30 -30
  316. package/src/components/pos/bootstrap/less/mixins/nav-divider.less +10 -10
  317. package/src/components/pos/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  318. package/src/components/pos/bootstrap/less/mixins/opacity.less +8 -8
  319. package/src/components/pos/bootstrap/less/mixins/pagination.less +24 -24
  320. package/src/components/pos/bootstrap/less/mixins/panels.less +24 -24
  321. package/src/components/pos/bootstrap/less/mixins/progress-bar.less +10 -10
  322. package/src/components/pos/bootstrap/less/mixins/reset-filter.less +8 -8
  323. package/src/components/pos/bootstrap/less/mixins/reset-text.less +18 -18
  324. package/src/components/pos/bootstrap/less/mixins/resize.less +6 -6
  325. package/src/components/pos/bootstrap/less/mixins/responsive-visibility.less +15 -15
  326. package/src/components/pos/bootstrap/less/mixins/size.less +10 -10
  327. package/src/components/pos/bootstrap/less/mixins/tab-focus.less +9 -9
  328. package/src/components/pos/bootstrap/less/mixins/table-row.less +44 -44
  329. package/src/components/pos/bootstrap/less/mixins/text-emphasis.less +9 -9
  330. package/src/components/pos/bootstrap/less/mixins/text-overflow.less +8 -8
  331. package/src/components/pos/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  332. package/src/components/pos/bootstrap/less/mixins.less +40 -40
  333. package/src/components/pos/bootstrap/less/modals.less +151 -151
  334. package/src/components/pos/bootstrap/less/navbar.less +660 -660
  335. package/src/components/pos/bootstrap/less/navs.less +286 -286
  336. package/src/components/pos/bootstrap/less/normalize.less +424 -424
  337. package/src/components/pos/bootstrap/less/pager.less +76 -76
  338. package/src/components/pos/bootstrap/less/pagination.less +89 -89
  339. package/src/components/pos/bootstrap/less/panels.less +274 -274
  340. package/src/components/pos/bootstrap/less/popovers.less +131 -131
  341. package/src/components/pos/bootstrap/less/print.less +101 -101
  342. package/src/components/pos/bootstrap/less/progress-bars.less +87 -87
  343. package/src/components/pos/bootstrap/less/responsive-embed.less +35 -35
  344. package/src/components/pos/bootstrap/less/responsive-utilities.less +194 -194
  345. package/src/components/pos/bootstrap/less/scaffolding.less +161 -161
  346. package/src/components/pos/bootstrap/less/tables.less +262 -262
  347. package/src/components/pos/bootstrap/less/theme.less +291 -291
  348. package/src/components/pos/bootstrap/less/thumbnails.less +36 -36
  349. package/src/components/pos/bootstrap/less/tooltip.less +102 -102
  350. package/src/components/pos/bootstrap/less/type.less +303 -303
  351. package/src/components/pos/bootstrap/less/utilities.less +55 -55
  352. package/src/components/pos/bootstrap/less/variables.less +895 -895
  353. package/src/components/pos/bootstrap/less/wells.less +29 -29
  354. package/src/components/pos/charge/card/CardInfo.vue +43 -43
  355. package/src/components/pos/charge/card/CheckUser.Vue +116 -116
  356. package/src/components/pos/charge/card/ReadCardInter.vue +177 -177
  357. package/src/components/pos/charge/card/ReadCardToBuy.vue +174 -174
  358. package/src/components/pos/charge/card/SelectUser.Vue +104 -104
  359. package/src/components/pos/charge/machine/MachineSearch.Vue +124 -124
  360. package/src/components/pos/charge/sellgas/AdvertPop.vue +70 -70
  361. package/src/components/pos/charge/sellgas/CardSellGas.vue +361 -361
  362. package/src/components/pos/charge/sellgas/ChoosePayWay.vue +275 -275
  363. package/src/components/pos/charge/sellgas/GudingPrice.vue +38 -38
  364. package/src/components/pos/charge/sellgas/JietiPrice.vue +54 -54
  365. package/src/components/pos/charge/sellgas/ScanQrcode.vue +171 -171
  366. package/src/components/pos/charge/sellgas/WriteCard.vue +366 -366
  367. package/src/components/pos/charge/userinfo/ChangeMeterList.vue +43 -43
  368. package/src/components/pos/charge/userinfo/FillGasList.vue +43 -43
  369. package/src/components/pos/charge/userinfo/HistorySellList.vue +90 -90
  370. package/src/components/pos/charge/userinfo/OtherList.vue +43 -43
  371. package/src/components/pos/charge/userinfo/SellList.vue +43 -43
  372. package/src/components/pos/charge/userinfo/TransList.vue +43 -43
  373. package/src/components/pos/charge/userinfo/UserInfo.vue +176 -176
  374. package/src/components/pos/charge/userinfo/WritecardInfo.vue +44 -44
  375. package/src/components/pos/css/bootstrap.less +6757 -6757
  376. package/src/components/pos/css/style.less +158 -158
  377. package/src/components/pos/css/style.less.bak +84 -84
  378. package/src/components/pos/fonts/fontawesome-webfont.svg +2671 -2671
  379. package/src/components/pos/fonts/glyphicons-halflings-regular.svg +287 -287
  380. package/src/components/pos/js/bootstrap.js +2377 -2377
  381. package/src/components/pos/js/bootstrap.min.js +6 -6
  382. package/src/components/pos/js/jquery.chromatable.js +150 -150
  383. package/src/components/pos/js/jquery.min.js +5 -5
  384. package/src/components/pos/js/npm.js +12 -12
  385. package/src/components/pos/ztprint.js +26 -26
  386. package/src/components/qinhua/qhonlineChangeMeter.vue +440 -440
  387. package/src/components/qinhua/qhonlineoperation.vue +227 -227
  388. package/src/components/reli/ChoosePayWay.vue +179 -179
  389. package/src/components/reli/HistorySellLists.vue +128 -128
  390. package/src/components/reli/MachineMain.vue +470 -470
  391. package/src/components/reli/UserInfo.vue +211 -211
  392. package/src/components/reli/searchSells.vue +446 -446
  393. package/src/components/repaircount/RepairDetail.vue +74 -74
  394. package/src/components/repaircount/RepairPlan.vue +58 -58
  395. package/src/components/repaircount/SelectRepairPlan.vue +189 -189
  396. package/src/components/sale/CardMeterCenter.vue +625 -625
  397. package/src/components/sale/IOTMeterCenter.vue +443 -443
  398. package/src/components/sale/MachineMeterCenter.vue +591 -591
  399. package/src/components/sendsingle/CardChangeFill.vue +338 -338
  400. package/src/components/sendsingle/ChangeSendCard.vue +19 -19
  401. package/src/components/sendsingle/IotChangeFill.vue +471 -471
  402. package/src/components/sendsingle/MachineChangeFill.vue +143 -143
  403. package/src/components/sendsingle/PosMakeGas.vue +342 -342
  404. package/src/components/sendsingle/QueryTemporaryRepair.vue +226 -226
  405. package/src/components/sendsingle/TelLotChangeFill.vue +626 -626
  406. package/src/components/sendsingle/TemporarySingle.vue +480 -480
  407. package/src/components/sendsingle/ceshi.vue +51 -51
  408. package/src/components/sendsingle/onlineBuyGas.vue +632 -632
  409. package/src/components/sendsingle/onlineBuyGasOld.vue +19 -19
  410. package/src/components/sendsingle/onlineChangeMeter.vue +419 -419
  411. package/src/components/sendsingle/onlinemakecard.vue +413 -413
  412. package/src/components/sendsingle/onlineoperation.vue +401 -401
  413. package/src/components/sendsingle/onlinequeryuser.vue +468 -468
  414. package/src/components/sendsingle/posMaintainer.vue +277 -277
  415. package/src/components/shaoguan/DelayReply.vue +60 -60
  416. package/src/components/shaoguan/FailureEdit.vue +172 -172
  417. package/src/components/shaoguan/RepairDetailsChange.vue +399 -399
  418. package/src/components/shaoguan/RepairOrderChange.vue +673 -673
  419. package/src/components/shaoguan/RepairUserInfoChange.vue +532 -532
  420. package/src/components/shaoguan/WorkHistory.vue +346 -346
  421. package/src/components/shaoguan/WorkListAll.vue +521 -521
  422. package/src/components/shaoguan/config/DefaultPrint.js +7 -7
  423. package/src/components/telcount/TelByAttendant.vue +118 -118
  424. package/src/components/telcount/TelByLouQi.vue +113 -113
  425. package/src/components/telcount/TelByLouQiMingxi.vue +117 -117
  426. package/src/components/telcount/TelByOrderMan.vue +105 -105
  427. package/src/components/telcount/TelByWeiXiu.vue +199 -199
  428. package/src/components/telcount/TelByZhiHuan.vue +109 -109
  429. package/src/components/telreport/HotlineMonthly.vue +121 -121
  430. package/src/components/telreport/TableFaultReport.vue +96 -96
  431. package/src/components/telreport/TelAgentVoiceReport.vue +275 -275
  432. package/src/components/telreport/TelMan.vue +127 -127
  433. package/src/components/telreport/TelReport.vue +122 -122
  434. package/src/components/telreport/TelephoneManReport.vue +121 -121
  435. package/src/components/telreport/Traffic.vue +94 -94
  436. package/src/components/telreport/Trafficassess.vue +121 -121
  437. package/src/components/temp/BusinessMessage.vue +60 -60
  438. package/src/components/temp/BusinesscheckInfo.vue +82 -82
  439. package/src/components/temp/CallRecords.vue +86 -86
  440. package/src/components/temp/ChangemeterInfo.vue +87 -87
  441. package/src/components/temp/DeviceInfo.vue +82 -82
  442. package/src/components/temp/DisableInforMation.vue +82 -82
  443. package/src/components/temp/HandplanInfo.vue +78 -78
  444. package/src/components/temp/InfoTable.vue +134 -134
  445. package/src/components/temp/InstructInfo.vue +86 -86
  446. package/src/components/temp/Main.vue +375 -375
  447. package/src/components/temp/MetereadInfo.vue +83 -83
  448. package/src/components/temp/MetterInfo.vue +92 -92
  449. package/src/components/temp/OldRepairList.vue +100 -100
  450. package/src/components/temp/ParamManager/ParamPage.vue +285 -285
  451. package/src/components/temp/ParamManager/SinglePage.vue +161 -161
  452. package/src/components/temp/RepairList.vue +125 -125
  453. package/src/components/temp/SecurityMessage.vue +64 -64
  454. package/src/components/temp/SecuritycheckInfo.vue +73 -73
  455. package/src/components/temp/SellInfo.vue +153 -153
  456. package/src/components/temp/TelList.vue +99 -99
  457. package/src/components/temp/rightview/CardList.vue +287 -287
  458. package/src/components/temp/rightview/RecordCancel.vue +103 -103
  459. package/src/components/temp/rightview/carddetail/AddUserDetail.vue +65 -65
  460. package/src/components/temp/rightview/carddetail/BankDKDetail.vue +75 -75
  461. package/src/components/temp/rightview/carddetail/BankPay.vue +75 -75
  462. package/src/components/temp/rightview/carddetail/CancellationDetail.vue +58 -58
  463. package/src/components/temp/rightview/carddetail/CardMeterCenterDetail.vue +58 -58
  464. package/src/components/temp/rightview/carddetail/CardOverUserDetail.vue +62 -62
  465. package/src/components/temp/rightview/carddetail/ChangeMeterDetail.vue +70 -70
  466. package/src/components/temp/rightview/carddetail/OtherChargeDetail.vue +56 -56
  467. package/src/components/temp/rightview/carddetail/RefundDetail.vue +63 -63
  468. package/src/components/temp/rightview/carddetail/ReissueBill.vue +165 -165
  469. package/src/components/temp/rightview/carddetail/SortingQuery.vue +295 -295
  470. package/src/components/temp/rightview/carddetail/UserChangeDetail.vue +77 -77
  471. package/src/components/temp/rightview/carddetail/WeChatPay.vue +75 -75
  472. package/src/components/temp/server/ChangeDeclare.vue +45 -45
  473. package/src/components/temp/server/LoadData.vue +60 -60
  474. package/src/components/temp/server/Login.vue +401 -401
  475. package/src/components/temp/server/ModifyPw.vue +143 -143
  476. package/src/components/tongcheng/DistributeWork.vue +129 -129
  477. package/src/components/tongcheng/InfoTable.vue +55 -55
  478. package/src/components/tongcheng/MetterInfo.vue +90 -90
  479. package/src/components/tongcheng/RepairsWork.vue +788 -788
  480. package/src/components/tongcheng/SellInfo.vue +152 -152
  481. package/src/components/tongcheng/StandServer.vue +24 -24
  482. package/src/components/tongcheng/UserOperate.vue +43 -43
  483. package/src/components/tongcheng/VoiceServer.vue +136 -136
  484. package/src/components/tongcheng/WorkListAll.vue +535 -535
  485. package/src/components/weinan/ComplainMsg.vue +141 -141
  486. package/src/components/weinan/ComplainWork.vue +205 -205
  487. package/src/components/weinan/Console.vue +418 -418
  488. package/src/components/weinan/DistributeWork.vue +138 -138
  489. package/src/components/weinan/ExportExcel.vue +204 -204
  490. package/src/components/weinan/FailureEdit.vue +182 -182
  491. package/src/components/weinan/InfoTable.vue +67 -67
  492. package/src/components/weinan/RecordList.vue +299 -299
  493. package/src/components/weinan/RepairFirstV.vue +547 -547
  494. package/src/components/weinan/RepairInfo.vue +163 -163
  495. package/src/components/weinan/RepairListTel.vue +96 -96
  496. package/src/components/weinan/RepairOrderV.vue +1447 -1447
  497. package/src/components/weinan/RepairUserInfo.vue +533 -533
  498. package/src/components/weinan/RepairsWork.vue +806 -806
  499. package/src/components/weinan/Seekwork.vue +178 -178
  500. package/src/components/weinan/SiteChange.vue +228 -228
  501. package/src/components/weinan/SiteSend.vue +228 -228
  502. package/src/components/weinan/SiteSendWeixiu.vue +268 -268
  503. package/src/components/weinan/StandWorkWeixiu.vue +91 -91
  504. package/src/components/weinan/TelByAttendant.vue +110 -110
  505. package/src/components/weinan/TelFindUser.vue +241 -241
  506. package/src/components/weinan/WorkList.vue +724 -724
  507. package/src/components/weinan/WorkListAll.vue +948 -948
  508. package/src/components/weinan/WorkListWeixiu.vue +608 -608
  509. package/src/components/workOrderApplication/OrderWorkDetail.vue +796 -796
  510. package/src/components/workOrderApplication/orderApplicationManage.vue +98 -98
  511. package/src/components/workOrderApplication/orderApply.vue +57 -57
  512. package/src/components/workOrderApplication/orderTable.vue +214 -214
  513. package/src/components/workOrderApplication/orderWork.vue +114 -114
  514. package/src/components/workorder/AfTabset.vue +125 -125
  515. package/src/components/workorder/AndroidStopGasManager.vue +270 -270
  516. package/src/components/workorder/AppInstallationMaterial.vue +613 -613
  517. package/src/components/workorder/ChangeMeter.vue +546 -546
  518. package/src/components/workorder/ChangeMeterList.vue +236 -236
  519. package/src/components/workorder/ChangeMeterPage.vue +506 -506
  520. package/src/components/workorder/CompletedInstall.vue +214 -214
  521. package/src/components/workorder/CompletedRepair.vue +321 -321
  522. package/src/components/workorder/CookingUtensils.vue +134 -134
  523. package/src/components/workorder/DelayApply.vue +105 -105
  524. package/src/components/workorder/DeviceService.vue +133 -133
  525. package/src/components/workorder/DoorService.vue +355 -355
  526. package/src/components/workorder/FaultAll.vue +826 -826
  527. package/src/components/workorder/FirstGasCheck.vue +310 -310
  528. package/src/components/workorder/InputSelect.vue +110 -110
  529. package/src/components/workorder/InstallFirst.vue +517 -517
  530. package/src/components/workorder/InstallUpLoad.vue +111 -111
  531. package/src/components/workorder/MaterialSum.vue +238 -238
  532. package/src/components/workorder/MonitorMSend.vue +202 -202
  533. package/src/components/workorder/Othercharge.vue +477 -477
  534. package/src/components/workorder/Outlay.vue +236 -236
  535. package/src/components/workorder/PhoneGroupResend.vue +88 -88
  536. package/src/components/workorder/PhoneStandWork.vue +354 -354
  537. package/src/components/workorder/PhoneUpDetail.vue +1041 -1041
  538. package/src/components/workorder/PhoneUpUserinfo.vue +1041 -1041
  539. package/src/components/workorder/PhotoWrite.vue +116 -116
  540. package/src/components/workorder/Pipeline.vue +497 -497
  541. package/src/components/workorder/QueryTemporaryRepair.vue +220 -220
  542. package/src/components/workorder/ReadCardPage.vue +217 -217
  543. package/src/components/workorder/RepairDetails.vue +603 -603
  544. package/src/components/workorder/RepairDetails22.vue +128 -128
  545. package/src/components/workorder/RepairFirst.vue +170 -170
  546. package/src/components/workorder/RepairFirstOld.vue +410 -410
  547. package/src/components/workorder/RepairFirstV.vue +673 -673
  548. package/src/components/workorder/RepairFirstVnew.vue +542 -542
  549. package/src/components/workorder/RepairInfo.vue +166 -166
  550. package/src/components/workorder/RepairMatterInfo.vue +186 -186
  551. package/src/components/workorder/RepairOrder.vue +688 -688
  552. package/src/components/workorder/RepairOrderV.vue +1446 -1446
  553. package/src/components/workorder/RepairOrderVnew.vue +868 -868
  554. package/src/components/workorder/RepairSend.vue +264 -264
  555. package/src/components/workorder/RepairUserInfo.vue +532 -532
  556. package/src/components/workorder/Repairpage.vue +100 -100
  557. package/src/components/workorder/RepairsVisit.vue +319 -319
  558. package/src/components/workorder/SafeCheckService.vue +355 -355
  559. package/src/components/workorder/SubstitFirstV.vue +143 -143
  560. package/src/components/workorder/SubstitutionPage.vue +100 -100
  561. package/src/components/workorder/TelChangeMatter.vue +231 -231
  562. package/src/components/workorder/TemporarySingle.vue +480 -480
  563. package/src/components/workorder/TroubleRemoval.vue +419 -419
  564. package/src/components/workorder/UpLoad.vue +111 -111
  565. package/src/components/workorder/ZHihuanFirst.vue +546 -546
  566. package/src/components/workorder/ZhiCompletedRepair.vue +217 -217
  567. package/src/components/workorder/ZhiUpLoad.vue +136 -136
  568. package/src/expandcss.less +620 -620
  569. package/src/filiale/fugu/pc/ComplainWork.vue +206 -206
  570. package/src/filiale/fugu/pc/FailureEdit.vue +183 -183
  571. package/src/filiale/fugu/pc/RepairsWork.vue +793 -793
  572. package/src/filiale/fugu/pc/Seekwork.vue +182 -182
  573. package/src/filiale/fugu/telephone.js +16 -16
  574. package/src/filiale/furuike/android/CompletedRepair.vue +210 -210
  575. package/src/filiale/furuike/android/FaultAll.vue +861 -861
  576. package/src/filiale/furuike/android/Materials.vue +410 -410
  577. package/src/filiale/furuike/android/RepairFirstVnew.vue +580 -580
  578. package/src/filiale/furuike/android/RepairOrderVnew.vue +890 -890
  579. package/src/filiale/furuike/pc/Auxfunc.vue +109 -109
  580. package/src/filiale/furuike/pc/CallRcords.vue +109 -109
  581. package/src/filiale/furuike/pc/ChangemeterInfo.vue +87 -87
  582. package/src/filiale/furuike/pc/ComplainWork.vue +348 -348
  583. package/src/filiale/furuike/pc/DeviceInfo.vue +82 -82
  584. package/src/filiale/furuike/pc/DisableInforMation.vue +82 -82
  585. package/src/filiale/furuike/pc/FailureEdit.vue +198 -198
  586. package/src/filiale/furuike/pc/HandplanInfo.vue +78 -78
  587. package/src/filiale/furuike/pc/InfoTable.vue +134 -134
  588. package/src/filiale/furuike/pc/InstructInfo.vue +86 -86
  589. package/src/filiale/furuike/pc/LineReport.vue +215 -215
  590. package/src/filiale/furuike/pc/MaterialWorkOrder/MaterialWork.vue +400 -400
  591. package/src/filiale/furuike/pc/MaterialWorkOrder/MaterialWorkOrderManage.vue +63 -63
  592. package/src/filiale/furuike/pc/MaterialWorkOrder/WorkOrderMaterial.vue +381 -381
  593. package/src/filiale/furuike/pc/MetereadInfo.vue +82 -82
  594. package/src/filiale/furuike/pc/MetterInfo.vue +92 -92
  595. package/src/filiale/furuike/pc/NewRepairPaper.vue +415 -415
  596. package/src/filiale/furuike/pc/ProblemList.vue +170 -170
  597. package/src/filiale/furuike/pc/QueryVisitHistory.vue +183 -183
  598. package/src/filiale/furuike/pc/RecordListLeft.vue +259 -259
  599. package/src/filiale/furuike/pc/ReminderOrder.vue +50 -50
  600. package/src/filiale/furuike/pc/RepairList.vue +102 -102
  601. package/src/filiale/furuike/pc/RepairsWork.vue +918 -918
  602. package/src/filiale/furuike/pc/SecuritycheckInfo.vue +128 -128
  603. package/src/filiale/furuike/pc/Seekwork.vue +352 -352
  604. package/src/filiale/furuike/pc/SellInfo.vue +158 -158
  605. package/src/filiale/furuike/pc/TableReport.vue +160 -160
  606. package/src/filiale/furuike/pc/TelFindUser.vue +229 -229
  607. package/src/filiale/furuike/pc/TelLossList.vue +145 -145
  608. package/src/filiale/furuike/pc/TelePhoneUpload.vue +279 -279
  609. package/src/filiale/furuike/pc/TextServer.vue +168 -168
  610. package/src/filiale/furuike/pc/VoiceServer.vue +216 -216
  611. package/src/filiale/furuike/pc/WorkCenter.vue +104 -104
  612. package/src/filiale/furuike/pc/WorkHistory.vue +576 -576
  613. package/src/filiale/furuike/pc/WorkListAllNew.vue +855 -855
  614. package/src/filiale/furuike/telephone.js +115 -115
  615. package/src/filiale/furuike/telephoneAndroid.js +23 -23
  616. package/src/filiale/gehua/pc/Console.vue +676 -676
  617. package/src/filiale/gehua/pc/TelAgentVoiceReport.vue +285 -285
  618. package/src/filiale/gehua/pc/TelFindUser.vue +214 -214
  619. package/src/filiale/gehua/telephone.js +16 -16
  620. package/src/filiale/gehua/telephoneAndroid.js +9 -9
  621. package/src/filiale/gongyi/android/RepairDetails.vue +542 -542
  622. package/src/filiale/gongyi/android/RepairFirstV.vue +537 -537
  623. package/src/filiale/gongyi/android/RepairOrderV.vue +1415 -1415
  624. package/src/filiale/gongyi/pc/WorkListAll.vue +632 -632
  625. package/src/filiale/gongyi/telephone.js +13 -13
  626. package/src/filiale/gongyi/telephoneAndroid.js +15 -15
  627. package/src/filiale/guangxi/android/FaultAll.vue +896 -896
  628. package/src/filiale/guangxi/telephoneAndroid.js +13 -13
  629. package/src/filiale/hanzhong/PagedList.js +248 -248
  630. package/src/filiale/hanzhong/android/Outlay.vue +265 -265
  631. package/src/filiale/hanzhong/android/RepairInfo.vue +167 -167
  632. package/src/filiale/hanzhong/hzSelectUtil.js +84 -84
  633. package/src/filiale/hanzhong/md5.js +266 -266
  634. package/src/filiale/hanzhong/pc/AnalysisMain.vue +477 -477
  635. package/src/filiale/hanzhong/pc/Console.vue +884 -884
  636. package/src/filiale/hanzhong/pc/DistributeWork.vue +420 -420
  637. package/src/filiale/hanzhong/pc/FailureEdit.vue +195 -195
  638. package/src/filiale/hanzhong/pc/RecordInfoRight.vue +84 -84
  639. package/src/filiale/hanzhong/pc/RecordList.vue +53 -53
  640. package/src/filiale/hanzhong/pc/RecordListLeft.vue +196 -196
  641. package/src/filiale/hanzhong/pc/Seekwork.vue +318 -318
  642. package/src/filiale/hanzhong/pc/StateStatistics.vue +292 -292
  643. package/src/filiale/hanzhong/pc/TelFindUser.vue +224 -224
  644. package/src/filiale/hanzhong/pc/TelLossList.vue +137 -137
  645. package/src/filiale/hanzhong/pc/TelephoneAnaly.vue +104 -104
  646. package/src/filiale/hanzhong/pc/TelephoneType.vue +269 -269
  647. package/src/filiale/hanzhong/pc/TextServer.vue +157 -157
  648. package/src/filiale/hanzhong/pc/VoiceServer.vue +208 -208
  649. package/src/filiale/hanzhong/pc/message/AllUser.vue +615 -615
  650. package/src/filiale/hanzhong/pc/message/AllUserNew.vue +638 -638
  651. package/src/filiale/hanzhong/pc/message/ArrearsList.vue +397 -397
  652. package/src/filiale/hanzhong/pc/message/MessageList.vue +635 -635
  653. package/src/filiale/hanzhong/pc/message/MessageManage.vue +136 -136
  654. package/src/filiale/hanzhong/pc/message/MessageManageList.vue +127 -127
  655. package/src/filiale/hanzhong/pc/message/MessageManageNew.vue +121 -121
  656. package/src/filiale/hanzhong/pc/message/TemplateMessage.vue +92 -92
  657. package/src/filiale/hanzhong/pc/message/UserDefinedMessage.vue +90 -90
  658. package/src/filiale/hanzhong/pc/message/UserDefinedMessageNew.vue +121 -121
  659. package/src/filiale/hanzhong/telephone.js +48 -48
  660. package/src/filiale/hanzhong/telephoneAndroid.js +15 -15
  661. package/src/filiale/kelai/android/Outlay.vue +274 -274
  662. package/src/filiale/kelai/android/RepairFirstV.vue +552 -552
  663. package/src/filiale/kelai/android/RepairOrderV.vue +1446 -1446
  664. package/src/filiale/kelai/android/RepairTypeList.vue +170 -170
  665. package/src/filiale/kelai/android/RepairUserInfo.vue +537 -537
  666. package/src/filiale/kelai/pc/CallReport/CallReportMainPage-Kelai.vue +612 -612
  667. package/src/filiale/kelai/pc/CallReport/CumulativeCalls.vue +128 -128
  668. package/src/filiale/kelai/pc/CallReport/IncomingTimedata.vue +69 -69
  669. package/src/filiale/kelai/pc/CallReport/Incomingcallvolume.vue +82 -82
  670. package/src/filiale/kelai/pc/CallReport/SeatStatus.vue +60 -60
  671. package/src/filiale/kelai/pc/CallReport/Time.vue +107 -107
  672. package/src/filiale/kelai/pc/CallReport/WorkorderTypesum.vue +76 -76
  673. package/src/filiale/kelai/pc/CallReport/timeRunning.vue +66 -66
  674. package/src/filiale/kelai/pc/KeLaiMaintenanceReport.vue +297 -297
  675. package/src/filiale/kelai/pc/RecordListLeft.vue +188 -188
  676. package/src/filiale/kelai/pc/Seekwork.vue +308 -308
  677. package/src/filiale/kelai/pc/TelAgentVoiceReport.vue +276 -276
  678. package/src/filiale/kelai/pc/TelFindUser.vue +214 -214
  679. package/src/filiale/kelai/pc/TelLossList.vue +154 -154
  680. package/src/filiale/kelai/pc/TextServer.vue +157 -157
  681. package/src/filiale/kelai/pc/Trafficassess.vue +159 -159
  682. package/src/filiale/kelai/pc/VisitInfo.vue +268 -268
  683. package/src/filiale/kelai/pc/VoiceServer.vue +227 -227
  684. package/src/filiale/kelai/pc/WorkCenterList.vue +315 -315
  685. package/src/filiale/kelai/pc/WorkListAllNew.vue +717 -717
  686. package/src/filiale/kelai/pc/serviceDeleteOrder.vue +55 -55
  687. package/src/filiale/kelai/telephone.js +40 -40
  688. package/src/filiale/kelai/telephoneAndroid.js +17 -17
  689. package/src/filiale/liaoyuan/android/FaultAll.vue +737 -737
  690. package/src/filiale/liaoyuan/android/RepairDetails.vue +493 -493
  691. package/src/filiale/liaoyuan/android/RepairOrderV.vue +831 -831
  692. package/src/filiale/liaoyuan/telephoneAndroid.js +13 -13
  693. package/src/filiale/meihekou/android/Othercharge.vue +443 -443
  694. package/src/filiale/meihekou/android/createQRcode.vue +192 -192
  695. package/src/filiale/meihekou/android/onlineBuyGas.vue +793 -793
  696. package/src/filiale/meihekou/telephone.js +13 -13
  697. package/src/filiale/meihekou/telephoneAndroid.js +18 -18
  698. package/src/filiale/qianneng/android/AppInstallationMaterial.vue +1032 -1032
  699. package/src/filiale/qianneng/android/Examine.vue +513 -513
  700. package/src/filiale/qianneng/android/FaultAll.vue +883 -883
  701. package/src/filiale/qianneng/android/MaterIialOne.vue +123 -123
  702. package/src/filiale/qianneng/android/PhoneStandWork.vue +412 -412
  703. package/src/filiale/qianneng/android/QueryTemporaryRepair.vue +243 -243
  704. package/src/filiale/qianneng/android/RepairDetails.vue +666 -666
  705. package/src/filiale/qianneng/android/RepairFirstV.vue +615 -615
  706. package/src/filiale/qianneng/android/RepairInfo.vue +147 -147
  707. package/src/filiale/qianneng/android/RepairOrderV.vue +874 -874
  708. package/src/filiale/qianneng/android/RepairUserInfo.vue +542 -542
  709. package/src/filiale/qianneng/android/TemporarySingle.vue +512 -512
  710. package/src/filiale/qianneng/android/chargesList.vue +161 -161
  711. package/src/filiale/qianneng/pc/ComplainWork.vue +324 -324
  712. package/src/filiale/qianneng/pc/DistributeWork.vue +182 -182
  713. package/src/filiale/qianneng/pc/FailureEdit.vue +161 -161
  714. package/src/filiale/qianneng/pc/Indoorinstallation.vue +832 -832
  715. package/src/filiale/qianneng/pc/MaterialDetailed.vue +250 -250
  716. package/src/filiale/qianneng/pc/MaterialStatistics.vue +144 -144
  717. package/src/filiale/qianneng/pc/NewRepairPaper.vue +467 -467
  718. package/src/filiale/qianneng/pc/Outdoorinstallation.vue +736 -736
  719. package/src/filiale/qianneng/pc/RepairsWork.vue +982 -982
  720. package/src/filiale/qianneng/pc/Seekwork.vue +308 -308
  721. package/src/filiale/qianneng/pc/WorkHistory.vue +562 -562
  722. package/src/filiale/qianneng/pc/WorkListAllNew.vue +730 -730
  723. package/src/filiale/qianneng/telephone.js +21 -21
  724. package/src/filiale/qianneng/telephoneAndroid.js +22 -22
  725. package/src/filiale/rizhao/android/FaultAll.vue +893 -893
  726. package/src/filiale/rizhao/android/Othercharge.vue +423 -423
  727. package/src/filiale/rizhao/android/RepairFirstV.vue +525 -525
  728. package/src/filiale/rizhao/android/RepairInfo.vue +172 -172
  729. package/src/filiale/rizhao/android/RepairOrderV.vue +1415 -1415
  730. package/src/filiale/rizhao/pc/AnalysisMain.vue +355 -355
  731. package/src/filiale/rizhao/pc/CallRecords.vue +89 -89
  732. package/src/filiale/rizhao/pc/ChangemeterInfo.vue +87 -87
  733. package/src/filiale/rizhao/pc/ComplainWork.vue +357 -357
  734. package/src/filiale/rizhao/pc/Console.vue +456 -456
  735. package/src/filiale/rizhao/pc/DispatchMan.vue +100 -100
  736. package/src/filiale/rizhao/pc/DispatchWork.vue +100 -100
  737. package/src/filiale/rizhao/pc/DistributeWork.vue +188 -188
  738. package/src/filiale/rizhao/pc/FailureEdit.vue +183 -183
  739. package/src/filiale/rizhao/pc/FailureEditFire.vue +169 -169
  740. package/src/filiale/rizhao/pc/FailureEditRepair.vue +174 -174
  741. package/src/filiale/rizhao/pc/IgnitionVentilation.vue +890 -890
  742. package/src/filiale/rizhao/pc/NewRepairPaper.vue +377 -377
  743. package/src/filiale/rizhao/pc/RecordListLeft.vue +189 -189
  744. package/src/filiale/rizhao/pc/ReminderOrder.vue +51 -51
  745. package/src/filiale/rizhao/pc/RepairsWork.vue +936 -936
  746. package/src/filiale/rizhao/pc/Seekwork.vue +339 -339
  747. package/src/filiale/rizhao/pc/SiteSend.vue +258 -258
  748. package/src/filiale/rizhao/pc/StateStatistics.vue +292 -292
  749. package/src/filiale/rizhao/pc/TelFindUser.vue +243 -243
  750. package/src/filiale/rizhao/pc/TelMan.vue +133 -133
  751. package/src/filiale/rizhao/pc/TeleInfo.vue +142 -142
  752. package/src/filiale/rizhao/pc/TelephoneAnaly.vue +72 -72
  753. package/src/filiale/rizhao/pc/TelephoneType.vue +272 -272
  754. package/src/filiale/rizhao/pc/Traffic.vue +91 -91
  755. package/src/filiale/rizhao/pc/UserOperate.vue +49 -49
  756. package/src/filiale/rizhao/pc/VoiceServer.vue +219 -219
  757. package/src/filiale/rizhao/pc/WorkCenterList.vue +294 -294
  758. package/src/filiale/rizhao/pc/WorkHistory.vue +541 -541
  759. package/src/filiale/rizhao/pc/WorkList.vue +783 -783
  760. package/src/filiale/rizhao/pc/WorkListAllNew.vue +673 -673
  761. package/src/filiale/rizhao/pc/WxBaobiaoService.vue +134 -134
  762. package/src/filiale/rizhao/telephone.js +57 -57
  763. package/src/filiale/rizhao/telephoneAndroid.js +16 -16
  764. package/src/filiale/rongcheng/CliWorkListAll.vue +699 -699
  765. package/src/filiale/rongcheng/FaultAll.vue +713 -713
  766. package/src/filiale/rongcheng/RepairFirstV.vue +418 -418
  767. package/src/filiale/rongcheng/RepairOrderV.vue +1445 -1445
  768. package/src/filiale/rongcheng/RepairUserInfo.vue +539 -539
  769. package/src/filiale/rongcheng/ServiceDetails.vue +53 -53
  770. package/src/filiale/rongcheng/WorkListAll.vue +727 -727
  771. package/src/filiale/rongcheng/batchPrintSafeCheckOrder.vue +303 -303
  772. package/src/filiale/rongcheng/checkmsgZG.vue +243 -243
  773. package/src/filiale/rongcheng/onlineBuyGas.vue +799 -799
  774. package/src/filiale/rongcheng/onlineoperation.vue +383 -383
  775. package/src/filiale/rongcheng/onlinequeryuser.vue +460 -460
  776. package/src/filiale/rongcheng/telephone.js +19 -19
  777. package/src/filiale/rongcheng/telephoneAndroid.js +19 -19
  778. package/src/filiale/shanxian/android/RepairFirstV.vue +639 -639
  779. package/src/filiale/shanxian/pc/RepairsWork.vue +826 -826
  780. package/src/filiale/shanxian/pc/WorkList.vue +823 -823
  781. package/src/filiale/shanxian/telephone.js +13 -13
  782. package/src/filiale/shanxian/telephoneAndroid.js +13 -13
  783. package/src/filiale/shaoguan/pc/WorkCenterList.vue +326 -326
  784. package/src/filiale/shaoguan/pc/WorkListAllNew.vue +683 -683
  785. package/src/filiale/shaoguan/telephone.js +14 -14
  786. package/src/filiale/shexian/android/AddMyTask.vue +354 -354
  787. package/src/filiale/shexian/android/CompletedRepair.vue +280 -280
  788. package/src/filiale/shexian/android/FaultAll.vue +847 -847
  789. package/src/filiale/shexian/android/Outlay.vue +266 -266
  790. package/src/filiale/shexian/android/RepairFirstV.vue +775 -775
  791. package/src/filiale/shexian/android/RepairInfo.vue +182 -182
  792. package/src/filiale/shexian/android/RepairOrderV.vue +732 -732
  793. package/src/filiale/shexian/pc/NewRepairPaper.vue +374 -374
  794. package/src/filiale/shexian/pc/TelByOrderMan.vue +109 -109
  795. package/src/filiale/shexian/pc/TelByOrderManCount.vue +124 -124
  796. package/src/filiale/shexian/pc/TelByRepairType.vue +111 -111
  797. package/src/filiale/shexian/pc/WorkList.vue +764 -764
  798. package/src/filiale/shexian/pc/WorkListAllNew.vue +718 -718
  799. package/src/filiale/shexian/telephone.js +18 -18
  800. package/src/filiale/shexian/telephoneAndroid.js +32 -32
  801. package/src/filiale/shimen/pc/ChangemeterInfo.vue +108 -108
  802. package/src/filiale/shimen/pc/ComplainWork.vue +297 -297
  803. package/src/filiale/shimen/pc/DistributeWork.vue +173 -173
  804. package/src/filiale/shimen/pc/InfoTable.vue +122 -122
  805. package/src/filiale/shimen/pc/RepairList.vue +109 -109
  806. package/src/filiale/shimen/pc/RepairsWork.vue +803 -803
  807. package/src/filiale/shimen/pc/Seekwork.vue +307 -307
  808. package/src/filiale/shimen/pc/SellInfo.vue +87 -87
  809. package/src/filiale/shimen/pc/WorkListAllNew.vue +680 -680
  810. package/src/filiale/shimen/telephone.js +23 -23
  811. package/src/filiale/tianke/android/FaultAll.vue +854 -854
  812. package/src/filiale/tianke/android/RepairFirstV.vue +614 -614
  813. package/src/filiale/tianke/android.js +12 -12
  814. package/src/filiale/tianke/pc/DistributeWork.vue +180 -180
  815. package/src/filiale/tianke/pc/IgnitionVentilationWork.vue +801 -801
  816. package/src/filiale/tianke/pc/NewRepairPaper.vue +370 -370
  817. package/src/filiale/tianke/pc/RepairsWork.vue +794 -794
  818. package/src/filiale/tianke/pc/WorkList.vue +769 -769
  819. package/src/filiale/tianke/telephone.js +17 -17
  820. package/src/filiale/tianke/telephoneAndroid.js +13 -13
  821. package/src/filiale/tongchuan/android/AndroidStopGasManager.vue +321 -321
  822. package/src/filiale/tongchuan/android/CompletedRepair.vue +211 -211
  823. package/src/filiale/tongchuan/android/PhoneStandWork.vue +409 -409
  824. package/src/filiale/tongchuan/android/PhoneUpUserinfo.vue +1005 -1005
  825. package/src/filiale/tongchuan/android/RepairFirstV.vue +646 -646
  826. package/src/filiale/tongchuan/android/RepairInfo.vue +172 -172
  827. package/src/filiale/tongchuan/android/RepairOrderV.vue +1446 -1446
  828. package/src/filiale/tongchuan/android/TicketDetails.vue +411 -411
  829. package/src/filiale/tongchuan/pc/AnalysisMain.vue +355 -355
  830. package/src/filiale/tongchuan/pc/CallRecords.vue +96 -96
  831. package/src/filiale/tongchuan/pc/CheckWork.vue +289 -289
  832. package/src/filiale/tongchuan/pc/ComplainWork.vue +324 -324
  833. package/src/filiale/tongchuan/pc/DepRepairManCount.vue +148 -148
  834. package/src/filiale/tongchuan/pc/DistributeWork.vue +179 -179
  835. package/src/filiale/tongchuan/pc/ExportExcel.vue +204 -204
  836. package/src/filiale/tongchuan/pc/HiddenSituationWeixiu.vue +115 -115
  837. package/src/filiale/tongchuan/pc/QueryVisitHistory.vue +236 -236
  838. package/src/filiale/tongchuan/pc/RecordListLeft.vue +216 -216
  839. package/src/filiale/tongchuan/pc/RepairList.vue +102 -102
  840. package/src/filiale/tongchuan/pc/RepairWorkReport.vue +133 -133
  841. package/src/filiale/tongchuan/pc/RepairsWork.vue +836 -836
  842. package/src/filiale/tongchuan/pc/SeatInfo.vue +325 -325
  843. package/src/filiale/tongchuan/pc/Seekwork.vue +307 -307
  844. package/src/filiale/tongchuan/pc/ServiceDetails.vue +112 -112
  845. package/src/filiale/tongchuan/pc/StateStatistics.vue +292 -292
  846. package/src/filiale/tongchuan/pc/TelFindUser.vue +278 -278
  847. package/src/filiale/tongchuan/pc/TelMan.vue +142 -142
  848. package/src/filiale/tongchuan/pc/TelephoneAnaly.vue +102 -102
  849. package/src/filiale/tongchuan/pc/TelephoneType.vue +272 -272
  850. package/src/filiale/tongchuan/pc/Traffic.vue +103 -103
  851. package/src/filiale/tongchuan/pc/UserWork.vue +805 -805
  852. package/src/filiale/tongchuan/pc/VisitInfo.vue +305 -305
  853. package/src/filiale/tongchuan/pc/VisitListWork.vue +251 -251
  854. package/src/filiale/tongchuan/pc/VoiceServer.vue +218 -218
  855. package/src/filiale/tongchuan/pc/WorkCenterList.vue +297 -297
  856. package/src/filiale/tongchuan/pc/WorkHistory.vue +521 -521
  857. package/src/filiale/tongchuan/pc/WorkList.vue +811 -811
  858. package/src/filiale/tongchuan/pc/WorkListAll.vue +731 -731
  859. package/src/filiale/tongchuan/pc/WorkOrderStatistics.vue +294 -294
  860. package/src/filiale/tongchuan/pc/WorkorderCheckDistributePlan.vue +376 -376
  861. package/src/filiale/tongchuan/pc/visitPlanList.vue +342 -342
  862. package/src/filiale/tongchuan/pc/visitPlanManage.vue +599 -599
  863. package/src/filiale/tongchuan/pc/visitServiceList.vue +285 -285
  864. package/src/filiale/tongchuan/telephone.js +52 -52
  865. package/src/filiale/tongchuan/telephoneAndroid.js +22 -22
  866. package/src/filiale/v3new/android/FaultAll.vue +809 -809
  867. package/src/filiale/v3new/android/RepairFirstV.vue +633 -633
  868. package/src/filiale/v3new/pc/SiteBack.vue +83 -83
  869. package/src/filiale/v3new/pc/WorkCenter.vue +104 -104
  870. package/src/filiale/v3new/pc/WorkCenterList.vue +274 -274
  871. package/src/filiale/v3new/pc/WorkHistory.vue +537 -537
  872. package/src/filiale/v3new/pc/WorkList.vue +766 -766
  873. package/src/filiale/v3new/pc/WorkListNew.vue +706 -706
  874. package/src/filiale/v3new/pc/serviceDeleteOrder.vue +51 -51
  875. package/src/filiale/v3new/telephone.js +19 -19
  876. package/src/filiale/v3new/telephoneAndroid.js +15 -15
  877. package/src/filiale/weinanct/android/AppInstallationMaterial.vue +586 -586
  878. package/src/filiale/weinanct/android/FaultAll.vue +854 -854
  879. package/src/filiale/weinanct/android/RepairDetails.vue +508 -508
  880. package/src/filiale/weinanct/android/RepairFirstV.vue +635 -635
  881. package/src/filiale/weinanct/android/RepairOrderV.vue +1443 -1443
  882. package/src/filiale/weinanct/pc/TelFindUser.vue +213 -213
  883. package/src/filiale/weinanct/pc/VoiceServer.vue +208 -208
  884. package/src/filiale/weinanct/telephone.js +14 -14
  885. package/src/filiale/weinanct/telephoneAndroid.js +20 -20
  886. package/src/filiale/weinanct//350/257/264/346/230/216.txt +1 -1
  887. package/src/filiale/wenxi/android/RepairFirstV.vue +537 -537
  888. package/src/filiale/wenxi/android/RepairInfo.vue +168 -168
  889. package/src/filiale/wenxi/android/RepairOrderV.vue +1419 -1419
  890. package/src/filiale/wenxi/pc/DistributeWork.vue +177 -177
  891. package/src/filiale/wenxi/pc/FailureEdit.vue +206 -206
  892. package/src/filiale/wenxi/pc/RepairsWork.vue +774 -774
  893. package/src/filiale/wenxi/pc/TelFindUser.vue +209 -209
  894. package/src/filiale/wenxi/pc/VoiceServer.vue +214 -214
  895. package/src/filiale/wenxi/pc/WorkListAll.vue +650 -650
  896. package/src/filiale/wenxi/telephone.js +18 -18
  897. package/src/filiale/wenxi/telephoneAndroid.js +16 -16
  898. package/src/filiale/wuan/Util.js +461 -461
  899. package/src/filiale/wuan/android/AddMyTask.vue +227 -227
  900. package/src/filiale/wuan/android/RepairInfo.vue +136 -136
  901. package/src/filiale/wuan/android/RepairOrderV.vue +1384 -1384
  902. package/src/filiale/wuan/android/RepairUserInfo.vue +581 -581
  903. package/src/filiale/wuan/pc/BatchList.vue +329 -329
  904. package/src/filiale/wuan/pc/BatchListSanhu.vue +329 -329
  905. package/src/filiale/wuan/pc/BatchOrdersSanhu.vue +115 -115
  906. package/src/filiale/wuan/pc/CheckWork.vue +263 -263
  907. package/src/filiale/wuan/pc/DistributeWork.vue +136 -136
  908. package/src/filiale/wuan/pc/FailureEdit.vue +174 -174
  909. package/src/filiale/wuan/pc/GasWorkSanhu.vue +817 -817
  910. package/src/filiale/wuan/pc/RepairsWork.vue +848 -848
  911. package/src/filiale/wuan/pc/Seekwork.vue +311 -311
  912. package/src/filiale/wuan/pc/TelFindUser.vue +229 -229
  913. package/src/filiale/wuan/pc/WorkListAll.vue +642 -642
  914. package/src/filiale/wuan/telephone.js +23 -23
  915. package/src/filiale/wuan/telephoneAndroid.js +17 -17
  916. package/src/filiale/wuhai/pc/CallRcords.vue +109 -109
  917. package/src/filiale/wuhai/pc/ComplainWork.vue +324 -324
  918. package/src/filiale/wuhai/pc/Console.vue +432 -432
  919. package/src/filiale/wuhai/pc/DistributeWork.vue +173 -173
  920. package/src/filiale/wuhai/pc/FailureEdit.vue +190 -190
  921. package/src/filiale/wuhai/pc/InfoTable.vue +135 -135
  922. package/src/filiale/wuhai/pc/NewRepairPaper.vue +380 -380
  923. package/src/filiale/wuhai/pc/RecordListLeft.vue +202 -202
  924. package/src/filiale/wuhai/pc/RepairsWork.vue +811 -811
  925. package/src/filiale/wuhai/pc/SecuritycheckInfo.vue +92 -92
  926. package/src/filiale/wuhai/pc/Seekwork.vue +361 -361
  927. package/src/filiale/wuhai/pc/ServiceRcords.vue +146 -146
  928. package/src/filiale/wuhai/pc/TelFindUser.vue +256 -256
  929. package/src/filiale/wuhai/pc/VoiceServer.vue +211 -211
  930. package/src/filiale/wuhai/pc/WorkCenter.vue +104 -104
  931. package/src/filiale/wuhai/pc/WorkCenterList.vue +337 -337
  932. package/src/filiale/wuhai/pc/WorkListAllNew.vue +715 -715
  933. package/src/filiale/wuhai/pc/serviceDeleteOrder.vue +54 -54
  934. package/src/filiale/wuhai/telephone.js +35 -35
  935. package/src/filiale/xinkang/android/FaultAll.vue +840 -840
  936. package/src/filiale/xinkang/android/RepairFirstV.vue +484 -484
  937. package/src/filiale/xinkang/telephoneAndroid.js +14 -14
  938. package/src/filiale/yuansheng/android/RepairFirstV.vue +636 -636
  939. package/src/filiale/yuansheng/android/RepairInfo.vue +166 -166
  940. package/src/filiale/yuansheng/pc/DistributeWork.vue +177 -177
  941. package/src/filiale/yuansheng/pc/FailureEdit.vue +188 -188
  942. package/src/filiale/yuansheng/pc/HandplanInfo.vue +78 -78
  943. package/src/filiale/yuansheng/pc/MetereadInfo.vue +83 -83
  944. package/src/filiale/yuansheng/pc/ReservationWork.vue +156 -156
  945. package/src/filiale/yuansheng/pc/TelFindUser.vue +237 -237
  946. package/src/filiale/yuansheng/pc/VoiceServer.vue +208 -208
  947. package/src/filiale/yuansheng/telephone.js +20 -20
  948. package/src/filiale/yuansheng/telephoneAndroid.js +16 -16
  949. package/src/filiale/zhongsheng/android/FailureShow.vue +61 -61
  950. package/src/filiale/zhongsheng/android/FaultAll.vue +829 -0
  951. package/src/filiale/zhongsheng/android/RepairFirstV.vue +464 -464
  952. package/src/filiale/zhongsheng/android/RepairInfo.vue +133 -133
  953. package/src/filiale/zhongsheng/android/RepairOrderV.vue +1430 -1430
  954. package/src/filiale/zhongsheng/android/RepairUserInfo.vue +532 -532
  955. package/src/filiale/zhongsheng/pc/ComplainWork.vue +299 -299
  956. package/src/filiale/zhongsheng/pc/Console.vue +432 -432
  957. package/src/filiale/zhongsheng/pc/DistributeWork.vue +173 -173
  958. package/src/filiale/zhongsheng/pc/IgnitionVentilationWork.vue +836 -836
  959. package/src/filiale/zhongsheng/pc/InfoTable.vue +124 -124
  960. package/src/filiale/zhongsheng/pc/RepairsWork.vue +775 -775
  961. package/src/filiale/zhongsheng/pc/Seekwork.vue +283 -283
  962. package/src/filiale/zhongsheng/pc/TelFindUser.vue +216 -216
  963. package/src/filiale/zhongsheng/pc/WorkList.vue +805 -805
  964. package/src/filiale/zhongsheng/pc/WorkListAll.vue +628 -628
  965. package/src/filiale/zhongsheng/telephone.js +23 -23
  966. package/src/filiale/zhongsheng/telephoneAndroid.js +2 -1
  967. package/src/filiale/zhongyi/android/FaultAll.vue +854 -854
  968. package/src/filiale/zhongyi/android/RepairFirstV.vue +614 -614
  969. package/src/filiale/zhongyi/android.js +12 -12
  970. package/src/filiale/zhongyi/pc/DistributeWork.vue +180 -180
  971. package/src/filiale/zhongyi/pc/IgnitionVentilationWork.vue +801 -801
  972. package/src/filiale/zhongyi/pc/NewRepairPaper.vue +370 -370
  973. package/src/filiale/zhongyi/pc/RepairsWork.vue +794 -794
  974. package/src/filiale/zhongyi/pc/WorkList.vue +769 -769
  975. package/src/filiale/zhongyi/pc/WorkListAllNew.vue +672 -672
  976. package/src/filiale/zhongyi/telephone.js +18 -18
  977. package/src/filiale/zhongyi/telephoneAndroid.js +13 -13
  978. package/src/filiale/zhoukou/android/ChargeBill.vue +201 -201
  979. package/src/filiale/zhoukou/android/FaultAll.vue +779 -779
  980. package/src/filiale/zhoukou/android/Othercharge.vue +591 -591
  981. package/src/filiale/zhoukou/android/OtherchargeZhoukou.vue +574 -574
  982. package/src/filiale/zhoukou/android/Outlay.vue +236 -236
  983. package/src/filiale/zhoukou/android/RepairDetails.vue +544 -544
  984. package/src/filiale/zhoukou/android/RepairFirstV.vue +542 -542
  985. package/src/filiale/zhoukou/android/RepairInfo.vue +136 -136
  986. package/src/filiale/zhoukou/android/RepairOrderV.vue +1383 -1383
  987. package/src/filiale/zhoukou/android/RepairUserInfo.vue +532 -532
  988. package/src/filiale/zhoukou/android/ZkBill.vue +191 -191
  989. package/src/filiale/zhoukou/android/createQRcode.vue +256 -256
  990. package/src/filiale/zhoukou/android/onlineBuyGas.vue +804 -804
  991. package/src/filiale/zhoukou/android/onlineoperation.vue +416 -416
  992. package/src/filiale/zhoukou/android/onlinequeryuser.vue +468 -468
  993. package/src/filiale/zhoukou/pc/ExportExcel.vue +204 -204
  994. package/src/filiale/zhoukou/pc/NewRepairPaper.vue +366 -366
  995. package/src/filiale/zhoukou/pc/SiteSend.vue +265 -265
  996. package/src/filiale/zhoukou/pc/WorkHistory.vue +514 -514
  997. package/src/filiale/zhoukou/pc/WorkList.vue +653 -653
  998. package/src/filiale/zhoukou/pc/WorkListAllNew.vue +675 -675
  999. package/src/filiale/zhoukou/telephone.js +18 -18
  1000. package/src/filiale/zhoukou/telephoneAndroid.js +33 -33
  1001. package/src/index.js +15 -15
  1002. package/src/main.js +22 -22
  1003. package/src/plugins/DataSql.js +569 -569
  1004. package/src/plugins/EmojiData.js +514 -514
  1005. package/src/plugins/EncryptUtil.js +53 -53
  1006. package/src/plugins/HttpLoad.js +93 -93
  1007. package/src/plugins/LoadData.js +40 -40
  1008. package/src/plugins/LoadParams.js +54 -54
  1009. package/src/plugins/LocalPagedList.js +107 -107
  1010. package/src/plugins/ObjTree.js +532 -532
  1011. package/src/plugins/TelGetSaleParams.js +63 -63
  1012. package/src/qrcode.js +618 -618
  1013. package/src/qrcode.min.js +1 -1
  1014. package/src/stores/exportConfig.js +10 -10
  1015. package/src/stores/wxconfig.js +10 -10
  1016. package/src/telephone-android.js +367 -367
  1017. package/src/telephone-shaoguan.js +256 -256
  1018. package/src/telephone-tongcheng.js +254 -254
  1019. package/src/telephone.js +743 -743
  1020. package/src/telephoneanaly.less +704 -704
  1021. package/src/utils/LdapHelper.js +99 -99
  1022. package/src/weinan-android.js +350 -350
  1023. package/src/weinan.js +531 -531
  1024. package/static/fonts/font.css +6 -6
  1025. package/static/js/adapter.min.js +2049 -2049
  1026. package/static/js/bootstrap.min.js +7 -7
  1027. package/static/js/ctilink.js +1303 -1303
  1028. package/static/js/ctimsg.js +655 -655
  1029. package/static/js/janus.js +4034 -4034
  1030. package/static/js/jquery-2.1.1.min.js +5 -5
  1031. package/yarn-error.log +7872 -7872
  1032. 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);