Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Upgrade compass_twitter_bootstrap to version 2.2.2.2, lock the versio…

…n in the gemfile and commit the matching js and image files. Previously we had unpredictable mismatches between bootstrap javascript and scss. I ported the whole site to use the new js files EXCEPT FOR THE FORUM. Various other template and style cleanup
  • Loading branch information...
commit 29f9466acce8557ca5b294c148952e4294f96e13 1 parent 9324c19
Benoit Grégoire benoitg authored

Showing 127 changed files with 2,512 additions and 400 deletions. Show diff stats Hide diff stats

  1. +4 1 Gemfile
  2. +4 3 apps/i4p_base/templates/base.html
  3. +24 32 apps/i4p_base/templates/pages/homepage.html
  4. +5 3 apps/project_sheet/templates/project_sheet/block/gallery_fancy_thin.html
  5. +4 1 apps/project_sheet/templates/project_sheet/block/gallery_fancy_wide.html
  6. +2 2 apps/project_sheet/templates/project_sheet/block/gallery_modal.html
  7. +4 5 apps/project_sheet/templates/project_sheet/layout/project_base.html
  8. +0 7 apps/workgroup/templates/workgroup/layout/workgroup_base.html
  9. +4 2 apps/workgroup/templates/workgroup/page/wiki_edit.html
  10. +5 0 fabfile.py
  11. BIN  static/images/base/horizontal-separator.png
  12. BIN  static/images/glyphicons-halflings-white.png
  13. BIN  static/images/glyphicons-halflings.png
  14. BIN  static/images/home/banner/bubbles_left.png
  15. BIN  static/images/home/banner/bubbles_right.png
  16. BIN  static/images/home/banner/mascot.png
  17. BIN  static/images/home/banner/play_button.png
  18. BIN  static/images/home/banner/video_background.jpg
  19. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/arrow-ico.jpg
  20. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/arrow.jpg
  21. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/button-picto.png
  22. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/button.jpg
  23. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/footer-logo.jpg
  24. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/header-bg.jpg
  25. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/illus-dev.png
  26. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/illus-ess.png
  27. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/illus-graph.png
  28. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/illus-rapp.png
  29. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/illus-redac.png
  30. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/illus-trad.png
  31. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/job-dev.jpg
  32. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/job-ess.jpg
  33. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/job-graph.jpg
  34. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/job-rap.jpg
  35. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/job-redac.jpg
  36. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/job-trad.jpg
  37. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/logo.png
  38. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/rss.jpg
  39. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/separator-v.jpg
  40. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/tache-bottom.png
  41. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/tache-centre.jpg
  42. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/tache-top.png
  43. 0  {apps/i4p_base/static/images → static/images/i4p_base}/pages/contrib/tagline.jpg
  44. 0  {apps/member/static/images → static/images/member/userena}/polaroid-bg.png
  45. +0 6 static/js/bootstrap.min.js
  46. +117 0 static/js/compass_twitter_bootstrap/bootstrap-affix.js
  47. +99 0 static/js/compass_twitter_bootstrap/bootstrap-alert.js
  48. +14 0 static/js/compass_twitter_bootstrap/bootstrap-all.js
  49. +105 0 static/js/compass_twitter_bootstrap/bootstrap-button.js
  50. +185 0 static/js/compass_twitter_bootstrap/bootstrap-carousel.js
  51. +167 0 static/js/compass_twitter_bootstrap/bootstrap-collapse.js
  52. +161 0 static/js/compass_twitter_bootstrap/bootstrap-dropdown.js
  53. +245 0 static/js/compass_twitter_bootstrap/bootstrap-modal.js
  54. +114 0 static/js/compass_twitter_bootstrap/bootstrap-popover.js
  55. +162 0 static/js/compass_twitter_bootstrap/bootstrap-scrollspy.js
  56. +144 0 static/js/compass_twitter_bootstrap/bootstrap-tab.js
  57. +287 0 static/js/compass_twitter_bootstrap/bootstrap-tooltip.js
  58. +60 0 static/js/compass_twitter_bootstrap/bootstrap-transition.js
  59. +323 0 static/js/compass_twitter_bootstrap/bootstrap-typeahead.js
  60. +0 88 static/sass/_i4p-mixins.scss
  61. +3 3 static/sass/black_page.scss
  62. +3 4 static/sass/error_pages.scss
  63. +1 1  static/sass/generals.scss
  64. +6 1 static/sass/grid/bootstrap.scss
  65. +1 1  static/sass/home-blocks/project_slide.scss
  66. +1 1  static/sass/home-blocks/twittblogboxes.scss
  67. +1 1  static/sass/home-blocks/twitter-box.scss
  68. +1 5 static/sass/i4p/_buttons.scss
  69. +82 1 static/sass/i4p/_mixins.scss
  70. +1 1  static/sass/i4p_base/backcap/backcap.scss
  71. +1 1  static/sass/i4p_base/block/modal.scss
  72. +1 1  static/sass/i4p_base/footer.scss
  73. +1 1  static/sass/i4p_base/header.scss
  74. +1 1  static/sass/i4p_base/superfish_main_menu.scss
  75. +10 10 static/sass/login-slide.scss
  76. +1 1  static/sass/member/umessages/usermessages.scss
  77. +2 2 static/sass/member/userena/profile.scss
  78. +1 1  static/sass/member/userena/profile_detail.scss
  79. +1 1  static/sass/member/userena/profile_list.scss
  80. +4 4 static/sass/pages/contrib.scss
  81. +1 1  static/sass/pages/flatpage.scss
  82. +68 112 static/sass/pages/homepage.scss
  83. +2 2 static/sass/pages/onemenu.scss
  84. +1 1  static/sass/partner/partner_detail.scss
  85. +2 2 static/sass/project_sheet/block/about.scss
  86. +1 1  static/sass/project_sheet/block/card_fancy_square.scss
  87. +1 1  static/sass/project_sheet/block/card_fancy_wide.scss
  88. +1 1  static/sass/project_sheet/block/card_flat_wide.scss
  89. +1 1  static/sass/project_sheet/block/comment-block.scss
  90. +1 1  static/sass/project_sheet/block/comment-list.scss
  91. +2 2 static/sass/project_sheet/block/detail-list.scss
  92. +1 1  static/sass/project_sheet/block/form-buttons.scss
  93. +1 1  static/sass/project_sheet/block/gallery_fancy_thin.scss
  94. +1 1  static/sass/project_sheet/block/gallery_fancy_wide.scss
  95. +1 1  static/sass/project_sheet/block/gallery_modal.scss
  96. +1 1  static/sass/project_sheet/block/member_fancy_square.scss
  97. +1 1  static/sass/project_sheet/block/member_flat_wide.scss
  98. +1 1  static/sass/project_sheet/block/memberlist_modal_seeall.scss
  99. +2 2 static/sass/project_sheet/block/memberlist_square.scss
  100. +1 1  static/sass/project_sheet/block/menubar.scss
  101. +1 1  static/sass/project_sheet/block/partner-block.scss
  102. +17 17 static/sass/project_sheet/block/project_list_filter_panel.scss
  103. +2 2 static/sass/project_sheet/block/project_list_project_card.scss
  104. +1 1  static/sass/project_sheet/block/reference-block.scss
  105. +2 2 static/sass/project_sheet/block/subheader-readonly.scss
  106. +1 1  static/sass/project_sheet/block/subheader-readwrite.scss
  107. +1 1  static/sass/project_sheet/block/subheader.scss
  108. +1 1  static/sass/project_sheet/block/toolbar.scss
  109. +1 1  static/sass/project_sheet/block/topic_select.scss
  110. +2 2 static/sass/{pages → project_sheet/layout}/project_base.scss
  111. +1 1  static/sass/project_sheet/page/gallery.scss
  112. +3 2 static/sass/project_sheet/page/project_list.scss
  113. +2 2 static/sass/project_support/page/support_thread.scss
  114. +2 17 static/sass/style.scss
  115. +3 3 static/sass/support-panel.scss
  116. +1 1  static/sass/tags/block/taglist.scss
  117. +1 1  static/sass/tags/tag_view.scss
  118. +5 5 static/sass/white_page.scss
  119. +1 1  static/sass/workgroup/block/grouplist_fancy_wide.scss
  120. +1 1  static/sass/workgroup/block/subscribe_button.scss
  121. +2 2 static/sass/workgroup/block/workgroup_subscribers.scss
  122. +1 1  static/sass/workgroup/layout/workgroup_base.scss
  123. +1 1  static/sass/workgroup/page/group_edit.scss
  124. +1 1  static/sass/workgroup/page/wiki_edit.scss
  125. +3 3 static/sass/workgroup/page/workgroup_detail.scss
  126. +1 1  static/sass/workgroup/page/workgroup_members.scss
  127. +1 1  static/sass/zinnia-i4p.scss
