Windows
Analysis Report
Update.js
Overview
General Information
Detection
Score: | 21 |
Range: | 0 - 100 |
Whitelisted: | false |
Confidence: | 100% |
Signatures
Classification
- System is w10x64
wscript.exe (PID: 6088 cmdline:
C:\Windows \System32\ WScript.ex e "C:\User s\user\Des ktop\Updat e.js" MD5: 9A68ADD12EB50DDE7586782C3EB9FF9C)
- cleanup
Click to jump to signature section
Source: | Initial sample: |
Source: | Key value queried: | Jump to behavior |
Source: | Key opened: | Jump to behavior |
Source: | Classification label: |
Data Obfuscation |
---|
Source: | Initial file: |
Source: | Process information set: | Jump to behavior | ||
Source: | Process information set: | Jump to behavior |
Source: | Thread injection, dropped files, key value created, disk infection and DNS query: |
Source: | Window found: | Jump to behavior |
Source: | Thread injection, dropped files, key value created, disk infection and DNS query: |
Source: | Key value queried: | Jump to behavior |
Initial Access | Execution | Persistence | Privilege Escalation | Defense Evasion | Credential Access | Discovery | Lateral Movement | Collection | Exfiltration | Command and Control | Network Effects | Remote Service Effects | Impact |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valid Accounts | 12 Scripting | Path Interception | Path Interception | 12 Scripting | OS Credential Dumping | 2 System Information Discovery | Remote Services | Data from Local System | Exfiltration Over Other Network Medium | Data Obfuscation | Eavesdrop on Insecure Network Communication | Remotely Track Device Without Authorization | Modify System Partition |
Default Accounts | Scheduled Task/Job | Boot or Logon Initialization Scripts | Boot or Logon Initialization Scripts | 1 Obfuscated Files or Information | LSASS Memory | Application Window Discovery | Remote Desktop Protocol | Data from Removable Media | Exfiltration Over Bluetooth | Junk Data | Exploit SS7 to Redirect Phone Calls/SMS | Remotely Wipe Data Without Authorization | Device Lockout |
This section contains all screenshots as thumbnails, including those not shown in the slideshow.
Source | Detection | Scanner | Label | Link |
---|---|---|---|---|
0% | Virustotal | Browse |
Joe Sandbox Version: | 37.0.0 Beryl |
Analysis ID: | 824272 |
Start date and time: | 2023-03-10 17:20:20 +01:00 |
Joe Sandbox Product: | CloudBasic |
Overall analysis duration: | 0h 2m 24s |
Hypervisor based Inspection enabled: | false |
Report type: | full |
Cookbook file name: | default.jbs |
Analysis system description: | Windows 10 64 bit v1803 with Office Professional Plus 2016, Chrome 104, IE 11, Adobe Reader DC 19, Java 8 Update 211 |
Number of analysed new started processes analysed: | 1 |
Number of new started drivers analysed: | 0 |
Number of existing processes analysed: | 0 |
Number of existing drivers analysed: | 0 |
Number of injected processes analysed: | 0 |
Technologies: |
|
Analysis Mode: | default |
Analysis stop reason: | Timeout |
Sample file name: | Update.js |
Detection: | SUS |
Classification: | sus21.evad.winJS@1/0@0/0 |
EGA Information: | Failed |
HDC Information: | Failed |
HCA Information: |
|
Cookbook Comments: |
|
- Excluded domains from analysis
(whitelisted): fs.microsoft.c om - Report size getting too big, t
oo many NtProtectVirtualMemory calls found.
File type: | |
Entropy (8bit): | 5.455343507641711 |
TrID: |
|
File name: | Update.js |
File size: | 33486 |
MD5: | b3af9f584184d5ae142c5b0107dab2f9 |
SHA1: | 3f8f92a118ad82e7fbaf3350a1ffc9db49818e18 |
SHA256: | a575ab197621c7e07d2e015a3567a97b4f674d5ae10b6a0ae61b3aa7e6a4473d |
SHA512: | 8391b09c9ad46539f62afef87fc5bbeb75f0145f39a3f47fd89ebf2916240b3b51f48e7a66e0858a63874a383bcc8ee32b885d645b4e80126d8a18d47a867ff4 |
SSDEEP: | 768:v5unOg0ByLMX8YkskZzymPoEtwbqp3/D8agMRzfYAfwvbOCt0eu:UnKD2HxfLCWJ |
TLSH: | 18E29605B3613160039FB3F5111F024AB2396E7EBA0A402D78A59AF67DB9C49B177F39 |
File Content Preview: | /*@cc_on @*//*@if(@_jscript_version >= 4) (function(_0x1050c6,_0x4586f9){var a0_0x548f24={_0x1b80e8:0x315,_0x4b9940:'n2cx',_0x343717:0x323,_0x440212:'e%0b',_0x1c7c21:0x312,_0x30adf2:'BJ##',_0x4a3d61:0x30a,_0x46aa28:'KUY3',_0x5c3c1b:0x313,_0x2a5bd2:')EDh', |
Icon Hash: | e8d69ece968a9ec4 |
Click to jump to process
Click to jump to process
back
Click to dive into process behavior distribution
Target ID: | 0 |
Start time: | 17:21:15 |
Start date: | 10/03/2023 |
Path: | C:\Windows\System32\wscript.exe |
Wow64 process (32bit): | false |
Commandline: | |
Imagebase: | 0x7ff7a5ac0000 |
File size: | 163840 bytes |
MD5 hash: | 9A68ADD12EB50DDE7586782C3EB9FF9C |
Has elevated privileges: | false |
Has administrator privileges: | false |
Programmed in: | C, C++ or other language |
Reputation: | high |
Call Graph
Graph
- Executed
- Not Executed
Script: |
---|
Code | ||
---|---|---|
0 | if ( "undefined" == typeof jQuery ) | |
1 | throw new Error ( "Bootstrap requires jQuery" ) ; | |
2 | + function (a) { | |
3 | "use strict"; | |
4 | function b() { | |
5 | var a = document.createElement ( "bootstrap" ), | |
6 | b = { | |
7 | WebkitTransition : "webkitTransitionEnd", | |
8 | MozTransition : "transitionend", | |
9 | OTransition : "oTransitionEnd otransitionend", | |
10 | transition : "transitionend" | |
11 | }; | |
12 | for ( var c in b ) | |
13 | if ( void 0 !== a.style[c] ) | |
14 | return { | |
15 | end : b[c] | |
16 | }; | |
17 | } | |
18 | a.fn.emulateTransitionEnd = | |
19 | function (b) { | |
20 | var c = ! 1, d = this; | |
21 | a ( this ).one ( a.support.transition.end, | |
22 | function () { | |
23 | c = ! 0; | |
24 | } ) ; | |
25 | var e = function () { | |
26 | c || a ( d ).trigger ( a.support.transition.end ); | |
27 | }; | |
28 | return setTimeout ( e, b ), this; | |
29 | }, | |
30 | a ( | |
31 | function () { | |
32 | a.support.transition = b ( ); | |
33 | } ) ; | |
34 | } ( jQuery ), | |
35 | + function (a) { | |
36 | "use strict"; | |
37 | var b = '[data-dismiss="alert"]', | |
38 | c = function (c) { | |
39 | a ( c ).on ( "click", b, this.close ); | |
40 | }; | |
41 | c.prototype.close = | |
42 | function (b) { | |
43 | function c() { | |
44 | f.trigger ( "closed.bs.alert" ).remove ( ); | |
45 | } | |
46 | var d = a ( this ), e = d.attr ( "data-target" ); | |
47 | e || ( e = d.attr ( "href" ), e = e && e.replace ( /.*(?=#[^\s]*$)/, "" ) ); | |
48 | var f = a ( e ); | |
49 | b && b.preventDefault ( ), f.length || ( f = d.hasClass ( "alert" ) ? d : d.parent ( ) ), f.trigger ( b = a.Event ( "close.bs.alert" ) ), b.isDefaultPrevented ( ) || ( f.removeClass ( "in" ), a.support.transition && f.hasClass ( "fade" ) ? f.one ( a.support.transition.end, c ).emulateTransitionEnd ( 150 ) : c ( ) ); | |
50 | }; | |
51 | var d = a.fn.alert; | |
52 | a.fn.alert = | |
53 | function (b) { | |
54 | return this.each ( | |
55 | function () { | |
56 | var d = a ( this ), e = d.data ( "bs.alert" ); | |
57 | e || d.data ( "bs.alert", e = new c ( this ) ), "string" == typeof b && e[b].call ( d ); | |
58 | } ) ; | |
59 | }, a.fn.alert.Constructor = c, | |
60 | a.fn.alert.noConflict = | |
61 | function () { | |
62 | return a.fn.alert = d, this; | |
63 | }, a ( document ).on ( "click.bs.alert.data-api", b, c.prototype.close ); | |
64 | } ( jQuery ), | |
65 | + function (a) { | |
66 | "use strict"; | |
67 | var b = function (c, d) { | |
68 | this.$element = a ( c ), | |
69 | this.options = a.extend ( | |
70 | { | |
71 | }, b.DEFAULTS, d ) ; | |
72 | }; | |
73 | b.DEFAULTS = | |
74 | { | |
75 | loadingText : "loading..." | |
76 | }, | |
77 | b.prototype.setState = | |
78 | function (a) { | |
79 | var b = "disabled", c = this.$element, d = c.is ( "input" ) ? "val" : "html", e = c.data ( ); | |
80 | a += "Text", e.resetText || c.data ( "resetText", c[d] ( ) ), c[d] ( e[a] || this.options[a] ), | |
81 | setTimeout ( | |
82 | function () { | |
83 | "loadingText" == a ? c.addClass ( b ).attr ( b, b ) : c.removeClass ( b ).removeAttr ( b ); | |
84 | }, 0 ) ; | |
85 | }, | |
86 | b.prototype.toggle = | |
87 | function () { | |
88 | var a = this.$element.closest ( '[data-toggle="buttons"]' ); | |
89 | if ( a.length ) | |
90 | { | |
91 | var b = this.$element.find ( "input" ).prop ( "checked", ! this.$element.hasClass ( "active" ) ).trigger ( "change" ); | |
92 | "radio" === b.prop ( "type" ) && a.find ( ".active" ).removeClass ( "active" ); | |
93 | } | |
94 | this.$element.toggleClass ( "active" ); | |
95 | }; | |
96 | var c = a.fn.button; | |
97 | a.fn.button = | |
98 | function (c) { | |
99 | return this.each ( | |
100 | function () { | |
101 | var d = a ( this ), e = d.data ( "bs.button" ), f = "object" == typeof c && c; | |
102 | e || d.data ( "bs.button", e = new b ( this, f ) ), "toggle" == c ? e.toggle ( ) : c && e.setState ( c ); | |
103 | } ) ; | |
104 | }, a.fn.button.Constructor = b, | |
105 | a.fn.button.noConflict = | |
106 | function () { | |
107 | return a.fn.button = c, this; | |
108 | }, | |
109 | a ( document ).on ( "click.bs.button.data-api", "[data-toggle^=button]", | |
110 | function (b) { | |
111 | var c = a ( b.target ); | |
112 | c.hasClass ( "btn" ) || ( c = c.closest ( ".btn" ) ), c.button ( "toggle" ), b.preventDefault ( ); | |
113 | } ) ; | |
114 | } ( jQuery ), | |
115 | + function (a) { | |
116 | "use strict"; | |
117 | var b = function (b, c) { | |
118 | this.$element = a ( b ), this.$indicators = this.$element.find ( ".carousel-indicators" ), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options.pause && this.$element.on ( "mouseenter", a.proxy ( this.pause, this ) ).on ( "mouseleave", a.proxy ( this.cycle, this ) ); | |
119 | }; | |
120 | b.DEFAULTS = | |
121 | { | |
122 | interval : 5e3, | |
123 | pause : "hover", | |
124 | wrap : ! 0 | |
125 | }, | |
126 | b.prototype.cycle = | |
127 | function (b) { | |
128 | return b || ( this.paused = ! 1 ), this.interval && clearInterval ( this.interval ), this.options.interval && ! this.paused && ( this.interval = setInterval ( a.proxy ( this.next, this ), this.options.interval ) ), this; | |
129 | }, | |
130 | b.prototype.getActiveIndex = | |
131 | function () { | |
132 | return this.$active = this.$element.find ( ".item.active" ), this.$items = this.$active.parent ( ).children ( ), this.$items.index ( this.$active ); | |
133 | }, | |
134 | b.prototype.to = | |
135 | function (b) { | |
136 | var c = this, d = this.getActiveIndex ( ); | |
137 | return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one ( "slid", | |
138 | function () { | |
139 | c.to ( b ); | |
140 | } ) : d == b ? this.pause ( ).cycle ( ) : this.slide ( b > d ? "next" : "prev", a ( this.$items[b] ) ); | |
141 | }, | |
142 | b.prototype.pause = | |
143 | function (b) { | |
144 | return b || ( this.paused = ! 0 ), this.$element.find ( ".next, .prev" ).length && a.support.transition.end && ( this.$element.trigger ( a.support.transition.end ), this.cycle ( ! 0 ) ), this.interval = clearInterval ( this.interval ), this; | |
145 | }, | |
146 | b.prototype.next = | |
147 | function () { | |
148 | return this.sliding ? void 0 : this.slide ( "next" ); | |
149 | }, | |
150 | b.prototype.prev = | |
151 | function () { | |
152 | return this.sliding ? void 0 : this.slide ( "prev" ); | |
153 | }, | |
154 | b.prototype.slide = | |
155 | function (b, c) { | |
156 | var d = this.$element.find ( ".item.active" ), e = c || d[b] ( ), f = this.interval, g = "next" == b ? "left" : "right", h = "next" == b ? "first" : "last", i = this; | |
157 | if ( ! e.length ) | |
158 | { | |
159 | if ( ! this.options.wrap ) | |
160 | return ; | |
161 | e = this.$element.find ( ".item" ) [h] ( ); | |
162 | } | |
163 | this.sliding = ! 0, f && this.pause ( ); | |
164 | var j = a.Event ( "slide.bs.carousel", | |
165 | { | |
166 | relatedTarget : e[0], | |
167 | direction : g | |
168 | } ) ; | |
169 | if ( ! e.hasClass ( "active" ) ) | |
170 | { | |
171 | if ( this.$indicators.length && ( this.$indicators.find ( ".active" ).removeClass ( "active" ), | |
172 | this.$element.one ( "slid", | |
173 | function () { | |
174 | var b = a ( i.$indicators.children ( ) [i.getActiveIndex ( ) ] ); | |
175 | b && b.addClass ( "active" ); | |
176 | } ) ), a.support.transition && this.$element.hasClass ( "slide" ) ) | |
177 | { | |
178 | if ( this.$element.trigger ( j ), j.isDefaultPrevented ( ) ) | |
179 | return ; | |
180 | e.addClass ( b ), e[0].offsetWidth, d.addClass ( g ), e.addClass ( g ), | |
181 | d.one ( a.support.transition.end, | |
182 | function () { | |
183 | e.removeClass ( [ b, g ].join ( " " ) ).addClass ( "active" ), d.removeClass ( [ "active", g ].join ( " " ) ), i.sliding = ! 1, | |
184 | setTimeout ( | |
185 | function () { | |
186 | i.$element.trigger ( "slid" ); | |
187 | }, 0 ) ; | |
188 | } ) .emulateTransitionEnd ( 600 ); | |
189 | } | |
190 | else | |
191 | { | |
192 | if ( this.$element.trigger ( j ), j.isDefaultPrevented ( ) ) | |
193 | return ; | |
194 | d.removeClass ( "active" ), e.addClass ( "active" ), this.sliding = ! 1, this.$element.trigger ( "slid" ); | |
195 | } | |
196 | return f && this.cycle ( ), this; | |
197 | } | |
198 | }; | |
199 | var c = a.fn.carousel; | |
200 | a.fn.carousel = | |
201 | function (c) { | |
202 | return this.each ( | |
203 | function () { | |
204 | var d = a ( this ), e = d.data ( "bs.carousel" ), | |
205 | f = a.extend ( | |
206 | { | |
207 | }, b.DEFAULTS, d.data ( ), "object" == typeof c && c ) , g = "string" == typeof c ? c : f.slide; | |
208 | e || d.data ( "bs.carousel", e = new b ( this, f ) ), "number" == typeof c ? e.to ( c ) : g ? e[g] ( ) : f.interval && e.pause ( ).cycle ( ); | |
209 | } ) ; | |
210 | }, a.fn.carousel.Constructor = b, | |
211 | a.fn.carousel.noConflict = | |
212 | function () { | |
213 | return a.fn.carousel = c, this; | |
214 | }, | |
215 | a ( document ).on ( "click.bs.carousel.data-api", "[data-slide], [data-slide-to]", | |
216 | function (b) { | |
217 | var c, d = a ( this ), e = a ( d.attr ( "data-target" ) || ( c = d.attr ( "href" ) ) && c.replace ( /.*(?=#[^\s]+$)/, "" ) ), | |
218 | f = a.extend ( | |
219 | { | |
220 | }, e.data ( ), d.data ( ) ) , g = d.attr ( "data-slide-to" ); | |
221 | g && ( f.interval = ! 1 ), e.carousel ( f ), ( g = d.attr ( "data-slide-to" ) ) && e.data ( "bs.carousel" ).to ( g ), b.preventDefault ( ); | |
222 | } ) , | |
223 | a ( window ).on ( "load", | |
224 | function () { | |
225 | a ( '[data-ride="carousel"]' ).each ( | |
226 | function () { | |
227 | var b = a ( this ); | |
228 | b.carousel ( b.data ( ) ); | |
229 | } ) ; | |
230 | } ) ; | |
231 | } ( jQuery ), | |
232 | + function (a) { | |
233 | "use strict"; | |
234 | var b = function (c, d) { | |
235 | this.$element = a ( c ), | |
236 | this.options = a.extend ( | |
237 | { | |
238 | }, b.DEFAULTS, d ) , this.transitioning = null, this.options.parent && ( this.$parent = a ( this.options.parent ) ), this.options.toggle && this.toggle ( ); | |
239 | }; | |
240 | b.DEFAULTS = | |
241 | { | |
242 | toggle : ! 0 | |
243 | }, | |
244 | b.prototype.dimension = | |
245 | function () { | |
246 | var a = this.$element.hasClass ( "width" ); | |
247 | return a ? "width" : "height"; | |
248 | }, | |
249 | b.prototype.show = | |
250 | function () { | |
251 | if ( ! this.transitioning && ! this.$element.hasClass ( "in" ) ) | |
252 | { | |
253 | var b = a.Event ( "show.bs.collapse" ); | |
254 | if ( this.$element.trigger ( b ), ! b.isDefaultPrevented ( ) ) | |
255 | { | |
256 | var c = this.$parent && this.$parent.find ( "> .panel > .in" ); | |
257 | if ( c && c.length ) | |
258 | { | |
259 | var d = c.data ( "bs.collapse" ); | |
260 | if ( d && d.transitioning ) | |
261 | return ; | |
262 | c.collapse ( "hide" ), d || c.data ( "bs.collapse", null ); | |
263 | } | |
264 | var e = this.dimension ( ); | |
265 | this.$element.removeClass ( "collapse" ) .addClass ( "collapsing" ) [e] ( 0 ), this.transitioning = 1; | |
266 | var f = function () { | |
267 | this.$element.removeClass ( "collapsing" ) .addClass ( "in" ) [e] ( "auto" ), this.transitioning = 0, this.$element.trigger ( "shown.bs.collapse" ); | |
268 | }; | |
269 | if ( ! a.support.transition ) | |
270 | return f.call ( this ); | |
271 | var g = a.camelCase ( [ "scroll", e ].join ( "-" ) ); | |
272 | this.$element.one ( a.support.transition.end, a.proxy ( f, this ) ) .emulateTransitionEnd ( 350 ) [e] ( this.$element[0][g] ); | |
273 | } | |
274 | } | |
275 | }, | |
276 | b.prototype.hide = | |
277 | function () { | |
278 | if ( ! this.transitioning && this.$element.hasClass ( "in" ) ) | |
279 | { | |
280 | var b = a.Event ( "hide.bs.collapse" ); | |
281 | if ( this.$element.trigger ( b ), ! b.isDefaultPrevented ( ) ) | |
282 | { | |
283 | var c = this.dimension ( ); | |
284 | this.$element[c] ( this.$element[c] ( ) ) [0].offsetHeight, this.$element.addClass ( "collapsing" ).removeClass ( "collapse" ).removeClass ( "in" ), this.transitioning = 1; | |
285 | var d = function () { | |
286 | this.transitioning = 0, this.$element.trigger ( "hidden.bs.collapse" ).removeClass ( "collapsing" ).addClass ( "collapse" ); | |
287 | }; | |
288 | return a.support.transition ? ( this.$element[c] ( 0 ).one ( a.support.transition.end, a.proxy ( d, this ) ).emulateTransitionEnd ( 350 ), void 0 ) : d.call ( this ); | |
289 | } | |
290 | } | |
291 | }, | |
292 | b.prototype.toggle = | |
293 | function () { | |
294 | this[this.$element.hasClass ( "in" ) ? "hide" : "show"] ( ); | |
295 | }; | |
296 | var c = a.fn.collapse; | |
297 | a.fn.collapse = | |
298 | function (c) { | |
299 | return this.each ( | |
300 | function () { | |
301 | var d = a ( this ), e = d.data ( "bs.collapse" ), | |
302 | f = a.extend ( | |
303 | { | |
304 | }, b.DEFAULTS, d.data ( ), "object" == typeof c && c ) ; | |
305 | e || d.data ( "bs.collapse", e = new b ( this, f ) ), "string" == typeof c && e[c] ( ); | |
306 | } ) ; | |
307 | }, a.fn.collapse.Constructor = b, | |
308 | a.fn.collapse.noConflict = | |
309 | function () { | |
310 | return a.fn.collapse = c, this; | |
311 | }, | |
312 | a ( document ).on ( "click.bs.collapse.data-api", "[data-toggle=collapse]", | |
313 | function (b) { | |
314 | var c, d = a ( this ), e = d.attr ( "data-target" ) || b.preventDefault ( ) || ( c = d.attr ( "href" ) ) && c.replace ( /.*(?=#[^\s]+$)/, "" ), f = a ( e ), g = f.data ( "bs.collapse" ), h = g ? "toggle" : d.data ( ), i = d.attr ( "data-parent" ), j = i && a ( i ); | |
315 | g && g.transitioning || ( j && j.find ( '[data-toggle=collapse][data-parent="' + i + '"]' ).not ( d ).addClass ( "collapsed" ), d[f.hasClass ( "in" ) ? "addClass" : "removeClass"] ( "collapsed" ) ), f.collapse ( h ); | |
316 | } ) ; | |
317 | } ( jQuery ), | |
318 | + function (a) { | |
319 | "use strict"; | |
320 | function b() { | |
321 | a ( d ).remove ( ), | |
322 | a ( e ).each ( | |
323 | function (b) { | |
324 | var d = c ( a ( this ) ); | |
325 | d.hasClass ( "open" ) && ( d.trigger ( b = a.Event ( "hide.bs.dropdown" ) ), b.isDefaultPrevented ( ) || d.removeClass ( "open" ).trigger ( "hidden.bs.dropdown" ) ); | |
326 | } ) ; | |
327 | } | |
328 | function c(b) { | |
329 | var c = b.attr ( "data-target" ); | |
330 | c || ( c = b.attr ( "href" ), c = c && /#/.test ( c ) && c.replace ( /.*(?=#[^\s]*$)/, "" ) ); | |
331 | var d = c && a ( c ); | |
332 | return d && d.length ? d : b.parent ( ); | |
333 | } | |
334 | var d = ".dropdown-backdrop", e = "[data-toggle=dropdown]", | |
335 | f = function (b) { | |
336 | a ( b ).on ( "click.bs.dropdown", this.toggle ); | |
337 | }; | |
338 | f.prototype.toggle = | |
339 | function (d) { | |
340 | var e = a ( this ); | |
341 | if ( ! e.is ( ".disabled, :disabled" ) ) | |
342 | { | |
343 | var f = c ( e ), g = f.hasClass ( "open" ); | |
344 | if ( b ( ), ! g ) | |
345 | { | |
346 | if ( "ontouchstart" in document.documentElement && ! f.closest ( ".navbar-nav" ).length && a ( '<div class="dropdown-backdrop"/>' ).insertAfter ( a ( this ) ).on ( "click", b ), f.trigger ( d = a.Event ( "show.bs.dropdown" ) ), d.isDefaultPrevented ( ) ) | |
347 | return ; | |
348 | f.toggleClass ( "open" ).trigger ( "shown.bs.dropdown" ), e.focus ( ); | |
349 | } | |
350 | return ! 1; | |
351 | } | |
352 | }, | |
353 | f.prototype.keydown = | |
354 | function (b) { | |
355 | if ( /(38|40|27)/.test ( b.keyCode ) ) | |
356 | { | |
357 | var d = a ( this ); | |
358 | if ( b.preventDefault ( ), b.stopPropagation ( ), ! d.is ( ".disabled, :disabled" ) ) | |
359 | { | |
360 | var f = c ( d ), g = f.hasClass ( "open" ); | |
361 | if ( ! g || g && 27 == b.keyCode ) | |
362 | return 27 == b.which && f.find ( e ).focus ( ), d.click ( ); | |
363 | var h = a ( "[role=menu] li:not(.divider):visible a", f ); | |
364 | if ( h.length ) | |
365 | { | |
366 | var i = h.index ( h.filter ( ":focus" ) ); | |
367 | 38 == b.keyCode && i > 0 && i --, 40 == b.keyCode && i < h.length - 1 && i ++, ~ i || ( i = 0 ), h.eq ( i ).focus ( ); | |
368 | } | |
369 | } | |
370 | } | |
371 | }; | |
372 | var g = a.fn.dropdown; | |
373 | a.fn.dropdown = | |
374 | function (b) { | |
375 | return this.each ( | |
376 | function () { | |
377 | var c = a ( this ), d = c.data ( "dropdown" ); | |
378 | d || c.data ( "dropdown", d = new f ( this ) ), "string" == typeof b && d[b].call ( c ); | |
379 | } ) ; | |
380 | }, a.fn.dropdown.Constructor = f, | |
381 | a.fn.dropdown.noConflict = | |
382 | function () { | |
383 | return a.fn.dropdown = g, this; | |
384 | }, | |
385 | a ( document ).on ( "click.bs.dropdown.data-api", b ).on ( "click.bs.dropdown.data-api", ".dropdown form", | |
386 | function (a) { | |
387 | a.stopPropagation ( ); | |
388 | } ) .on ( "click.bs.dropdown.data-api", e, f.prototype.toggle ).on ( "keydown.bs.dropdown.data-api", e + ", [role=menu]", f.prototype.keydown ); | |
389 | } ( jQuery ), | |
390 | + function (a) { | |
391 | "use strict"; | |
392 | var b = function (b, c) { | |
393 | this.options = c, this.$element = a ( b ), this.$backdrop = this.isShown = null, this.options.remote && this.$element.load ( this.options.remote ); | |
394 | }; | |
395 | b.DEFAULTS = | |
396 | { | |
397 | backdrop : ! 0, | |
398 | keyboard : ! 0, | |
399 | show : ! 0 | |
400 | }, | |
401 | b.prototype.toggle = | |
402 | function (a) { | |
403 | return this[this.isShown ? "hide" : "show"] ( a ); | |
404 | }, | |
405 | b.prototype.show = | |
406 | function (b) { | |
407 | var c = this, | |
408 | d = a.Event ( "show.bs.modal", | |
409 | { | |
410 | relatedTarget : b | |
411 | } ) ; | |
412 | this.$element.trigger ( d ), | |
413 | this.isShown || d.isDefaultPrevented ( ) || ( this.isShown = ! 0, this.escape ( ), this.$element.on ( "click.dismiss.modal", '[data-dismiss="modal"]', a.proxy ( this.hide, this ) ), | |
414 | this.backdrop ( | |
415 | function () { | |
416 | var d = a.support.transition && c.$element.hasClass ( "fade" ); | |
417 | c.$element.parent ( ).length || c.$element.appendTo ( document.body ), c.$element.show ( ), d && c.$element[0].offsetWidth, c.$element.addClass ( "in" ).attr ( "aria-hidden", ! 1 ), c.enforceFocus ( ); | |
418 | var e = a.Event ( "shown.bs.modal", | |
419 | { | |
420 | relatedTarget : b | |
421 | } ) ; | |
422 | d ? c.$element.find ( ".modal-dialog" ).one ( a.support.transition.end, | |
423 | function () { | |
424 | c.$element.focus ( ).trigger ( e ); | |
425 | } ) .emulateTransitionEnd ( 300 ) : c.$element.focus ( ).trigger ( e ); | |
426 | } ) ); | |
427 | }, | |
428 | b.prototype.hide = | |
429 | function (b) { | |
430 | b && b.preventDefault ( ), b = a.Event ( "hide.bs.modal" ), this.$element.trigger ( b ), this.isShown && ! b.isDefaultPrevented ( ) && ( this.isShown = ! 1, this.escape ( ), a ( document ).off ( "focusin.bs.modal" ), this.$element.removeClass ( "in" ).attr ( "aria-hidden", ! 0 ).off ( "click.dismiss.modal" ), a.support.transition && this.$element.hasClass ( "fade" ) ? this.$element.one ( a.support.transition.end, a.proxy ( this.hideModal, this ) ).emulateTransitionEnd ( 300 ) : this.hideModal ( ) ); | |
431 | }, | |
432 | b.prototype.enforceFocus = | |
433 | function () { | |
434 | a ( document ).off ( "focusin.bs.modal" ).on ( "focusin.bs.modal", | |
435 | a.proxy ( | |
436 | function (a) { | |
437 | this.$element[0] === a.target || this.$element.has ( a.target ).length || this.$element.focus ( ); | |
438 | }, this ) ) ; | |
439 | }, | |
440 | b.prototype.escape = | |
441 | function () { | |
442 | this.isShown && this.options.keyboard ? this.$element.on ( "keyup.dismiss.bs.modal", | |
443 | a.proxy ( | |
444 | function (a) { | |
445 | 27 == a.which && this.hide ( ); | |
446 | }, this ) ) : this.isShown || this.$element.off ( "keyup.dismiss.bs.modal" ); | |
447 | }, | |
448 | b.prototype.hideModal = | |
449 | function () { | |
450 | var a = this; | |
451 | this.$element.hide ( ), | |
452 | this.backdrop ( | |
453 | function () { | |
454 | a.removeBackdrop ( ), a.$element.trigger ( "hidden.bs.modal" ); | |
455 | } ) ; | |
456 | }, | |
457 | b.prototype.removeBackdrop = | |
458 | function () { | |
459 | this.$backdrop && this.$backdrop.remove ( ), this.$backdrop = null; | |
460 | }, | |
461 | b.prototype.backdrop = | |
462 | function (b) { | |
463 | var c = this.$element.hasClass ( "fade" ) ? "fade" : ""; | |
464 | if ( this.isShown && this.options.backdrop ) | |
465 | { | |
466 | var d = a.support.transition && c; | |
467 | if ( this.$backdrop = a ( '<div class="modal-backdrop ' + c + '" />' ).appendTo ( document.body ), | |
468 | this.$element.on ( "click.dismiss.modal", | |
469 | a.proxy ( | |
470 | function (a) { | |
471 | a.target === a.currentTarget && ( "static" == this.options.backdrop ? this.$element[0].focus.call ( this.$element[0] ) : this.hide.call ( this ) ); | |
472 | }, this ) ) , d && this.$backdrop[0].offsetWidth, this.$backdrop.addClass ( "in" ), ! b ) | |
473 | return ; | |
474 | d ? this.$backdrop.one ( a.support.transition.end, b ).emulateTransitionEnd ( 150 ) : b ( ); | |
475 | } | |
476 | else | |
477 | ! this.isShown && this.$backdrop ? ( this.$backdrop.removeClass ( "in" ), a.support.transition && this.$element.hasClass ( "fade" ) ? this.$backdrop.one ( a.support.transition.end, b ).emulateTransitionEnd ( 150 ) : b ( ) ) : b && b ( ); | |
478 | }; | |
479 | var c = a.fn.modal; | |
480 | a.fn.modal = | |
481 | function (c, d) { | |
482 | return this.each ( | |
483 | function () { | |
484 | var e = a ( this ), f = e.data ( "bs.modal" ), | |
485 | g = a.extend ( | |
486 | { | |
487 | }, b.DEFAULTS, e.data ( ), "object" == typeof c && c ) ; | |
488 | f || e.data ( "bs.modal", f = new b ( this, g ) ), "string" == typeof c ? f[c] ( d ) : g.show && f.show ( d ); | |
489 | } ) ; | |
490 | }, a.fn.modal.Constructor = b, | |
491 | a.fn.modal.noConflict = | |
492 | function () { | |
493 | return a.fn.modal = c, this; | |
494 | }, | |
495 | a ( document ).on ( "click.bs.modal.data-api", '[data-toggle="modal"]', | |
496 | function (b) { | |
497 | var c = a ( this ), d = c.attr ( "href" ), e = a ( c.attr ( "data-target" ) || d && d.replace ( /.*(?=#[^\s]+$)/, "" ) ), | |
498 | f = e.data ( "modal" ) ? "toggle" : a.extend ( | |
499 | { | |
500 | remote : ! /#/.test ( d ) && d | |
501 | }, e.data ( ), c.data ( ) ) ; | |
502 | b.preventDefault ( ), | |
503 | e.modal ( f, this ).one ( "hide", | |
504 | function () { | |
505 | c.is ( ":visible" ) && c.focus ( ); | |
506 | } ) ; | |
507 | } ) , | |
508 | a ( document ).on ( "show.bs.modal", ".modal", | |
509 | function () { | |
510 | a ( document.body ).addClass ( "modal-open" ); | |
511 | } ) .on ( "hidden.bs.modal", ".modal", | |
512 | function () { | |
513 | a ( document.body ).removeClass ( "modal-open" ); | |
514 | } ) ; | |
515 | } ( jQuery ), | |
516 | + function (a) { | |
517 | "use strict"; | |
518 | var b = function (a, b) { | |
519 | this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init ( "tooltip", a, b ); | |
520 | }; | |
521 | b.DEFAULTS = | |
522 | { | |
523 | animation : ! 0, | |
524 | placement : "top", | |
525 | selector : ! 1, | |
526 | template : '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', | |
527 | trigger : "hover focus", | |
528 | title : "", | |
529 | delay : 0, | |
530 | html : ! 1, | |
531 | container : ! 1 | |
532 | }, | |
533 | b.prototype.init = | |
534 | function (b, c, d) { | |
535 | this.enabled = ! 0, this.type = b, this.$element = a ( c ), this.options = this.getOptions ( d ); | |
536 | for ( var e = this.options.trigger.split ( " " ), f = e.length ; f -- ; ) | |
537 | { | |
538 | var g = e[f]; | |
539 | if ( "click" == g ) | |
540 | this.$element.on ( "click." + this.type, this.options.selector, a.proxy ( this.toggle, this ) ); | |
541 | else | |
542 | if ( "manual" != g ) | |
543 | { | |
544 | var h = "hover" == g ? "mouseenter" : "focus", i = "hover" == g ? "mouseleave" : "blur"; | |
545 | this.$element.on ( h + "." + this.type, this.options.selector, a.proxy ( this.enter, this ) ), this.$element.on ( i + "." + this.type, this.options.selector, a.proxy ( this.leave, this ) ); | |
546 | } | |
547 | } | |
548 | this.options.selector ? this._options = a.extend ( | |
549 | { | |
550 | }, this.options, | |
551 | { | |
552 | trigger : "manual", | |
553 | selector : "" | |
554 | } ) : this.fixTitle ( ); | |
555 | }, | |
556 | b.prototype.getDefaults = | |
557 | function () { | |
558 | return b.DEFAULTS; | |
559 | }, | |
560 | b.prototype.getOptions = | |
561 | function (b) { | |
562 | return b = a.extend ( | |
563 | { | |
564 | }, this.getDefaults ( ), this.$element.data ( ), b ) , | |
565 | b.delay && "number" == typeof b.delay && ( b.delay = | |
566 | { | |
567 | show : b.delay, | |
568 | hide : b.delay | |
569 | } ), b; | |
570 | }, | |
571 | b.prototype.getDelegateOptions = | |
572 | function () { | |
573 | var b = { | |
574 | }, c = this.getDefaults ( ); | |
575 | return this._options && a.each ( this._options, | |
576 | function (a, d) { | |
577 | c[a] != d && ( b[a] = d ); | |
578 | } ) , b; | |
579 | }, | |
580 | b.prototype.enter = | |
581 | function (b) { | |
582 | var c = b instanceof this.constructor ? b : a ( b.currentTarget ) [this.type] ( this.getDelegateOptions ( ) ).data ( "bs." + this.type ); | |
583 | return clearTimeout ( c.timeout ), c.hoverState = "in", | |
584 | c.options.delay && c.options.delay.show ? ( c.timeout = setTimeout ( | |
585 | function () { | |
586 | "in" == c.hoverState && c.show ( ); | |
587 | }, c.options.delay.show ) , void 0 ) : c.show ( ); | |
588 | }, | |
589 | b.prototype.leave = | |
590 | function (b) { | |
591 | var c = b instanceof this.constructor ? b : a ( b.currentTarget ) [this.type] ( this.getDelegateOptions ( ) ).data ( "bs." + this.type ); | |
592 | return clearTimeout ( c.timeout ), c.hoverState = "out", | |
593 | c.options.delay && c.options.delay.hide ? ( c.timeout = setTimeout ( | |
594 | function () { | |
595 | "out" == c.hoverState && c.hide ( ); | |
596 | }, c.options.delay.hide ) , void 0 ) : c.hide ( ); | |
597 | }, | |
598 | b.prototype.show = | |
599 | function () { | |
600 | var b = a.Event ( "show.bs." + this.type ); | |
601 | if ( this.hasContent ( ) && this.enabled ) | |
602 | { | |
603 | if ( this.$element.trigger ( b ), b.isDefaultPrevented ( ) ) | |
604 | return ; | |
605 | var c = this.tip ( ); | |
606 | this.setContent ( ), this.options.animation && c.addClass ( "fade" ); | |
607 | var d = "function" == typeof this.options.placement ? this.options.placement.call ( this, c[0], this.$element[0] ) : this.options.placement, e = /\s?auto?\s?/i, f = e.test ( d ); | |
608 | f && ( d = d.replace ( e, "" ) || "top" ), | |
609 | c.detach ( ).css ( | |
610 | { | |
611 | top : 0, | |
612 | left : 0, | |
613 | display : "block" | |
614 | } ) .addClass ( d ), this.options.container ? c.appendTo ( this.options.container ) : c.insertAfter ( this.$element ); | |
615 | var g = this.getPosition ( ), h = c[0].offsetWidth, i = c[0].offsetHeight; | |
616 | if ( f ) | |
617 | { | |
618 | var j = this.$element.parent ( ), k = d, l = document.documentElement.scrollTop || document.body.scrollTop, m = "body" == this.options.container ? window.innerWidth : j.outerWidth ( ), n = "body" == this.options.container ? window.innerHeight : j.outerHeight ( ), o = "body" == this.options.container ? 0 : j.offset ( ).left; | |
619 | d = "bottom" == d && g.top + g.height + i - l > n ? "top" : "top" == d && g.top - l - i < 0 ? "bottom" : "right" == d && g.right + h > m ? "left" : "left" == d && g.left - h < o ? "right" : d, c.removeClass ( k ).addClass ( d ); | |
620 | } | |
621 | var p = this.getCalculatedOffset ( d, g, h, i ); | |
622 | this.applyPlacement ( p, d ), this.$element.trigger ( "shown.bs." + this.type ); | |
623 | } | |
624 | }, | |
625 | b.prototype.applyPlacement = | |
626 | function (a, b) { | |
627 | var c, d = this.tip ( ), e = d[0].offsetWidth, f = d[0].offsetHeight, g = parseInt ( d.css ( "margin-top" ), 10 ), h = parseInt ( d.css ( "margin-left" ), 10 ); | |
628 | isNaN ( g ) && ( g = 0 ), isNaN ( h ) && ( h = 0 ), a.top = a.top + g, a.left = a.left + h, d.offset ( a ).addClass ( "in" ); | |
629 | var i = d[0].offsetWidth, j = d[0].offsetHeight; | |
630 | if ( "top" == b && j != f && ( c = ! 0, a.top = a.top + f - j ), /bottom|top/.test ( b ) ) | |
631 | { | |
632 | var k = 0; | |
633 | a.left < 0 && ( k = - 2 * a.left, a.left = 0, d.offset ( a ), i = d[0].offsetWidth, j = d[0].offsetHeight ), this.replaceArrow ( k - e + i, i, "left" ); | |
634 | } | |
635 | else | |
636 | this.replaceArrow ( j - f, j, "top" ); | |
637 | c && d.offset ( a ); | |
638 | }, | |
639 | b.prototype.replaceArrow = | |
640 | function (a, b, c) { | |
641 | this.arrow ( ).css ( c, a ? 50 * ( 1 - a / b ) + "%" : "" ); | |
642 | }, | |
643 | b.prototype.setContent = | |
644 | function () { | |
645 | var a = this.tip ( ), b = this.getTitle ( ); | |
646 | a.find ( ".tooltip-inner" ) [this.options.html ? "html" : "text"] ( b ), a.removeClass ( "fade in top bottom left right" ); | |
647 | }, | |
648 | b.prototype.hide = | |
649 | function () { | |
650 | function b() { | |
651 | "in" != c.hoverState && d.detach ( ); | |
652 | } | |
653 | var c = this, d = this.tip ( ), e = a.Event ( "hide.bs." + this.type ); | |
654 | return this.$element.trigger ( e ), e.isDefaultPrevented ( ) ? void 0 : ( d.removeClass ( "in" ), a.support.transition && this.$tip.hasClass ( "fade" ) ? d.one ( a.support.transition.end, b ).emulateTransitionEnd ( 150 ) : b ( ), this.$element.trigger ( "hidden.bs." + this.type ), this ); | |
655 | }, | |
656 | b.prototype.fixTitle = | |
657 | function () { | |
658 | var a = this.$element; | |
659 | ( a.attr ( "title" ) || "string" != typeof a.attr ( "data-original-title" ) ) && a.attr ( "data-original-title", a.attr ( "title" ) || "" ).attr ( "title", "" ); | |
660 | }, | |
661 | b.prototype.hasContent = | |
662 | function () { | |
663 | return this.getTitle ( ); | |
664 | }, | |
665 | b.prototype.getPosition = | |
666 | function () { | |
667 | var b = this.$element[0]; | |
668 | return a.extend ( | |
669 | { | |
670 | }, | |
671 | "function" == typeof b.getBoundingClientRect ? b.getBoundingClientRect ( ) : | |
672 | { | |
673 | width : b.offsetWidth, | |
674 | height : b.offsetHeight | |
675 | }, this.$element.offset ( ) ) ; | |
676 | }, | |
677 | b.prototype.getCalculatedOffset = | |
678 | function (a, b, c, d) { | |
679 | return "bottom" == a ? | |
680 | { | |
681 | top : b.top + b.height, | |
682 | left : b.left + b.width / 2 - c / 2 | |
683 | } : "top" == a ? | |
684 | { | |
685 | top : b.top - d, | |
686 | left : b.left + b.width / 2 - c / 2 | |
687 | } : "left" == a ? | |
688 | { | |
689 | top : b.top + b.height / 2 - d / 2, | |
690 | left : b.left - c | |
691 | } : | |
692 | { | |
693 | top : b.top + b.height / 2 - d / 2, | |
694 | left : b.left + b.width | |
695 | }; | |
696 | }, | |
697 | b.prototype.getTitle = | |
698 | function () { | |
699 | var a, b = this.$element, c = this.options; | |
700 | return a = b.attr ( "data-original-title" ) || ( "function" == typeof c.title ? c.title.call ( b[0] ) : c.title ); | |
701 | }, | |
702 | b.prototype.tip = | |
703 | function () { | |
704 | return this.$tip = this.$tip || a ( this.options.template ); | |
705 | }, | |
706 | b.prototype.arrow = | |
707 | function () { | |
708 | return this.$arrow = this.$arrow || this.tip ( ).find ( ".tooltip-arrow" ); | |
709 | }, | |
710 | b.prototype.validate = | |
711 | function () { | |
712 | this.$element[0].parentNode || ( this.hide ( ), this.$element = null, this.options = null ); | |
713 | }, | |
714 | b.prototype.enable = | |
715 | function () { | |
716 | this.enabled = ! 0; | |
717 | }, | |
718 | b.prototype.disable = | |
719 | function () { | |
720 | this.enabled = ! 1; | |
721 | }, | |
722 | b.prototype.toggleEnabled = | |
723 | function () { | |
724 | this.enabled = ! this.enabled; | |
725 | }, | |
726 | b.prototype.toggle = | |
727 | function (b) { | |
728 | var c = b ? a ( b.currentTarget ) [this.type] ( this.getDelegateOptions ( ) ).data ( "bs." + this.type ) : this; | |
729 | c.tip ( ).hasClass ( "in" ) ? c.leave ( c ) : c.enter ( c ); | |
730 | }, | |
731 | b.prototype.destroy = | |
732 | function () { | |
733 | this.hide ( ).$element.off ( "." + this.type ).removeData ( "bs." + this.type ); | |
734 | }; | |
735 | var c = a.fn.tooltip; | |
736 | a.fn.tooltip = | |
737 | function (c) { | |
738 | return this.each ( | |
739 | function () { | |
740 | var d = a ( this ), e = d.data ( "bs.tooltip" ), f = "object" == typeof c && c; | |
741 | e || d.data ( "bs.tooltip", e = new b ( this, f ) ), "string" == typeof c && e[c] ( ); | |
742 | } ) ; | |
743 | }, a.fn.tooltip.Constructor = b, | |
744 | a.fn.tooltip.noConflict = | |
745 | function () { | |
746 | return a.fn.tooltip = c, this; | |
747 | }; | |
748 | } ( jQuery ), | |
749 | + function (a) { | |
750 | "use strict"; | |
751 | var b = function (a, b) { | |
752 | this.init ( "popover", a, b ); | |
753 | }; | |
754 | if ( ! a.fn.tooltip ) | |
755 | throw new Error ( "Popover requires tooltip.js" ) ; | |
756 | b.DEFAULTS = a.extend ( | |
757 | { | |
758 | }, a.fn.tooltip.Constructor.DEFAULTS, | |
759 | { | |
760 | placement : "right", | |
761 | trigger : "click", | |
762 | content : "", | |
763 | template : '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' | |
764 | } ) , | |
765 | b.prototype = a.extend ( | |
766 | { | |
767 | }, a.fn.tooltip.Constructor.prototype ) , b.prototype.constructor = b, | |
768 | b.prototype.getDefaults = | |
769 | function () { | |
770 | return b.DEFAULTS; | |
771 | }, | |
772 | b.prototype.setContent = | |
773 | function () { | |
774 | var a = this.tip ( ), b = this.getTitle ( ), c = this.getContent ( ); | |
775 | a.find ( ".popover-title" ) [this.options.html ? "html" : "text"] ( b ), a.find ( ".popover-content" ) [this.options.html ? "html" : "text"] ( c ), a.removeClass ( "fade top bottom left right in" ), a.find ( ".popover-title" ).html ( ) || a.find ( ".popover-title" ).hide ( ); | |
776 | }, | |
777 | b.prototype.hasContent = | |
778 | function () { | |
779 | return this.getTitle ( ) || this.getContent ( ); | |
780 | }, | |
781 | b.prototype.getContent = | |
782 | function () { | |
783 | var a = this.$element, b = this.options; | |
784 | return a.attr ( "data-content" ) || ( "function" == typeof b.content ? b.content.call ( a[0] ) : b.content ); | |
785 | }, | |
786 | b.prototype.arrow = | |
787 | function () { | |
788 | return this.$arrow = this.$arrow || this.tip ( ).find ( ".arrow" ); | |
789 | }, | |
790 | b.prototype.tip = | |
791 | function () { | |
792 | return this.$tip || ( this.$tip = a ( this.options.template ) ), this.$tip; | |
793 | }; | |
794 | var c = a.fn.popover; | |
795 | a.fn.popover = | |
796 | function (c) { | |
797 | return this.each ( | |
798 | function () { | |
799 | var d = a ( this ), e = d.data ( "bs.popover" ), f = "object" == typeof c && c; | |
800 | e || d.data ( "bs.popover", e = new b ( this, f ) ), "string" == typeof c && e[c] ( ); | |
801 | } ) ; | |
802 | }, a.fn.popover.Constructor = b, | |
803 | a.fn.popover.noConflict = | |
804 | function () { | |
805 | return a.fn.popover = c, this; | |
806 | }; | |
807 | } ( jQuery ), | |
808 | + function (a) { | |
809 | "use strict"; | |
810 | function b(c, d) { | |
811 | var e, f = a.proxy ( this.process, this ); | |
812 | this.$element = a ( c ).is ( "body" ) ? a ( window ) : a ( c ), this.$body = a ( "body" ), this.$scrollElement = this.$element.on ( "scroll.bs.scroll-spy.data-api", f ), | |
813 | this.options = a.extend ( | |
814 | { | |
815 | }, b.DEFAULTS, d ) , this.selector = ( this.options.target || ( e = a ( c ).attr ( "href" ) ) && e.replace ( /.*(?=#[^\s]+$)/, "" ) || "" ) + " .nav li > a", this.offsets = a ( [] ), this.targets = a ( [] ), this.activeTarget = null, this.refresh ( ), this.process ( ); | |
816 | } | |
817 | b.DEFAULTS = | |
818 | { | |
819 | offset : 10 | |
820 | }, | |
821 | b.prototype.refresh = | |
822 | function () { | |
823 | var b = this.$element[0] == window ? "offset" : "position"; | |
824 | this.offsets = a ( [] ), this.targets = a ( [] ); | |
825 | var c = this; | |
826 | this.$body.find ( this.selector ).map ( | |
827 | function () { | |
828 | var d = a ( this ), e = d.data ( "target" ) || d.attr ( "href" ), f = /^#\w/.test ( e ) && a ( e ); | |
829 | return f && f.length && [ [ f[b] ( ).top + ( ! a.isWindow ( c.$scrollElement.get ( 0 ) ) && c.$scrollElement.scrollTop ( ) ), e ] ] || null; | |
830 | } ) .sort ( | |
831 | function (a, b) { | |
832 | return a[0] - b[0]; | |
833 | } ) .each ( | |
834 | function () { | |
835 | c.offsets.push ( this[0] ), c.targets.push ( this[1] ); | |
836 | } ) ; | |
837 | }, | |
838 | b.prototype.process = | |
839 | function () { | |
840 | var a, b = this.$scrollElement.scrollTop ( ) + this.options.offset, c = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight, d = c - this.$scrollElement.height ( ), e = this.offsets, f = this.targets, g = this.activeTarget; | |
841 | if ( b >= d ) | |
842 | return g != ( a = f.last ( ) [0] ) && this.activate ( a ); | |
843 | for ( a = e.length ; a -- ; ) | |
844 | g != f[a] && b >= e[a] && ( ! e[a + 1] || b <= e[a + 1] ) && this.activate ( f[a] ); | |
845 | }, | |
846 | b.prototype.activate = | |
847 | function (b) { | |
848 | this.activeTarget = b, a ( this.selector ).parents ( ".active" ).removeClass ( "active" ); | |
849 | var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]', d = a ( c ).parents ( "li" ).addClass ( "active" ); | |
850 | d.parent ( ".dropdown-menu" ).length && ( d = d.closest ( "li.dropdown" ).addClass ( "active" ) ), d.trigger ( "activate" ); | |
851 | }; | |
852 | var c = a.fn.scrollspy; | |
853 | a.fn.scrollspy = | |
854 | function (c) { | |
855 | return this.each ( | |
856 | function () { | |
857 | var d = a ( this ), e = d.data ( "bs.scrollspy" ), f = "object" == typeof c && c; | |
858 | e || d.data ( "bs.scrollspy", e = new b ( this, f ) ), "string" == typeof c && e[c] ( ); | |
859 | } ) ; | |
860 | }, a.fn.scrollspy.Constructor = b, | |
861 | a.fn.scrollspy.noConflict = | |
862 | function () { | |
863 | return a.fn.scrollspy = c, this; | |
864 | }, | |
865 | a ( window ).on ( "load", | |
866 | function () { | |
867 | a ( '[data-spy="scroll"]' ).each ( | |
868 | function () { | |
869 | var b = a ( this ); | |
870 | b.scrollspy ( b.data ( ) ); | |
871 | } ) ; | |
872 | } ) ; | |
873 | } ( jQuery ), | |
874 | + function (a) { | |
875 | "use strict"; | |
876 | var b = function (b) { | |
877 | this.element = a ( b ); | |
878 | }; | |
879 | b.prototype.show = | |
880 | function () { | |
881 | var b = this.element, c = b.closest ( "ul:not(.dropdown-menu)" ), d = b.data ( "target" ); | |
882 | if ( d || ( d = b.attr ( "href" ), d = d && d.replace ( /.*(?=#[^\s]*$)/, "" ) ), ! b.parent ( "li" ).hasClass ( "active" ) ) | |
883 | { | |
884 | var e = c.find ( ".active:last a" ) [0], | |
885 | f = a.Event ( "show.bs.tab", | |
886 | { | |
887 | relatedTarget : e | |
888 | } ) ; | |
889 | if ( b.trigger ( f ), ! f.isDefaultPrevented ( ) ) | |
890 | { | |
891 | var g = a ( d ); | |
892 | this.activate ( b.parent ( "li" ), c ), | |
893 | this.activate ( g, g.parent ( ), | |
894 | function () { | |
895 | b.trigger ( | |
896 | { | |
897 | type : "shown.bs.tab", | |
898 | relatedTarget : e | |
899 | } ) ; | |
900 | } ) ; | |
901 | } | |
902 | } | |
903 | }, | |
904 | b.prototype.activate = | |
905 | function (b, c, d) { | |
906 | function e() { | |
907 | f.removeClass ( "active" ).find ( "> .dropdown-menu > .active" ).removeClass ( "active" ), b.addClass ( "active" ), g ? ( b[0].offsetWidth, b.addClass ( "in" ) ) : b.removeClass ( "fade" ), b.parent ( ".dropdown-menu" ) && b.closest ( "li.dropdown" ).addClass ( "active" ), d && d ( ); | |
908 | } | |
909 | var f = c.find ( "> .active" ), g = d && a.support.transition && f.hasClass ( "fade" ); | |
910 | g ? f.one ( a.support.transition.end, e ).emulateTransitionEnd ( 150 ) : e ( ), f.removeClass ( "in" ); | |
911 | }; | |
912 | var c = a.fn.tab; | |
913 | a.fn.tab = | |
914 | function (c) { | |
915 | return this.each ( | |
916 | function () { | |
917 | var d = a ( this ), e = d.data ( "bs.tab" ); | |
918 | e || d.data ( "bs.tab", e = new b ( this ) ), "string" == typeof c && e[c] ( ); | |
919 | } ) ; | |
920 | }, a.fn.tab.Constructor = b, | |
921 | a.fn.tab.noConflict = | |
922 | function () { | |
923 | return a.fn.tab = c, this; | |
924 | }, | |
925 | a ( document ).on ( "click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', | |
926 | function (b) { | |
927 | b.preventDefault ( ), a ( this ).tab ( "show" ); | |
928 | } ) ; | |
929 | } ( jQuery ), | |
930 | + function (a) { | |
931 | "use strict"; | |
932 | var b = function (c, d) { | |
933 | this.options = a.extend ( | |
934 | { | |
935 | }, b.DEFAULTS, d ) , this.$window = a ( window ).on ( "scroll.bs.affix.data-api", a.proxy ( this.checkPosition, this ) ).on ( "click.bs.affix.data-api", a.proxy ( this.checkPositionWithEventLoop, this ) ), this.$element = a ( c ), this.affixed = this.unpin = null, this.checkPosition ( ); | |
936 | }; | |
937 | b.RESET = "affix affix-top affix-bottom", | |
938 | b.DEFAULTS = | |
939 | { | |
940 | offset : 0 | |
941 | }, | |
942 | b.prototype.checkPositionWithEventLoop = | |
943 | function () { | |
944 | setTimeout ( a.proxy ( this.checkPosition, this ), 1 ); | |
945 | }, | |
946 | b.prototype.checkPosition = | |
947 | function () { | |
948 | if ( this.$element.is ( ":visible" ) ) | |
949 | { | |
950 | var c = a ( document ).height ( ), d = this.$window.scrollTop ( ), e = this.$element.offset ( ), f = this.options.offset, g = f.top, h = f.bottom; | |
951 | "object" != typeof f && ( h = g = f ), "function" == typeof g && ( g = f.top ( ) ), "function" == typeof h && ( h = f.bottom ( ) ); | |
952 | var i = null != this.unpin && d + this.unpin <= e.top ? ! 1 : null != h && e.top + this.$element.height ( ) >= c - h ? "bottom" : null != g && g >= d ? "top" : ! 1; | |
953 | this.affixed !== i && ( this.unpin && this.$element.css ( "top", "" ), this.affixed = i, this.unpin = "bottom" == i ? e.top - d : null, this.$element.removeClass ( b.RESET ).addClass ( "affix" + ( i ? "-" + i : "" ) ), | |
954 | "bottom" == i && this.$element.offset ( | |
955 | { | |
956 | top : document.body.offsetHeight - h - this.$element.height ( ) | |
957 | } ) ); | |
958 | } | |
959 | }; | |
960 | var c = a.fn.affix; | |
961 | a.fn.affix = | |
962 | function (c) { | |
963 | return this.each ( | |
964 | function () { | |
965 | var d = a ( this ), e = d.data ( "bs.affix" ), f = "object" == typeof c && c; | |
966 | e || d.data ( "bs.affix", e = new b ( this, f ) ), "string" == typeof c && e[c] ( ); | |
967 | } ) ; | |
968 | }, a.fn.affix.Constructor = b, | |
969 | a.fn.affix.noConflict = | |
970 | function () { | |
971 | return a.fn.affix = c, this; | |
972 | }, | |
973 | a ( window ).on ( "load", | |
974 | function () { | |
975 | a ( '[data-spy="affix"]' ).each ( | |
976 | function () { | |
977 | var b = a ( this ), c = b.data ( ); | |
978 | c.offset = c.offset || { | |
979 | }, c.offsetBottom && ( c.offset.bottom = c.offsetBottom ), c.offsetTop && ( c.offset.top = c.offsetTop ), b.affix ( c ); | |
980 | } ) ; | |
981 | } ) ; | |
982 | } ( jQuery ); |