강상위

Union with Front

...@@ -27,7 +27,7 @@ var Users = require('./models/users'); ...@@ -27,7 +27,7 @@ var Users = require('./models/users');
27 var Timetables = require('./models/timetables'); 27 var Timetables = require('./models/timetables');
28 28
29 // Client-Browser와의 공유 29 // Client-Browser와의 공유
30 -//app.use("/static", express.static("public")); 30 +app.use("/static", express.static("public"));
31 31
32 // session 32 // session
33 app.use(session({ 33 app.use(session({
......
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="Encoding" addBOMForNewFiles="with NO BOM" />
4 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<module type="WEB_MODULE" version="4">
3 + <component name="NewModuleRootManager">
4 + <content url="file://$MODULE_DIR$">
5 + <excludeFolder url="file://$MODULE_DIR$/.tmp" />
6 + <excludeFolder url="file://$MODULE_DIR$/temp" />
7 + <excludeFolder url="file://$MODULE_DIR$/tmp" />
8 + </content>
9 + <orderEntry type="inheritedJdk" />
10 + <orderEntry type="sourceFolder" forTests="false" />
11 + </component>
12 +</module>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="JavaScriptSettings">
4 + <option name="languageLevel" value="ES6" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ProjectModuleManager">
4 + <modules>
5 + <module fileurl="file://$PROJECT_DIR$/.idea/example.iml" filepath="$PROJECT_DIR$/.idea/example.iml" />
6 + </modules>
7 + </component>
8 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ChangeListManager">
4 + <list default="true" id="ad798993-023f-4135-9cdc-2f2d2c14efcb" name="Default Changelist" comment="" />
5 + <ignored path="$PROJECT_DIR$/.tmp/" />
6 + <ignored path="$PROJECT_DIR$/temp/" />
7 + <ignored path="$PROJECT_DIR$/tmp/" />
8 + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
9 + <option name="SHOW_DIALOG" value="false" />
10 + <option name="HIGHLIGHT_CONFLICTS" value="true" />
11 + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
12 + <option name="LAST_RESOLUTION" value="IGNORE" />
13 + </component>
14 + <component name="FileEditorManager">
15 + <leaf>
16 + <file pinned="false" current-in-tab="false">
17 + <entry file="file://$PROJECT_DIR$/index.html">
18 + <provider selected="true" editor-type-id="text-editor">
19 + <state>
20 + <caret selection-end-line="8" selection-end-column="7" />
21 + </state>
22 + </provider>
23 + </entry>
24 + </file>
25 + <file pinned="false" current-in-tab="true">
26 + <entry file="file://$PROJECT_DIR$/programs.html">
27 + <provider selected="true" editor-type-id="text-editor">
28 + <state relative-caret-position="494">
29 + <caret line="26" column="41" selection-start-line="26" selection-start-column="41" selection-end-line="26" selection-end-column="41" />
30 + </state>
31 + </provider>
32 + </entry>
33 + </file>
34 + <file pinned="false" current-in-tab="false">
35 + <entry file="file://$PROJECT_DIR$/mypage.html">
36 + <provider selected="true" editor-type-id="text-editor">
37 + <state relative-caret-position="285">
38 + <caret line="15" column="6" lean-forward="true" selection-start-line="10" selection-end-line="15" selection-end-column="6" />
39 + </state>
40 + </provider>
41 + </entry>
42 + </file>
43 + <file pinned="false" current-in-tab="false">
44 + <entry file="file://$PROJECT_DIR$/main.html">
45 + <provider selected="true" editor-type-id="text-editor">
46 + <state relative-caret-position="266">
47 + <caret line="14" column="94" lean-forward="true" selection-start-line="10" selection-start-column="4" selection-end-line="14" selection-end-column="94" />
48 + </state>
49 + </provider>
50 + </entry>
51 + </file>
52 + <file pinned="false" current-in-tab="false">
53 + <entry file="file://$PROJECT_DIR$/join.html">
54 + <provider selected="true" editor-type-id="text-editor">
55 + <state>
56 + <caret selection-end-line="2" selection-end-column="16" />
57 + </state>
58 + </provider>
59 + </entry>
60 + </file>
61 + </leaf>
62 + </component>
63 + <component name="IdeDocumentHistory">
64 + <option name="CHANGED_PATHS">
65 + <list>
66 + <option value="$PROJECT_DIR$/join.html" />
67 + <option value="$PROJECT_DIR$/index.html" />
68 + <option value="$PROJECT_DIR$/main.html" />
69 + <option value="$PROJECT_DIR$/mypage.html" />
70 + <option value="$PROJECT_DIR$/programs.html" />
71 + </list>
72 + </option>
73 + </component>
74 + <component name="ProjectFrameBounds">
75 + <option name="x" value="425" />
76 + <option name="y" value="39" />
77 + <option name="width" value="697" />
78 + <option name="height" value="735" />
79 + </component>
80 + <component name="ProjectView">
81 + <navigator proportions="" version="1">
82 + <foldersAlwaysOnTop value="true" />
83 + </navigator>
84 + <panes>
85 + <pane id="Scope" />
86 + <pane id="ProjectPane">
87 + <subPane>
88 + <expand>
89 + <path>
90 + <item name="example" type="b2602c69:ProjectViewProjectNode" />
91 + <item name="example" type="462c0819:PsiDirectoryNode" />
92 + </path>
93 + <path>
94 + <item name="example" type="b2602c69:ProjectViewProjectNode" />
95 + <item name="example" type="462c0819:PsiDirectoryNode" />
96 + <item name="css" type="462c0819:PsiDirectoryNode" />
97 + </path>
98 + <path>
99 + <item name="example" type="b2602c69:ProjectViewProjectNode" />
100 + <item name="example" type="462c0819:PsiDirectoryNode" />
101 + <item name="css" type="462c0819:PsiDirectoryNode" />
102 + <item name="bootstrap.css" type="620a8d5e:NestingTreeNode" />
103 + </path>
104 + <path>
105 + <item name="example" type="b2602c69:ProjectViewProjectNode" />
106 + <item name="example" type="462c0819:PsiDirectoryNode" />
107 + <item name="css" type="462c0819:PsiDirectoryNode" />
108 + <item name="bootstrap-responsive.css" type="620a8d5e:NestingTreeNode" />
109 + </path>
110 + </expand>
111 + <select />
112 + </subPane>
113 + </pane>
114 + </panes>
115 + </component>
116 + <component name="PropertiesComponent">
117 + <property name="WebServerToolWindowFactoryState" value="false" />
118 + <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
119 + <property name="nodejs_npm_path_reset_for_default_project" value="true" />
120 + </component>
121 + <component name="RecentsManager">
122 + <key name="CopyFile.RECENT_KEYS">
123 + <recent name="C:\Users\UNI\WebstormProjects\example\css" />
124 + </key>
125 + <key name="MoveFile.RECENT_KEYS">
126 + <recent name="C:\Users\UNI\WebstormProjects\example\css" />
127 + <recent name="C:\Users\UNI\WebstormProjects\example\js" />
128 + <recent name="C:\Users\UNI\WebstormProjects\example" />
129 + </key>
130 + </component>
131 + <component name="RunDashboard">
132 + <option name="ruleStates">
133 + <list>
134 + <RuleState>
135 + <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
136 + </RuleState>
137 + <RuleState>
138 + <option name="name" value="StatusDashboardGroupingRule" />
139 + </RuleState>
140 + </list>
141 + </option>
142 + </component>
143 + <component name="SvnConfiguration">
144 + <configuration />
145 + </component>
146 + <component name="TaskManager">
147 + <task active="true" id="Default" summary="Default task">
148 + <changelist id="ad798993-023f-4135-9cdc-2f2d2c14efcb" name="Default Changelist" comment="" />
149 + <created>1544532971153</created>
150 + <option name="number" value="Default" />
151 + <option name="presentableId" value="Default" />
152 + <updated>1544532971153</updated>
153 + <workItem from="1544532974007" duration="743000" />
154 + <workItem from="1544710275523" duration="2489000" />
155 + </task>
156 + <servers />
157 + </component>
158 + <component name="TimeTrackingManager">
159 + <option name="totallyTimeSpent" value="3232000" />
160 + </component>
161 + <component name="ToolWindowManager">
162 + <frame x="-7" y="0" width="697" height="735" extended-state="0" />
163 + <editor active="true" />
164 + <layout>
165 + <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24886191" />
166 + <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
167 + <window_info id="Favorites" order="2" side_tool="true" />
168 + <window_info anchor="bottom" id="Message" order="0" />
169 + <window_info anchor="bottom" id="Find" order="1" />
170 + <window_info anchor="bottom" id="Run" order="2" />
171 + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
172 + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
173 + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
174 + <window_info anchor="bottom" id="TODO" order="6" />
175 + <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
176 + <window_info anchor="bottom" id="Version Control" order="8" />
177 + <window_info anchor="bottom" id="Terminal" order="9" />
178 + <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
179 + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
180 + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
181 + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
182 + </layout>
183 + </component>
184 + <component name="TypeScriptGeneratedFilesManager">
185 + <option name="version" value="1" />
186 + </component>
187 + <component name="editorHistoryManager">
188 + <entry file="file://$PROJECT_DIR$/css/bootstrap.css">
189 + <provider selected="true" editor-type-id="text-editor">
190 + <state relative-caret-position="209">
191 + <caret line="11" column="11" lean-forward="true" selection-start-line="11" selection-start-column="11" selection-end-line="11" selection-end-column="11" />
192 + </state>
193 + </provider>
194 + </entry>
195 + <entry file="file://$PROJECT_DIR$/join.html">
196 + <provider selected="true" editor-type-id="text-editor">
197 + <state>
198 + <caret selection-end-line="2" selection-end-column="16" />
199 + </state>
200 + </provider>
201 + </entry>
202 + <entry file="file://$PROJECT_DIR$/main.html">
203 + <provider selected="true" editor-type-id="text-editor">
204 + <state relative-caret-position="266">
205 + <caret line="14" column="94" lean-forward="true" selection-start-line="10" selection-start-column="4" selection-end-line="14" selection-end-column="94" />
206 + </state>
207 + </provider>
208 + </entry>
209 + <entry file="file://$PROJECT_DIR$/index.html">
210 + <provider selected="true" editor-type-id="text-editor">
211 + <state>
212 + <caret selection-end-line="8" selection-end-column="7" />
213 + </state>
214 + </provider>
215 + </entry>
216 + <entry file="file://$PROJECT_DIR$/mypage.html">
217 + <provider selected="true" editor-type-id="text-editor">
218 + <state relative-caret-position="285">
219 + <caret line="15" column="6" lean-forward="true" selection-start-line="10" selection-end-line="15" selection-end-column="6" />
220 + </state>
221 + </provider>
222 + </entry>
223 + <entry file="file://$PROJECT_DIR$/programs.html">
224 + <provider selected="true" editor-type-id="text-editor">
225 + <state relative-caret-position="494">
226 + <caret line="26" column="41" selection-start-line="26" selection-start-column="41" selection-end-line="26" selection-end-column="41" />
227 + </state>
228 + </provider>
229 + </entry>
230 + </component>
231 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +/*!
2 + * Bootstrap Responsive v2.3.2
3 + *
4 + * Copyright 2013 Twitter, Inc
5 + * Licensed under the Apache License v2.0
6 + * http://www.apache.org/licenses/LICENSE-2.0
7 + *
8 + * Designed and built with all the love in the world by @mdo and @fat.
9 + */
10 +
11 +.clearfix {
12 + *zoom: 1;
13 +}
14 +
15 +.clearfix:before,
16 +.clearfix:after {
17 + display: table;
18 + line-height: 0;
19 + content: "";
20 +}
21 +
22 +.clearfix:after {
23 + clear: both;
24 +}
25 +
26 +.hide-text {
27 + font: 0/0 a;
28 + color: transparent;
29 + text-shadow: none;
30 + background-color: transparent;
31 + border: 0;
32 +}
33 +
34 +.input-block-level {
35 + display: block;
36 + width: 100%;
37 + min-height: 30px;
38 + -webkit-box-sizing: border-box;
39 + -moz-box-sizing: border-box;
40 + box-sizing: border-box;
41 +}
42 +
43 +@-ms-viewport {
44 + width: device-width;
45 +}
46 +
47 +.hidden {
48 + display: none;
49 + visibility: hidden;
50 +}
51 +
52 +.visible-phone {
53 + display: none !important;
54 +}
55 +
56 +.visible-tablet {
57 + display: none !important;
58 +}
59 +
60 +.hidden-desktop {
61 + display: none !important;
62 +}
63 +
64 +.visible-desktop {
65 + display: inherit !important;
66 +}
67 +
68 +@media (min-width: 768px) and (max-width: 979px) {
69 + .hidden-desktop {
70 + display: inherit !important;
71 + }
72 + .visible-desktop {
73 + display: none !important ;
74 + }
75 + .visible-tablet {
76 + display: inherit !important;
77 + }
78 + .hidden-tablet {
79 + display: none !important;
80 + }
81 +}
82 +
83 +@media (max-width: 767px) {
84 + .hidden-desktop {
85 + display: inherit !important;
86 + }
87 + .visible-desktop {
88 + display: none !important;
89 + }
90 + .visible-phone {
91 + display: inherit !important;
92 + }
93 + .hidden-phone {
94 + display: none !important;
95 + }
96 +}
97 +
98 +.visible-print {
99 + display: none !important;
100 +}
101 +
102 +@media print {
103 + .visible-print {
104 + display: inherit !important;
105 + }
106 + .hidden-print {
107 + display: none !important;
108 + }
109 +}
110 +
111 +@media (min-width: 1200px) {
112 + .row {
113 + margin-left: -30px;
114 + *zoom: 1;
115 + }
116 + .row:before,
117 + .row:after {
118 + display: table;
119 + line-height: 0;
120 + content: "";
121 + }
122 + .row:after {
123 + clear: both;
124 + }
125 + [class*="span"] {
126 + float: left;
127 + min-height: 1px;
128 + margin-left: 30px;
129 + }
130 + .container,
131 + .navbar-static-top .container,
132 + .navbar-fixed-top .container,
133 + .navbar-fixed-bottom .container {
134 + width: 1170px;
135 + }
136 + .span12 {
137 + width: 1170px;
138 + }
139 + .span11 {
140 + width: 1070px;
141 + }
142 + .span10 {
143 + width: 970px;
144 + }
145 + .span9 {
146 + width: 870px;
147 + }
148 + .span8 {
149 + width: 770px;
150 + }
151 + .span7 {
152 + width: 670px;
153 + }
154 + .span6 {
155 + width: 570px;
156 + }
157 + .span5 {
158 + width: 470px;
159 + }
160 + .span4 {
161 + width: 370px;
162 + }
163 + .span3 {
164 + width: 270px;
165 + }
166 + .span2 {
167 + width: 170px;
168 + }
169 + .span1 {
170 + width: 70px;
171 + }
172 + .offset12 {
173 + margin-left: 1230px;
174 + }
175 + .offset11 {
176 + margin-left: 1130px;
177 + }
178 + .offset10 {
179 + margin-left: 1030px;
180 + }
181 + .offset9 {
182 + margin-left: 930px;
183 + }
184 + .offset8 {
185 + margin-left: 830px;
186 + }
187 + .offset7 {
188 + margin-left: 730px;
189 + }
190 + .offset6 {
191 + margin-left: 630px;
192 + }
193 + .offset5 {
194 + margin-left: 530px;
195 + }
196 + .offset4 {
197 + margin-left: 430px;
198 + }
199 + .offset3 {
200 + margin-left: 330px;
201 + }
202 + .offset2 {
203 + margin-left: 230px;
204 + }
205 + .offset1 {
206 + margin-left: 130px;
207 + }
208 + .row-fluid {
209 + width: 100%;
210 + *zoom: 1;
211 + }
212 + .row-fluid:before,
213 + .row-fluid:after {
214 + display: table;
215 + line-height: 0;
216 + content: "";
217 + }
218 + .row-fluid:after {
219 + clear: both;
220 + }
221 + .row-fluid [class*="span"] {
222 + display: block;
223 + float: left;
224 + width: 100%;
225 + min-height: 30px;
226 + margin-left: 2.564102564102564%;
227 + *margin-left: 2.5109110747408616%;
228 + -webkit-box-sizing: border-box;
229 + -moz-box-sizing: border-box;
230 + box-sizing: border-box;
231 + }
232 + .row-fluid [class*="span"]:first-child {
233 + margin-left: 0;
234 + }
235 + .row-fluid .controls-row [class*="span"] + [class*="span"] {
236 + margin-left: 2.564102564102564%;
237 + }
238 + .row-fluid .span12 {
239 + width: 100%;
240 + *width: 99.94680851063829%;
241 + }
242 + .row-fluid .span11 {
243 + width: 91.45299145299145%;
244 + *width: 91.39979996362975%;
245 + }
246 + .row-fluid .span10 {
247 + width: 82.90598290598291%;
248 + *width: 82.8527914166212%;
249 + }
250 + .row-fluid .span9 {
251 + width: 74.35897435897436%;
252 + *width: 74.30578286961266%;
253 + }
254 + .row-fluid .span8 {
255 + width: 65.81196581196582%;
256 + *width: 65.75877432260411%;
257 + }
258 + .row-fluid .span7 {
259 + width: 57.26495726495726%;
260 + *width: 57.21176577559556%;
261 + }
262 + .row-fluid .span6 {
263 + width: 48.717948717948715%;
264 + *width: 48.664757228587014%;
265 + }
266 + .row-fluid .span5 {
267 + width: 40.17094017094017%;
268 + *width: 40.11774868157847%;
269 + }
270 + .row-fluid .span4 {
271 + width: 31.623931623931625%;
272 + *width: 31.570740134569924%;
273 + }
274 + .row-fluid .span3 {
275 + width: 23.076923076923077%;
276 + *width: 23.023731587561375%;
277 + }
278 + .row-fluid .span2 {
279 + width: 14.52991452991453%;
280 + *width: 14.476723040552828%;
281 + }
282 + .row-fluid .span1 {
283 + width: 5.982905982905983%;
284 + *width: 5.929714493544281%;
285 + }
286 + .row-fluid .offset12 {
287 + margin-left: 105.12820512820512%;
288 + *margin-left: 105.02182214948171%;
289 + }
290 + .row-fluid .offset12:first-child {
291 + margin-left: 102.56410256410257%;
292 + *margin-left: 102.45771958537915%;
293 + }
294 + .row-fluid .offset11 {
295 + margin-left: 96.58119658119658%;
296 + *margin-left: 96.47481360247316%;
297 + }
298 + .row-fluid .offset11:first-child {
299 + margin-left: 94.01709401709402%;
300 + *margin-left: 93.91071103837061%;
301 + }
302 + .row-fluid .offset10 {
303 + margin-left: 88.03418803418803%;
304 + *margin-left: 87.92780505546462%;
305 + }
306 + .row-fluid .offset10:first-child {
307 + margin-left: 85.47008547008548%;
308 + *margin-left: 85.36370249136206%;
309 + }
310 + .row-fluid .offset9 {
311 + margin-left: 79.48717948717949%;
312 + *margin-left: 79.38079650845607%;
313 + }
314 + .row-fluid .offset9:first-child {
315 + margin-left: 76.92307692307693%;
316 + *margin-left: 76.81669394435352%;
317 + }
318 + .row-fluid .offset8 {
319 + margin-left: 70.94017094017094%;
320 + *margin-left: 70.83378796144753%;
321 + }
322 + .row-fluid .offset8:first-child {
323 + margin-left: 68.37606837606839%;
324 + *margin-left: 68.26968539734497%;
325 + }
326 + .row-fluid .offset7 {
327 + margin-left: 62.393162393162385%;
328 + *margin-left: 62.28677941443899%;
329 + }
330 + .row-fluid .offset7:first-child {
331 + margin-left: 59.82905982905982%;
332 + *margin-left: 59.72267685033642%;
333 + }
334 + .row-fluid .offset6 {
335 + margin-left: 53.84615384615384%;
336 + *margin-left: 53.739770867430444%;
337 + }
338 + .row-fluid .offset6:first-child {
339 + margin-left: 51.28205128205128%;
340 + *margin-left: 51.175668303327875%;
341 + }
342 + .row-fluid .offset5 {
343 + margin-left: 45.299145299145295%;
344 + *margin-left: 45.1927623204219%;
345 + }
346 + .row-fluid .offset5:first-child {
347 + margin-left: 42.73504273504273%;
348 + *margin-left: 42.62865975631933%;
349 + }
350 + .row-fluid .offset4 {
351 + margin-left: 36.75213675213675%;
352 + *margin-left: 36.645753773413354%;
353 + }
354 + .row-fluid .offset4:first-child {
355 + margin-left: 34.18803418803419%;
356 + *margin-left: 34.081651209310785%;
357 + }
358 + .row-fluid .offset3 {
359 + margin-left: 28.205128205128204%;
360 + *margin-left: 28.0987452264048%;
361 + }
362 + .row-fluid .offset3:first-child {
363 + margin-left: 25.641025641025642%;
364 + *margin-left: 25.53464266230224%;
365 + }
366 + .row-fluid .offset2 {
367 + margin-left: 19.65811965811966%;
368 + *margin-left: 19.551736679396257%;
369 + }
370 + .row-fluid .offset2:first-child {
371 + margin-left: 17.094017094017094%;
372 + *margin-left: 16.98763411529369%;
373 + }
374 + .row-fluid .offset1 {
375 + margin-left: 11.11111111111111%;
376 + *margin-left: 11.004728132387708%;
377 + }
378 + .row-fluid .offset1:first-child {
379 + margin-left: 8.547008547008547%;
380 + *margin-left: 8.440625568285142%;
381 + }
382 + input,
383 + textarea,
384 + .uneditable-input {
385 + margin-left: 0;
386 + }
387 + .controls-row [class*="span"] + [class*="span"] {
388 + margin-left: 30px;
389 + }
390 + input.span12,
391 + textarea.span12,
392 + .uneditable-input.span12 {
393 + width: 1156px;
394 + }
395 + input.span11,
396 + textarea.span11,
397 + .uneditable-input.span11 {
398 + width: 1056px;
399 + }
400 + input.span10,
401 + textarea.span10,
402 + .uneditable-input.span10 {
403 + width: 956px;
404 + }
405 + input.span9,
406 + textarea.span9,
407 + .uneditable-input.span9 {
408 + width: 856px;
409 + }
410 + input.span8,
411 + textarea.span8,
412 + .uneditable-input.span8 {
413 + width: 756px;
414 + }
415 + input.span7,
416 + textarea.span7,
417 + .uneditable-input.span7 {
418 + width: 656px;
419 + }
420 + input.span6,
421 + textarea.span6,
422 + .uneditable-input.span6 {
423 + width: 556px;
424 + }
425 + input.span5,
426 + textarea.span5,
427 + .uneditable-input.span5 {
428 + width: 456px;
429 + }
430 + input.span4,
431 + textarea.span4,
432 + .uneditable-input.span4 {
433 + width: 356px;
434 + }
435 + input.span3,
436 + textarea.span3,
437 + .uneditable-input.span3 {
438 + width: 256px;
439 + }
440 + input.span2,
441 + textarea.span2,
442 + .uneditable-input.span2 {
443 + width: 156px;
444 + }
445 + input.span1,
446 + textarea.span1,
447 + .uneditable-input.span1 {
448 + width: 56px;
449 + }
450 + .thumbnails {
451 + margin-left: -30px;
452 + }
453 + .thumbnails > li {
454 + margin-left: 30px;
455 + }
456 + .row-fluid .thumbnails {
457 + margin-left: 0;
458 + }
459 +}
460 +
461 +@media (min-width: 768px) and (max-width: 979px) {
462 + .row {
463 + margin-left: -20px;
464 + *zoom: 1;
465 + }
466 + .row:before,
467 + .row:after {
468 + display: table;
469 + line-height: 0;
470 + content: "";
471 + }
472 + .row:after {
473 + clear: both;
474 + }
475 + [class*="span"] {
476 + float: left;
477 + min-height: 1px;
478 + margin-left: 20px;
479 + }
480 + .container,
481 + .navbar-static-top .container,
482 + .navbar-fixed-top .container,
483 + .navbar-fixed-bottom .container {
484 + width: 724px;
485 + }
486 + .span12 {
487 + width: 724px;
488 + }
489 + .span11 {
490 + width: 662px;
491 + }
492 + .span10 {
493 + width: 600px;
494 + }
495 + .span9 {
496 + width: 538px;
497 + }
498 + .span8 {
499 + width: 476px;
500 + }
501 + .span7 {
502 + width: 414px;
503 + }
504 + .span6 {
505 + width: 352px;
506 + }
507 + .span5 {
508 + width: 290px;
509 + }
510 + .span4 {
511 + width: 228px;
512 + }
513 + .span3 {
514 + width: 166px;
515 + }
516 + .span2 {
517 + width: 104px;
518 + }
519 + .span1 {
520 + width: 42px;
521 + }
522 + .offset12 {
523 + margin-left: 764px;
524 + }
525 + .offset11 {
526 + margin-left: 702px;
527 + }
528 + .offset10 {
529 + margin-left: 640px;
530 + }
531 + .offset9 {
532 + margin-left: 578px;
533 + }
534 + .offset8 {
535 + margin-left: 516px;
536 + }
537 + .offset7 {
538 + margin-left: 454px;
539 + }
540 + .offset6 {
541 + margin-left: 392px;
542 + }
543 + .offset5 {
544 + margin-left: 330px;
545 + }
546 + .offset4 {
547 + margin-left: 268px;
548 + }
549 + .offset3 {
550 + margin-left: 206px;
551 + }
552 + .offset2 {
553 + margin-left: 144px;
554 + }
555 + .offset1 {
556 + margin-left: 82px;
557 + }
558 + .row-fluid {
559 + width: 100%;
560 + *zoom: 1;
561 + }
562 + .row-fluid:before,
563 + .row-fluid:after {
564 + display: table;
565 + line-height: 0;
566 + content: "";
567 + }
568 + .row-fluid:after {
569 + clear: both;
570 + }
571 + .row-fluid [class*="span"] {
572 + display: block;
573 + float: left;
574 + width: 100%;
575 + min-height: 30px;
576 + margin-left: 2.7624309392265194%;
577 + *margin-left: 2.709239449864817%;
578 + -webkit-box-sizing: border-box;
579 + -moz-box-sizing: border-box;
580 + box-sizing: border-box;
581 + }
582 + .row-fluid [class*="span"]:first-child {
583 + margin-left: 0;
584 + }
585 + .row-fluid .controls-row [class*="span"] + [class*="span"] {
586 + margin-left: 2.7624309392265194%;
587 + }
588 + .row-fluid .span12 {
589 + width: 100%;
590 + *width: 99.94680851063829%;
591 + }
592 + .row-fluid .span11 {
593 + width: 91.43646408839778%;
594 + *width: 91.38327259903608%;
595 + }
596 + .row-fluid .span10 {
597 + width: 82.87292817679558%;
598 + *width: 82.81973668743387%;
599 + }
600 + .row-fluid .span9 {
601 + width: 74.30939226519337%;
602 + *width: 74.25620077583166%;
603 + }
604 + .row-fluid .span8 {
605 + width: 65.74585635359117%;
606 + *width: 65.69266486422946%;
607 + }
608 + .row-fluid .span7 {
609 + width: 57.18232044198895%;
610 + *width: 57.12912895262725%;
611 + }
612 + .row-fluid .span6 {
613 + width: 48.61878453038674%;
614 + *width: 48.56559304102504%;
615 + }
616 + .row-fluid .span5 {
617 + width: 40.05524861878453%;
618 + *width: 40.00205712942283%;
619 + }
620 + .row-fluid .span4 {
621 + width: 31.491712707182323%;
622 + *width: 31.43852121782062%;
623 + }
624 + .row-fluid .span3 {
625 + width: 22.92817679558011%;
626 + *width: 22.87498530621841%;
627 + }
628 + .row-fluid .span2 {
629 + width: 14.3646408839779%;
630 + *width: 14.311449394616199%;
631 + }
632 + .row-fluid .span1 {
633 + width: 5.801104972375691%;
634 + *width: 5.747913483013988%;
635 + }
636 + .row-fluid .offset12 {
637 + margin-left: 105.52486187845304%;
638 + *margin-left: 105.41847889972962%;
639 + }
640 + .row-fluid .offset12:first-child {
641 + margin-left: 102.76243093922652%;
642 + *margin-left: 102.6560479605031%;
643 + }
644 + .row-fluid .offset11 {
645 + margin-left: 96.96132596685082%;
646 + *margin-left: 96.8549429881274%;
647 + }
648 + .row-fluid .offset11:first-child {
649 + margin-left: 94.1988950276243%;
650 + *margin-left: 94.09251204890089%;
651 + }
652 + .row-fluid .offset10 {
653 + margin-left: 88.39779005524862%;
654 + *margin-left: 88.2914070765252%;
655 + }
656 + .row-fluid .offset10:first-child {
657 + margin-left: 85.6353591160221%;
658 + *margin-left: 85.52897613729868%;
659 + }
660 + .row-fluid .offset9 {
661 + margin-left: 79.8342541436464%;
662 + *margin-left: 79.72787116492299%;
663 + }
664 + .row-fluid .offset9:first-child {
665 + margin-left: 77.07182320441989%;
666 + *margin-left: 76.96544022569647%;
667 + }
668 + .row-fluid .offset8 {
669 + margin-left: 71.2707182320442%;
670 + *margin-left: 71.16433525332079%;
671 + }
672 + .row-fluid .offset8:first-child {
673 + margin-left: 68.50828729281768%;
674 + *margin-left: 68.40190431409427%;
675 + }
676 + .row-fluid .offset7 {
677 + margin-left: 62.70718232044199%;
678 + *margin-left: 62.600799341718584%;
679 + }
680 + .row-fluid .offset7:first-child {
681 + margin-left: 59.94475138121547%;
682 + *margin-left: 59.838368402492065%;
683 + }
684 + .row-fluid .offset6 {
685 + margin-left: 54.14364640883978%;
686 + *margin-left: 54.037263430116376%;
687 + }
688 + .row-fluid .offset6:first-child {
689 + margin-left: 51.38121546961326%;
690 + *margin-left: 51.27483249088986%;
691 + }
692 + .row-fluid .offset5 {
693 + margin-left: 45.58011049723757%;
694 + *margin-left: 45.47372751851417%;
695 + }
696 + .row-fluid .offset5:first-child {
697 + margin-left: 42.81767955801105%;
698 + *margin-left: 42.71129657928765%;
699 + }
700 + .row-fluid .offset4 {
701 + margin-left: 37.01657458563536%;
702 + *margin-left: 36.91019160691196%;
703 + }
704 + .row-fluid .offset4:first-child {
705 + margin-left: 34.25414364640884%;
706 + *margin-left: 34.14776066768544%;
707 + }
708 + .row-fluid .offset3 {
709 + margin-left: 28.45303867403315%;
710 + *margin-left: 28.346655695309746%;
711 + }
712 + .row-fluid .offset3:first-child {
713 + margin-left: 25.69060773480663%;
714 + *margin-left: 25.584224756083227%;
715 + }
716 + .row-fluid .offset2 {
717 + margin-left: 19.88950276243094%;
718 + *margin-left: 19.783119783707537%;
719 + }
720 + .row-fluid .offset2:first-child {
721 + margin-left: 17.12707182320442%;
722 + *margin-left: 17.02068884448102%;
723 + }
724 + .row-fluid .offset1 {
725 + margin-left: 11.32596685082873%;
726 + *margin-left: 11.219583872105325%;
727 + }
728 + .row-fluid .offset1:first-child {
729 + margin-left: 8.56353591160221%;
730 + *margin-left: 8.457152932878806%;
731 + }
732 + input,
733 + textarea,
734 + .uneditable-input {
735 + margin-left: 0;
736 + }
737 + .controls-row [class*="span"] + [class*="span"] {
738 + margin-left: 20px;
739 + }
740 + input.span12,
741 + textarea.span12,
742 + .uneditable-input.span12 {
743 + width: 710px;
744 + }
745 + input.span11,
746 + textarea.span11,
747 + .uneditable-input.span11 {
748 + width: 648px;
749 + }
750 + input.span10,
751 + textarea.span10,
752 + .uneditable-input.span10 {
753 + width: 586px;
754 + }
755 + input.span9,
756 + textarea.span9,
757 + .uneditable-input.span9 {
758 + width: 524px;
759 + }
760 + input.span8,
761 + textarea.span8,
762 + .uneditable-input.span8 {
763 + width: 462px;
764 + }
765 + input.span7,
766 + textarea.span7,
767 + .uneditable-input.span7 {
768 + width: 400px;
769 + }
770 + input.span6,
771 + textarea.span6,
772 + .uneditable-input.span6 {
773 + width: 338px;
774 + }
775 + input.span5,
776 + textarea.span5,
777 + .uneditable-input.span5 {
778 + width: 276px;
779 + }
780 + input.span4,
781 + textarea.span4,
782 + .uneditable-input.span4 {
783 + width: 214px;
784 + }
785 + input.span3,
786 + textarea.span3,
787 + .uneditable-input.span3 {
788 + width: 152px;
789 + }
790 + input.span2,
791 + textarea.span2,
792 + .uneditable-input.span2 {
793 + width: 90px;
794 + }
795 + input.span1,
796 + textarea.span1,
797 + .uneditable-input.span1 {
798 + width: 28px;
799 + }
800 +}
801 +
802 +@media (max-width: 767px) {
803 + body {
804 + padding-right: 20px;
805 + padding-left: 20px;
806 + }
807 + .navbar-fixed-top,
808 + .navbar-fixed-bottom,
809 + .navbar-static-top {
810 + margin-right: -20px;
811 + margin-left: -20px;
812 + }
813 + .container-fluid {
814 + padding: 0;
815 + }
816 + .dl-horizontal dt {
817 + float: none;
818 + width: auto;
819 + clear: none;
820 + text-align: left;
821 + }
822 + .dl-horizontal dd {
823 + margin-left: 0;
824 + }
825 + .container {
826 + width: auto;
827 + }
828 + .row-fluid {
829 + width: 100%;
830 + }
831 + .row,
832 + .thumbnails {
833 + margin-left: 0;
834 + }
835 + .thumbnails > li {
836 + float: none;
837 + margin-left: 0;
838 + }
839 + [class*="span"],
840 + .uneditable-input[class*="span"],
841 + .row-fluid [class*="span"] {
842 + display: block;
843 + float: none;
844 + width: 100%;
845 + margin-left: 0;
846 + -webkit-box-sizing: border-box;
847 + -moz-box-sizing: border-box;
848 + box-sizing: border-box;
849 + }
850 + .span12,
851 + .row-fluid .span12 {
852 + width: 100%;
853 + -webkit-box-sizing: border-box;
854 + -moz-box-sizing: border-box;
855 + box-sizing: border-box;
856 + }
857 + .row-fluid [class*="offset"]:first-child {
858 + margin-left: 0;
859 + }
860 + .input-large,
861 + .input-xlarge,
862 + .input-xxlarge,
863 + input[class*="span"],
864 + select[class*="span"],
865 + textarea[class*="span"],
866 + .uneditable-input {
867 + display: block;
868 + width: 100%;
869 + min-height: 30px;
870 + -webkit-box-sizing: border-box;
871 + -moz-box-sizing: border-box;
872 + box-sizing: border-box;
873 + }
874 + .input-prepend input,
875 + .input-append input,
876 + .input-prepend input[class*="span"],
877 + .input-append input[class*="span"] {
878 + display: inline-block;
879 + width: auto;
880 + }
881 + .controls-row [class*="span"] + [class*="span"] {
882 + margin-left: 0;
883 + }
884 + .modal {
885 + position: fixed;
886 + top: 20px;
887 + right: 20px;
888 + left: 20px;
889 + width: auto;
890 + margin: 0;
891 + }
892 + .modal.fade {
893 + top: -100px;
894 + }
895 + .modal.fade.in {
896 + top: 20px;
897 + }
898 +}
899 +
900 +@media (max-width: 480px) {
901 + .nav-collapse {
902 + -webkit-transform: translate3d(0, 0, 0);
903 + }
904 + .page-header h1 small {
905 + display: block;
906 + line-height: 20px;
907 + }
908 + input[type="checkbox"],
909 + input[type="radio"] {
910 + border: 1px solid #ccc;
911 + }
912 + .form-horizontal .control-label {
913 + float: none;
914 + width: auto;
915 + padding-top: 0;
916 + text-align: left;
917 + }
918 + .form-horizontal .controls {
919 + margin-left: 0;
920 + }
921 + .form-horizontal .control-list {
922 + padding-top: 0;
923 + }
924 + .form-horizontal .form-actions {
925 + padding-right: 10px;
926 + padding-left: 10px;
927 + }
928 + .media .pull-left,
929 + .media .pull-right {
930 + display: block;
931 + float: none;
932 + margin-bottom: 10px;
933 + }
934 + .media-object {
935 + margin-right: 0;
936 + margin-left: 0;
937 + }
938 + .modal {
939 + top: 10px;
940 + right: 10px;
941 + left: 10px;
942 + }
943 + .modal-header .close {
944 + padding: 10px;
945 + margin: -10px;
946 + }
947 + .carousel-caption {
948 + position: static;
949 + }
950 +}
951 +
952 +@media (max-width: 979px) {
953 + body {
954 + padding-top: 0;
955 + }
956 + .navbar-fixed-top,
957 + .navbar-fixed-bottom {
958 + position: static;
959 + }
960 + .navbar-fixed-top {
961 + margin-bottom: 20px;
962 + }
963 + .navbar-fixed-bottom {
964 + margin-top: 20px;
965 + }
966 + .navbar-fixed-top .navbar-inner,
967 + .navbar-fixed-bottom .navbar-inner {
968 + padding: 5px;
969 + }
970 + .navbar .container {
971 + width: auto;
972 + padding: 0;
973 + }
974 + .navbar .brand {
975 + padding-right: 10px;
976 + padding-left: 10px;
977 + margin: 0 0 0 -5px;
978 + }
979 + .nav-collapse {
980 + clear: both;
981 + }
982 + .nav-collapse .nav {
983 + float: none;
984 + margin: 0 0 10px;
985 + }
986 + .nav-collapse .nav > li {
987 + float: none;
988 + }
989 + .nav-collapse .nav > li > a {
990 + margin-bottom: 2px;
991 + }
992 + .nav-collapse .nav > .divider-vertical {
993 + display: none;
994 + }
995 + .nav-collapse .nav .nav-header {
996 + color: #777777;
997 + text-shadow: none;
998 + }
999 + .nav-collapse .nav > li > a,
1000 + .nav-collapse .dropdown-menu a {
1001 + padding: 9px 15px;
1002 + font-weight: bold;
1003 + color: #777777;
1004 + -webkit-border-radius: 3px;
1005 + -moz-border-radius: 3px;
1006 + border-radius: 3px;
1007 + }
1008 + .nav-collapse .btn {
1009 + padding: 4px 10px 4px;
1010 + font-weight: normal;
1011 + -webkit-border-radius: 4px;
1012 + -moz-border-radius: 4px;
1013 + border-radius: 4px;
1014 + }
1015 + .nav-collapse .dropdown-menu li + li a {
1016 + margin-bottom: 2px;
1017 + }
1018 + .nav-collapse .nav > li > a:hover,
1019 + .nav-collapse .nav > li > a:focus,
1020 + .nav-collapse .dropdown-menu a:hover,
1021 + .nav-collapse .dropdown-menu a:focus {
1022 + background-color: #f2f2f2;
1023 + }
1024 + .navbar-inverse .nav-collapse .nav > li > a,
1025 + .navbar-inverse .nav-collapse .dropdown-menu a {
1026 + color: #999999;
1027 + }
1028 + .navbar-inverse .nav-collapse .nav > li > a:hover,
1029 + .navbar-inverse .nav-collapse .nav > li > a:focus,
1030 + .navbar-inverse .nav-collapse .dropdown-menu a:hover,
1031 + .navbar-inverse .nav-collapse .dropdown-menu a:focus {
1032 + background-color: #111111;
1033 + }
1034 + .nav-collapse.in .btn-group {
1035 + padding: 0;
1036 + margin-top: 5px;
1037 + }
1038 + .nav-collapse .dropdown-menu {
1039 + position: static;
1040 + top: auto;
1041 + left: auto;
1042 + display: none;
1043 + float: none;
1044 + max-width: none;
1045 + padding: 0;
1046 + margin: 0 15px;
1047 + background-color: transparent;
1048 + border: none;
1049 + -webkit-border-radius: 0;
1050 + -moz-border-radius: 0;
1051 + border-radius: 0;
1052 + -webkit-box-shadow: none;
1053 + -moz-box-shadow: none;
1054 + box-shadow: none;
1055 + }
1056 + .nav-collapse .open > .dropdown-menu {
1057 + display: block;
1058 + }
1059 + .nav-collapse .dropdown-menu:before,
1060 + .nav-collapse .dropdown-menu:after {
1061 + display: none;
1062 + }
1063 + .nav-collapse .dropdown-menu .divider {
1064 + display: none;
1065 + }
1066 + .nav-collapse .nav > li > .dropdown-menu:before,
1067 + .nav-collapse .nav > li > .dropdown-menu:after {
1068 + display: none;
1069 + }
1070 + .nav-collapse .navbar-form,
1071 + .nav-collapse .navbar-search {
1072 + float: none;
1073 + padding: 10px 15px;
1074 + margin: 10px 0;
1075 + border-top: 1px solid #f2f2f2;
1076 + border-bottom: 1px solid #f2f2f2;
1077 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1078 + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1079 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
1080 + }
1081 + .navbar-inverse .nav-collapse .navbar-form,
1082 + .navbar-inverse .nav-collapse .navbar-search {
1083 + border-top-color: #111111;
1084 + border-bottom-color: #111111;
1085 + }
1086 + .navbar .nav-collapse .nav.pull-right {
1087 + float: none;
1088 + margin-left: 0;
1089 + }
1090 + .nav-collapse,
1091 + .nav-collapse.collapse {
1092 + height: 0;
1093 + overflow: hidden;
1094 + }
1095 + .navbar .btn-navbar {
1096 + display: block;
1097 + }
1098 + .navbar-static .navbar-inner {
1099 + padding-right: 10px;
1100 + padding-left: 10px;
1101 + }
1102 +}
1103 +
1104 +@media (min-width: 980px) {
1105 + .nav-collapse.collapse {
1106 + height: auto !important;
1107 + overflow: visible !important;
1108 + }
1109 +}
1 +/*!
2 + * Bootstrap Responsive v2.3.2
3 + *
4 + * Copyright 2013 Twitter, Inc
5 + * Licensed under the Apache License v2.0
6 + * http://www.apache.org/licenses/LICENSE-2.0
7 + *
8 + * Designed and built with all the love in the world by @mdo and @fat.
9 + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +/* ===================================================
2 + * bootstrap-transition.js v2.3.2
3 + * http://getbootstrap.com/2.3.2/javascript.html#transitions
4 + * ===================================================
5 + * Copyright 2013 Twitter, Inc.
6 + *
7 + * Licensed under the Apache License, Version 2.0 (the "License");
8 + * you may not use this file except in compliance with the License.
9 + * You may obtain a copy of the License at
10 + *
11 + * http://www.apache.org/licenses/LICENSE-2.0
12 + *
13 + * Unless required by applicable law or agreed to in writing, software
14 + * distributed under the License is distributed on an "AS IS" BASIS,
15 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 + * See the License for the specific language governing permissions and
17 + * limitations under the License.
18 + * ========================================================== */
19 +
20 +
21 +!function ($) {
22 +
23 + "use strict"; // jshint ;_;
24 +
25 +
26 + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
27 + * ======================================================= */
28 +
29 + $(function () {
30 +
31 + $.support.transition = (function () {
32 +
33 + var transitionEnd = (function () {
34 +
35 + var el = document.createElement('bootstrap')
36 + , transEndEventNames = {
37 + 'WebkitTransition' : 'webkitTransitionEnd'
38 + , 'MozTransition' : 'transitionend'
39 + , 'OTransition' : 'oTransitionEnd otransitionend'
40 + , 'transition' : 'transitionend'
41 + }
42 + , name
43 +
44 + for (name in transEndEventNames){
45 + if (el.style[name] !== undefined) {
46 + return transEndEventNames[name]
47 + }
48 + }
49 +
50 + }())
51 +
52 + return transitionEnd && {
53 + end: transitionEnd
54 + }
55 +
56 + })()
57 +
58 + })
59 +
60 +}(window.jQuery);/* ==========================================================
61 + * bootstrap-alert.js v2.3.2
62 + * http://getbootstrap.com/2.3.2/javascript.html#alerts
63 + * ==========================================================
64 + * Copyright 2013 Twitter, Inc.
65 + *
66 + * Licensed under the Apache License, Version 2.0 (the "License");
67 + * you may not use this file except in compliance with the License.
68 + * You may obtain a copy of the License at
69 + *
70 + * http://www.apache.org/licenses/LICENSE-2.0
71 + *
72 + * Unless required by applicable law or agreed to in writing, software
73 + * distributed under the License is distributed on an "AS IS" BASIS,
74 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
75 + * See the License for the specific language governing permissions and
76 + * limitations under the License.
77 + * ========================================================== */
78 +
79 +
80 +!function ($) {
81 +
82 + "use strict"; // jshint ;_;
83 +
84 +
85 + /* ALERT CLASS DEFINITION
86 + * ====================== */
87 +
88 + var dismiss = '[data-dismiss="alert"]'
89 + , Alert = function (el) {
90 + $(el).on('click', dismiss, this.close)
91 + }
92 +
93 + Alert.prototype.close = function (e) {
94 + var $this = $(this)
95 + , selector = $this.attr('data-target')
96 + , $parent
97 +
98 + if (!selector) {
99 + selector = $this.attr('href')
100 + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
101 + }
102 +
103 + $parent = $(selector)
104 +
105 + e && e.preventDefault()
106 +
107 + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
108 +
109 + $parent.trigger(e = $.Event('close'))
110 +
111 + if (e.isDefaultPrevented()) return
112 +
113 + $parent.removeClass('in')
114 +
115 + function removeElement() {
116 + $parent
117 + .trigger('closed')
118 + .remove()
119 + }
120 +
121 + $.support.transition && $parent.hasClass('fade') ?
122 + $parent.on($.support.transition.end, removeElement) :
123 + removeElement()
124 + }
125 +
126 +
127 + /* ALERT PLUGIN DEFINITION
128 + * ======================= */
129 +
130 + var old = $.fn.alert
131 +
132 + $.fn.alert = function (option) {
133 + return this.each(function () {
134 + var $this = $(this)
135 + , data = $this.data('alert')
136 + if (!data) $this.data('alert', (data = new Alert(this)))
137 + if (typeof option == 'string') data[option].call($this)
138 + })
139 + }
140 +
141 + $.fn.alert.Constructor = Alert
142 +
143 +
144 + /* ALERT NO CONFLICT
145 + * ================= */
146 +
147 + $.fn.alert.noConflict = function () {
148 + $.fn.alert = old
149 + return this
150 + }
151 +
152 +
153 + /* ALERT DATA-API
154 + * ============== */
155 +
156 + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
157 +
158 +}(window.jQuery);/* ============================================================
159 + * bootstrap-button.js v2.3.2
160 + * http://getbootstrap.com/2.3.2/javascript.html#buttons
161 + * ============================================================
162 + * Copyright 2013 Twitter, Inc.
163 + *
164 + * Licensed under the Apache License, Version 2.0 (the "License");
165 + * you may not use this file except in compliance with the License.
166 + * You may obtain a copy of the License at
167 + *
168 + * http://www.apache.org/licenses/LICENSE-2.0
169 + *
170 + * Unless required by applicable law or agreed to in writing, software
171 + * distributed under the License is distributed on an "AS IS" BASIS,
172 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
173 + * See the License for the specific language governing permissions and
174 + * limitations under the License.
175 + * ============================================================ */
176 +
177 +
178 +!function ($) {
179 +
180 + "use strict"; // jshint ;_;
181 +
182 +
183 + /* BUTTON PUBLIC CLASS DEFINITION
184 + * ============================== */
185 +
186 + var Button = function (element, options) {
187 + this.$element = $(element)
188 + this.options = $.extend({}, $.fn.button.defaults, options)
189 + }
190 +
191 + Button.prototype.setState = function (state) {
192 + var d = 'disabled'
193 + , $el = this.$element
194 + , data = $el.data()
195 + , val = $el.is('input') ? 'val' : 'html'
196 +
197 + state = state + 'Text'
198 + data.resetText || $el.data('resetText', $el[val]())
199 +
200 + $el[val](data[state] || this.options[state])
201 +
202 + // push to event loop to allow forms to submit
203 + setTimeout(function () {
204 + state == 'loadingText' ?
205 + $el.addClass(d).attr(d, d) :
206 + $el.removeClass(d).removeAttr(d)
207 + }, 0)
208 + }
209 +
210 + Button.prototype.toggle = function () {
211 + var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
212 +
213 + $parent && $parent
214 + .find('.active')
215 + .removeClass('active')
216 +
217 + this.$element.toggleClass('active')
218 + }
219 +
220 +
221 + /* BUTTON PLUGIN DEFINITION
222 + * ======================== */
223 +
224 + var old = $.fn.button
225 +
226 + $.fn.button = function (option) {
227 + return this.each(function () {
228 + var $this = $(this)
229 + , data = $this.data('button')
230 + , options = typeof option == 'object' && option
231 + if (!data) $this.data('button', (data = new Button(this, options)))
232 + if (option == 'toggle') data.toggle()
233 + else if (option) data.setState(option)
234 + })
235 + }
236 +
237 + $.fn.button.defaults = {
238 + loadingText: 'loading...'
239 + }
240 +
241 + $.fn.button.Constructor = Button
242 +
243 +
244 + /* BUTTON NO CONFLICT
245 + * ================== */
246 +
247 + $.fn.button.noConflict = function () {
248 + $.fn.button = old
249 + return this
250 + }
251 +
252 +
253 + /* BUTTON DATA-API
254 + * =============== */
255 +
256 + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
257 + var $btn = $(e.target)
258 + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
259 + $btn.button('toggle')
260 + })
261 +
262 +}(window.jQuery);/* ==========================================================
263 + * bootstrap-carousel.js v2.3.2
264 + * http://getbootstrap.com/2.3.2/javascript.html#carousel
265 + * ==========================================================
266 + * Copyright 2013 Twitter, Inc.
267 + *
268 + * Licensed under the Apache License, Version 2.0 (the "License");
269 + * you may not use this file except in compliance with the License.
270 + * You may obtain a copy of the License at
271 + *
272 + * http://www.apache.org/licenses/LICENSE-2.0
273 + *
274 + * Unless required by applicable law or agreed to in writing, software
275 + * distributed under the License is distributed on an "AS IS" BASIS,
276 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
277 + * See the License for the specific language governing permissions and
278 + * limitations under the License.
279 + * ========================================================== */
280 +
281 +
282 +!function ($) {
283 +
284 + "use strict"; // jshint ;_;
285 +
286 +
287 + /* CAROUSEL CLASS DEFINITION
288 + * ========================= */
289 +
290 + var Carousel = function (element, options) {
291 + this.$element = $(element)
292 + this.$indicators = this.$element.find('.carousel-indicators')
293 + this.options = options
294 + this.options.pause == 'hover' && this.$element
295 + .on('mouseenter', $.proxy(this.pause, this))
296 + .on('mouseleave', $.proxy(this.cycle, this))
297 + }
298 +
299 + Carousel.prototype = {
300 +
301 + cycle: function (e) {
302 + if (!e) this.paused = false
303 + if (this.interval) clearInterval(this.interval);
304 + this.options.interval
305 + && !this.paused
306 + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
307 + return this
308 + }
309 +
310 + , getActiveIndex: function () {
311 + this.$active = this.$element.find('.item.active')
312 + this.$items = this.$active.parent().children()
313 + return this.$items.index(this.$active)
314 + }
315 +
316 + , to: function (pos) {
317 + var activeIndex = this.getActiveIndex()
318 + , that = this
319 +
320 + if (pos > (this.$items.length - 1) || pos < 0) return
321 +
322 + if (this.sliding) {
323 + return this.$element.one('slid', function () {
324 + that.to(pos)
325 + })
326 + }
327 +
328 + if (activeIndex == pos) {
329 + return this.pause().cycle()
330 + }
331 +
332 + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
333 + }
334 +
335 + , pause: function (e) {
336 + if (!e) this.paused = true
337 + if (this.$element.find('.next, .prev').length && $.support.transition.end) {
338 + this.$element.trigger($.support.transition.end)
339 + this.cycle(true)
340 + }
341 + clearInterval(this.interval)
342 + this.interval = null
343 + return this
344 + }
345 +
346 + , next: function () {
347 + if (this.sliding) return
348 + return this.slide('next')
349 + }
350 +
351 + , prev: function () {
352 + if (this.sliding) return
353 + return this.slide('prev')
354 + }
355 +
356 + , slide: function (type, next) {
357 + var $active = this.$element.find('.item.active')
358 + , $next = next || $active[type]()
359 + , isCycling = this.interval
360 + , direction = type == 'next' ? 'left' : 'right'
361 + , fallback = type == 'next' ? 'first' : 'last'
362 + , that = this
363 + , e
364 +
365 + this.sliding = true
366 +
367 + isCycling && this.pause()
368 +
369 + $next = $next.length ? $next : this.$element.find('.item')[fallback]()
370 +
371 + e = $.Event('slide', {
372 + relatedTarget: $next[0]
373 + , direction: direction
374 + })
375 +
376 + if ($next.hasClass('active')) return
377 +
378 + if (this.$indicators.length) {
379 + this.$indicators.find('.active').removeClass('active')
380 + this.$element.one('slid', function () {
381 + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
382 + $nextIndicator && $nextIndicator.addClass('active')
383 + })
384 + }
385 +
386 + if ($.support.transition && this.$element.hasClass('slide')) {
387 + this.$element.trigger(e)
388 + if (e.isDefaultPrevented()) return
389 + $next.addClass(type)
390 + $next[0].offsetWidth // force reflow
391 + $active.addClass(direction)
392 + $next.addClass(direction)
393 + this.$element.one($.support.transition.end, function () {
394 + $next.removeClass([type, direction].join(' ')).addClass('active')
395 + $active.removeClass(['active', direction].join(' '))
396 + that.sliding = false
397 + setTimeout(function () { that.$element.trigger('slid') }, 0)
398 + })
399 + } else {
400 + this.$element.trigger(e)
401 + if (e.isDefaultPrevented()) return
402 + $active.removeClass('active')
403 + $next.addClass('active')
404 + this.sliding = false
405 + this.$element.trigger('slid')
406 + }
407 +
408 + isCycling && this.cycle()
409 +
410 + return this
411 + }
412 +
413 + }
414 +
415 +
416 + /* CAROUSEL PLUGIN DEFINITION
417 + * ========================== */
418 +
419 + var old = $.fn.carousel
420 +
421 + $.fn.carousel = function (option) {
422 + return this.each(function () {
423 + var $this = $(this)
424 + , data = $this.data('carousel')
425 + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
426 + , action = typeof option == 'string' ? option : options.slide
427 + if (!data) $this.data('carousel', (data = new Carousel(this, options)))
428 + if (typeof option == 'number') data.to(option)
429 + else if (action) data[action]()
430 + else if (options.interval) data.pause().cycle()
431 + })
432 + }
433 +
434 + $.fn.carousel.defaults = {
435 + interval: 5000
436 + , pause: 'hover'
437 + }
438 +
439 + $.fn.carousel.Constructor = Carousel
440 +
441 +
442 + /* CAROUSEL NO CONFLICT
443 + * ==================== */
444 +
445 + $.fn.carousel.noConflict = function () {
446 + $.fn.carousel = old
447 + return this
448 + }
449 +
450 + /* CAROUSEL DATA-API
451 + * ================= */
452 +
453 + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
454 + var $this = $(this), href
455 + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
456 + , options = $.extend({}, $target.data(), $this.data())
457 + , slideIndex
458 +
459 + $target.carousel(options)
460 +
461 + if (slideIndex = $this.attr('data-slide-to')) {
462 + $target.data('carousel').pause().to(slideIndex).cycle()
463 + }
464 +
465 + e.preventDefault()
466 + })
467 +
468 +}(window.jQuery);/* =============================================================
469 + * bootstrap-collapse.js v2.3.2
470 + * http://getbootstrap.com/2.3.2/javascript.html#collapse
471 + * =============================================================
472 + * Copyright 2013 Twitter, Inc.
473 + *
474 + * Licensed under the Apache License, Version 2.0 (the "License");
475 + * you may not use this file except in compliance with the License.
476 + * You may obtain a copy of the License at
477 + *
478 + * http://www.apache.org/licenses/LICENSE-2.0
479 + *
480 + * Unless required by applicable law or agreed to in writing, software
481 + * distributed under the License is distributed on an "AS IS" BASIS,
482 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
483 + * See the License for the specific language governing permissions and
484 + * limitations under the License.
485 + * ============================================================ */
486 +
487 +
488 +!function ($) {
489 +
490 + "use strict"; // jshint ;_;
491 +
492 +
493 + /* COLLAPSE PUBLIC CLASS DEFINITION
494 + * ================================ */
495 +
496 + var Collapse = function (element, options) {
497 + this.$element = $(element)
498 + this.options = $.extend({}, $.fn.collapse.defaults, options)
499 +
500 + if (this.options.parent) {
501 + this.$parent = $(this.options.parent)
502 + }
503 +
504 + this.options.toggle && this.toggle()
505 + }
506 +
507 + Collapse.prototype = {
508 +
509 + constructor: Collapse
510 +
511 + , dimension: function () {
512 + var hasWidth = this.$element.hasClass('width')
513 + return hasWidth ? 'width' : 'height'
514 + }
515 +
516 + , show: function () {
517 + var dimension
518 + , scroll
519 + , actives
520 + , hasData
521 +
522 + if (this.transitioning || this.$element.hasClass('in')) return
523 +
524 + dimension = this.dimension()
525 + scroll = $.camelCase(['scroll', dimension].join('-'))
526 + actives = this.$parent && this.$parent.find('> .accordion-group > .in')
527 +
528 + if (actives && actives.length) {
529 + hasData = actives.data('collapse')
530 + if (hasData && hasData.transitioning) return
531 + actives.collapse('hide')
532 + hasData || actives.data('collapse', null)
533 + }
534 +
535 + this.$element[dimension](0)
536 + this.transition('addClass', $.Event('show'), 'shown')
537 + $.support.transition && this.$element[dimension](this.$element[0][scroll])
538 + }
539 +
540 + , hide: function () {
541 + var dimension
542 + if (this.transitioning || !this.$element.hasClass('in')) return
543 + dimension = this.dimension()
544 + this.reset(this.$element[dimension]())
545 + this.transition('removeClass', $.Event('hide'), 'hidden')
546 + this.$element[dimension](0)
547 + }
548 +
549 + , reset: function (size) {
550 + var dimension = this.dimension()
551 +
552 + this.$element
553 + .removeClass('collapse')
554 + [dimension](size || 'auto')
555 + [0].offsetWidth
556 +
557 + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
558 +
559 + return this
560 + }
561 +
562 + , transition: function (method, startEvent, completeEvent) {
563 + var that = this
564 + , complete = function () {
565 + if (startEvent.type == 'show') that.reset()
566 + that.transitioning = 0
567 + that.$element.trigger(completeEvent)
568 + }
569 +
570 + this.$element.trigger(startEvent)
571 +
572 + if (startEvent.isDefaultPrevented()) return
573 +
574 + this.transitioning = 1
575 +
576 + this.$element[method]('in')
577 +
578 + $.support.transition && this.$element.hasClass('collapse') ?
579 + this.$element.one($.support.transition.end, complete) :
580 + complete()
581 + }
582 +
583 + , toggle: function () {
584 + this[this.$element.hasClass('in') ? 'hide' : 'show']()
585 + }
586 +
587 + }
588 +
589 +
590 + /* COLLAPSE PLUGIN DEFINITION
591 + * ========================== */
592 +
593 + var old = $.fn.collapse
594 +
595 + $.fn.collapse = function (option) {
596 + return this.each(function () {
597 + var $this = $(this)
598 + , data = $this.data('collapse')
599 + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
600 + if (!data) $this.data('collapse', (data = new Collapse(this, options)))
601 + if (typeof option == 'string') data[option]()
602 + })
603 + }
604 +
605 + $.fn.collapse.defaults = {
606 + toggle: true
607 + }
608 +
609 + $.fn.collapse.Constructor = Collapse
610 +
611 +
612 + /* COLLAPSE NO CONFLICT
613 + * ==================== */
614 +
615 + $.fn.collapse.noConflict = function () {
616 + $.fn.collapse = old
617 + return this
618 + }
619 +
620 +
621 + /* COLLAPSE DATA-API
622 + * ================= */
623 +
624 + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
625 + var $this = $(this), href
626 + , target = $this.attr('data-target')
627 + || e.preventDefault()
628 + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
629 + , option = $(target).data('collapse') ? 'toggle' : $this.data()
630 + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
631 + $(target).collapse(option)
632 + })
633 +
634 +}(window.jQuery);/* ============================================================
635 + * bootstrap-dropdown.js v2.3.2
636 + * http://getbootstrap.com/2.3.2/javascript.html#dropdowns
637 + * ============================================================
638 + * Copyright 2013 Twitter, Inc.
639 + *
640 + * Licensed under the Apache License, Version 2.0 (the "License");
641 + * you may not use this file except in compliance with the License.
642 + * You may obtain a copy of the License at
643 + *
644 + * http://www.apache.org/licenses/LICENSE-2.0
645 + *
646 + * Unless required by applicable law or agreed to in writing, software
647 + * distributed under the License is distributed on an "AS IS" BASIS,
648 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
649 + * See the License for the specific language governing permissions and
650 + * limitations under the License.
651 + * ============================================================ */
652 +
653 +
654 +!function ($) {
655 +
656 + "use strict"; // jshint ;_;
657 +
658 +
659 + /* DROPDOWN CLASS DEFINITION
660 + * ========================= */
661 +
662 + var toggle = '[data-toggle=dropdown]'
663 + , Dropdown = function (element) {
664 + var $el = $(element).on('click.dropdown.data-api', this.toggle)
665 + $('html').on('click.dropdown.data-api', function () {
666 + $el.parent().removeClass('open')
667 + })
668 + }
669 +
670 + Dropdown.prototype = {
671 +
672 + constructor: Dropdown
673 +
674 + , toggle: function (e) {
675 + var $this = $(this)
676 + , $parent
677 + , isActive
678 +
679 + if ($this.is('.disabled, :disabled')) return
680 +
681 + $parent = getParent($this)
682 +
683 + isActive = $parent.hasClass('open')
684 +
685 + clearMenus()
686 +
687 + if (!isActive) {
688 + if ('ontouchstart' in document.documentElement) {
689 + // if mobile we we use a backdrop because click events don't delegate
690 + $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
691 + }
692 + $parent.toggleClass('open')
693 + }
694 +
695 + $this.focus()
696 +
697 + return false
698 + }
699 +
700 + , keydown: function (e) {
701 + var $this
702 + , $items
703 + , $active
704 + , $parent
705 + , isActive
706 + , index
707 +
708 + if (!/(38|40|27)/.test(e.keyCode)) return
709 +
710 + $this = $(this)
711 +
712 + e.preventDefault()
713 + e.stopPropagation()
714 +
715 + if ($this.is('.disabled, :disabled')) return
716 +
717 + $parent = getParent($this)
718 +
719 + isActive = $parent.hasClass('open')
720 +
721 + if (!isActive || (isActive && e.keyCode == 27)) {
722 + if (e.which == 27) $parent.find(toggle).focus()
723 + return $this.click()
724 + }
725 +
726 + $items = $('[role=menu] li:not(.divider):visible a', $parent)
727 +
728 + if (!$items.length) return
729 +
730 + index = $items.index($items.filter(':focus'))
731 +
732 + if (e.keyCode == 38 && index > 0) index-- // up
733 + if (e.keyCode == 40 && index < $items.length - 1) index++ // down
734 + if (!~index) index = 0
735 +
736 + $items
737 + .eq(index)
738 + .focus()
739 + }
740 +
741 + }
742 +
743 + function clearMenus() {
744 + $('.dropdown-backdrop').remove()
745 + $(toggle).each(function () {
746 + getParent($(this)).removeClass('open')
747 + })
748 + }
749 +
750 + function getParent($this) {
751 + var selector = $this.attr('data-target')
752 + , $parent
753 +
754 + if (!selector) {
755 + selector = $this.attr('href')
756 + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
757 + }
758 +
759 + $parent = selector && $(selector)
760 +
761 + if (!$parent || !$parent.length) $parent = $this.parent()
762 +
763 + return $parent
764 + }
765 +
766 +
767 + /* DROPDOWN PLUGIN DEFINITION
768 + * ========================== */
769 +
770 + var old = $.fn.dropdown
771 +
772 + $.fn.dropdown = function (option) {
773 + return this.each(function () {
774 + var $this = $(this)
775 + , data = $this.data('dropdown')
776 + if (!data) $this.data('dropdown', (data = new Dropdown(this)))
777 + if (typeof option == 'string') data[option].call($this)
778 + })
779 + }
780 +
781 + $.fn.dropdown.Constructor = Dropdown
782 +
783 +
784 + /* DROPDOWN NO CONFLICT
785 + * ==================== */
786 +
787 + $.fn.dropdown.noConflict = function () {
788 + $.fn.dropdown = old
789 + return this
790 + }
791 +
792 +
793 + /* APPLY TO STANDARD DROPDOWN ELEMENTS
794 + * =================================== */
795 +
796 + $(document)
797 + .on('click.dropdown.data-api', clearMenus)
798 + .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
799 + .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
800 + .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
801 +
802 +}(window.jQuery);
803 +/* =========================================================
804 + * bootstrap-modal.js v2.3.2
805 + * http://getbootstrap.com/2.3.2/javascript.html#modals
806 + * =========================================================
807 + * Copyright 2013 Twitter, Inc.
808 + *
809 + * Licensed under the Apache License, Version 2.0 (the "License");
810 + * you may not use this file except in compliance with the License.
811 + * You may obtain a copy of the License at
812 + *
813 + * http://www.apache.org/licenses/LICENSE-2.0
814 + *
815 + * Unless required by applicable law or agreed to in writing, software
816 + * distributed under the License is distributed on an "AS IS" BASIS,
817 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
818 + * See the License for the specific language governing permissions and
819 + * limitations under the License.
820 + * ========================================================= */
821 +
822 +
823 +!function ($) {
824 +
825 + "use strict"; // jshint ;_;
826 +
827 +
828 + /* MODAL CLASS DEFINITION
829 + * ====================== */
830 +
831 + var Modal = function (element, options) {
832 + this.options = options
833 + this.$element = $(element)
834 + .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
835 + this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
836 + }
837 +
838 + Modal.prototype = {
839 +
840 + constructor: Modal
841 +
842 + , toggle: function () {
843 + return this[!this.isShown ? 'show' : 'hide']()
844 + }
845 +
846 + , show: function () {
847 + var that = this
848 + , e = $.Event('show')
849 +
850 + this.$element.trigger(e)
851 +
852 + if (this.isShown || e.isDefaultPrevented()) return
853 +
854 + this.isShown = true
855 +
856 + this.escape()
857 +
858 + this.backdrop(function () {
859 + var transition = $.support.transition && that.$element.hasClass('fade')
860 +
861 + if (!that.$element.parent().length) {
862 + that.$element.appendTo(document.body) //don't move modals dom position
863 + }
864 +
865 + that.$element.show()
866 +
867 + if (transition) {
868 + that.$element[0].offsetWidth // force reflow
869 + }
870 +
871 + that.$element
872 + .addClass('in')
873 + .attr('aria-hidden', false)
874 +
875 + that.enforceFocus()
876 +
877 + transition ?
878 + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
879 + that.$element.focus().trigger('shown')
880 +
881 + })
882 + }
883 +
884 + , hide: function (e) {
885 + e && e.preventDefault()
886 +
887 + var that = this
888 +
889 + e = $.Event('hide')
890 +
891 + this.$element.trigger(e)
892 +
893 + if (!this.isShown || e.isDefaultPrevented()) return
894 +
895 + this.isShown = false
896 +
897 + this.escape()
898 +
899 + $(document).off('focusin.modal')
900 +
901 + this.$element
902 + .removeClass('in')
903 + .attr('aria-hidden', true)
904 +
905 + $.support.transition && this.$element.hasClass('fade') ?
906 + this.hideWithTransition() :
907 + this.hideModal()
908 + }
909 +
910 + , enforceFocus: function () {
911 + var that = this
912 + $(document).on('focusin.modal', function (e) {
913 + if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
914 + that.$element.focus()
915 + }
916 + })
917 + }
918 +
919 + , escape: function () {
920 + var that = this
921 + if (this.isShown && this.options.keyboard) {
922 + this.$element.on('keyup.dismiss.modal', function ( e ) {
923 + e.which == 27 && that.hide()
924 + })
925 + } else if (!this.isShown) {
926 + this.$element.off('keyup.dismiss.modal')
927 + }
928 + }
929 +
930 + , hideWithTransition: function () {
931 + var that = this
932 + , timeout = setTimeout(function () {
933 + that.$element.off($.support.transition.end)
934 + that.hideModal()
935 + }, 500)
936 +
937 + this.$element.one($.support.transition.end, function () {
938 + clearTimeout(timeout)
939 + that.hideModal()
940 + })
941 + }
942 +
943 + , hideModal: function () {
944 + var that = this
945 + this.$element.hide()
946 + this.backdrop(function () {
947 + that.removeBackdrop()
948 + that.$element.trigger('hidden')
949 + })
950 + }
951 +
952 + , removeBackdrop: function () {
953 + this.$backdrop && this.$backdrop.remove()
954 + this.$backdrop = null
955 + }
956 +
957 + , backdrop: function (callback) {
958 + var that = this
959 + , animate = this.$element.hasClass('fade') ? 'fade' : ''
960 +
961 + if (this.isShown && this.options.backdrop) {
962 + var doAnimate = $.support.transition && animate
963 +
964 + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
965 + .appendTo(document.body)
966 +
967 + this.$backdrop.click(
968 + this.options.backdrop == 'static' ?
969 + $.proxy(this.$element[0].focus, this.$element[0])
970 + : $.proxy(this.hide, this)
971 + )
972 +
973 + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
974 +
975 + this.$backdrop.addClass('in')
976 +
977 + if (!callback) return
978 +
979 + doAnimate ?
980 + this.$backdrop.one($.support.transition.end, callback) :
981 + callback()
982 +
983 + } else if (!this.isShown && this.$backdrop) {
984 + this.$backdrop.removeClass('in')
985 +
986 + $.support.transition && this.$element.hasClass('fade')?
987 + this.$backdrop.one($.support.transition.end, callback) :
988 + callback()
989 +
990 + } else if (callback) {
991 + callback()
992 + }
993 + }
994 + }
995 +
996 +
997 + /* MODAL PLUGIN DEFINITION
998 + * ======================= */
999 +
1000 + var old = $.fn.modal
1001 +
1002 + $.fn.modal = function (option) {
1003 + return this.each(function () {
1004 + var $this = $(this)
1005 + , data = $this.data('modal')
1006 + , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
1007 + if (!data) $this.data('modal', (data = new Modal(this, options)))
1008 + if (typeof option == 'string') data[option]()
1009 + else if (options.show) data.show()
1010 + })
1011 + }
1012 +
1013 + $.fn.modal.defaults = {
1014 + backdrop: true
1015 + , keyboard: true
1016 + , show: true
1017 + }
1018 +
1019 + $.fn.modal.Constructor = Modal
1020 +
1021 +
1022 + /* MODAL NO CONFLICT
1023 + * ================= */
1024 +
1025 + $.fn.modal.noConflict = function () {
1026 + $.fn.modal = old
1027 + return this
1028 + }
1029 +
1030 +
1031 + /* MODAL DATA-API
1032 + * ============== */
1033 +
1034 + $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
1035 + var $this = $(this)
1036 + , href = $this.attr('href')
1037 + , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1038 + , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
1039 +
1040 + e.preventDefault()
1041 +
1042 + $target
1043 + .modal(option)
1044 + .one('hide', function () {
1045 + $this.focus()
1046 + })
1047 + })
1048 +
1049 +}(window.jQuery);
1050 +/* ===========================================================
1051 + * bootstrap-tooltip.js v2.3.2
1052 + * http://getbootstrap.com/2.3.2/javascript.html#tooltips
1053 + * Inspired by the original jQuery.tipsy by Jason Frame
1054 + * ===========================================================
1055 + * Copyright 2013 Twitter, Inc.
1056 + *
1057 + * Licensed under the Apache License, Version 2.0 (the "License");
1058 + * you may not use this file except in compliance with the License.
1059 + * You may obtain a copy of the License at
1060 + *
1061 + * http://www.apache.org/licenses/LICENSE-2.0
1062 + *
1063 + * Unless required by applicable law or agreed to in writing, software
1064 + * distributed under the License is distributed on an "AS IS" BASIS,
1065 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1066 + * See the License for the specific language governing permissions and
1067 + * limitations under the License.
1068 + * ========================================================== */
1069 +
1070 +
1071 +!function ($) {
1072 +
1073 + "use strict"; // jshint ;_;
1074 +
1075 +
1076 + /* TOOLTIP PUBLIC CLASS DEFINITION
1077 + * =============================== */
1078 +
1079 + var Tooltip = function (element, options) {
1080 + this.init('tooltip', element, options)
1081 + }
1082 +
1083 + Tooltip.prototype = {
1084 +
1085 + constructor: Tooltip
1086 +
1087 + , init: function (type, element, options) {
1088 + var eventIn
1089 + , eventOut
1090 + , triggers
1091 + , trigger
1092 + , i
1093 +
1094 + this.type = type
1095 + this.$element = $(element)
1096 + this.options = this.getOptions(options)
1097 + this.enabled = true
1098 +
1099 + triggers = this.options.trigger.split(' ')
1100 +
1101 + for (i = triggers.length; i--;) {
1102 + trigger = triggers[i]
1103 + if (trigger == 'click') {
1104 + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1105 + } else if (trigger != 'manual') {
1106 + eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
1107 + eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
1108 + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1109 + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1110 + }
1111 + }
1112 +
1113 + this.options.selector ?
1114 + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1115 + this.fixTitle()
1116 + }
1117 +
1118 + , getOptions: function (options) {
1119 + options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
1120 +
1121 + if (options.delay && typeof options.delay == 'number') {
1122 + options.delay = {
1123 + show: options.delay
1124 + , hide: options.delay
1125 + }
1126 + }
1127 +
1128 + return options
1129 + }
1130 +
1131 + , enter: function (e) {
1132 + var defaults = $.fn[this.type].defaults
1133 + , options = {}
1134 + , self
1135 +
1136 + this._options && $.each(this._options, function (key, value) {
1137 + if (defaults[key] != value) options[key] = value
1138 + }, this)
1139 +
1140 + self = $(e.currentTarget)[this.type](options).data(this.type)
1141 +
1142 + if (!self.options.delay || !self.options.delay.show) return self.show()
1143 +
1144 + clearTimeout(this.timeout)
1145 + self.hoverState = 'in'
1146 + this.timeout = setTimeout(function() {
1147 + if (self.hoverState == 'in') self.show()
1148 + }, self.options.delay.show)
1149 + }
1150 +
1151 + , leave: function (e) {
1152 + var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1153 +
1154 + if (this.timeout) clearTimeout(this.timeout)
1155 + if (!self.options.delay || !self.options.delay.hide) return self.hide()
1156 +
1157 + self.hoverState = 'out'
1158 + this.timeout = setTimeout(function() {
1159 + if (self.hoverState == 'out') self.hide()
1160 + }, self.options.delay.hide)
1161 + }
1162 +
1163 + , show: function () {
1164 + var $tip
1165 + , pos
1166 + , actualWidth
1167 + , actualHeight
1168 + , placement
1169 + , tp
1170 + , e = $.Event('show')
1171 +
1172 + if (this.hasContent() && this.enabled) {
1173 + this.$element.trigger(e)
1174 + if (e.isDefaultPrevented()) return
1175 + $tip = this.tip()
1176 + this.setContent()
1177 +
1178 + if (this.options.animation) {
1179 + $tip.addClass('fade')
1180 + }
1181 +
1182 + placement = typeof this.options.placement == 'function' ?
1183 + this.options.placement.call(this, $tip[0], this.$element[0]) :
1184 + this.options.placement
1185 +
1186 + $tip
1187 + .detach()
1188 + .css({ top: 0, left: 0, display: 'block' })
1189 +
1190 + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1191 +
1192 + pos = this.getPosition()
1193 +
1194 + actualWidth = $tip[0].offsetWidth
1195 + actualHeight = $tip[0].offsetHeight
1196 +
1197 + switch (placement) {
1198 + case 'bottom':
1199 + tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1200 + break
1201 + case 'top':
1202 + tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1203 + break
1204 + case 'left':
1205 + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1206 + break
1207 + case 'right':
1208 + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1209 + break
1210 + }
1211 +
1212 + this.applyPlacement(tp, placement)
1213 + this.$element.trigger('shown')
1214 + }
1215 + }
1216 +
1217 + , applyPlacement: function(offset, placement){
1218 + var $tip = this.tip()
1219 + , width = $tip[0].offsetWidth
1220 + , height = $tip[0].offsetHeight
1221 + , actualWidth
1222 + , actualHeight
1223 + , delta
1224 + , replace
1225 +
1226 + $tip
1227 + .offset(offset)
1228 + .addClass(placement)
1229 + .addClass('in')
1230 +
1231 + actualWidth = $tip[0].offsetWidth
1232 + actualHeight = $tip[0].offsetHeight
1233 +
1234 + if (placement == 'top' && actualHeight != height) {
1235 + offset.top = offset.top + height - actualHeight
1236 + replace = true
1237 + }
1238 +
1239 + if (placement == 'bottom' || placement == 'top') {
1240 + delta = 0
1241 +
1242 + if (offset.left < 0){
1243 + delta = offset.left * -2
1244 + offset.left = 0
1245 + $tip.offset(offset)
1246 + actualWidth = $tip[0].offsetWidth
1247 + actualHeight = $tip[0].offsetHeight
1248 + }
1249 +
1250 + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1251 + } else {
1252 + this.replaceArrow(actualHeight - height, actualHeight, 'top')
1253 + }
1254 +
1255 + if (replace) $tip.offset(offset)
1256 + }
1257 +
1258 + , replaceArrow: function(delta, dimension, position){
1259 + this
1260 + .arrow()
1261 + .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
1262 + }
1263 +
1264 + , setContent: function () {
1265 + var $tip = this.tip()
1266 + , title = this.getTitle()
1267 +
1268 + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1269 + $tip.removeClass('fade in top bottom left right')
1270 + }
1271 +
1272 + , hide: function () {
1273 + var that = this
1274 + , $tip = this.tip()
1275 + , e = $.Event('hide')
1276 +
1277 + this.$element.trigger(e)
1278 + if (e.isDefaultPrevented()) return
1279 +
1280 + $tip.removeClass('in')
1281 +
1282 + function removeWithAnimation() {
1283 + var timeout = setTimeout(function () {
1284 + $tip.off($.support.transition.end).detach()
1285 + }, 500)
1286 +
1287 + $tip.one($.support.transition.end, function () {
1288 + clearTimeout(timeout)
1289 + $tip.detach()
1290 + })
1291 + }
1292 +
1293 + $.support.transition && this.$tip.hasClass('fade') ?
1294 + removeWithAnimation() :
1295 + $tip.detach()
1296 +
1297 + this.$element.trigger('hidden')
1298 +
1299 + return this
1300 + }
1301 +
1302 + , fixTitle: function () {
1303 + var $e = this.$element
1304 + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1305 + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1306 + }
1307 + }
1308 +
1309 + , hasContent: function () {
1310 + return this.getTitle()
1311 + }
1312 +
1313 + , getPosition: function () {
1314 + var el = this.$element[0]
1315 + return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1316 + width: el.offsetWidth
1317 + , height: el.offsetHeight
1318 + }, this.$element.offset())
1319 + }
1320 +
1321 + , getTitle: function () {
1322 + var title
1323 + , $e = this.$element
1324 + , o = this.options
1325 +
1326 + title = $e.attr('data-original-title')
1327 + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1328 +
1329 + return title
1330 + }
1331 +
1332 + , tip: function () {
1333 + return this.$tip = this.$tip || $(this.options.template)
1334 + }
1335 +
1336 + , arrow: function(){
1337 + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
1338 + }
1339 +
1340 + , validate: function () {
1341 + if (!this.$element[0].parentNode) {
1342 + this.hide()
1343 + this.$element = null
1344 + this.options = null
1345 + }
1346 + }
1347 +
1348 + , enable: function () {
1349 + this.enabled = true
1350 + }
1351 +
1352 + , disable: function () {
1353 + this.enabled = false
1354 + }
1355 +
1356 + , toggleEnabled: function () {
1357 + this.enabled = !this.enabled
1358 + }
1359 +
1360 + , toggle: function (e) {
1361 + var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
1362 + self.tip().hasClass('in') ? self.hide() : self.show()
1363 + }
1364 +
1365 + , destroy: function () {
1366 + this.hide().$element.off('.' + this.type).removeData(this.type)
1367 + }
1368 +
1369 + }
1370 +
1371 +
1372 + /* TOOLTIP PLUGIN DEFINITION
1373 + * ========================= */
1374 +
1375 + var old = $.fn.tooltip
1376 +
1377 + $.fn.tooltip = function ( option ) {
1378 + return this.each(function () {
1379 + var $this = $(this)
1380 + , data = $this.data('tooltip')
1381 + , options = typeof option == 'object' && option
1382 + if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1383 + if (typeof option == 'string') data[option]()
1384 + })
1385 + }
1386 +
1387 + $.fn.tooltip.Constructor = Tooltip
1388 +
1389 + $.fn.tooltip.defaults = {
1390 + animation: true
1391 + , placement: 'top'
1392 + , selector: false
1393 + , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1394 + , trigger: 'hover focus'
1395 + , title: ''
1396 + , delay: 0
1397 + , html: false
1398 + , container: false
1399 + }
1400 +
1401 +
1402 + /* TOOLTIP NO CONFLICT
1403 + * =================== */
1404 +
1405 + $.fn.tooltip.noConflict = function () {
1406 + $.fn.tooltip = old
1407 + return this
1408 + }
1409 +
1410 +}(window.jQuery);
1411 +/* ===========================================================
1412 + * bootstrap-popover.js v2.3.2
1413 + * http://getbootstrap.com/2.3.2/javascript.html#popovers
1414 + * ===========================================================
1415 + * Copyright 2013 Twitter, Inc.
1416 + *
1417 + * Licensed under the Apache License, Version 2.0 (the "License");
1418 + * you may not use this file except in compliance with the License.
1419 + * You may obtain a copy of the License at
1420 + *
1421 + * http://www.apache.org/licenses/LICENSE-2.0
1422 + *
1423 + * Unless required by applicable law or agreed to in writing, software
1424 + * distributed under the License is distributed on an "AS IS" BASIS,
1425 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1426 + * See the License for the specific language governing permissions and
1427 + * limitations under the License.
1428 + * =========================================================== */
1429 +
1430 +
1431 +!function ($) {
1432 +
1433 + "use strict"; // jshint ;_;
1434 +
1435 +
1436 + /* POPOVER PUBLIC CLASS DEFINITION
1437 + * =============================== */
1438 +
1439 + var Popover = function (element, options) {
1440 + this.init('popover', element, options)
1441 + }
1442 +
1443 +
1444 + /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1445 + ========================================== */
1446 +
1447 + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1448 +
1449 + constructor: Popover
1450 +
1451 + , setContent: function () {
1452 + var $tip = this.tip()
1453 + , title = this.getTitle()
1454 + , content = this.getContent()
1455 +
1456 + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1457 + $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
1458 +
1459 + $tip.removeClass('fade top bottom left right in')
1460 + }
1461 +
1462 + , hasContent: function () {
1463 + return this.getTitle() || this.getContent()
1464 + }
1465 +
1466 + , getContent: function () {
1467 + var content
1468 + , $e = this.$element
1469 + , o = this.options
1470 +
1471 + content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1472 + || $e.attr('data-content')
1473 +
1474 + return content
1475 + }
1476 +
1477 + , tip: function () {
1478 + if (!this.$tip) {
1479 + this.$tip = $(this.options.template)
1480 + }
1481 + return this.$tip
1482 + }
1483 +
1484 + , destroy: function () {
1485 + this.hide().$element.off('.' + this.type).removeData(this.type)
1486 + }
1487 +
1488 + })
1489 +
1490 +
1491 + /* POPOVER PLUGIN DEFINITION
1492 + * ======================= */
1493 +
1494 + var old = $.fn.popover
1495 +
1496 + $.fn.popover = function (option) {
1497 + return this.each(function () {
1498 + var $this = $(this)
1499 + , data = $this.data('popover')
1500 + , options = typeof option == 'object' && option
1501 + if (!data) $this.data('popover', (data = new Popover(this, options)))
1502 + if (typeof option == 'string') data[option]()
1503 + })
1504 + }
1505 +
1506 + $.fn.popover.Constructor = Popover
1507 +
1508 + $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1509 + placement: 'right'
1510 + , trigger: 'click'
1511 + , content: ''
1512 + , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1513 + })
1514 +
1515 +
1516 + /* POPOVER NO CONFLICT
1517 + * =================== */
1518 +
1519 + $.fn.popover.noConflict = function () {
1520 + $.fn.popover = old
1521 + return this
1522 + }
1523 +
1524 +}(window.jQuery);
1525 +/* =============================================================
1526 + * bootstrap-scrollspy.js v2.3.2
1527 + * http://getbootstrap.com/2.3.2/javascript.html#scrollspy
1528 + * =============================================================
1529 + * Copyright 2013 Twitter, Inc.
1530 + *
1531 + * Licensed under the Apache License, Version 2.0 (the "License");
1532 + * you may not use this file except in compliance with the License.
1533 + * You may obtain a copy of the License at
1534 + *
1535 + * http://www.apache.org/licenses/LICENSE-2.0
1536 + *
1537 + * Unless required by applicable law or agreed to in writing, software
1538 + * distributed under the License is distributed on an "AS IS" BASIS,
1539 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1540 + * See the License for the specific language governing permissions and
1541 + * limitations under the License.
1542 + * ============================================================== */
1543 +
1544 +
1545 +!function ($) {
1546 +
1547 + "use strict"; // jshint ;_;
1548 +
1549 +
1550 + /* SCROLLSPY CLASS DEFINITION
1551 + * ========================== */
1552 +
1553 + function ScrollSpy(element, options) {
1554 + var process = $.proxy(this.process, this)
1555 + , $element = $(element).is('body') ? $(window) : $(element)
1556 + , href
1557 + this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1558 + this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
1559 + this.selector = (this.options.target
1560 + || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1561 + || '') + ' .nav li > a'
1562 + this.$body = $('body')
1563 + this.refresh()
1564 + this.process()
1565 + }
1566 +
1567 + ScrollSpy.prototype = {
1568 +
1569 + constructor: ScrollSpy
1570 +
1571 + , refresh: function () {
1572 + var self = this
1573 + , $targets
1574 +
1575 + this.offsets = $([])
1576 + this.targets = $([])
1577 +
1578 + $targets = this.$body
1579 + .find(this.selector)
1580 + .map(function () {
1581 + var $el = $(this)
1582 + , href = $el.data('target') || $el.attr('href')
1583 + , $href = /^#\w/.test(href) && $(href)
1584 + return ( $href
1585 + && $href.length
1586 + && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
1587 + })
1588 + .sort(function (a, b) { return a[0] - b[0] })
1589 + .each(function () {
1590 + self.offsets.push(this[0])
1591 + self.targets.push(this[1])
1592 + })
1593 + }
1594 +
1595 + , process: function () {
1596 + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1597 + , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1598 + , maxScroll = scrollHeight - this.$scrollElement.height()
1599 + , offsets = this.offsets
1600 + , targets = this.targets
1601 + , activeTarget = this.activeTarget
1602 + , i
1603 +
1604 + if (scrollTop >= maxScroll) {
1605 + return activeTarget != (i = targets.last()[0])
1606 + && this.activate ( i )
1607 + }
1608 +
1609 + for (i = offsets.length; i--;) {
1610 + activeTarget != targets[i]
1611 + && scrollTop >= offsets[i]
1612 + && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1613 + && this.activate( targets[i] )
1614 + }
1615 + }
1616 +
1617 + , activate: function (target) {
1618 + var active
1619 + , selector
1620 +
1621 + this.activeTarget = target
1622 +
1623 + $(this.selector)
1624 + .parent('.active')
1625 + .removeClass('active')
1626 +
1627 + selector = this.selector
1628 + + '[data-target="' + target + '"],'
1629 + + this.selector + '[href="' + target + '"]'
1630 +
1631 + active = $(selector)
1632 + .parent('li')
1633 + .addClass('active')
1634 +
1635 + if (active.parent('.dropdown-menu').length) {
1636 + active = active.closest('li.dropdown').addClass('active')
1637 + }
1638 +
1639 + active.trigger('activate')
1640 + }
1641 +
1642 + }
1643 +
1644 +
1645 + /* SCROLLSPY PLUGIN DEFINITION
1646 + * =========================== */
1647 +
1648 + var old = $.fn.scrollspy
1649 +
1650 + $.fn.scrollspy = function (option) {
1651 + return this.each(function () {
1652 + var $this = $(this)
1653 + , data = $this.data('scrollspy')
1654 + , options = typeof option == 'object' && option
1655 + if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1656 + if (typeof option == 'string') data[option]()
1657 + })
1658 + }
1659 +
1660 + $.fn.scrollspy.Constructor = ScrollSpy
1661 +
1662 + $.fn.scrollspy.defaults = {
1663 + offset: 10
1664 + }
1665 +
1666 +
1667 + /* SCROLLSPY NO CONFLICT
1668 + * ===================== */
1669 +
1670 + $.fn.scrollspy.noConflict = function () {
1671 + $.fn.scrollspy = old
1672 + return this
1673 + }
1674 +
1675 +
1676 + /* SCROLLSPY DATA-API
1677 + * ================== */
1678 +
1679 + $(window).on('load', function () {
1680 + $('[data-spy="scroll"]').each(function () {
1681 + var $spy = $(this)
1682 + $spy.scrollspy($spy.data())
1683 + })
1684 + })
1685 +
1686 +}(window.jQuery);/* ========================================================
1687 + * bootstrap-tab.js v2.3.2
1688 + * http://getbootstrap.com/2.3.2/javascript.html#tabs
1689 + * ========================================================
1690 + * Copyright 2013 Twitter, Inc.
1691 + *
1692 + * Licensed under the Apache License, Version 2.0 (the "License");
1693 + * you may not use this file except in compliance with the License.
1694 + * You may obtain a copy of the License at
1695 + *
1696 + * http://www.apache.org/licenses/LICENSE-2.0
1697 + *
1698 + * Unless required by applicable law or agreed to in writing, software
1699 + * distributed under the License is distributed on an "AS IS" BASIS,
1700 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1701 + * See the License for the specific language governing permissions and
1702 + * limitations under the License.
1703 + * ======================================================== */
1704 +
1705 +
1706 +!function ($) {
1707 +
1708 + "use strict"; // jshint ;_;
1709 +
1710 +
1711 + /* TAB CLASS DEFINITION
1712 + * ==================== */
1713 +
1714 + var Tab = function (element) {
1715 + this.element = $(element)
1716 + }
1717 +
1718 + Tab.prototype = {
1719 +
1720 + constructor: Tab
1721 +
1722 + , show: function () {
1723 + var $this = this.element
1724 + , $ul = $this.closest('ul:not(.dropdown-menu)')
1725 + , selector = $this.attr('data-target')
1726 + , previous
1727 + , $target
1728 + , e
1729 +
1730 + if (!selector) {
1731 + selector = $this.attr('href')
1732 + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1733 + }
1734 +
1735 + if ( $this.parent('li').hasClass('active') ) return
1736 +
1737 + previous = $ul.find('.active:last a')[0]
1738 +
1739 + e = $.Event('show', {
1740 + relatedTarget: previous
1741 + })
1742 +
1743 + $this.trigger(e)
1744 +
1745 + if (e.isDefaultPrevented()) return
1746 +
1747 + $target = $(selector)
1748 +
1749 + this.activate($this.parent('li'), $ul)
1750 + this.activate($target, $target.parent(), function () {
1751 + $this.trigger({
1752 + type: 'shown'
1753 + , relatedTarget: previous
1754 + })
1755 + })
1756 + }
1757 +
1758 + , activate: function ( element, container, callback) {
1759 + var $active = container.find('> .active')
1760 + , transition = callback
1761 + && $.support.transition
1762 + && $active.hasClass('fade')
1763 +
1764 + function next() {
1765 + $active
1766 + .removeClass('active')
1767 + .find('> .dropdown-menu > .active')
1768 + .removeClass('active')
1769 +
1770 + element.addClass('active')
1771 +
1772 + if (transition) {
1773 + element[0].offsetWidth // reflow for transition
1774 + element.addClass('in')
1775 + } else {
1776 + element.removeClass('fade')
1777 + }
1778 +
1779 + if ( element.parent('.dropdown-menu') ) {
1780 + element.closest('li.dropdown').addClass('active')
1781 + }
1782 +
1783 + callback && callback()
1784 + }
1785 +
1786 + transition ?
1787 + $active.one($.support.transition.end, next) :
1788 + next()
1789 +
1790 + $active.removeClass('in')
1791 + }
1792 + }
1793 +
1794 +
1795 + /* TAB PLUGIN DEFINITION
1796 + * ===================== */
1797 +
1798 + var old = $.fn.tab
1799 +
1800 + $.fn.tab = function ( option ) {
1801 + return this.each(function () {
1802 + var $this = $(this)
1803 + , data = $this.data('tab')
1804 + if (!data) $this.data('tab', (data = new Tab(this)))
1805 + if (typeof option == 'string') data[option]()
1806 + })
1807 + }
1808 +
1809 + $.fn.tab.Constructor = Tab
1810 +
1811 +
1812 + /* TAB NO CONFLICT
1813 + * =============== */
1814 +
1815 + $.fn.tab.noConflict = function () {
1816 + $.fn.tab = old
1817 + return this
1818 + }
1819 +
1820 +
1821 + /* TAB DATA-API
1822 + * ============ */
1823 +
1824 + $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1825 + e.preventDefault()
1826 + $(this).tab('show')
1827 + })
1828 +
1829 +}(window.jQuery);/* =============================================================
1830 + * bootstrap-typeahead.js v2.3.2
1831 + * http://getbootstrap.com/2.3.2/javascript.html#typeahead
1832 + * =============================================================
1833 + * Copyright 2013 Twitter, Inc.
1834 + *
1835 + * Licensed under the Apache License, Version 2.0 (the "License");
1836 + * you may not use this file except in compliance with the License.
1837 + * You may obtain a copy of the License at
1838 + *
1839 + * http://www.apache.org/licenses/LICENSE-2.0
1840 + *
1841 + * Unless required by applicable law or agreed to in writing, software
1842 + * distributed under the License is distributed on an "AS IS" BASIS,
1843 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1844 + * See the License for the specific language governing permissions and
1845 + * limitations under the License.
1846 + * ============================================================ */
1847 +
1848 +
1849 +!function($){
1850 +
1851 + "use strict"; // jshint ;_;
1852 +
1853 +
1854 + /* TYPEAHEAD PUBLIC CLASS DEFINITION
1855 + * ================================= */
1856 +
1857 + var Typeahead = function (element, options) {
1858 + this.$element = $(element)
1859 + this.options = $.extend({}, $.fn.typeahead.defaults, options)
1860 + this.matcher = this.options.matcher || this.matcher
1861 + this.sorter = this.options.sorter || this.sorter
1862 + this.highlighter = this.options.highlighter || this.highlighter
1863 + this.updater = this.options.updater || this.updater
1864 + this.source = this.options.source
1865 + this.$menu = $(this.options.menu)
1866 + this.shown = false
1867 + this.listen()
1868 + }
1869 +
1870 + Typeahead.prototype = {
1871 +
1872 + constructor: Typeahead
1873 +
1874 + , select: function () {
1875 + var val = this.$menu.find('.active').attr('data-value')
1876 + this.$element
1877 + .val(this.updater(val))
1878 + .change()
1879 + return this.hide()
1880 + }
1881 +
1882 + , updater: function (item) {
1883 + return item
1884 + }
1885 +
1886 + , show: function () {
1887 + var pos = $.extend({}, this.$element.position(), {
1888 + height: this.$element[0].offsetHeight
1889 + })
1890 +
1891 + this.$menu
1892 + .insertAfter(this.$element)
1893 + .css({
1894 + top: pos.top + pos.height
1895 + , left: pos.left
1896 + })
1897 + .show()
1898 +
1899 + this.shown = true
1900 + return this
1901 + }
1902 +
1903 + , hide: function () {
1904 + this.$menu.hide()
1905 + this.shown = false
1906 + return this
1907 + }
1908 +
1909 + , lookup: function (event) {
1910 + var items
1911 +
1912 + this.query = this.$element.val()
1913 +
1914 + if (!this.query || this.query.length < this.options.minLength) {
1915 + return this.shown ? this.hide() : this
1916 + }
1917 +
1918 + items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
1919 +
1920 + return items ? this.process(items) : this
1921 + }
1922 +
1923 + , process: function (items) {
1924 + var that = this
1925 +
1926 + items = $.grep(items, function (item) {
1927 + return that.matcher(item)
1928 + })
1929 +
1930 + items = this.sorter(items)
1931 +
1932 + if (!items.length) {
1933 + return this.shown ? this.hide() : this
1934 + }
1935 +
1936 + return this.render(items.slice(0, this.options.items)).show()
1937 + }
1938 +
1939 + , matcher: function (item) {
1940 + return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1941 + }
1942 +
1943 + , sorter: function (items) {
1944 + var beginswith = []
1945 + , caseSensitive = []
1946 + , caseInsensitive = []
1947 + , item
1948 +
1949 + while (item = items.shift()) {
1950 + if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1951 + else if (~item.indexOf(this.query)) caseSensitive.push(item)
1952 + else caseInsensitive.push(item)
1953 + }
1954 +
1955 + return beginswith.concat(caseSensitive, caseInsensitive)
1956 + }
1957 +
1958 + , highlighter: function (item) {
1959 + var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
1960 + return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1961 + return '<strong>' + match + '</strong>'
1962 + })
1963 + }
1964 +
1965 + , render: function (items) {
1966 + var that = this
1967 +
1968 + items = $(items).map(function (i, item) {
1969 + i = $(that.options.item).attr('data-value', item)
1970 + i.find('a').html(that.highlighter(item))
1971 + return i[0]
1972 + })
1973 +
1974 + items.first().addClass('active')
1975 + this.$menu.html(items)
1976 + return this
1977 + }
1978 +
1979 + , next: function (event) {
1980 + var active = this.$menu.find('.active').removeClass('active')
1981 + , next = active.next()
1982 +
1983 + if (!next.length) {
1984 + next = $(this.$menu.find('li')[0])
1985 + }
1986 +
1987 + next.addClass('active')
1988 + }
1989 +
1990 + , prev: function (event) {
1991 + var active = this.$menu.find('.active').removeClass('active')
1992 + , prev = active.prev()
1993 +
1994 + if (!prev.length) {
1995 + prev = this.$menu.find('li').last()
1996 + }
1997 +
1998 + prev.addClass('active')
1999 + }
2000 +
2001 + , listen: function () {
2002 + this.$element
2003 + .on('focus', $.proxy(this.focus, this))
2004 + .on('blur', $.proxy(this.blur, this))
2005 + .on('keypress', $.proxy(this.keypress, this))
2006 + .on('keyup', $.proxy(this.keyup, this))
2007 +
2008 + if (this.eventSupported('keydown')) {
2009 + this.$element.on('keydown', $.proxy(this.keydown, this))
2010 + }
2011 +
2012 + this.$menu
2013 + .on('click', $.proxy(this.click, this))
2014 + .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
2015 + .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
2016 + }
2017 +
2018 + , eventSupported: function(eventName) {
2019 + var isSupported = eventName in this.$element
2020 + if (!isSupported) {
2021 + this.$element.setAttribute(eventName, 'return;')
2022 + isSupported = typeof this.$element[eventName] === 'function'
2023 + }
2024 + return isSupported
2025 + }
2026 +
2027 + , move: function (e) {
2028 + if (!this.shown) return
2029 +
2030 + switch(e.keyCode) {
2031 + case 9: // tab
2032 + case 13: // enter
2033 + case 27: // escape
2034 + e.preventDefault()
2035 + break
2036 +
2037 + case 38: // up arrow
2038 + e.preventDefault()
2039 + this.prev()
2040 + break
2041 +
2042 + case 40: // down arrow
2043 + e.preventDefault()
2044 + this.next()
2045 + break
2046 + }
2047 +
2048 + e.stopPropagation()
2049 + }
2050 +
2051 + , keydown: function (e) {
2052 + this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
2053 + this.move(e)
2054 + }
2055 +
2056 + , keypress: function (e) {
2057 + if (this.suppressKeyPressRepeat) return
2058 + this.move(e)
2059 + }
2060 +
2061 + , keyup: function (e) {
2062 + switch(e.keyCode) {
2063 + case 40: // down arrow
2064 + case 38: // up arrow
2065 + case 16: // shift
2066 + case 17: // ctrl
2067 + case 18: // alt
2068 + break
2069 +
2070 + case 9: // tab
2071 + case 13: // enter
2072 + if (!this.shown) return
2073 + this.select()
2074 + break
2075 +
2076 + case 27: // escape
2077 + if (!this.shown) return
2078 + this.hide()
2079 + break
2080 +
2081 + default:
2082 + this.lookup()
2083 + }
2084 +
2085 + e.stopPropagation()
2086 + e.preventDefault()
2087 + }
2088 +
2089 + , focus: function (e) {
2090 + this.focused = true
2091 + }
2092 +
2093 + , blur: function (e) {
2094 + this.focused = false
2095 + if (!this.mousedover && this.shown) this.hide()
2096 + }
2097 +
2098 + , click: function (e) {
2099 + e.stopPropagation()
2100 + e.preventDefault()
2101 + this.select()
2102 + this.$element.focus()
2103 + }
2104 +
2105 + , mouseenter: function (e) {
2106 + this.mousedover = true
2107 + this.$menu.find('.active').removeClass('active')
2108 + $(e.currentTarget).addClass('active')
2109 + }
2110 +
2111 + , mouseleave: function (e) {
2112 + this.mousedover = false
2113 + if (!this.focused && this.shown) this.hide()
2114 + }
2115 +
2116 + }
2117 +
2118 +
2119 + /* TYPEAHEAD PLUGIN DEFINITION
2120 + * =========================== */
2121 +
2122 + var old = $.fn.typeahead
2123 +
2124 + $.fn.typeahead = function (option) {
2125 + return this.each(function () {
2126 + var $this = $(this)
2127 + , data = $this.data('typeahead')
2128 + , options = typeof option == 'object' && option
2129 + if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
2130 + if (typeof option == 'string') data[option]()
2131 + })
2132 + }
2133 +
2134 + $.fn.typeahead.defaults = {
2135 + source: []
2136 + , items: 8
2137 + , menu: '<ul class="typeahead dropdown-menu"></ul>'
2138 + , item: '<li><a href="#"></a></li>'
2139 + , minLength: 1
2140 + }
2141 +
2142 + $.fn.typeahead.Constructor = Typeahead
2143 +
2144 +
2145 + /* TYPEAHEAD NO CONFLICT
2146 + * =================== */
2147 +
2148 + $.fn.typeahead.noConflict = function () {
2149 + $.fn.typeahead = old
2150 + return this
2151 + }
2152 +
2153 +
2154 + /* TYPEAHEAD DATA-API
2155 + * ================== */
2156 +
2157 + $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
2158 + var $this = $(this)
2159 + if ($this.data('typeahead')) return
2160 + $this.typeahead($this.data())
2161 + })
2162 +
2163 +}(window.jQuery);
2164 +/* ==========================================================
2165 + * bootstrap-affix.js v2.3.2
2166 + * http://getbootstrap.com/2.3.2/javascript.html#affix
2167 + * ==========================================================
2168 + * Copyright 2013 Twitter, Inc.
2169 + *
2170 + * Licensed under the Apache License, Version 2.0 (the "License");
2171 + * you may not use this file except in compliance with the License.
2172 + * You may obtain a copy of the License at
2173 + *
2174 + * http://www.apache.org/licenses/LICENSE-2.0
2175 + *
2176 + * Unless required by applicable law or agreed to in writing, software
2177 + * distributed under the License is distributed on an "AS IS" BASIS,
2178 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2179 + * See the License for the specific language governing permissions and
2180 + * limitations under the License.
2181 + * ========================================================== */
2182 +
2183 +
2184 +!function ($) {
2185 +
2186 + "use strict"; // jshint ;_;
2187 +
2188 +
2189 + /* AFFIX CLASS DEFINITION
2190 + * ====================== */
2191 +
2192 + var Affix = function (element, options) {
2193 + this.options = $.extend({}, $.fn.affix.defaults, options)
2194 + this.$window = $(window)
2195 + .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
2196 + .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
2197 + this.$element = $(element)
2198 + this.checkPosition()
2199 + }
2200 +
2201 + Affix.prototype.checkPosition = function () {
2202 + if (!this.$element.is(':visible')) return
2203 +
2204 + var scrollHeight = $(document).height()
2205 + , scrollTop = this.$window.scrollTop()
2206 + , position = this.$element.offset()
2207 + , offset = this.options.offset
2208 + , offsetBottom = offset.bottom
2209 + , offsetTop = offset.top
2210 + , reset = 'affix affix-top affix-bottom'
2211 + , affix
2212 +
2213 + if (typeof offset != 'object') offsetBottom = offsetTop = offset
2214 + if (typeof offsetTop == 'function') offsetTop = offset.top()
2215 + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
2216 +
2217 + affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
2218 + false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
2219 + 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
2220 + 'top' : false
2221 +
2222 + if (this.affixed === affix) return
2223 +
2224 + this.affixed = affix
2225 + this.unpin = affix == 'bottom' ? position.top - scrollTop : null
2226 +
2227 + this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
2228 + }
2229 +
2230 +
2231 + /* AFFIX PLUGIN DEFINITION
2232 + * ======================= */
2233 +
2234 + var old = $.fn.affix
2235 +
2236 + $.fn.affix = function (option) {
2237 + return this.each(function () {
2238 + var $this = $(this)
2239 + , data = $this.data('affix')
2240 + , options = typeof option == 'object' && option
2241 + if (!data) $this.data('affix', (data = new Affix(this, options)))
2242 + if (typeof option == 'string') data[option]()
2243 + })
2244 + }
2245 +
2246 + $.fn.affix.Constructor = Affix
2247 +
2248 + $.fn.affix.defaults = {
2249 + offset: 0
2250 + }
2251 +
2252 +
2253 + /* AFFIX NO CONFLICT
2254 + * ================= */
2255 +
2256 + $.fn.affix.noConflict = function () {
2257 + $.fn.affix = old
2258 + return this
2259 + }
2260 +
2261 +
2262 + /* AFFIX DATA-API
2263 + * ============== */
2264 +
2265 + $(window).on('load', function () {
2266 + $('[data-spy="affix"]').each(function () {
2267 + var $spy = $(this)
2268 + , data = $spy.data()
2269 +
2270 + data.offset = data.offset || {}
2271 +
2272 + data.offsetBottom && (data.offset.bottom = data.offsetBottom)
2273 + data.offsetTop && (data.offset.top = data.offsetTop)
2274 +
2275 + $spy.affix(data)
2276 + })
2277 + })
2278 +
2279 +
2280 +}(window.jQuery);
...\ No newline at end of file ...\ No newline at end of file
1 +/*!
2 +* Bootstrap.js by @fat & @mdo
3 +* Copyright 2013 Twitter, Inc.
4 +* http://www.apache.org/licenses/LICENSE-2.0.txt
5 +*/
6 +!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('<div class="dropdown-backdrop"/>').insertBefore(e(this)).on("click",r),s.toggleClass("open")),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
...\ No newline at end of file ...\ No newline at end of file
...@@ -94,11 +94,27 @@ module.exports = function(app, Users, Timetables) ...@@ -94,11 +94,27 @@ module.exports = function(app, Users, Timetables)
94 94
95 95
96 // 동명이인 검색 페이지 96 // 동명이인 검색 페이지
97 - app.get("/samename" ,function(req, res) 97 + app.post("/samename" ,function(req, res)
98 + {
99 + // 크롤링으로 samename list 추출
100 + var samename_list2 = [];
101 + function temp(callback)
102 + {
103 + var samename_search = require("./selenium-function/same_name_search");
104 + samename_search.First_Search(req.body.samename).then(function(resolvedData)
105 + {
106 + samename_list2 = resolvedData;
107 + console.log(resolvedData);
108 + callback();
109 + });
110 + }
111 +
112 + temp(function()
98 { 113 {
99 - var samename_list = [["강호동", "https://search.pstatic.net/common?type=a&size=60x76&quality=95&src=http://sstatic.naver.net/people/portrait/201304/20130403113314207.jpg"], ["강호동", "https://search.pstatic.net/common?type=a&size=60x76&quality=95&src=http://sstatic.naver.net/people/72/201601061648058211.jpg"]];
100 console.log("samename page"); 114 console.log("samename page");
101 - res.render("samename",{samename : samename_list}); 115 + //console.log(samename_list2);
116 + res.render("samename",{samename : samename_list2});
117 + });
102 }); 118 });
103 119
104 // 인물-방송정보 페이지 120 // 인물-방송정보 페이지
...@@ -130,10 +146,10 @@ module.exports = function(app, Users, Timetables) ...@@ -130,10 +146,10 @@ module.exports = function(app, Users, Timetables)
130 // 유저가 선택한 프로그램 정보 입력 146 // 유저가 선택한 프로그램 정보 입력
131 var program = new Timetables(); 147 var program = new Timetables();
132 program.user_id = req.user; 148 program.user_id = req.user;
133 - program.pname = "짠내투어"; 149 + program.pname = "아모르파티";
134 - program.pweekday = 6; 150 + program.pweekday = 5;
135 - program.start_hour = 20; 151 + program.start_hour = 10;
136 - program.start_min = 20; 152 + program.start_min = 50;
137 153
138 // DB저장 154 // DB저장
139 program.save(function(err) 155 program.save(function(err)
......
1 +var async = require('async');
2 +var webdriver = require('selenium-webdriver');
3 +var options = {desiredCapabilities: {browserName: 'chrome'}};
4 +var JASON = require('jason')
5 +const {Builder, By, Key, until} = require('selenium-webdriver');
6 +var iconv = require('iconv-lite')
7 +const fs = require('fs')
8 +
9 +datalist = []
10 +
11 +module.exports = {
12 + search_onairanddate : function (driver, url, string, callback) {
13 + driver
14 + .get(url).then(() => {
15 + driver
16 + .findElements(webdriver.By.className('brcs_detail'))
17 + .then(broad_info => {
18 + broad_info[0].findElement(webdriver.By.tagName('dl'))
19 + .then(more_data => {
20 + more_data.findElement(webdriver.By.tagName('dd'))
21 + .then(one_line => {
22 + one_line.findElement(webdriver.By.className("inline"))
23 + .then(isbroad => {
24 + isbroad.findElement(webdriver.By.tagName("a"))
25 + .then(a => {
26 + a.getText()
27 + .then(text=> {
28 + isbroad.getText()
29 + .then(day => {
30 + isbroad.findElement(webdriver.By.className("broad_txt"))
31 + .then(b => {
32 + b.getText()
33 + .then(text2 => {
34 + if(day.indexOf('(') != -1) {
35 + var day_ = day[day.indexOf('(')+1]
36 + }
37 + datalist.push(text)
38 + datalist.push(text2)
39 + datalist[3] = day_
40 + setTimeout(() => {
41 + fs.writeFileSync("./log/"+string+"_br_isonair.txt", datalist, {encoding: 'utf8'});
42 +
43 + callback()
44 + }, 500);
45 + })
46 + })
47 + })
48 + })
49 + })
50 + })
51 + })
52 + })
53 + })
54 + })
55 + driver.findElement(webdriver.By.className('brcs_thumb'))
56 + .then(brcs_thumb => {
57 + brcs_thumb.findElements(webdriver.By.tagName('img'))
58 + .then( img => {
59 + img[0].getAttribute('src')
60 + .then(img_src => {
61 + datalist[2] = img_src
62 + })
63 + })
64 + })
65 + }
66 +}
67 +
68 +//
69 +//var driver = new webdriver.Builder()
70 +//.forBrowser('chrome')
71 +//.withCapabilities(webdriver.Capabilities.chrome())
72 +//.build();
73 +//
74 +//search_onairanddate(driver,"https://search.naver.com/search.naver?where=nexearch&sm=ppl_cts&mra=bjkw&x_csa=%7B%22pkid%22%3A%2257%22%2C%22os%22%3A%22659910%22%7D&pkid=57&os=659910&query=%EB%AC%B4%ED%95%9C%EB%8F%84%EC%A0%84","무한도전",function() {
75 +// console.log("B")
76 +//})
...\ No newline at end of file ...\ No newline at end of file
1 +var async = require('async');
2 +var webdriver = require('selenium-webdriver');
3 +var options = {desiredCapabilities: {browserName: 'chrome'}};
4 +var onair = require('./crawling_br_onair_date')
5 +const {Builder, By, Key, until} = require('selenium-webdriver');
6 +const fs = require('fs')
7 +const screen = {
8 + width: 640,
9 + height: 480
10 +};
11 +var a=8000
12 +var img_src_list = []
13 +var text_list = []
14 +var next_link_list = []
15 +var testStartRunTime = 0;
16 +var testruntime = 0;
17 +var time = 0;
18 +module.exports = {
19 + search_broadcasting : function(driver,url,name,callback) {
20 + function testRunTimer() {
21 + var today = new Date(); // 현재시간 얻기
22 + var runTime = today.getTime(); // 밀리세컨드 ( 1970/01/01 부터 현재까지의 시간을 밀리세컨드로 나타냄 )
23 + var rtn = 0;
24 +
25 + if (testStartRunTime == 0) {
26 + testStartRunTime = runTime;
27 + } else {
28 + rtn = (runTime - testStartRunTime) / 1000;
29 + testStartRunTime = 0;
30 + }
31 + return rtn;
32 + }
33 + driver
34 + .get("http://"+url)
35 + .then(() => {
36 + driver.findElement(webdriver.By.id('pagination_76'))
37 + .then ( paginationBtn => {
38 + paginationBtn.findElements(webdriver.By.className('bt_next'))
39 + .then(Btn_next => {
40 + driver.findElement(webdriver.By.id('listUI_76'))
41 + .then(contentsUI => {
42 + clickandget(function() {
43 + Btn_next[0].click()
44 + setTimeout(() => {
45 + clickandget(function() {
46 + Btn_next[0].click()
47 + setTimeout(() => {
48 + clickandget(function() {
49 + Btn_next[0].click()
50 + setTimeout(() => {
51 + clickandget(function(){
52 + Btn_next[0].click()
53 + setTimeout(() => {
54 + clickandget(function(){
55 + fs.writeFileSync("./log/"+name+"_img_src_br.txt", '\ufeff' + img_src_list, {encoding: 'utf8'});
56 + fs.writeFileSync("./log/"+name+"_title_br.txt", '\ufeff' + text_list, {encoding: 'utf8'});
57 + setTimeout(() => {
58 + callback()
59 + }, 500);
60 + })
61 + }, testruntime*1000+800);
62 + })
63 + }, testruntime*1000+800);
64 +
65 + },testruntime*1000+800)
66 + }, testruntime*1000+800);
67 + })
68 + }, testruntime*1000+800);
69 + })
70 + function clickandget(_callback) {
71 + testRunTimer()
72 + Btn_next[0].isDisplayed().then(function(state) {
73 + if(state) {
74 + contentsUI.findElements(webdriver.By.tagName('li'))
75 + .then(elems => {
76 + elems.forEach(elem => {
77 + elem.findElement(webdriver.By.className('thmb'))
78 + .then(thmb => {
79 + thmb.getAttribute('href')
80 + .then(next_link => {
81 + thmb.findElements(webdriver.By.tagName('img'))
82 + .then(img => {
83 + img[0].getAttribute('src')
84 + .then(img_src => {
85 + elem.findElements(webdriver.By.className('tit'))
86 + .then (titles => {
87 + titles.forEach(title => {
88 + title.getText()
89 + .then(text => {
90 + text_list.push(text)
91 + img_src_list.push(img_src)
92 + next_link_list.push(next_link)
93 + if(text_list.length % 5 == 0) {
94 + var testruntime = testRunTimer();
95 + time = time+testruntime*1000
96 + _callback()
97 + }
98 + })
99 + })
100 + })
101 + })
102 + })
103 + })
104 + })
105 + })
106 + })
107 + }
108 + else {
109 + fs.writeFileSync("./log/"+name+"_img_src_br.txt", '\ufeff' + img_src_list, {encoding: 'utf8'});
110 + fs.writeFileSync("./log/"+name+"_title_br.txt", '\ufeff' + text_list, {encoding: 'utf8'});
111 + fs.writeFileSync("./log/"+name+"_next_link_br.txt", '\ufeff' + next_link_list, {encoding: 'utf8'});
112 + setTimeout(() => {
113 + callback()
114 + }, 500);
115 + }
116 + },function(err) {
117 + fs.writeFileSync("./log/"+name+"_img_src_br.txt", '\ufeff' + img_src_list, {encoding: 'utf8'});
118 + fs.writeFileSync("./log/"+name+"_title_br.txt", '\ufeff' + text_list, {encoding: 'utf8'});
119 + fs.writeFileSync("./log/"+name+"_next_link_br.txt", '\ufeff' + next_link_list, {encoding: 'utf8'});
120 + setTimeout(() => {
121 + callback()
122 + }, 500);
123 + })
124 + }
125 + })
126 + })
127 + })
128 + })
129 + function sleep (time) {
130 + return new Promise((resolve) => setTimeout(resolve, time));
131 + }
132 + }
133 +}
134 +
135 +//var driver = new webdriver.Builder()
136 +//.forBrowser('chrome')
137 +//.withCapabilities(webdriver.Capabilities.chrome())
138 +//.build();
139 +
140 +//search_broadcasting(driver,"people.search.naver.com/search.naver?where=nexearch&sm=tab_ppn&query=유재석&os=94702&ie=utf8&key=PeopleService","유재석",function() {
141 +// console.log("B")
142 +//})
...\ No newline at end of file ...\ No newline at end of file
1 +var async = require('async');
2 +var webdriver = require('selenium-webdriver');
3 +var chrome = require('selenium-webdriver/chrome')
4 +var Options = new chrome.Options();
5 +Options.addArguments('headless')
6 +Options.addArguments('disable-gpu')
7 +const fs = require('fs')
8 +var check = 0
9 +var testStartRunTime = 0;
10 +var testruntime = 0;
11 +
12 +const {Builder, By, Key, until} = require('selenium-webdriver');
13 +
14 +var next_link_list = []
15 +var src_list = []
16 +var text_list = []
17 +var return_list = []
18 +
19 +module.exports = {
20 + first_search :function (driver,string,callback) {
21 +
22 + function testRunTimer() {
23 + var today = new Date(); // 현재시간 얻기
24 + var runTime = today.getTime(); // 밀리세컨드 ( 1970/01/01 부터 현재까지의 시간을 밀리세컨드로 나타냄 )
25 + var rtn = 0;
26 +
27 + if (testStartRunTime == 0) {
28 + testStartRunTime = runTime;
29 + } else {
30 + rtn = (runTime - testStartRunTime) / 1000;
31 + testStartRunTime = 0;
32 + }
33 + return rtn;
34 + }
35 + let url1 = "https://people.search.naver.com/search.naver?sm=tab_hty&where=nexearch&query="+string+"&ie=utf8&x=0&y=0"
36 + driver
37 + .get(url1).then(() => {
38 + testRunTimer()
39 + driver
40 + .findElements(webdriver.By.className('result_profile'))
41 + .then(profiles => {
42 + profiles.forEach(profile => {
43 + profile.findElements(webdriver.By.className('thmb'))
44 + .then(links=> {
45 + links.forEach(link => {
46 + link.getAttribute('href')
47 + .then(next_link => {
48 + profile.findElements(webdriver.By.className('thmb_img'))
49 + .then((imgs) => {
50 + imgs.forEach(img => {
51 + img.getAttribute('src')
52 + .then(src => {
53 + next_link_list.push(next_link)
54 + src_list.push(src)
55 + //text_list.push(text)
56 + testruntime += testRunTimer()
57 + setTimeout(function() {
58 + check++;
59 + if(check==1) {
60 + //return_list.push(text_list)
61 + setTimeout(function() {
62 + fs.writeFileSync("./log/"+string+"_next_link.txt", next_link_list, {encoding: 'utf8'});
63 + fs.writeFileSync("./log/"+string+"_img_src.txt", src_list, {encoding: 'utf8'});
64 + callback()
65 + },500)
66 + }
67 + },testruntime*1000+1000)
68 + })
69 + })
70 + })
71 + })
72 + })
73 + })
74 + })
75 + })
76 + })
77 + }
78 +}
...\ No newline at end of file ...\ No newline at end of file
1 +var webdriver = require('selenium-webdriver');
2 +const {Builder, By, Key, until} = require('selenium-webdriver');
3 +const fs = require('fs')
4 +
5 + var arr = []
6 + var result_arr = []
7 + var temp = []
8 + var i=0
9 + var check = 0
10 +
11 +
12 +//var driver = new webdriver.Builder().forBrowser('chrome').withCapabilities(webdriver.Capabilities.chrome()).build();
13 +//search_broadcasting_time(driver,"SBS","일요일","런닝맨",function() {})
14 +module.exports = {
15 + search_broadcasting_time :function (driver,broadcast,day,findtitle, callback) {
16 + let url1 = "https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query="+broadcast.toLowerCase()+"+"+day+"요일"+"+편성표"
17 + driver
18 + .get(url1).then(() => {
19 + driver
20 + .findElements(webdriver.By.className('cont_inner type_day _scheduleArea'))
21 + .then(contentsearch_section=> {
22 + contentsearch_section[0].findElements(webdriver.By.tagName('tbody'))
23 + .then(tbody => {
24 + tbody[0].findElements(webdriver.By.tagName('tr'))
25 + .then(trs => {
26 + trs.forEach(tr => {
27 + tr.getText()
28 + .then(content => {
29 + if(content.indexOf(findtitle) != -1) {
30 + arr = content.toString().split('\n')
31 + console.log(arr)
32 + str(function() {
33 + i++
34 + if(i==1) {
35 + R=[]
36 + R[0] = result_arr[0]
37 + R[1] = result_arr[1]
38 + R[2] = result_arr[2]
39 + fs.writeFileSync("./log/"+findtitle+"_time_detail.txt", '\ufeff' + R, {encoding: 'utf8'});
40 + callback()
41 + }
42 + })
43 + function str(_callback) {
44 + temp[0] = arr[0].substr(0,2)
45 + temp[1] = arr[1].substr(0,2)
46 + temp[2] = findtitle
47 + result_arr.push(temp[0],temp[1],temp[2])
48 + //if(arr.length == 3) {
49 + // temp[i+2] = arr[0] + " " + arr[2].substr(0,2) + "분"
50 + // temp[i+3] = arr[2].substr(3)
51 + // result_arr.push(temp[i+2],temp[i+3])
52 + // i++
53 + //}
54 + setTimeout(() => {
55 + _callback()
56 + }, 500);
57 +
58 + }
59 + }
60 + })
61 + })
62 + })
63 + })
64 + })
65 + })
66 + }
67 +}
...\ No newline at end of file ...\ No newline at end of file
1 +var async = require('async');
2 +var webdriver = require('selenium-webdriver');
3 +//var options = {desiredCapabilities: {browserName: 'chrome'}};
4 +var chrome = require('selenium-webdriver/chrome')
5 +var Options = new chrome.Options();
6 +Options.addArguments('headless')
7 +Options.addArguments('disable-gpu')
8 +const fs = require('fs')
9 +const test2 = require('./crawling_broadcasting')
10 +var EventEmitter = require('events').EventEmitter;
11 +
12 +
13 +var img_src_br_list = []
14 +var title_list = []
15 +var next_link_list=[]
16 +var result_arr=[]
17 +//broadcasting_search('https://people.search.naver.com/search.naver?where=nexearch&sm=tab_ppn&query=%EC%9C%A0%EC%9E%AC%EC%84%9D&os=94702&ie=utf8&key=PeopleService','유재석')
18 +
19 +var driver_1 = new webdriver.Builder().forBrowser('chrome').withCapabilities(webdriver.Capabilities.chrome()).setChromeOptions(Options).build()
20 +
21 +module.exports = {
22 + broadcasting_search : function(next_link,name) {
23 + return new Promise(function(resolve,reject) {
24 + if(fs.existsSync("./log/"+name+"_img_src_br.txt")) {
25 + const img_src_br = fs.readFileSync("./log/"+name+"_img_src_br.txt");
26 + img_src_br_list = img_src_br.toString().split(',');
27 + const title_br = fs.readFileSync("./log/"+name+"_title_br.txt");
28 + title_list = title_br.toString().split(',');
29 + const link_br = fs.readFileSync("./log/"+name+"_next_link_br.txt")
30 + next_link_list = link_br.toString().split(',');
31 + driver_1.quit()
32 + result_arr.push(img_src_br_list,title_list,next_link_list)
33 + resolve(result_arr)
34 + }
35 + else {
36 + test2.search_broadcasting(driver_1,next_link.substr(7),name,function() {
37 + const img_src_br = fs.readFileSync("./log/"+name+"_img_src_br.txt");
38 + img_src_br_list = img_src_br.toString().split(',');
39 + const title_br = fs.readFileSync("./log/"+name+"_title_br.txt");
40 + title_list = title_br.toString().split(',');
41 + const link_br = fs.readFileSync("./log/"+name+"_next_link_br.txt")
42 + next_link_list = link_br.toString().split(',');
43 +
44 + driver_1.quit()
45 + result_arr.push(img_src_br_list,title_list,next_link_list)
46 + resolve(result_arr)
47 + })
48 + }
49 + })
50 + }
51 +}
...\ No newline at end of file ...\ No newline at end of file
1 +var async = require('async');
2 +var webdriver = require('selenium-webdriver');
3 +//var options = {desiredCapabilities: {browserName: 'chrome'}};
4 +var chrome = require('selenium-webdriver/chrome')
5 +var Options = new chrome.Options();
6 +Options.addArguments('headless')
7 +Options.addArguments('disable-gpu')
8 +const fs = require('fs')
9 +const test3 = require('./crawling_br_onair_date')
10 +const test4 = require('./crawling_time')
11 +var util = require('util')
12 +var EventEmitter = require('events').EventEmitter;
13 +
14 +br_datalist = []
15 +
16 +var driver_2 = new webdriver.Builder()
17 +.forBrowser('chrome')
18 +.withCapabilities(webdriver.Capabilities.chrome()).setChromeOptions(Options)
19 +.build();
20 +var returnfunction = function() {
21 + var self= this
22 + this.on('ok1',function() {
23 + return br_datalist
24 + })
25 +}
26 +var driver_3 = new webdriver.Builder()
27 +.forBrowser('chrome')
28 +.withCapabilities(webdriver.Capabilities.chrome()).setChromeOptions(Options)
29 +.build();
30 +//module.exports = {
31 + var search_detail_time = function (name) {
32 + var self = this
33 + this.on('ok',function() {
34 + if(br_datalist[1] == "방영중") {
35 + if(fs.existsSync("./log/"+name+"_time_detail.txt")) {
36 + const detail = fs.readFileSync("./log/"+name+"_time_detail.txt");
37 + detail_time_list = detail.toString().split(',');
38 + br_datalist.push(detail_time_list[0])
39 + br_datalist.push(detail_time_list[1])
40 + br_datalist.push(detail_time_list[2])
41 + }
42 + else {
43 + test4.search_broadcasting_time(driver_3,br_datalist[0],br_datalist[3],name,function(){
44 + const detail = fs.readFileSync("./log/"+name+"_time_detail.txt");
45 + detail_time_list = detail.toString().split(',');
46 + br_datalist.push(detail_time_list[0])
47 + br_datalist.push(detail_time_list[1])
48 + br_datalist.push(detail_time_list[2])
49 + })
50 + }
51 + }
52 + })
53 +
54 + }
55 +//}
56 +
57 +util.inherits(returnfunction,EventEmitter);
58 +util.inherits(search_detail_time,EventEmitter);
59 +return_ = new returnfunction();
60 +
61 +
62 +var detail_time_list = []
63 +
64 +//isonair('https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EB%9F%B0%EB%8B%9D%EB%A7%A8&oquery=%EB%9F%B0%EB%8B%9D%EB%A7%A8&tqi=UtvQ%2FlpySDVssa%2BpmFNssssstfG-043752',"런닝맨")
65 +module.exports = {
66 + isonair : function (url,string) {
67 + search_detail = new search_detail_time(string)
68 +
69 + return new Promise(function(resolve,reject) {
70 + if(fs.existsSync("./log/"+string+"_br_isonair.txt")) {
71 + const img_src_br = fs.readFileSync("./log/"+string+"_br_isonair.txt");
72 + br_datalist = img_src_br.toString().split(',');
73 + search_detail.emit('ok')
74 + setTimeout(() => {
75 + resolve(br_datalist)
76 + }, 5000);
77 +
78 + }
79 +
80 + else {
81 + test3.search_onairanddate(driver_2,url,string,function() {
82 + const img_src_br = fs.readFileSync("./log/"+string+"_br_isonair.txt");
83 + br_datalist = img_src_br.toString().split(',');
84 + search_detail.emit('ok')
85 + setTimeout(() => {
86 + resolve(br_datalist)
87 + }, 5000);
88 +
89 + })
90 + }
91 + })
92 + }
93 +}
...\ No newline at end of file ...\ No newline at end of file
1 +var async = require('async');
2 +var webdriver = require('selenium-webdriver');
3 +//var options = {desiredCapabilities: {browserName: 'chrome'}};
4 +var chrome = require('selenium-webdriver/chrome')
5 +var Options = new chrome.Options();
6 +Options.addArguments('headless')
7 +Options.addArguments('disable-gpu')
8 +var test1 = require('./crawling_samename')
9 +const fs = require('fs')
10 +var util = require('util')
11 +var EventEmitter = require('events').EventEmitter;
12 +
13 +var next_link_Array = []
14 +var img_src_Array = []
15 +
16 +const {Builder, By, Key, until} = require('selenium-webdriver');
17 +
18 +var result_arr = []
19 +module.exports = {
20 + First_Search :function(name) {
21 +
22 + var driver = new webdriver.Builder()
23 + .forBrowser('chrome')
24 + .withCapabilities(webdriver.Capabilities.chrome())
25 + //.setChromeOptions(Options)
26 + .build();
27 +
28 + return new Promise(function(resolve,reject) {
29 + if(fs.existsSync("./log/"+name+"_next_link.txt")) {
30 + const next_link = fs.readFileSync("./log/"+name+"_next_link.txt");
31 + const img_src = fs.readFileSync("./log/"+name+"_img_src.txt");
32 + next_link_Array = next_link.toString().split(',');
33 + img_src_Array = img_src.toString().split(',');
34 + //driver.quit()
35 + result_arr.push(next_link_Array)
36 + result_arr.push(img_src_Array)
37 +
38 + resolve(result_arr)
39 + }
40 + else {
41 + test1.first_search(driver,name,function() {
42 + const next_link = fs.readFileSync("./log/"+name+"_next_link.txt");
43 + const img_src = fs.readFileSync("./log/"+name+"_img_src.txt");
44 + next_link_Array = next_link.toString().split(',');
45 + img_src_Array = img_src.toString().split(',');
46 + result_arr.push(next_link_Array)
47 + result_arr.push(img_src_Array)
48 + //driver.quit()
49 + resolve(result_arr)
50 + })
51 + }
52 +
53 + })
54 +
55 + }
56 +//util.inherits(First_Search,EventEmitter);
57 +//first_search1 = new First_Search("유재석")
58 +//first_search1.emit('input')
59 +}
60 +
61 +
62 +
63 +//다른 파일에서 호출하는 방법
64 +//var a=require("./sane_name_search")
65 +
66 +//var arr = []
67 +
68 +//a.First_Search("(검색어 입력)").then(aa => {
69 +// arr=a
70 +// console.log(arr)
71 +//})
72 +
1 +var a=require("./selenium-function/last_detail")
2 +var arr = []
3 +a.isonair('https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EB%9F%B0%EB%8B%9D%EB%A7%A8&oquery=%EB%9F%B0%EB%8B%9D%EB%A7%A8&tqi=UtvQ%2FlpySDVssa%2BpmFNssssstfG-043752','런닝맨').then(function (resolvedData) {
4 + arr=resolvedData
5 + console.log(arr)
6 +})
7 +
8 +var b=require("./selenium-function/last")
9 +var arr_1 = []
10 +
11 +b.broadcasting_search('https://people.search.naver.com/search.naver?where=nexearch&sm=tab_ppn&query=%EC%9C%A0%EC%9E%AC%EC%84%9D&os=94702&ie=utf8&key=PeopleService','유재석').then(function(resolvedData) {
12 + arr_1 = resolvedData
13 + console.log(arr_1)
14 +})
15 +
16 +var c=require("./selenium-function/same_name_search")
17 +var arr_2 = []
18 +c.First_Search("유재석").then(function(resolvedData) {
19 + arr_2 = resolvedData
20 + console.log(arr_2)
21 +})
...\ No newline at end of file ...\ No newline at end of file
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
2 <form method="POST" action="/login"> 2 <form method="POST" action="/login">
3 <label>id:</label><input type="text" name="id"><br/> 3 <label>id:</label><input type="text" name="id"><br/>
4 <label>pwd:</label><input type="password" name="pwd"><br/> 4 <label>pwd:</label><input type="password" name="pwd"><br/>
5 - <button type="submit">로그인</button> 5 + <button type="submit" class="btn btn-info">로그인</button>
6 </form> 6 </form>
7 </div> 7 </div>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
3 <label>id:</label><input type="text" name="id"><br/> 3 <label>id:</label><input type="text" name="id"><br/>
4 <label>pwd:</label><input type="password" name="pwd"><br/> 4 <label>pwd:</label><input type="password" name="pwd"><br/>
5 <label>name:</label><input type="text" name="name"><br/> 5 <label>name:</label><input type="text" name="name"><br/>
6 - <button type="submit">가입</button> 6 + <button type="submit" class="btn btn-info">가입</button>
7 </form> 7 </form>
8 - <a href='/'><button>취소</button></a> 8 + <a href='/'><button type="button" class="btn btn-danger">취소</button></a>
9 </div> 9 </div>
...\ No newline at end of file ...\ No newline at end of file
......
1 <div class="contents_main"> 1 <div class="contents_main">
2 <h1>This is main</h1> 2 <h1>This is main</h1>
3 - <form method="GET" action="/samename"> 3 + <form method="POST" action="/samename">
4 <input type="text" name="samename"> 4 <input type="text" name="samename">
5 - <button type="submit">검색</button> 5 + <button type="submit" class="btn btn-info">검색</button>
6 </form> 6 </form>
7 </div> 7 </div>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
8 <% if(val[3] == true) { %> 8 <% if(val[3] == true) { %>
9 <li><%= val[4] %></li> 9 <li><%= val[4] %></li>
10 <li><%= val[5] %></li> 10 <li><%= val[5] %></li>
11 - <button>추가</button> 11 + <a href="/addtt"><button class="btn btn-warning">추가</button></a>
12 <% } %> 12 <% } %>
13 <% }) %> 13 <% }) %>
14 </div> 14 </div>
...\ No newline at end of file ...\ No newline at end of file
......
1 <div class="contents_main"> 1 <div class="contents_main">
2 <h1>This is Samename</h1> 2 <h1>This is Samename</h1>
3 - <% samename.forEach(function(val){ %> 3 +
4 - <li><%= val[0]%></li> 4 + <% samename[1].forEach(function(val){%>
5 - <li><img src="<%= val[1]%>"></li> 5 + <li><img src="<%-val%>"></li>
6 <% }) %> 6 <% }) %>
7 +
8 +
7 </div> 9 </div>
...\ No newline at end of file ...\ No newline at end of file
......
1 <html> 1 <html>
2 <head> 2 <head>
3 <title>Index</title> 3 <title>Index</title>
4 + <link rel="stylesheet" href="/static/css/bootstrap.css">
5 + <link rel="stylesheet" href="/static/css/site.css">
4 </head> 6 </head>
5 <body> 7 <body>
6 <% include ./navigation_index.ejs %> 8 <% include ./navigation_index.ejs %>
7 <% include ./contents_index.ejs %> 9 <% include ./contents_index.ejs %>
10 +<script src="http://ajax.googleapis.com/ajaz/libs/jquery/1.12.4/jquery.min.js"></script>
11 +<script type="text/javascript" src="/static/js/bootstrap.js"></script>
8 </body> 12 </body>
9 </html> 13 </html>
...\ No newline at end of file ...\ No newline at end of file
......
1 <html> 1 <html>
2 <head> 2 <head>
3 <title>Join</title> 3 <title>Join</title>
4 + <link rel="stylesheet" href="/static/css/bootstrap.css">
5 + <link rel="stylesheet" href="/static/css/site.css">
4 </head> 6 </head>
5 <body> 7 <body>
6 <% include ./navigation_index.ejs %> 8 <% include ./navigation_index.ejs %>
7 <% include ./contents_join.ejs %> 9 <% include ./contents_join.ejs %>
10 + <script src="http://ajax.googleapis.com/ajaz/libs/jquery/1.12.4/jquery.min.js"></script>
11 + <script type="text/javascript" src="/static/js/bootstrap.js"></script>
8 </body> 12 </body>
9 </html> 13 </html>
...\ No newline at end of file ...\ No newline at end of file
......
1 <html> 1 <html>
2 <head> 2 <head>
3 <title>Main</title> 3 <title>Main</title>
4 + <link rel="stylesheet" href="/static/css/bootstrap.css">
5 + <link rel="stylesheet" href="/static/css/site.css">
4 </head> 6 </head>
5 <body> 7 <body>
6 <% include ./navigation_main.ejs %> 8 <% include ./navigation_main.ejs %>
......
1 <html> 1 <html>
2 <head> 2 <head>
3 <title>MyPage</title> 3 <title>MyPage</title>
4 + <link rel="stylesheet" href="/static/css/bootstrap.css">
5 + <link rel="stylesheet" href="/static/css/site.css">
4 </head> 6 </head>
5 <body> 7 <body>
6 <% include ./navigation_main.ejs %> 8 <% include ./navigation_main.ejs %>
......
1 <div class="navigation_index"> 1 <div class="navigation_index">
2 - <a href='/join'><button>회원가입</button></a> 2 + <a href='/join' ><button class="btn btn-success">회원가입</button></a>
3 - <a href='/'><button>Index</button></a> 3 + <a href='/' ><button class="btn btn-success">Index</button></a>
4 </div> 4 </div>
...\ No newline at end of file ...\ No newline at end of file
......
1 <div class="navigation_main"> 1 <div class="navigation_main">
2 - <a href="/logout"><button>로그아웃</button></a> 2 + <a href="/logout"><button class="btn btn-primary">로그아웃</button></a>
3 - <a href="/main"><button>검색</button></a> 3 + <a href="/main"><button class="btn btn-primary">검색</button></a>
4 - <a href="/mypage"><button>마이페이지</button></a> 4 + <a href="/mypage"><button class="btn btn-primary">마이페이지</button></a>
5 - <a href="/timetable"><button>나만의시간표</button></a> 5 + <a href="/timetable"><button class="btn btn-primary">나만의시간표</button></a>
6 - <a href="/ttlist"><button>시간표수정</button></a> 6 + <a href="/ttlist"><button class="btn btn-primary">시간표수정</button></a>
7 </div> 7 </div>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -5,5 +5,7 @@ ...@@ -5,5 +5,7 @@
5 <body> 5 <body>
6 <% include ./navigation_main.ejs %> 6 <% include ./navigation_main.ejs %>
7 <% include ./contents_programs.ejs %> 7 <% include ./contents_programs.ejs %>
8 + <link rel="stylesheet" href="/static/css/bootstrap.css">
9 + <link rel="stylesheet" href="/static/css/site.css">
8 </body> 10 </body>
9 </html> 11 </html>
...\ No newline at end of file ...\ No newline at end of file
......
1 <html> 1 <html>
2 <head> 2 <head>
3 <title>Samename</title> 3 <title>Samename</title>
4 + <link rel="stylesheet" href="/static/css/bootstrap.css">
5 + <link rel="stylesheet" href="/static/css/site.css">
4 </head> 6 </head>
5 <body> 7 <body>
6 <% include ./navigation_main.ejs %> 8 <% include ./navigation_main.ejs %>
......