5 Gemfile
@@ -2,8 +2,11 @@
2 2 source "https://rubygems.org"
3 3
4 4 gem "compass", "~> 0.12.0"
  5 +# If you change the compass_twitter_bootstrap, make sure to update and commit
  6 +# the matching assets, by copying them from the gem's folder in
  7 +# vendor/bundle to satic/js/compass_twitter_bootstrap
5 8 gem "compass_twitter_bootstrap",
6   - "~> 2.0.0"
  9 + "= 2.2.2.2 "
7 10 #:git => "git://github.com/vwall/compass-twitter-bootstrap.git"
8 11
9 12 gem 'oily_png'
7 apps/i4p_base/templates/base.html
@@ -46,9 +46,6 @@
46 46 <!-- render_block "css" -->
47 47 {% render_block "css" postprocessor "apps.i4p_base.sekizai_postprocessors.compress" %}
48 48 <!-- /render_block "css" -->
49   - <!-- render_block "ipcss" -->
50   - {% render_block "ipcss" postprocessor "apps.i4p_base.sekizai_postprocessors.compress" %}
51   - <!-- /render_block "ipcss" -->
52 49
53 50 {% compress js %}
54 51 <script type="text/javascript" src="{{ STATIC_URL }}js/jquery-1.8.2.js"></script>
@@ -81,7 +78,11 @@
81 78 $.getScript(I4P_STATIC_URL+"js/base/panels.js");
82 79 </script>
83 80
  81 +
  82 + <!-- render_block "js" -->
84 83 {% render_block "js" postprocessor "apps.i4p_base.sekizai_postprocessors.compress" %}
  84 + <!-- /render_block "js" -->
  85 +
85 86 <!-- FIXME: do not enable until directive/compile is fixed
86 87 <script type="text/javascript" src="{{ STATIC_URL }}js/search.js"></script>
87 88 -->
56 apps/i4p_base/templates/pages/homepage.html
@@ -2,6 +2,7 @@
2 2 {% load i18n %}
3 3 {% load compress %}
4 4 {% load cms_tags %}
  5 +{% load sekizai_tags %}
5 6
6 7 {% block style %}
7 8 {% compress css %}
@@ -20,16 +21,25 @@
20 21
21 22 {% block extra_head %}
22 23 {{ block.super }}
23   -
  24 + {% addtoblock "js" strip %}
  25 + <script type="text/javascript" src="{{ STATIC_URL }}js/jquery/hoverIntent.js"></script>
  26 + {% endaddtoblock %}
  27 + {% addtoblock "js" strip %}
  28 + <script type="text/javascript" src="{{ STATIC_URL }}js/jquery/jquery.ezmark.js"></script>
  29 + {% endaddtoblock %}
  30 + {% addtoblock "js" strip %}
  31 + <script type="text/javascript" src="{{ STATIC_URL }}js/jquery/jquery.anythingslider.js" ></script>
  32 + {% endaddtoblock %}
  33 + {% addtoblock "js" strip %}
  34 + <script type="text/javascript" src="{{ STATIC_URL }}js/homepage/boxes.js" ></script>
  35 + {% endaddtoblock %}
  36 + {% addtoblock "js" strip %}
  37 + <script type="text/javascript" src="{{ STATIC_URL }}js/homepage/slider.js" ></script>
  38 + {% endaddtoblock %}
  39 + {% addtoblock "js" strip %}
  40 + <script type="text/javascript" src="{{ STATIC_URL }}js/compass_twitter_bootstrap/bootstrap-modal.js" ></script>
  41 + {% endaddtoblock %}
24 42 {% compress js %}
25   - <script type="text/javascript" src="{{ STATIC_URL }}js/jquery/hoverIntent.js"></script>
26   - <script type="text/javascript" src="{{ STATIC_URL }}js/jquery/jquery.ezmark.js"></script>
27   -
28   - <script type="text/javascript" src="{{ STATIC_URL }}js/jquery/jquery.anythingslider.js" ></script>
29   -
30   - <script type="text/javascript" src="{{ STATIC_URL }}js/homepage/boxes.js" ></script>
31   - <script type="text/javascript" src="{{ STATIC_URL }}js/homepage/slider.js" ></script>
32   -
33 43
34 44 <script type="text/javascript">
35 45 $(document).ready(function(){
@@ -116,35 +126,17 @@
116 126 </script>
117 127 {% endcompress %}
118 128
  129 +
119 130 {% endblock %}
120 131
121 132
122 133
  134 +
123 135 {% block nav %}
124 136 {% cms_toolbar %}
125   - <div id="video-zone">
126   - <div id="video" class="center">
127   - {% placeholder "Top video zone" or %}
128   - <h1 class="what_is">{% trans ' What is it ?' %}</h1>
129   -
130   - <div id="project_block">
131   - <h1><a href="{% url project_sheet-list %}">{% trans 'Explore and contribute' %}</a></h1>
132   - {% trans 'to social and cultural projects' %}
133   - </div>
134   -
135   - <div id="network_block">
136   - <h1><a href="{% url userena_signup %}">{% trans 'Join the community' %}</a></h1>
137   - {% trans 'of citizens from more 30 countries' %}
138   - </div>
139   -
140   - <div class="baseline">
141   - {% placeholder baseline or %}
142   - "{% trans ' Detect and develop socially innovative projects.' %}"
143   - {% endplaceholder %}
144   - </div>
145   - <img src="{{ STATIC_URL }}images/home/video.jpg" alt="video" width="982" height="132"/>
146   - {% endplaceholder %}
147   - </div>
  137 + <div id="homepage-banner-outer-container">
  138 + {% placeholder "Top homepage banner" or%}
  139 + {% endplaceholder %}
148 140 </div>
149 141
150 142 {% include "pages/home-blocks/focus-zone.html" %}
8 apps/project_sheet/templates/project_sheet/block/gallery_fancy_thin.html
@@ -17,14 +17,16 @@
5 apps/project_sheet/templates/project_sheet/block/gallery_fancy_wide.html
@@ -11,9 +11,12 @@
4 apps/project_sheet/templates/project_sheet/block/gallery_modal.html
@@ -18,7 +18,7 @@
@@ -28,7 +28,7 @@
9 apps/project_sheet/templates/project_sheet/layout/project_base.html
@@ -5,7 +5,7 @@
5 5
6 6 {% block style %}
7 7 {% compress css %}
8   -<link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}css/pages/project_base.css" />
  8 +<link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}css/project_sheet/layout/project_base.css" />
9 9 {% endcompress %}
10 10 {% endblock %}
11 11
@@ -24,10 +24,10 @@
24 24 {% endblock %}
25 25
26 26 {% block content %}
27   -{% with gridsystem='bootstrap' %}
  27 +{% addtoblock "js" strip %}
  28 +{% endaddtoblock %}
28 29
29 30 {% addtoblock "js" strip %}
30   - <script src="{{ STATIC_URL }}js/bootstrap.js"></script>
31 31 {% if project_translation %}
32 32 <script>
33 33 // Addthis configuration
@@ -47,7 +47,7 @@
47 47
48 48 {% endaddtoblock %}
49 49
50   -{% addtoblock "css" %}
  50 +{% addtoblock "css" strip %}
51 51 <link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}css/project_sheet/block/memberlist_square.css" />
52 52 {% endaddtoblock %}
53 53
@@ -66,5 +66,4 @@
66 66 </div>
67 67
68 68 <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#async=1"></script>
69   -{% endwith %}
70 69 {% endblock %}
7 apps/workgroup/templates/workgroup/layout/workgroup_base.html
@@ -14,12 +14,5 @@
14 14
15 15 {% block content %}
16 16
17   -{% with gridsystem='bootstrap' %}
18   -
19   -{% addtoblock "js" %}
20   - <script src="{{ STATIC_URL }}js/bootstrap.js"></script>
21   -{% endaddtoblock %}
22   -
23 17 <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#async=1"></script>
24   -{% endwith %}
25 18 {% endblock %}
6 apps/workgroup/templates/workgroup/page/wiki_edit.html
@@ -4,10 +4,12 @@
4 4 {% load sekizai_tags %}
5 5
6 6 {% block content %}
7   -{% addtoblock "css" %}
  7 +{% addtoblock "css" strip %}
8 8 <link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}css/workgroup/page/wiki_edit.css" />
9 9 {% endaddtoblock %}
10   -
  10 +{% addtoblock "js" strip %}
  11 + <script src="{{ STATIC_URL }}js/compass_twitter_bootstrap/bootstrap-modal.js"></script>
  12 +{% endaddtoblock %}
11 13 <div id="workgroup-wiki" class="container">
12 14 {% if not user.is_authenticated %}
13 15 <p class="alert alert-warning">
5 fabfile.py
@@ -288,6 +288,7 @@ def app_fullupdate():
288 288 execute(compile_messages)
289 289 execute(compile_stylesheets)
290 290 execute(update_requirements, force=False)
  291 + execute(update_compass)
291 292 execute(app_db_update)
292 293 execute(collect_static_files)
293 294 # tests()
@@ -443,6 +444,10 @@ def install_rbenv():
443 444 def install_compass():
444 445 with cd(env.venvfullpath + '/' + env.projectname + '/'):
445 446 run('rm -rf vendor/bundle')
  447 + execute(update_compass)
  448 +@task
  449 +def update_compass():
  450 + with cd(env.venvfullpath + '/' + env.projectname + '/'):
446 451 run('bundle install --path=vendor/bundle')
447 452
448 453 @task
BIN  static/images/base/horizontal-separator.png
BIN  static/images/glyphicons-halflings-white.png
BIN  static/images/glyphicons-halflings.png
BIN  static/images/home/banner/bubbles_left.png
BIN  static/images/home/banner/bubbles_right.png
BIN  static/images/home/banner/mascot.png
BIN  static/images/home/banner/play_button.png
BIN  static/images/home/banner/video_background.jpg
0  ...4p_base/static/images/pages/contrib/arrow-ico.jpg → static/images/i4p_base/pages/contrib/arrow-ico.jpg
File renamed without changes
0  apps/i4p_base/static/images/pages/contrib/arrow.jpg → static/images/i4p_base/pages/contrib/arrow.jpg
File renamed without changes
0  ...base/static/images/pages/contrib/button-picto.png → ...ic/images/i4p_base/pages/contrib/button-picto.png
File renamed without changes
0  apps/i4p_base/static/images/pages/contrib/button.jpg → static/images/i4p_base/pages/contrib/button.jpg
File renamed without changes
0  ..._base/static/images/pages/contrib/footer-logo.jpg → static/images/i4p_base/pages/contrib/footer-logo.jpg
File renamed without changes
0  ...4p_base/static/images/pages/contrib/header-bg.jpg → static/images/i4p_base/pages/contrib/header-bg.jpg
File renamed without changes
0  ...4p_base/static/images/pages/contrib/illus-dev.png → static/images/i4p_base/pages/contrib/illus-dev.png
File renamed without changes
0  ...4p_base/static/images/pages/contrib/illus-ess.png → static/images/i4p_base/pages/contrib/illus-ess.png
File renamed without changes
0  ..._base/static/images/pages/contrib/illus-graph.png → static/images/i4p_base/pages/contrib/illus-graph.png
File renamed without changes
0  ...p_base/static/images/pages/contrib/illus-rapp.png → static/images/i4p_base/pages/contrib/illus-rapp.png
File renamed without changes
0  ..._base/static/images/pages/contrib/illus-redac.png → static/images/i4p_base/pages/contrib/illus-redac.png
File renamed without changes
0  ...p_base/static/images/pages/contrib/illus-trad.png → static/images/i4p_base/pages/contrib/illus-trad.png
File renamed without changes
0  .../i4p_base/static/images/pages/contrib/job-dev.jpg → static/images/i4p_base/pages/contrib/job-dev.jpg
File renamed without changes
0  .../i4p_base/static/images/pages/contrib/job-ess.jpg → static/images/i4p_base/pages/contrib/job-ess.jpg
File renamed without changes
0  ...4p_base/static/images/pages/contrib/job-graph.jpg → static/images/i4p_base/pages/contrib/job-graph.jpg
File renamed without changes
0  .../i4p_base/static/images/pages/contrib/job-rap.jpg → static/images/i4p_base/pages/contrib/job-rap.jpg
File renamed without changes
0  ...4p_base/static/images/pages/contrib/job-redac.jpg → static/images/i4p_base/pages/contrib/job-redac.jpg
File renamed without changes
0  ...i4p_base/static/images/pages/contrib/job-trad.jpg → static/images/i4p_base/pages/contrib/job-trad.jpg
File renamed without changes
0  apps/i4p_base/static/images/pages/contrib/logo.png → static/images/i4p_base/pages/contrib/logo.png
File renamed without changes
0  apps/i4p_base/static/images/pages/contrib/rss.jpg → static/images/i4p_base/pages/contrib/rss.jpg
File renamed without changes
0  ..._base/static/images/pages/contrib/separator-v.jpg → static/images/i4p_base/pages/contrib/separator-v.jpg
File renamed without changes
0  ...base/static/images/pages/contrib/tache-bottom.png → ...ic/images/i4p_base/pages/contrib/tache-bottom.png
File renamed without changes
0  ...base/static/images/pages/contrib/tache-centre.jpg → ...ic/images/i4p_base/pages/contrib/tache-centre.jpg
File renamed without changes
0  ...4p_base/static/images/pages/contrib/tache-top.png → static/images/i4p_base/pages/contrib/tache-top.png
File renamed without changes
0  .../i4p_base/static/images/pages/contrib/tagline.jpg → static/images/i4p_base/pages/contrib/tagline.jpg
File renamed without changes
0  apps/member/static/images/polaroid-bg.png → static/images/member/userena/polaroid-bg.png
File renamed without changes
6 static/js/bootstrap.min.js
... ... @@ -1,6 +0,0 @@
1   -/*!
2   -* Bootstrap.js by @fat & @mdo
3   -* Copyright 2012 Twitter, Inc.
4   -* http://www.apache.org/licenses/LICENSE-2.0.txt
5   -*/
6   -!function(e){e(function(){"use strict";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()},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(function(){e("body").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")},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(function(){e("body").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.options=n,this.options.slide&&this.slide(this.options.slide),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.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},to:function(t){var n=this.$element.find(".item.active"),r=n.parent().children(),i=r.index(n),s=this;if(t>r.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){s.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",e(r[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()),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=e.Event("slide",{relatedTarget:i[0]});this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u]();if(i.hasClass("active"))return;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}},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.cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e(function(){e("body").on("click.carousel.data-api","[data-slide]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=!i.data("modal")&&e.extend({},i.data(),n.data());i.carousel(s),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)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)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"]()}},e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=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(function(){e("body").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(){i(e(t)).removeClass("open")}function i(t){var n=t.attr("data-target"),r;return n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=e(n),r.length||(r=t.parent()),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||(s.toggleClass("open"),n.focus()),!1},keydown:function(t){var n,r,s,o,u,a;if(!/(38|40|27)/.test(t.keyCode))return;n=e(this),t.preventDefault(),t.stopPropagation();if(n.is(".disabled, :disabled"))return;o=i(n),u=o.hasClass("open");if(!u||u&&t.keyCode==27)return n.click();r=e("[role=menu] li:not(.divider) a",o);if(!r.length)return;a=r.index(r.filter(":focus")),t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<r.length-1&&a++,~a||(a=0),r.eq(a).focus()}},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(function(){e("html").on("click.dropdown.data-api touchstart.dropdown.data-api",r),e("body").on("click.dropdown touchstart.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api touchstart.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;e("body").addClass("modal-open"),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).focus(),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.trigger("shown")}):t.$element.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,e("body").removeClass("modal-open"),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(e){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){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.options.backdrop!="static"&&this.$backdrop.click(e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),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,e.proxy(this.removeBackdrop,this)):this.removeBackdrop()):t&&t()}},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(function(){e("body").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;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,this.options.trigger=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):this.options.trigger!="manual"&&(i=this.options.trigger=="hover"?"mouseenter":"focus",s=this.options.trigger=="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,t,this.$element.data()),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.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 e,t,n,r,i,s,o;if(this.hasContent()&&this.enabled){e=this.tip(),this.setContent(),this.options.animation&&e.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,t=/in/.test(s),e.remove().css({top:0,left:0,display:"block"}).appendTo(t?this.$element:document.body),n=this.getPosition(t),r=e[0].offsetWidth,i=e[0].offsetHeight;switch(t?s.split(" ")[1]: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}}e.css(o).addClass(s).addClass("in")}},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 r(){var t=setTimeout(function(){n.off(e.support.transition.end).remove()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.remove()})}var t=this,n=this.tip();return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?r():n.remove(),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")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(t){return e.extend({},t?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},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)},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(){this[this.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}},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",title:"",delay:0,html:!0}}(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=t.attr("data-content")||(typeof n.content=="function"?n.content.call(t[0]):n.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)}}),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><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(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 t=e(this),n=t.data("target")||t.attr("href"),r=/^#\w/.test(n)&&e(n);return r&&r.length&&[[r.position().top,n]]||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")}},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(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 a").last()[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")}},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(function(){e("body").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.$menu=e(this.options.menu).appendTo("body"),this.source=this.options.source,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.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:t.top+t.height,left:t.left}),this.$menu.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("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),(e.browser.chrome||e.browser.webkit||e.browser.msie)&&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))},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: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()},blur:function(e){var t=this;setTimeout(function(){t.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(t){this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")}},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(function(){e("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;t.preventDefault(),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)),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:""))},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(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);
117 static/js/compass_twitter_bootstrap/bootstrap-affix.js
... ... @@ -0,0 +1,117 @@
  1 +/* ==========================================================
  2 + * bootstrap-affix.js v2.2.2
  3 + * http://twitter.github.com/bootstrap/javascript.html#affix
  4 + * ==========================================================
  5 + * Copyright 2012 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 + /* AFFIX CLASS DEFINITION
  27 + * ====================== */
  28 +
  29 + var Affix = function (element, options) {
  30 + this.options = $.extend({}, $.fn.affix.defaults, options)
  31 + this.$window = $(window)
  32 + .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
  33 + .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
  34 + this.$element = $(element)
  35 + this.checkPosition()
  36 + }
  37 +
  38 + Affix.prototype.checkPosition = function () {
  39 + if (!this.$element.is(':visible')) return
  40 +
  41 + var scrollHeight = $(document).height()
  42 + , scrollTop = this.$window.scrollTop()
  43 + , position = this.$element.offset()
  44 + , offset = this.options.offset
  45 + , offsetBottom = offset.bottom
  46 + , offsetTop = offset.top
  47 + , reset = 'affix affix-top affix-bottom'
  48 + , affix
  49 +
  50 + if (typeof offset != 'object') offsetBottom = offsetTop = offset
  51 + if (typeof offsetTop == 'function') offsetTop = offset.top()
  52 + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
  53 +
  54 + affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
  55 + false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
  56 + 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
  57 + 'top' : false
  58 +
  59 + if (this.affixed === affix) return
  60 +
  61 + this.affixed = affix
  62 + this.unpin = affix == 'bottom' ? position.top - scrollTop : null
  63 +
  64 + this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
  65 + }
  66 +
  67 +
  68 + /* AFFIX PLUGIN DEFINITION
  69 + * ======================= */
  70 +
  71 + var old = $.fn.affix
  72 +
  73 + $.fn.affix = function (option) {
  74 + return this.each(function () {
  75 + var $this = $(this)
  76 + , data = $this.data('affix')
  77 + , options = typeof option == 'object' && option
  78 + if (!data) $this.data('affix', (data = new Affix(this, options)))
  79 + if (typeof option == 'string') data[option]()
  80 + })
  81 + }
  82 +
  83 + $.fn.affix.Constructor = Affix
  84 +
  85 + $.fn.affix.defaults = {
  86 + offset: 0
  87 + }
  88 +
  89 +
  90 + /* AFFIX NO CONFLICT
  91 + * ================= */
  92 +
  93 + $.fn.affix.noConflict = function () {
  94 + $.fn.affix = old
  95 + return this
  96 + }
  97 +
  98 +
  99 + /* AFFIX DATA-API
  100 + * ============== */
  101 +
  102 + $(window).on('load', function () {
  103 + $('[data-spy="affix"]').each(function () {
  104 + var $spy = $(this)
  105 + , data = $spy.data()
  106 +
  107 + data.offset = data.offset || {}
  108 +
  109 + data.offsetBottom && (data.offset.bottom = data.offsetBottom)
  110 + data.offsetTop && (data.offset.top = data.offsetTop)
  111 +
  112 + $spy.affix(data)
  113 + })
  114 + })
  115 +
  116 +
  117 +}(window.jQuery);
99 static/js/compass_twitter_bootstrap/bootstrap-alert.js
... ... @@ -0,0 +1,99 @@
  1 +/* ==========================================================
  2 + * bootstrap-alert.js v2.2.2
  3 + * http://twitter.github.com/bootstrap/javascript.html#alerts
  4 + * ==========================================================
  5 + * Copyright 2012 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 + /* ALERT CLASS DEFINITION
  27 + * ====================== */
  28 +
  29 + var dismiss = '[data-dismiss="alert"]'
  30 + , Alert = function (el) {
  31 + $(el).on('click', dismiss, this.close)
  32 + }
  33 +
  34 + Alert.prototype.close = function (e) {
  35 + var $this = $(this)
  36 + , selector = $this.attr('data-target')
  37 + , $parent
  38 +
  39 + if (!selector) {
  40 + selector = $this.attr('href')
  41 + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
  42 + }
  43 +
  44 + $parent = $(selector)
  45 +
  46 + e && e.preventDefault()
  47 +
  48 + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
  49 +
  50 + $parent.trigger(e = $.Event('close'))
  51 +
  52 + if (e.isDefaultPrevented()) return
  53 +
  54 + $parent.removeClass('in')
  55 +
  56 + function removeElement() {
  57 + $parent
  58 + .trigger('closed')
  59 + .remove()
  60 + }
  61 +
  62 + $.support.transition && $parent.hasClass('fade') ?
  63 + $parent.on($.support.transition.end, removeElement) :
  64 + removeElement()
  65 + }
  66 +
  67 +
  68 + /* ALERT PLUGIN DEFINITION
  69 + * ======================= */
  70 +
  71 + var old = $.fn.alert
  72 +
  73 + $.fn.alert = function (option) {
  74 + return this.each(function () {
  75 + var $this = $(this)
  76 + , data = $this.data('alert')
  77 + if (!data) $this.data('alert', (data = new Alert(this)))
  78 + if (typeof option == 'string') data[option].call($this)
  79 + })
  80 + }
  81 +
  82 + $.fn.alert.Constructor = Alert
  83 +
  84 +
  85 + /* ALERT NO CONFLICT
  86 + * ================= */
  87 +
  88 + $.fn.alert.noConflict = function () {
  89 + $.fn.alert = old
  90 + return this
  91 + }
  92 +
  93 +
  94 + /* ALERT DATA-API
  95 + * ============== */
  96 +
  97 + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
  98 +
  99 +}(window.jQuery);
14 static/js/compass_twitter_bootstrap/bootstrap-all.js
... ... @@ -0,0 +1,14 @@
  1 +//=require bootstrap-transition
  2 +//=require bootstrap-affix
  3 +//=require bootstrap-alert
  4 +//-require bootstrap-affix
  5 +//=require bootstrap-modal
  6 +//=require bootstrap-dropdown
  7 +//=require bootstrap-scrollspy
  8 +//=require bootstrap-tab
  9 +//=require bootstrap-tooltip
  10 +//=require bootstrap-popover
  11 +//=require bootstrap-button
  12 +//=require bootstrap-collapse
  13 +//=require bootstrap-carousel
  14 +//=require bootstrap-typeahead
105 static/js/compass_twitter_bootstrap/bootstrap-button.js
... ... @@ -0,0 +1,105 @@
  1 +/* ============================================================
  2 + * bootstrap-button.js v2.2.2
  3 + * http://twitter.github.com/bootstrap/javascript.html#buttons
  4 + * ============================================================
  5 + * Copyright 2012 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 + /* BUTTON PUBLIC CLASS DEFINITION
  27 + * ============================== */
  28 +
  29 + var Button = function (element, options) {
  30 + this.$element = $(element)
  31 + this.options = $.extend({}, $.fn.button.defaults, options)
  32 + }
  33 +
  34 + Button.prototype.setState = function (state) {
  35 + var d = 'disabled'
  36 + , $el = this.$element
  37 + , data = $el.data()
  38 + , val = $el.is('input') ? 'val' : 'html'
  39 +
  40 + state = state + 'Text'
  41 + data.resetText || $el.data('resetText', $el[val]())
  42 +
  43 + $el[val](data[state] || this.options[state])
  44 +
  45 + // push to event loop to allow forms to submit
  46 + setTimeout(function () {
  47 + state == 'loadingText' ?
  48 + $el.addClass(d).attr(d, d) :
  49 + $el.removeClass(d).removeAttr(d)
  50 + }, 0)
  51 + }
  52 +
  53 + Button.prototype.toggle = function () {
  54 + var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
  55 +
  56 + $parent && $parent
  57 + .find('.active')
  58 + .removeClass('active')
  59 +
  60 + this.$element.toggleClass('active')
  61 + }
  62 +
  63 +
  64 + /* BUTTON PLUGIN DEFINITION
  65 + * ======================== */
  66 +
  67 + var old = $.fn.button
  68 +
  69 + $.fn.button = function (option) {
  70 + return this.each(function () {
  71 + var $this = $(this)
  72 + , data = $this.data('button')
  73 + , options = typeof option == 'object' && option
  74 + if (!data) $this.data('button', (data = new Button(this, options)))
  75 + if (option == 'toggle') data.toggle()
  76 + else if (option) data.setState(option)
  77 + })
  78 + }
  79 +
  80 + $.fn.button.defaults = {
  81 + loadingText: 'loading...'
  82 + }
  83 +
  84 + $.fn.button.Constructor = Button
  85 +
  86 +
  87 + /* BUTTON NO CONFLICT
  88 + * ================== */
  89 +
  90 + $.fn.button.noConflict = function () {
  91 + $.fn.button = old
  92 + return this
  93 + }
  94 +
  95 +
  96 + /* BUTTON DATA-API
  97 + * =============== */
  98 +
  99 + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
  100 + var $btn = $(e.target)
  101 + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
  102 + $btn.button('toggle')
  103 + })
  104 +
  105 +}(window.jQuery);
185 static/js/compass_twitter_bootstrap/bootstrap-carousel.js
... ... @@ -0,0 +1,185 @@
167 static/js/compass_twitter_bootstrap/bootstrap-collapse.js
... ... @@ -0,0 +1,167 @@
  1 +/* =============================================================
  2 + * bootstrap-collapse.js v2.2.2
  3 + * http://twitter.github.com/bootstrap/javascript.html#collapse
  4 + * =============================================================
  5 + * Copyright 2012 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 + /* COLLAPSE PUBLIC CLASS DEFINITION
  27 + * ================================ */
  28 +
  29 + var Collapse = function (element, options) {
  30 + this.$element = $(element)
  31 + this.options = $.extend({}, $.fn.collapse.defaults, options)
  32 +
  33 + if (this.options.parent) {
  34 + this.$parent = $(this.options.parent)
  35 + }
  36 +
  37 + this.options.toggle && this.toggle()
  38 + }
  39 +
  40 + Collapse.prototype = {
  41 +
  42 + constructor: Collapse
  43 +
  44 + , dimension: function () {
  45 + var hasWidth = this.$element.hasClass('width')
  46 + return hasWidth ? 'width' : 'height'
  47 + }
  48 +
  49 + , show: function () {
  50 + var dimension
  51 + , scroll
  52 + , actives
  53 + , hasData
  54 +
  55 + if (this.transitioning) return
  56 +
  57 + dimension = this.dimension()
  58 + scroll = $.camelCase(['scroll', dimension].join('-'))
  59 + actives = this.$parent && this.$parent.find('> .accordion-group > .in')
  60 +
  61 + if (actives && actives.length) {
  62 + hasData = actives.data('collapse')
  63 + if (hasData && hasData.transitioning) return
  64 + actives.collapse('hide')
  65 + hasData || actives.data('collapse', null)
  66 + }
  67 +
  68 + this.$element[dimension](0)
  69 + this.transition('addClass', $.Event('show'), 'shown')
  70 + $.support.transition && this.$element[dimension](this.$element[0][scroll])
  71 + }
  72 +
  73 + , hide: function () {
  74 + var dimension
  75 + if (this.transitioning) return
  76 + dimension = this.dimension()
  77 + this.reset(this.$element[dimension]())
  78 + this.transition('removeClass', $.Event('hide'), 'hidden')
  79 + this.$element[dimension](0)