furatto 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -18
  3. data/furatto.gemspec +4 -0
  4. data/lib/furatto.rb +3 -10
  5. data/lib/furatto/version.rb +1 -1
  6. data/lib/furatto_rails_helpers/furatto_helpers.rb +19 -0
  7. data/lib/generators/furatto/install_generator.rb +46 -0
  8. data/lib/generators/furatto/templates/application.html.erb +28 -0
  9. data/vendor/assets/javascripts/furatto.js +1822 -0
  10. data/vendor/assets/stylesheets/furatto.scss +76 -0
  11. data/vendor/assets/stylesheets/furatto/_alerts.scss +130 -0
  12. data/vendor/assets/stylesheets/furatto/_base.scss +138 -0
  13. data/vendor/assets/stylesheets/furatto/_button-groups.scss +85 -0
  14. data/vendor/assets/stylesheets/furatto/_buttons.scss +266 -0
  15. data/{app → vendor}/assets/stylesheets/furatto/_date_picker.date.scss +0 -0
  16. data/{app → vendor}/assets/stylesheets/furatto/_date_picker.scss +1 -0
  17. data/{app → vendor}/assets/stylesheets/furatto/_dropdown.scss +0 -0
  18. data/vendor/assets/stylesheets/furatto/_experimental.scss +81 -0
  19. data/{app → vendor}/assets/stylesheets/furatto/_footer.scss +0 -0
  20. data/vendor/assets/stylesheets/furatto/_forms.scss +269 -0
  21. data/vendor/assets/stylesheets/furatto/_functions.scss +18 -0
  22. data/vendor/assets/stylesheets/furatto/_global.scss +51 -0
  23. data/vendor/assets/stylesheets/furatto/_grid.scss +142 -0
  24. data/vendor/assets/stylesheets/furatto/_images.scss +122 -0
  25. data/vendor/assets/stylesheets/furatto/_labels.scss +97 -0
  26. data/vendor/assets/stylesheets/furatto/_media_queries.scss +200 -0
  27. data/vendor/assets/stylesheets/furatto/_mixins.scss +143 -0
  28. data/vendor/assets/stylesheets/furatto/_modal.scss +297 -0
  29. data/vendor/assets/stylesheets/furatto/_navigation.scss +127 -0
  30. data/vendor/assets/stylesheets/furatto/_navigation_bar.scss +338 -0
  31. data/vendor/assets/stylesheets/furatto/_off_screen.scss +269 -0
  32. data/vendor/assets/stylesheets/furatto/_pagination.scss +78 -0
  33. data/vendor/assets/stylesheets/furatto/_responsive_utilities.scss +244 -0
  34. data/vendor/assets/stylesheets/furatto/_selectors.scss +44 -0
  35. data/vendor/assets/stylesheets/furatto/_settings.scss +0 -0
  36. data/vendor/assets/stylesheets/furatto/_suraido.scss +214 -0
  37. data/vendor/assets/stylesheets/furatto/_tables.scss +166 -0
  38. data/vendor/assets/stylesheets/furatto/_tabs.scss +26 -0
  39. data/vendor/assets/stylesheets/furatto/_toolbars.scss +199 -0
  40. data/vendor/assets/stylesheets/furatto/_tooltips.scss +92 -0
  41. data/vendor/assets/stylesheets/furatto/_typography.scss +243 -0
  42. data/{app → vendor}/assets/stylesheets/normalize.scss +22 -19
  43. metadata +86 -49
  44. data/app/assets/fonts/fontawesome/FontAwesome.otf +0 -0
  45. data/app/assets/fonts/fontawesome/fontawesome-webfont.eot +0 -0
  46. data/app/assets/fonts/fontawesome/fontawesome-webfont.svg +0 -399
  47. data/app/assets/fonts/fontawesome/fontawesome-webfont.ttf +0 -0
  48. data/app/assets/fonts/fontawesome/fontawesome-webfont.woff +0 -0
  49. data/app/assets/fonts/meteocons-webfont.eot +0 -0
  50. data/app/assets/fonts/meteocons-webfont.svg +0 -81
  51. data/app/assets/fonts/meteocons-webfont.ttf +0 -0
  52. data/app/assets/fonts/meteocons-webfont.woff +0 -0
  53. data/app/assets/javascripts/furatto.js +0 -5978
  54. data/app/assets/javascripts/furatto.min.js +0 -3
  55. data/app/assets/stylesheets/font-awesome.css.erb +0 -2495
  56. data/app/assets/stylesheets/furatto.scss +0 -86
  57. data/app/assets/stylesheets/furatto/_alerts.scss +0 -80
  58. data/app/assets/stylesheets/furatto/_base.scss +0 -99
  59. data/app/assets/stylesheets/furatto/_buttons.scss +0 -125
  60. data/app/assets/stylesheets/furatto/_code.scss +0 -67
  61. data/app/assets/stylesheets/furatto/_dashboard.scss +0 -36
  62. data/app/assets/stylesheets/furatto/_fonts.scss +0 -26
  63. data/app/assets/stylesheets/furatto/_forms.scss +0 -307
  64. data/app/assets/stylesheets/furatto/_grid.scss +0 -60
  65. data/app/assets/stylesheets/furatto/_images.scss +0 -64
  66. data/app/assets/stylesheets/furatto/_labels.scss +0 -44
  67. data/app/assets/stylesheets/furatto/_mixins.scss +0 -200
  68. data/app/assets/stylesheets/furatto/_modal.scss +0 -365
  69. data/app/assets/stylesheets/furatto/_nav.scss +0 -104
  70. data/app/assets/stylesheets/furatto/_navbar.scss +0 -216
  71. data/app/assets/stylesheets/furatto/_panel.scss +0 -277
  72. data/app/assets/stylesheets/furatto/_responsive_navbar.scss +0 -195
  73. data/app/assets/stylesheets/furatto/_responsive_tables.scss +0 -28
  74. data/app/assets/stylesheets/furatto/_responsive_utilities.scss +0 -182
  75. data/app/assets/stylesheets/furatto/_responsiveslides.scss +0 -185
  76. data/app/assets/stylesheets/furatto/_tables.scss +0 -90
  77. data/app/assets/stylesheets/furatto/_toolbars.scss +0 -116
  78. data/app/assets/stylesheets/furatto/_tooltips.scss +0 -131
  79. data/app/assets/stylesheets/furatto/_typography.scss +0 -224
  80. data/app/assets/stylesheets/furatto/_variables.scss +0 -625
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f529d4f7a3c86b9b768e6dc4f4e04c0e0805268e
4
- data.tar.gz: 33cbe6bdecbe55f0a26752b931b0dd517310f5ae
3
+ metadata.gz: abec881858edd0b161700f9d960fe1f3890422a4
4
+ data.tar.gz: c470ec6a3c53bd91972f8767a40602410916e7f3
5
5
  SHA512:
6
- metadata.gz: 14f4c35f2e3ba8e15ab47d7f0cf8634c1d6047d160664cc4921c3979ce4b7c1178a906dfab4d1510bf47b1a731c23582e6f9847af3f10d2d4e38f41472c52d29
7
- data.tar.gz: 67afe4b58367bda4fa6291d5277a2121e59b8854dddec33b8c4f389545d75ab2de951d8e81cc11b75659517c4f4f4b7143f358bb9a9cc9384bcaa7f610b2ac34
6
+ metadata.gz: e77f4bbfc2553842d8d48c374f08c98efc633a8f222ca611bc06fae169624dcab01ea0abb407643ffe53a98ffaba57d4cc034cd01f1efbe33907b9b10bcb47e4
7
+ data.tar.gz: a2f7123bfced99bd436f34c8bc0dbc23b179ee5e057ea99a60959259f80cbce2135ee9780466ab29c804a3b37362c276c02654277f02d7095353e2e5f143da52
data/README.md CHANGED
@@ -1,7 +1,16 @@
1
1
  # Furatto for Rails Asset Pipeline
2
- Furatto is a flat, fast and powerful front-end framework for rapid web development.
3
2
 
4
- The furatto gem integrates the Furatto CSS framework for Rails 3.1 Asset Pipeline (Rails 3.2 supported)
3
+ Furatto is a lightweight & friendly front-end framework got get the job done, created and maintained by [Abraham Kuri](https://twitter.com/kurenn) from [Icalia Labs](http://twitter.com/icalialabs).
4
+
5
+ The furatto gem integrates the Furatto CSS framework for Rails 3.1+ Asset Pipeline.
6
+
7
+ ## Table of contents
8
+ - [Installing Gem](#installing-gem)
9
+ - [Using Rails 4?](#using-rails-4?)
10
+ - [Contributors & Patches & Forks](#contributors-&-patches-&-forks)
11
+ - [Furatto heroe](#furatto-heroe)
12
+ - [Credits](#credits)
13
+ - [License](#license)
5
14
 
6
15
  ## Installing Gem
7
16
 
@@ -35,25 +44,19 @@ $ bundle
35
44
 
36
45
  Add to your `app/assets/stylesheets/application.css`
37
46
 
38
- *= require normalize
39
- *= require furatto
47
+ *= require normalize
48
+ *= require furatto
40
49
 
41
50
  Add to your `app/assets/javascripts/application.js`
42
51
 
43
- //= require furatto
44
-
45
- ## Want Font Awesome support?
46
-
47
- Add to your `app/assets/stylesheets/application.css`
48
-
49
- *= require font-awesome
52
+ //= require furatto
50
53
 
51
54
  ## Using Rails 4?
52
55
 
53
- The configuration for Rails 4 is pretty similar, although the `compass-rails` gem is not fully support, you have to add it with a patch.
56
+ The configuration for Rails 4 is pretty similar.
54
57
 
55
58
  ```ruby
56
- gem 'compass-rails', '~> 2.0.alpha.0'
59
+ gem 'compass-rails', '~> 1.1.3'
57
60
  ```
58
61
 
59
62
  After including the compass-rails gem, you need to add the furatto gem to your application's Gemfile:
@@ -74,13 +77,20 @@ Install the gem using the bundle command:
74
77
  $ bundle
75
78
  ```
76
79
 
77
- **After doing the steps above, you just include the furatto files as shown on the Rails 3 example.**
80
+ After running the `bundle` command, the gem now comes with an installer for easy setup.
81
+
82
+ ```console
83
+ $ rails g furatto:install
84
+ ```
85
+
86
+ This will add furatto to the asset pipeline automatically, and install an application layout skeleton.
78
87
 
79
88
  ## Contributors & Patches & Forks
80
89
 
81
90
  - Abraham Kuri Vargas ([@kurenn](http://twitter.com/kurenn))
82
91
 
83
- ## Furatto author
92
+
93
+ ## Furatto heroe
84
94
  - Abraham Kuri Vargas ([@kurenn](http://twitter.com/kurenn))
85
95
 
86
96
 
@@ -91,9 +101,6 @@ Abraham Kuri - kurenn@icalialabs.com
91
101
 
92
102
  [Add Me On Linkedin](http://www.linkedin.com/pub/abraham-kuri/26/a21/b41 "Add Me On Linkedin")
93
103
 
94
- [Add Me On Facebook](https://www.facebook.com/kurenn "Add Me On Facebook")
95
-
96
-
97
104
  ## Score me
98
105
  <img src="https://addons.opera.com/media/extensions/55/14355/1.0.1-rev1/icons/icon_64x64.png"></img>
99
106
 
data/furatto.gemspec CHANGED
@@ -19,4 +19,8 @@ Gem::Specification.new do |gem|
19
19
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
20
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
21
  gem.require_paths = ["lib"]
22
+
23
+ gem.add_dependency 'railties', '~> 4.0'
24
+ gem.add_dependency "actionpack", '~> 4.0'
25
+ gem.add_dependency "activemodel", '~> 4.0'
22
26
  end
data/lib/furatto.rb CHANGED
@@ -1,16 +1,9 @@
1
1
  require "furatto/version"
2
+ require "furatto_rails_helpers/furatto_helpers"
2
3
 
3
4
  module Furatto
4
-
5
- def self.load!
6
- register_rails_engine
5
+ module Rails
6
+ require "furatto/engine"
7
7
  end
8
-
9
- private
10
-
11
- def self.register_rails_engine
12
- require 'furatto/engine'
13
- end
14
8
  end
15
9
 
16
- Furatto.load!
@@ -1,3 +1,3 @@
1
1
  module Furatto
2
- VERSION = "0.0.3"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,19 @@
1
+ require 'action_view/helpers'
2
+
3
+ module ActionView
4
+ module Helpers
5
+ def navigation_bar(options = {}, &block)
6
+ content_tag options[:tag] || :nav, capture(&block), class: "navigation-bar #{options[:class]}"
7
+ end
8
+
9
+ def off_screen(options = {}, &block)
10
+ content_tag :div, capture(&block), class: 'off-screen', id: 'off-screen'
11
+ end
12
+
13
+ def furatto_alert(options = {}, &block)
14
+ content_tag :div, class: "alert #{options[:variation]}" do
15
+ capture(&block)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,46 @@
1
+ require 'rails/generators'
2
+
3
+ module Furatto
4
+
5
+ module Generators
6
+ class InstallGenerator < ::Rails::Generators::Base
7
+ source_root File.join(File.dirname(__FILE__), 'templates')
8
+ argument :layout_name, :type => :string, :default => 'application', :banner => 'layout_name'
9
+
10
+ def add_assets
11
+ # rails_ujs breaks, need to incorporate rails-behavior plugin for this to work seamlessly
12
+ # gsub_file "app/assets/javascripts/application#{detect_js_format[0]}", /\/\/= require jquery\n/, ""
13
+ insert_into_file "app/assets/javascripts/application#{detect_js_format[0]}", "#{detect_js_format[1]} require furatto\n", :after => "jquery_ujs\n"
14
+ settings_file = File.join(File.dirname(__FILE__),"..", "..", "..", "vendor", "assets", "stylesheets", "furatto", "_settings.scss")
15
+
16
+ create_file "app/assets/stylesheets/furatto_overrides.scss", File.read(settings_file)
17
+ append_to_file "app/assets/stylesheets/furatto_overrides.scss", "\n@import 'furatto';\n"
18
+ insert_into_file "app/assets/stylesheets/application#{detect_css_format[0]}", "\n#{detect_css_format[1]} require furatto_overrides\n", :after => "require_self"
19
+ end
20
+
21
+ def detect_js_format
22
+ return ['.coffee', '#='] if File.exist?('app/assets/javascripts/application.coffee')
23
+ return ['.js.coffee', '#='] if File.exist?('app/assets/javascripts/application.js.coffee')
24
+ return ['.js', '//='] if File.exist?('app/assets/javascripts/application.js')
25
+ end
26
+
27
+ def detect_css_format
28
+ return ['.css', ' *='] if File.exist?('app/assets/stylesheets/application.css')
29
+ return ['.css.sass', ' //='] if File.exist?('app/assets/stylesheets/application.css.sass')
30
+ return ['.sass', ' //='] if File.exist?('app/assets/stylesheets/application.sass')
31
+ return ['.css.scss', ' //='] if File.exist?('app/assets/stylesheets/application.css.scss')
32
+ return ['.scss', ' //='] if File.exist?('app/assets/stylesheets/application.scss')
33
+ end
34
+
35
+ def create_layout
36
+ template 'application.html.erb', "app/views/layouts/#{layout_file_name}.html.erb"
37
+ end
38
+
39
+ private
40
+
41
+ def layout_file_name
42
+ layout_name.underscore.downcase
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,28 @@
1
+ <html lang="en">
2
+
3
+ <head>
4
+ <!--includes meta tags, title and more header definitions-->
5
+ <meta charset="utf-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no">
8
+ <link href="http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
9
+
10
+ <title>Furatto Test</title>
11
+
12
+ <!-- Furatto core CSS -->
13
+ <%%= stylesheet_link_tag "application", :cache => true %>
14
+
15
+ <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
16
+ <!--[if lt IE 9]>
17
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
18
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
19
+ <![endif]-->
20
+ </head>
21
+
22
+ <body>
23
+ <h1>Hello World!</h1>
24
+
25
+ <%%= yield %>
26
+ <%%= javascript_include_tag "application" %>
27
+ </body>
28
+ </html>
@@ -0,0 +1,1822 @@
1
+ /*!
2
+ * Furatto v3.0.0 (http://icalialabs.github.io/furatto/)
3
+ * Copyright 2014-2014 Icalia Labs
4
+ * Licensed under MIT (https://github.com/IcaliaLabs/furatto/blob/master/LICENSE)
5
+ */
6
+
7
+ /*!
8
+ * Furatto v3.0.0 (http://icalialabs.github.io/furatto/)
9
+ * Copyright 2014-2014 Icalia Labs
10
+ * Licensed under MIT (https://github.com/IcaliaLabs/furatto/blob/master/LICENSE)
11
+ */
12
+ window.Furatto = {
13
+ name: 'Furatto',
14
+ version: '1.0.0'
15
+ };
16
+
17
+ $('.alert .close').each(function() {
18
+ return $(this).click(function(e) {
19
+ e.preventDefault();
20
+ return $(this).parent().fadeOut();
21
+ });
22
+ });
23
+
24
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
25
+
26
+ (function($, window) {
27
+ Furatto.Modal = (function() {
28
+ function Modal(el, options) {
29
+ this.hideOnDocumentClick = __bind(this.hideOnDocumentClick, this);
30
+ this.hideOnEsc = __bind(this.hideOnEsc, this);
31
+ this.show = __bind(this.show, this);
32
+ this.init = __bind(this.init, this);
33
+ this.options = $.extend({}, options);
34
+ this.$el = $(el);
35
+ this.modal = $(this.$el.data('target'));
36
+ this.close = this.modal.find('.modal-close');
37
+ this.transition = this.$el.data('transition') || "1";
38
+ this.theme = this.$el.data('theme') || "default";
39
+ this.modal.addClass("modal-effect-" + this.transition);
40
+ this.modal.addClass("" + this.theme);
41
+ }
42
+
43
+ Modal.prototype.init = function() {
44
+ var _this = this;
45
+ this.$el.click(this.show);
46
+ return this.close.click(function(ev) {
47
+ ev.stopPropagation();
48
+ return _this.hide();
49
+ });
50
+ };
51
+
52
+ Modal.prototype.show = function(ev) {
53
+ if (this.$el.is('div')) {
54
+ this.$el.addClass('modal-show');
55
+ } else {
56
+ this.modal.addClass('modal-show');
57
+ }
58
+ $('.modal-overlay').addClass('modal-show-overlay');
59
+ $('body').bind('keyup', this.hideOnEsc);
60
+ return $('body').bind('click', this.hideOnDocumentClick);
61
+ };
62
+
63
+ Modal.prototype.hideOnEsc = function(event) {
64
+ if (event.keyCode === 27) {
65
+ return this.hide();
66
+ }
67
+ };
68
+
69
+ Modal.prototype.hideOnDocumentClick = function(event) {
70
+ if ($(event.target).is('.modal-overlay')) {
71
+ return this.hide();
72
+ }
73
+ };
74
+
75
+ Modal.prototype.hide = function() {
76
+ $('.modal-overlay').removeClass('modal-show-overlay');
77
+ if (this.$el.is('div')) {
78
+ this.$el.removeClass('modal-show');
79
+ } else {
80
+ this.modal.removeClass('modal-show');
81
+ }
82
+ $('body').unbind('keyup', this.hideOnEsc);
83
+ return $('body').unbind('click', this.hideOnDocumentClick);
84
+ };
85
+
86
+ return Modal;
87
+
88
+ })();
89
+ $.fn.modal = function(option) {
90
+ return this.each(function() {
91
+ var $this, data, options;
92
+ $this = $(this);
93
+ data = $this.data('modal');
94
+ options = $.extend({}, $this.data(), typeof option === 'object' && option);
95
+ if (!data) {
96
+ $this.data('modal', (data = new Furatto.Modal(this, options)));
97
+ }
98
+ if (typeof option === 'string') {
99
+ return data[option]();
100
+ }
101
+ });
102
+ };
103
+ Furatto.Modal.version = "1.0.0";
104
+ $(document).ready(function() {
105
+ var elementToAppend;
106
+ if ($('.off-screen').length > 0) {
107
+ elementToAppend = $('.off-screen');
108
+ } else {
109
+ elementToAppend = $('body');
110
+ }
111
+ elementToAppend.append('<div class="modal-overlay"></div>');
112
+ return $('[data-furatto="modal"]').each(function() {
113
+ var modal;
114
+ modal = $(this);
115
+ return modal.modal('init');
116
+ });
117
+ });
118
+ return $(document).on('click', '[data-furatto="modal"]', function(e) {
119
+ var $this;
120
+ $this = $(this);
121
+ return $this.modal('init');
122
+ });
123
+ })(window.jQuery, window);
124
+
125
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
126
+ __slice = [].slice;
127
+
128
+ (function($, window, document) {
129
+ "use strict";
130
+ var pluginName;
131
+ pluginName = 'responsiveNavBar';
132
+ Furatto.ResponsiveNavBar = (function() {
133
+ function ResponsiveNavBar(el, a, options) {
134
+ this.el = el;
135
+ this.closeNavbar = __bind(this.closeNavbar, this);
136
+ this.openNavbar = __bind(this.openNavbar, this);
137
+ this.toggleNavbar = __bind(this.toggleNavbar, this);
138
+ this._initEvents = __bind(this._initEvents, this);
139
+ this.navbarElements = $('.navigation-bar ul:not(.brand-section)');
140
+ this.$el = $(this.el);
141
+ this._initEvents();
142
+ }
143
+
144
+ ResponsiveNavBar.prototype._initEvents = function() {
145
+ var _this = this;
146
+ return $('.navigation-bar .menu-toggle').on('touchstart click', function(e) {
147
+ e.preventDefault();
148
+ return _this.toggleNavbar();
149
+ });
150
+ };
151
+
152
+ ResponsiveNavBar.prototype.toggleNavbar = function() {
153
+ return this.$el.toggleClass('opened');
154
+ };
155
+
156
+ ResponsiveNavBar.prototype.openNavbar = function() {
157
+ return this.$el.addClass('opened');
158
+ };
159
+
160
+ ResponsiveNavBar.prototype.closeNavbar = function() {
161
+ return this.$el.removeClass('opened');
162
+ };
163
+
164
+ return ResponsiveNavBar;
165
+
166
+ })();
167
+ $.fn[pluginName] = function(a, options) {
168
+ var args, _;
169
+ _ = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
170
+ return this.each(function() {
171
+ var plugin;
172
+ plugin = $.data(this, "plugin_" + pluginName);
173
+ if (!plugin) {
174
+ return $.data(this, "plugin_" + pluginName, new Furatto.ResponsiveNavBar(this, a, options));
175
+ } else if ((plugin[_] != null) && $.type(plugin[_]) === 'function') {
176
+ return plugin[_].apply(plugin, args);
177
+ }
178
+ });
179
+ };
180
+ $('.navigation-bar').responsiveNavBar();
181
+ return Furatto.ResponsiveNavBar.version = "1.0.0";
182
+ })(jQuery, window, document);
183
+
184
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
185
+ __slice = [].slice;
186
+
187
+ (function($, window, document) {
188
+ "use strict";
189
+ var closest, defaults, getLevelDepth, hasParent, isFromMobile, pluginName;
190
+ pluginName = 'offScreen';
191
+ defaults = {
192
+ type: 'overlap',
193
+ levelSpacing: 40,
194
+ backClass: 'navigation-back'
195
+ };
196
+ getLevelDepth = function(level, id, waypoint, cnt) {
197
+ if (cnt == null) {
198
+ cnt = 0;
199
+ }
200
+ if (level.id.indexOf(id) >= 0) {
201
+ return cnt;
202
+ }
203
+ if ($(level).hasClass(waypoint)) {
204
+ ++cnt;
205
+ }
206
+ return level.parentNode && getLevelDepth(level.parentNode, id, waypoint, cnt);
207
+ };
208
+ hasParent = function(e, id) {
209
+ var el;
210
+ if (!e) {
211
+ return false;
212
+ }
213
+ el = e.target || e.srcElement || e || false;
214
+ while (el && el.id !== id) {
215
+ el = el.parentNode || false;
216
+ }
217
+ return el !== false;
218
+ };
219
+ closest = function(e, classname) {
220
+ if ($(e).hasClass(classname)) {
221
+ return e;
222
+ }
223
+ return e.parentNode && closest(e.parentNode, classname);
224
+ };
225
+ isFromMobile = function() {
226
+ var check;
227
+ check = false;
228
+ (function(a) {
229
+ if (/(android|ipad|playbook|silk|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
230
+ return check = true;
231
+ }
232
+ })(navigator.userAgent || navigator.vendor || window.opera);
233
+ return check;
234
+ };
235
+ Furatto.OffScreen = (function() {
236
+ function OffScreen(el, a, options) {
237
+ this.el = el;
238
+ this.openMenu = __bind(this.openMenu, this);
239
+ this._closeMenu = __bind(this._closeMenu, this);
240
+ this.resetMenu = __bind(this.resetMenu, this);
241
+ this._setupLevelBack = __bind(this._setupLevelBack, this);
242
+ this._setupLevelsClosing = __bind(this._setupLevelsClosing, this);
243
+ this._hideOnEsc = __bind(this._hideOnEsc, this);
244
+ this._setupMenuItems = __bind(this._setupMenuItems, this);
245
+ this._bindEvents = __bind(this._bindEvents, this);
246
+ this._shouldPreventOffScreenMenuFromOpening = __bind(this._shouldPreventOffScreenMenuFromOpening, this);
247
+ this.options = $.extend({}, defaults, options);
248
+ this.open = false;
249
+ this.level = 0;
250
+ this.wrapper = document.getElementById('off-screen');
251
+ this.levels = Array.prototype.slice.call(this.el.querySelectorAll('div.off-screen-level'));
252
+ this._setLevels();
253
+ this.menuItems = Array.prototype.slice.call(this.el.querySelectorAll('li'));
254
+ this.levelBack = Array.prototype.slice.call(this.el.querySelectorAll('.navigation-back'));
255
+ this.eventType = isFromMobile() ? 'touchstart' : 'click';
256
+ $(this.el).addClass("off-screen-" + this.options.type);
257
+ this.trigger = $('#trigger');
258
+ this._bindEvents();
259
+ this._shouldPreventOffScreenMenuFromOpening();
260
+ }
261
+
262
+ OffScreen.prototype._setLevels = function() {
263
+ var level, _i, _len, _ref, _results;
264
+ _ref = this.levels;
265
+ _results = [];
266
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
267
+ level = _ref[_i];
268
+ _results.push(level.setAttribute('data-level', getLevelDepth(level, this.el.id, 'off-screen-level')));
269
+ }
270
+ return _results;
271
+ };
272
+
273
+ OffScreen.prototype._shouldPreventOffScreenMenuFromOpening = function() {
274
+ var _this = this;
275
+ if ($(window).width() > 768) {
276
+ this.trigger.unbind(this.eventType);
277
+ }
278
+ return $(window).resize(function() {
279
+ if ($(window).width() > 768) {
280
+ return _this.trigger.unbind(_this.eventType, _this.resetMenu);
281
+ } else {
282
+ return _this.trigger.bind(_this.eventType, function(event) {
283
+ event.stopPropagation();
284
+ event.preventDefault();
285
+ if (_this.open) {
286
+ return _this.resetMenu();
287
+ } else {
288
+ _this.openMenu();
289
+ return document.addEventListener(_this.eventType, function(event) {
290
+ if (_this.open && !hasParent(event.target, _this.el.id)) {
291
+ return bodyClickBinding(document);
292
+ }
293
+ });
294
+ }
295
+ });
296
+ }
297
+ });
298
+ };
299
+
300
+ OffScreen.prototype._bindEvents = function() {
301
+ var bodyClickBinding,
302
+ _this = this;
303
+ bodyClickBinding = function(el) {
304
+ _this.resetMenu();
305
+ return el.removeEventListener(_this.eventType, bodyClickBinding);
306
+ };
307
+ this.trigger.bind(this.eventType, function(event) {
308
+ event.stopPropagation();
309
+ event.preventDefault();
310
+ if (_this.open) {
311
+ return _this.resetMenu();
312
+ } else {
313
+ _this.openMenu();
314
+ return document.addEventListener(_this.eventType, function(event) {
315
+ if (_this.open && !hasParent(event.target, _this.el.id)) {
316
+ return bodyClickBinding(document);
317
+ }
318
+ });
319
+ }
320
+ });
321
+ this._setupMenuItems();
322
+ this._setupLevelsClosing();
323
+ return this._setupLevelBack();
324
+ };
325
+
326
+ OffScreen.prototype._setupMenuItems = function() {
327
+ var _this = this;
328
+ return this.menuItems.forEach(function(el, i) {
329
+ var subLevel;
330
+ subLevel = el.querySelector('div.off-screen-level');
331
+ if (subLevel) {
332
+ return el.querySelector('a').addEventListener(_this.eventType, function(event) {
333
+ var level;
334
+ event.preventDefault();
335
+ level = closest(el, 'off-screen-level').getAttribute('data-level');
336
+ if (_this.level <= level) {
337
+ event.stopPropagation();
338
+ $(closest(el, 'off-screen-level')).addClass('off-screen-level-overlay');
339
+ return _this.openMenu(subLevel);
340
+ }
341
+ });
342
+ }
343
+ });
344
+ };
345
+
346
+ OffScreen.prototype._hideOnEsc = function(event) {
347
+ if (event.keyCode === 27) {
348
+ return this.resetMenu();
349
+ }
350
+ };
351
+
352
+ OffScreen.prototype._setupLevelsClosing = function() {
353
+ var levelEl, _i, _len, _ref, _results;
354
+ _ref = this.levels;
355
+ _results = [];
356
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
357
+ levelEl = _ref[_i];
358
+ _results.push(levelEl.addEventListener(this.eventType, function(event) {
359
+ var level;
360
+ event.stopPropagation();
361
+ level = levelEl.getAttribute('data-level');
362
+ if (this.level > level) {
363
+ this.level = level;
364
+ return this._closeMenu();
365
+ }
366
+ }));
367
+ }
368
+ return _results;
369
+ };
370
+
371
+ OffScreen.prototype._setupLevelBack = function() {
372
+ var _this = this;
373
+ return this.levelBack.forEach(function(el, i) {
374
+ return el.addEventListener(_this.eventType, function(event) {
375
+ var level;
376
+ event.preventDefault();
377
+ level = closest(el, 'off-screen-level').getAttribute('data-level');
378
+ if (_this.level <= level) {
379
+ event.stopPropagation();
380
+ _this.level = closest(el, 'off-screen-level').getAttribute('data-level') - 1;
381
+ if (_this.level === 0) {
382
+ return _this.resetMenu();
383
+ } else {
384
+ return _this._closeMenu();
385
+ }
386
+ }
387
+ });
388
+ });
389
+ };
390
+
391
+ OffScreen.prototype.resetMenu = function() {
392
+ this._setTransform('translate3d(0,0,0)');
393
+ this.level = 0;
394
+ $(this.wrapper).removeClass('off-screen-pushed');
395
+ this._toggleLevels();
396
+ this.open = false;
397
+ return $(document).unbind('keyup', this._hideOnEsc);
398
+ };
399
+
400
+ OffScreen.prototype._closeMenu = function() {
401
+ var translateVal;
402
+ translateVal = this.options.type === 'overlap' ? this.el.offsetWidth + (this.level - 1) * this.options.levelSpacing : this.el.offsetWidth;
403
+ this._setTransform("translate3d(" + translateVal + "px, 0, 0");
404
+ return this._toggleLevels();
405
+ };
406
+
407
+ OffScreen.prototype.openMenu = function(subLevel) {
408
+ var level, levelFactor, translateVal, _i, _len, _ref;
409
+ ++this.level;
410
+ levelFactor = (this.level - 1) * this.options.levelSpacing;
411
+ translateVal = this.options.type === 'overlap' ? this.el.offsetWidth + levelFactor : this.el.offsetWidth;
412
+ this._setTransform('translate3d(' + translateVal + 'px,0,0)');
413
+ if (subLevel) {
414
+ this._setTransform('', subLevel);
415
+ _ref = this.levels;
416
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
417
+ level = _ref[_i];
418
+ if (level !== subLevel && !$(level).hasClass('off-screen-level-open')) {
419
+ this._setTransform("translate3d(-100%, 0, 0) translate3d(" + (-1 * levelFactor) + "px, 0, 0)", $(level));
420
+ }
421
+ }
422
+ }
423
+ if (this.level === 1) {
424
+ $(this.wrapper).addClass('off-screen-pushed');
425
+ this.open = true;
426
+ }
427
+ if (subLevel) {
428
+ $(subLevel).addClass('off-screen-level-open');
429
+ } else {
430
+ $(this.levels[0]).addClass('off-screen-level-open');
431
+ }
432
+ return $(document).bind('keyup', this._hideOnEsc);
433
+ };
434
+
435
+ OffScreen.prototype._toggleLevels = function() {
436
+ var level, _i, _len, _ref, _results;
437
+ _ref = this.levels;
438
+ _results = [];
439
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
440
+ level = _ref[_i];
441
+ if (level.getAttribute('data-level') >= this.level + 1) {
442
+ $(level).removeClass('off-screen-level-open');
443
+ _results.push($(level).removeClass('off-screen-level-overlay'));
444
+ } else if (Number(level.getAttribute('data-level') === this.level)) {
445
+ _results.push($(level).removeClass('off-screen-level-overlay'));
446
+ } else {
447
+ _results.push(void 0);
448
+ }
449
+ }
450
+ return _results;
451
+ };
452
+
453
+ OffScreen.prototype._setTransform = function(value, element) {
454
+ if (element == null) {
455
+ element = this.wrapper;
456
+ }
457
+ return $(element).css({
458
+ '-webkit-transform': value,
459
+ '-moz-transform': value,
460
+ '-o-transform': value,
461
+ 'transform': value
462
+ });
463
+ };
464
+
465
+ return OffScreen;
466
+
467
+ })();
468
+ $.fn[pluginName] = function(a, options) {
469
+ var args, _;
470
+ _ = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
471
+ return this.each(function() {
472
+ var plugin;
473
+ plugin = $.data(this, "plugin_" + pluginName);
474
+ if (!plugin) {
475
+ return $.data(this, "plugin_" + pluginName, new Furatto.OffScreen(this, a, options));
476
+ } else if ((plugin[_] != null) && $.type(plugin[_]) === 'function') {
477
+ return plugin[_].apply(plugin, args);
478
+ }
479
+ });
480
+ };
481
+ $('.off-screen-navigation').offScreen();
482
+ $(document).click(function() {
483
+ return $('.off-screen-navigation').offScreen('resetMenu');
484
+ });
485
+ return Furatto.OffScreen.version = "1.0.0";
486
+ })(jQuery, window, document);
487
+
488
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
489
+ __slice = [].slice;
490
+
491
+ (function($, window, document) {
492
+ "use strict";
493
+ var defaults, pluginName;
494
+ pluginName = "responsiveTables";
495
+ defaults = {
496
+ widthToCollapse: 768
497
+ };
498
+ Furatto.ResponsiveTables = (function() {
499
+ function ResponsiveTables(el, a, options) {
500
+ this.el = el;
501
+ this._setCellHeights = __bind(this._setCellHeights, this);
502
+ this._unsplitTable = __bind(this._unsplitTable, this);
503
+ this._splitTable = __bind(this._splitTable, this);
504
+ this._updateTables = __bind(this._updateTables, this);
505
+ this._initResponsiveTables = __bind(this._initResponsiveTables, this);
506
+ this.options = $.extend({}, defaults, options);
507
+ this.$el = $(this.el);
508
+ this.switched = false;
509
+ this._initResponsiveTables();
510
+ }
511
+
512
+ ResponsiveTables.prototype._initResponsiveTables = function() {
513
+ var _this = this;
514
+ $(window).on('load', this._updateTables);
515
+ $(window).on('redraw', function() {
516
+ _this.switched = false;
517
+ return _this._updateTables();
518
+ });
519
+ return $(window).on('resize', this._updateTables);
520
+ };
521
+
522
+ ResponsiveTables.prototype._updateTables = function() {
523
+ var _this = this;
524
+ console.log(this.options.widthToCollapse);
525
+ if ($(window).width() <= this.options.widthToCollapse && !this.switched) {
526
+ this.switched = true;
527
+ this.$el.each(function(i, element) {
528
+ return _this._splitTable($(element));
529
+ });
530
+ return true;
531
+ } else if (this.switched && $(window).width() > this.options.widthToCollapse) {
532
+ this.switched = false;
533
+ return this.$el.each(function(i, element) {
534
+ return _this._unsplitTable($(element));
535
+ });
536
+ }
537
+ };
538
+
539
+ ResponsiveTables.prototype._splitTable = function(table) {
540
+ var tableClone;
541
+ table.wrap("<div class='table-wrapper' />");
542
+ tableClone = table.clone();
543
+ tableClone.find("td:not(:first-child), th:not(:first-child)").css("display", "none");
544
+ tableClone.removeClass("responsive");
545
+ table.closest(".table-wrapper").append(tableClone);
546
+ tableClone.wrap("<div class='pinned' />");
547
+ table.wrap("<div class='scrollable' />");
548
+ return this._setCellHeights(table, tableClone);
549
+ };
550
+
551
+ ResponsiveTables.prototype._unsplitTable = function(table) {
552
+ table.closest(".table-wrapper").find(".pinned").remove();
553
+ table.unwrap();
554
+ return table.unwrap();
555
+ };
556
+
557
+ ResponsiveTables.prototype._setCellHeights = function(table, tableClone) {
558
+ var heights, tableRows, tableRowsCopy;
559
+ tableRows = table.find('tr');
560
+ tableRowsCopy = tableClone.find('tr');
561
+ heights = [];
562
+ tableRows.each(function(index) {
563
+ var self, tableHeadersAndData;
564
+ self = $(this);
565
+ tableHeadersAndData = self.find('th, td');
566
+ return tableHeadersAndData.each(function() {
567
+ var height;
568
+ height = $(this).outerHeight(true);
569
+ heights[index] = heights[index] || 0;
570
+ if (height > heights[index]) {
571
+ return heights[index] = height;
572
+ }
573
+ });
574
+ });
575
+ return tableRowsCopy.each(function(index) {
576
+ return $(this).height(heights[index]);
577
+ });
578
+ };
579
+
580
+ return ResponsiveTables;
581
+
582
+ })();
583
+ $.fn[pluginName] = function(a, options) {
584
+ var args, _;
585
+ _ = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
586
+ return this.each(function() {
587
+ var plugin;
588
+ plugin = $.data(this, "plugin_" + pluginName);
589
+ if (!plugin) {
590
+ return $.data(this, "plugin_" + pluginName, new Furatto.ResponsiveTables(this, a, options));
591
+ } else if ((plugin[_] != null) && $.type(plugin[_]) === 'function') {
592
+ return plugin[_].apply(plugin, args);
593
+ }
594
+ });
595
+ };
596
+ Furatto.ResponsiveTables.version = "1.0.0";
597
+ return $(document).ready(function() {
598
+ return $('table.responsive').responsiveTables();
599
+ });
600
+ })($, window, document);
601
+
602
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
603
+ __slice = [].slice;
604
+
605
+ (function($, window, document) {
606
+ "use strict";
607
+ var defaults, pluginName;
608
+ pluginName = 'suraido';
609
+ defaults = {
610
+ speed: 500,
611
+ delay: 3000,
612
+ pause: false,
613
+ loop: false,
614
+ enableKeys: true,
615
+ enableDots: true,
616
+ enableArrows: true,
617
+ prev: '«',
618
+ next: '»',
619
+ fluid: true,
620
+ starting: false,
621
+ completed: false,
622
+ easing: 'swing',
623
+ autoplay: false,
624
+ paginationClass: 'pagination',
625
+ paginationItemClass: 'dot',
626
+ arrowsClass: 'arrows',
627
+ arrowClass: 'arrow'
628
+ };
629
+ Furatto.Suraido = (function() {
630
+ function Suraido(el, options) {
631
+ var weakSelf,
632
+ _this = this;
633
+ this.el = el;
634
+ this.prev = __bind(this.prev, this);
635
+ this.next = __bind(this.next, this);
636
+ this.stop = __bind(this.stop, this);
637
+ this.play = __bind(this.play, this);
638
+ this.to = __bind(this.to, this);
639
+ this._createArrows = __bind(this._createArrows, this);
640
+ this._createPagination = __bind(this._createPagination, this);
641
+ this._enableBindKeys = __bind(this._enableBindKeys, this);
642
+ this._enablesFluidBehavior = __bind(this._enablesFluidBehavior, this);
643
+ this._enablesAutoPlay = __bind(this._enablesAutoPlay, this);
644
+ this._setsMainElement = __bind(this._setsMainElement, this);
645
+ this._setsItems = __bind(this._setsItems, this);
646
+ this.$el = $(this.el);
647
+ this.options = $.extend({}, defaults, options);
648
+ this.itemsWrapper = this.$el.find('>ul');
649
+ this.maxSize = {
650
+ width: this.$el.outerWidth() | 0,
651
+ height: this.$el.outerHeight() | 0
652
+ };
653
+ weakSelf = this;
654
+ this.items = $(this.itemsWrapper).find('>li').each(function(index) {
655
+ var $this, height, width;
656
+ $this = $(this);
657
+ width = $this.outerWidth();
658
+ height = $this.outerHeight();
659
+ if (width > weakSelf.maxSize.width) {
660
+ weakSelf.maxSize.width = width;
661
+ }
662
+ if (height > weakSelf.maxSize.height) {
663
+ return weakSelf.maxSize.height = height;
664
+ }
665
+ });
666
+ this.itemsLength = this.items.length;
667
+ this.currentItemIndex = 0;
668
+ this.items.find('.caption').css({
669
+ width: "" + (100 / this.itemsLength) + "%"
670
+ });
671
+ this._setsMainElement();
672
+ this.itemsWrapper.css({
673
+ position: "relative",
674
+ left: 0,
675
+ width: "" + (this.itemsLength * 100) + "%"
676
+ });
677
+ this._setsItems();
678
+ if (this.options.autoplay) {
679
+ this._enablesAutoPlay();
680
+ }
681
+ if (this.options.enableKeys) {
682
+ this._enableBindKeys();
683
+ }
684
+ this.options.enableDots && this._createPagination();
685
+ this.options.enableArrows && this._createArrows();
686
+ if (this.options.fluid) {
687
+ this._enablesFluidBehavior();
688
+ }
689
+ if (window.chrome) {
690
+ this.items.css('background-size', '100% 100%');
691
+ }
692
+ if ($.event.special['swipe'] || $.Event('swipe')) {
693
+ this.$el.on('swipeleft swiperight swipeLeft swipeRight', function(e) {
694
+ if (e.type.toLowerCase() === 'swipeleft') {
695
+ return _this.next();
696
+ } else {
697
+ return _this.prev();
698
+ }
699
+ });
700
+ }
701
+ }
702
+
703
+ Suraido.prototype._setsItems = function() {
704
+ return this.items.css({
705
+ float: 'left',
706
+ width: "" + (100 / this.itemsLength) + "%"
707
+ });
708
+ };
709
+
710
+ Suraido.prototype._setsMainElement = function() {
711
+ return this.$el.css({
712
+ width: this.maxSize.width,
713
+ height: this.items.first().outerHeight(),
714
+ overflow: 'hidden'
715
+ });
716
+ };
717
+
718
+ Suraido.prototype._enablesAutoPlay = function() {
719
+ var _this = this;
720
+ return setTimeout(function() {
721
+ if (_this.options.delay | 0) {
722
+ _this.play();
723
+ if (_this.options.pause) {
724
+ return _this.$el.on('mouseover, mouseout', function(event) {
725
+ _this.stop();
726
+ return event.type === 'mouseout' && _this.play();
727
+ });
728
+ }
729
+ }
730
+ }, this.options.autoPlayDelay | 0);
731
+ };
732
+
733
+ Suraido.prototype._enablesFluidBehavior = function() {
734
+ var _this = this;
735
+ return $(window).resize(function() {
736
+ _this.resize && clearTimeout(_this.resize);
737
+ return _this.resize = setTimeout(function() {
738
+ var style, width;
739
+ style = {
740
+ height: _this.items.eq(_this.currentItemIndex).outerHeight() + 30
741
+ };
742
+ width = _this.$el.outerWidth();
743
+ _this.itemsWrapper.css(style);
744
+ style['width'] = "" + (Math.min(Math.round((width / _this.$el.parent().width()) * 100), 100)) + "%";
745
+ return _this.$el.css(style, 50);
746
+ });
747
+ }).resize();
748
+ };
749
+
750
+ Suraido.prototype._enableBindKeys = function() {
751
+ var _this = this;
752
+ return $(document).on('keydown', function(event) {
753
+ switch (event.which) {
754
+ case 37:
755
+ return _this.prev();
756
+ case 39:
757
+ return _this.next();
758
+ case 27 || 32:
759
+ return _this.stop();
760
+ }
761
+ });
762
+ };
763
+
764
+ Suraido.prototype._createPagination = function() {
765
+ var html,
766
+ _this = this;
767
+ html = "<ol class='" + this.options.paginationClass + "'>";
768
+ $.each(this.items, function(index) {
769
+ return html += "<li class='" + (index === _this.currentItemIndex ? _this.options.paginationItemClass + ' active' : _this.options.paginationItemClass) + "'> " + (++index) + "</li>";
770
+ });
771
+ html += "</ol>";
772
+ return this._bindPagination(this.options.paginationClass, this.options.paginationItemClass, html);
773
+ };
774
+
775
+ Suraido.prototype._createArrows = function() {
776
+ var html;
777
+ html = "<div class=\"";
778
+ html = html + this.options.arrowsClass + "\">" + html + this.options.arrowClass + " prev\">" + this.options.prev + "</div>" + html + this.options.arrowClass + " next\">" + this.options.next + "</div></div>";
779
+ return this._bindPagination(this.options.arrowsClass, this.options.arrowClass, html);
780
+ };
781
+
782
+ Suraido.prototype._bindPagination = function(className, itemClassName, html) {
783
+ var weakSelf;
784
+ weakSelf = this;
785
+ return this.$el.addClass("has-" + className).append(html).find("." + itemClassName).click(function() {
786
+ var $this;
787
+ $this = $(this);
788
+ if ($this.hasClass(weakSelf.options.paginationItemClass)) {
789
+ return weakSelf.stop().to($this.index());
790
+ } else if ($this.hasClass('prev')) {
791
+ return weakSelf.prev();
792
+ } else {
793
+ return weakSelf.next();
794
+ }
795
+ });
796
+ };
797
+
798
+ Suraido.prototype.to = function(index, callback) {
799
+ var easing, obj, speed, target,
800
+ _this = this;
801
+ if (this.t) {
802
+ this.stop();
803
+ this.play();
804
+ }
805
+ target = this.items.eq(index);
806
+ $.isFunction(this.options.starting) && !callback && this.options.starting(this.$el, this.items.eq(this.currentItemIndex));
807
+ if (!(target.length || index < 0) && this.options.loop === false) {
808
+ return;
809
+ }
810
+ if (index < 0) {
811
+ index = this.items.length - 1;
812
+ }
813
+ speed = callback ? 5 : this.options.speed | 0;
814
+ easing = this.options.easing;
815
+ obj = {
816
+ height: target.outerHeight() + 30
817
+ };
818
+ if (!this.itemsWrapper.queue('fx').length) {
819
+ this.$el.find("." + this.options.paginationItemClass).eq(index).addClass('active').siblings().removeClass('active');
820
+ return this.$el.animate(obj, speed, easing) && this.itemsWrapper.animate($.extend({
821
+ left: "-" + index + "00%"
822
+ }, obj), speed, easing, function(data) {
823
+ _this.currentItemIndex = index;
824
+ return $.isFunction(_this.options.complete) && !callback && _this.options.complete(_this.el, target);
825
+ });
826
+ }
827
+ };
828
+
829
+ Suraido.prototype.play = function() {
830
+ var _this = this;
831
+ return this.t = setInterval(function() {
832
+ return _this.to(_this.currentItemIndex + 1);
833
+ }, this.options.delay | 0);
834
+ };
835
+
836
+ Suraido.prototype.stop = function() {
837
+ this.t = clearInterval(this.t);
838
+ return this;
839
+ };
840
+
841
+ Suraido.prototype.next = function() {
842
+ if (this.currentItemIndex === (this.itemsLength - 1)) {
843
+ return this.stop().to(0);
844
+ } else {
845
+ return this.stop().to(this.currentItemIndex + 1);
846
+ }
847
+ };
848
+
849
+ Suraido.prototype.prev = function() {
850
+ return this.stop().to(this.currentItemIndex - 1);
851
+ };
852
+
853
+ return Suraido;
854
+
855
+ })();
856
+ $.fn[pluginName] = function(options) {
857
+ var args, sliders, _;
858
+ sliders = this.length;
859
+ _ = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
860
+ return this.each(function(index) {
861
+ var instance, key, me, plugin;
862
+ me = $(this);
863
+ plugin = $.data(this, "plugin_" + pluginName);
864
+ if (!plugin) {
865
+ key = "suraido" + (sliders > 1 ? '-' + ++index : '');
866
+ instance = new Furatto.Suraido(this, options);
867
+ return me.data(key, instance).data('key', key);
868
+ } else if ((plugin[_] != null) && $.type(plugin[_]) === 'function') {
869
+ return plugin[_].apply(plugin, args);
870
+ }
871
+ });
872
+ };
873
+ Furatto.Suraido.version = "1.0.0";
874
+ return $(document).ready(function() {
875
+ return $('[data-suraido]').each(function() {
876
+ return $(this).suraido();
877
+ });
878
+ });
879
+ })($, window, document);
880
+
881
+ /*
882
+ Toolbar.js
883
+
884
+ @fileoverview jQuery plugin that creates tooltip style toolbars.
885
+ @link http://paulkinzett.github.com/toolbar/
886
+ @author Paul Kinzett (http://kinzett.co.nz/)
887
+ @version 1.0.4
888
+ @requires jQuery 1.7+
889
+
890
+ @license jQuery Toolbar Plugin v1.0.4
891
+ http://paulkinzett.github.com/toolbar/
892
+ Copyright 2013 Paul Kinzett (http://kinzett.co.nz/)
893
+ Released under the MIT license.
894
+ <https://raw.github.com/paulkinzett/toolbar/master/LICENSE.txt>
895
+ */
896
+
897
+ if (typeof Object.create !== "function") {
898
+ Object.create = function(obj) {
899
+ var F;
900
+ F = function() {};
901
+ F.prototype = obj;
902
+ return new F();
903
+ };
904
+ }
905
+
906
+ (function($, window, document, undefined_) {
907
+ var ToolBar;
908
+ ToolBar = {
909
+ init: function(options, elem) {
910
+ var self;
911
+ self = this;
912
+ self.elem = elem;
913
+ self.$elem = $(elem);
914
+ self.options = $.extend({}, $.fn.toolbar.options, options);
915
+ self.toolbar = $("<div class='tool-container gradient ' />").addClass("tool-" + self.options.position).addClass("tool-rounded").addClass(self.options.theme).append("<div class=\"tool-items\" />").append("<div class='arrow " + self.options.theme + "' />").appendTo("body").css("opacity", 0).hide();
916
+ self.toolbar_arrow = self.toolbar.find(".arrow");
917
+ return self.initializeToolbar();
918
+ },
919
+ initializeToolbar: function() {
920
+ var self;
921
+ self = this;
922
+ self.populateContent();
923
+ self.setTrigger();
924
+ return self.toolbarWidth = self.toolbar.width();
925
+ },
926
+ setTrigger: function() {
927
+ var self;
928
+ self = this;
929
+ self.$elem.on("click", function(event) {
930
+ event.preventDefault();
931
+ if (self.$elem.hasClass("pressed")) {
932
+ return self.hide();
933
+ } else {
934
+ return self.show();
935
+ }
936
+ });
937
+ if (self.options.hideOnClick) {
938
+ $("html").on("click.toolbar", function(event) {
939
+ if (event.target !== self.elem && self.$elem.has(event.target).length === 0 && self.toolbar.has(event.target).length === 0 && self.toolbar.is(":visible")) {
940
+ return self.hide();
941
+ }
942
+ });
943
+ }
944
+ return $(window).resize(function(event) {
945
+ event.stopPropagation();
946
+ if (self.toolbar.is(":visible")) {
947
+ self.toolbarCss = self.getCoordinates(self.options.position, 20);
948
+ self.collisionDetection();
949
+ self.toolbar.css(self.toolbarCss);
950
+ return self.toolbar_arrow.css(self.arrowCss);
951
+ }
952
+ });
953
+ },
954
+ populateContent: function() {
955
+ var content, location, self;
956
+ self = this;
957
+ location = self.toolbar.find(".tool-items");
958
+ content = $(self.options.content).clone(true).find("a").addClass("tool-item gradient").addClass(self.options.theme);
959
+ location.html(content);
960
+ return location.find(".tool-item").on("click", function(event) {
961
+ event.preventDefault();
962
+ return self.$elem.trigger("toolbarItemClick", this);
963
+ });
964
+ },
965
+ calculatePosition: function() {
966
+ var self;
967
+ self = this;
968
+ self.arrowCss = {};
969
+ self.toolbarCss = self.getCoordinates(self.options.position, 0);
970
+ self.toolbarCss.position = "absolute";
971
+ self.toolbarCss.zIndex = self.options.zIndex;
972
+ self.collisionDetection();
973
+ self.toolbar.css(self.toolbarCss);
974
+ return self.toolbar_arrow.css(self.arrowCss);
975
+ },
976
+ getCoordinates: function(position, adjustment) {
977
+ var self;
978
+ self = this;
979
+ self.coordinates = self.$elem.offset();
980
+ if (self.options.adjustment && self.options.adjustment[self.options.position]) {
981
+ adjustment = self.options.adjustment[self.options.position];
982
+ }
983
+ switch (self.options.position) {
984
+ case "top":
985
+ return {
986
+ left: self.coordinates.left - (self.toolbar.width() / 2) + (self.$elem.outerWidth() / 2),
987
+ top: self.coordinates.top - self.$elem.height() - adjustment,
988
+ right: "auto"
989
+ };
990
+ case "left":
991
+ return {
992
+ left: self.coordinates.left - (self.toolbar.width() / 2) - (self.$elem.width() / 2) - adjustment,
993
+ top: self.coordinates.top - (self.toolbar.height() / 2) + (self.$elem.outerHeight() / 2),
994
+ right: "auto"
995
+ };
996
+ case "right":
997
+ return {
998
+ left: self.coordinates.left + (self.toolbar.width() / 2) + (self.$elem.width() / 3) + adjustment,
999
+ top: self.coordinates.top - (self.toolbar.height() / 2) + (self.$elem.outerHeight() / 2),
1000
+ right: "auto"
1001
+ };
1002
+ case "bottom":
1003
+ return {
1004
+ left: self.coordinates.left - (self.toolbar.width() / 2) + (self.$elem.outerWidth() / 2),
1005
+ top: self.coordinates.top + self.$elem.height() + adjustment,
1006
+ right: "auto"
1007
+ };
1008
+ }
1009
+ },
1010
+ collisionDetection: function() {
1011
+ var edgeOffset, self;
1012
+ self = this;
1013
+ edgeOffset = 20;
1014
+ if (self.options.position === "top" || self.options.position === "bottom") {
1015
+ self.arrowCss = {
1016
+ left: "50%",
1017
+ right: "50%"
1018
+ };
1019
+ if (self.toolbarCss.left < edgeOffset) {
1020
+ self.toolbarCss.left = edgeOffset;
1021
+ return self.arrowCss.left = self.$elem.offset().left + self.$elem.width() / 2 - edgeOffset;
1022
+ } else if (($(window).width() - (self.toolbarCss.left + self.toolbarWidth)) < edgeOffset) {
1023
+ self.toolbarCss.right = edgeOffset;
1024
+ self.toolbarCss.left = "auto";
1025
+ self.arrowCss.left = "auto";
1026
+ return self.arrowCss.right = ($(window).width() - self.$elem.offset().left) - (self.$elem.width() / 2) - edgeOffset - 5;
1027
+ }
1028
+ }
1029
+ },
1030
+ show: function() {
1031
+ var animation, self;
1032
+ self = this;
1033
+ animation = {
1034
+ opacity: 1
1035
+ };
1036
+ self.$elem.addClass("pressed");
1037
+ self.calculatePosition();
1038
+ switch (self.options.position) {
1039
+ case "top":
1040
+ animation.top = "-=20";
1041
+ break;
1042
+ case "left":
1043
+ animation.left = "-=20";
1044
+ break;
1045
+ case "right":
1046
+ animation.left = "+=20";
1047
+ break;
1048
+ case "bottom":
1049
+ animation.top = "+=20";
1050
+ }
1051
+ self.toolbar.show().animate(animation, 200);
1052
+ return self.$elem.trigger("toolbarShown");
1053
+ },
1054
+ hide: function() {
1055
+ var animation, self;
1056
+ self = this;
1057
+ animation = {
1058
+ opacity: 0
1059
+ };
1060
+ self.$elem.removeClass("pressed");
1061
+ switch (self.options.position) {
1062
+ case "top":
1063
+ animation.top = "+=20";
1064
+ break;
1065
+ case "left":
1066
+ animation.left = "+=20";
1067
+ break;
1068
+ case "right":
1069
+ animation.left = "-=20";
1070
+ break;
1071
+ case "bottom":
1072
+ animation.top = "-=20";
1073
+ }
1074
+ self.toolbar.animate(animation, 200, function() {
1075
+ return self.toolbar.hide();
1076
+ });
1077
+ return self.$elem.trigger("toolbarHidden");
1078
+ },
1079
+ getToolbarElement: function() {
1080
+ return this.toolbar.find(".tool-items");
1081
+ }
1082
+ };
1083
+ $.fn.toolbar = function(options) {
1084
+ var method, toolbarObj;
1085
+ if ($.isPlainObject(options)) {
1086
+ return this.each(function() {
1087
+ var toolbarObj;
1088
+ toolbarObj = Object.create(ToolBar);
1089
+ toolbarObj.init(options, this);
1090
+ return $(this).data("toolbarObj", toolbarObj);
1091
+ });
1092
+ } else if (typeof options === "string" && options.indexOf("_") !== 0) {
1093
+ toolbarObj = $(this).data("toolbarObj");
1094
+ method = toolbarObj[options];
1095
+ return method.apply(toolbarObj, $.makeArray(arguments_).slice(1));
1096
+ }
1097
+ };
1098
+ $.fn.toolbar.options = {
1099
+ content: "#myContent",
1100
+ position: "top",
1101
+ hideOnClick: false,
1102
+ zIndex: 120,
1103
+ theme: ""
1104
+ };
1105
+ return $(document).ready(function() {
1106
+ return $('[data-furatto="toolbar"]').each(function() {
1107
+ return $(this).toolbar({
1108
+ content: $(this).data('content'),
1109
+ position: $(this).data('position') || 'top',
1110
+ hideOnClick: true,
1111
+ theme: $(this).data('theme')
1112
+ });
1113
+ });
1114
+ });
1115
+ })(jQuery, window, document);
1116
+
1117
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
1118
+ __slice = [].slice;
1119
+
1120
+ (function($, window, document) {
1121
+ var defaults, pluginName;
1122
+ pluginName = 'tabu';
1123
+ defaults = {
1124
+ startIndex: 0,
1125
+ tabContentClass: 'tabu-content',
1126
+ tabContentsClass: 'content'
1127
+ };
1128
+ Furatto.Tabu = (function() {
1129
+ function Tabu(el, options) {
1130
+ this.el = el;
1131
+ this._toggle = __bind(this._toggle, this);
1132
+ this._setActiveElements = __bind(this._setActiveElements, this);
1133
+ this._preventsIndexOutofBounds = __bind(this._preventsIndexOutofBounds, this);
1134
+ this.$el = $(this.el);
1135
+ this.options = $.extend(defaults, options, this.$el.data());
1136
+ this.tabItems = this.$el.find('li');
1137
+ this.tabItemsLength = this.tabItems.length;
1138
+ this.tabContents = this.$el.next("." + this.options.tabContentClass).find(">." + this.options.tabContentsClass);
1139
+ this._preventsIndexOutofBounds();
1140
+ this._setActiveElements();
1141
+ this._toggle();
1142
+ }
1143
+
1144
+ Tabu.prototype._preventsIndexOutofBounds = function() {
1145
+ if (this.options.startIndex >= this.tabItemsLength) {
1146
+ return this.options.startIndex = this.tabItemsLength - 1;
1147
+ }
1148
+ };
1149
+
1150
+ Tabu.prototype._setActiveElements = function() {
1151
+ $(this.tabItems[this.options.startIndex]).addClass('active');
1152
+ return $(this.tabContents[this.options.startIndex]).addClass('active');
1153
+ };
1154
+
1155
+ Tabu.prototype._toggle = function() {
1156
+ var weakSelf;
1157
+ weakSelf = this;
1158
+ return this.tabItems.on('touchstart click', function(event) {
1159
+ var id;
1160
+ event.preventDefault();
1161
+ weakSelf.tabItems.removeClass('active');
1162
+ $(this).addClass('active');
1163
+ weakSelf.tabContents.removeClass('active');
1164
+ id = $(this).find('a').attr('href');
1165
+ return $(id).addClass('active');
1166
+ });
1167
+ };
1168
+
1169
+ return Tabu;
1170
+
1171
+ })();
1172
+ $.fn[pluginName] = function(options) {
1173
+ var args, tabsLength, _;
1174
+ tabsLength = this.length;
1175
+ _ = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
1176
+ return this.each(function(index) {
1177
+ var instance, key, me, plugin;
1178
+ me = $(this);
1179
+ plugin = $.data(this, "plugin_" + pluginName);
1180
+ if (!plugin) {
1181
+ key = "tabu" + (tabsLength > 1 ? '-' + ++index : '');
1182
+ instance = new Furatto.Tabu(this, options);
1183
+ return me.data(key, instance).data('key', key);
1184
+ } else if ((plugin[_] != null) && $.type(plugin[_]) === 'function') {
1185
+ return plugin[_].apply(plugin, args);
1186
+ }
1187
+ });
1188
+ };
1189
+ Furatto.Tabu.version = "1.0.0";
1190
+ return $(document).ready(function() {
1191
+ return $('[data-tabu]').each(function() {
1192
+ return $(this).tabu();
1193
+ });
1194
+ });
1195
+ })($, window, document);
1196
+
1197
+ /* ===========================================================
1198
+ * bootstrap-tooltip.js v2.3.0
1199
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
1200
+ * Inspired by the original jQuery.tipsy by Jason Frame
1201
+ * ===========================================================
1202
+ * Copyright 2012 Twitter, Inc.
1203
+ *
1204
+ * Licensed under the Apache License, Version 2.0 (the "License");
1205
+ * you may not use this file except in compliance with the License.
1206
+ * You may obtain a copy of the License at
1207
+ *
1208
+ * http://www.apache.org/licenses/LICENSE-2.0
1209
+ *
1210
+ * Unless required by applicable law or agreed to in writing, software
1211
+ * distributed under the License is distributed on an "AS IS" BASIS,
1212
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1213
+ * See the License for the specific language governing permissions and
1214
+ * limitations under the License.
1215
+ * ========================================================== */
1216
+
1217
+
1218
+ !function ($) {
1219
+
1220
+ "use strict"; // jshint ;_;
1221
+
1222
+
1223
+ /* TOOLTIP PUBLIC CLASS DEFINITION
1224
+ * =============================== */
1225
+
1226
+ var Tooltip = function (element, options) {
1227
+ this.init('tooltip', element, options)
1228
+ }
1229
+
1230
+ Tooltip.prototype = {
1231
+
1232
+ constructor: Tooltip
1233
+
1234
+ , init: function (type, element, options) {
1235
+ var eventIn
1236
+ , eventOut
1237
+ , triggers
1238
+ , trigger
1239
+ , i
1240
+
1241
+ this.type = type
1242
+ this.$element = $(element)
1243
+ this.options = this.getOptions(options)
1244
+ this.enabled = true
1245
+
1246
+ triggers = this.options.trigger.split(' ')
1247
+
1248
+ for (i = triggers.length; i--;) {
1249
+ trigger = triggers[i]
1250
+ if (trigger == 'click') {
1251
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1252
+ } else if (trigger != 'manual') {
1253
+ eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
1254
+ eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
1255
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1256
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1257
+ }
1258
+ }
1259
+
1260
+ this.options.selector ?
1261
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1262
+ this.fixTitle()
1263
+ }
1264
+
1265
+ , getOptions: function (options) {
1266
+ options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
1267
+
1268
+ if (options.delay && typeof options.delay == 'number') {
1269
+ options.delay = {
1270
+ show: options.delay
1271
+ , hide: options.delay
1272
+ }
1273
+ }
1274
+
1275
+ return options
1276
+ }
1277
+
1278
+ , enter: function (e) {
1279
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1280
+
1281
+ if (!self.options.delay || !self.options.delay.show) return self.show()
1282
+
1283
+ clearTimeout(this.timeout)
1284
+ self.hoverState = 'in'
1285
+ this.timeout = setTimeout(function() {
1286
+ if (self.hoverState == 'in') self.show()
1287
+ }, self.options.delay.show)
1288
+ }
1289
+
1290
+ , leave: function (e) {
1291
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1292
+
1293
+ if (this.timeout) clearTimeout(this.timeout)
1294
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
1295
+
1296
+ self.hoverState = 'out'
1297
+ this.timeout = setTimeout(function() {
1298
+ if (self.hoverState == 'out') self.hide()
1299
+ }, self.options.delay.hide)
1300
+ }
1301
+
1302
+ , show: function () {
1303
+ var $tip
1304
+ , pos
1305
+ , actualWidth
1306
+ , actualHeight
1307
+ , placement
1308
+ , tp
1309
+ , e = $.Event('show')
1310
+
1311
+ if (this.hasContent() && this.enabled) {
1312
+ this.$element.trigger(e)
1313
+ if (e.isDefaultPrevented()) return
1314
+ $tip = this.tip()
1315
+ this.setContent()
1316
+
1317
+ if (this.options.animation) {
1318
+ $tip.addClass('fade')
1319
+ }
1320
+
1321
+ placement = typeof this.options.placement == 'function' ?
1322
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
1323
+ this.options.placement
1324
+
1325
+ $tip
1326
+ .detach()
1327
+ .css({ top: 0, left: 0, display: 'block' })
1328
+
1329
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1330
+
1331
+ pos = this.getPosition()
1332
+
1333
+ actualWidth = $tip[0].offsetWidth
1334
+ actualHeight = $tip[0].offsetHeight
1335
+
1336
+ switch (placement) {
1337
+ case 'bottom':
1338
+ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1339
+ break
1340
+ case 'top':
1341
+ tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1342
+ break
1343
+ case 'left':
1344
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1345
+ break
1346
+ case 'right':
1347
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1348
+ break
1349
+ }
1350
+
1351
+ this.applyPlacement(tp, placement)
1352
+ this.$element.trigger('shown')
1353
+ }
1354
+ }
1355
+
1356
+ , applyPlacement: function(offset, placement){
1357
+ var $tip = this.tip()
1358
+ , width = $tip[0].offsetWidth
1359
+ , height = $tip[0].offsetHeight
1360
+ , actualWidth
1361
+ , actualHeight
1362
+ , delta
1363
+ , replace
1364
+
1365
+ $tip
1366
+ .offset(offset)
1367
+ .addClass(placement)
1368
+ .addClass('in')
1369
+
1370
+ actualWidth = $tip[0].offsetWidth
1371
+ actualHeight = $tip[0].offsetHeight
1372
+
1373
+ if (placement == 'top' && actualHeight != height) {
1374
+ offset.top = offset.top + height - actualHeight
1375
+ replace = true
1376
+ }
1377
+
1378
+ if (placement == 'bottom' || placement == 'top') {
1379
+ delta = 0
1380
+
1381
+ if (offset.left < 0){
1382
+ delta = offset.left * -2
1383
+ offset.left = 0
1384
+ $tip.offset(offset)
1385
+ actualWidth = $tip[0].offsetWidth
1386
+ actualHeight = $tip[0].offsetHeight
1387
+ }
1388
+
1389
+ this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1390
+ } else {
1391
+ this.replaceArrow(actualHeight - height, actualHeight, 'top')
1392
+ }
1393
+
1394
+ if (replace) $tip.offset(offset)
1395
+ }
1396
+
1397
+ , replaceArrow: function(delta, dimension, position){
1398
+ this
1399
+ .arrow()
1400
+ .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
1401
+ }
1402
+
1403
+ , setContent: function () {
1404
+ var $tip = this.tip()
1405
+ , title = this.getTitle()
1406
+
1407
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1408
+ $tip.removeClass('fade in top bottom left right')
1409
+ }
1410
+
1411
+ , hide: function () {
1412
+ var that = this
1413
+ , $tip = this.tip()
1414
+ , e = $.Event('hide')
1415
+
1416
+ this.$element.trigger(e)
1417
+ if (e.isDefaultPrevented()) return
1418
+
1419
+ $tip.removeClass('in')
1420
+
1421
+ function removeWithAnimation() {
1422
+ var timeout = setTimeout(function () {
1423
+ $tip.off($.support.transition.end).detach()
1424
+ }, 500)
1425
+
1426
+ $tip.one($.support.transition.end, function () {
1427
+ clearTimeout(timeout)
1428
+ $tip.detach()
1429
+ })
1430
+ }
1431
+
1432
+ $.support.transition && this.$tip.hasClass('fade') ?
1433
+ removeWithAnimation() :
1434
+ $tip.detach()
1435
+
1436
+ this.$element.trigger('hidden')
1437
+
1438
+ return this
1439
+ }
1440
+
1441
+ , fixTitle: function () {
1442
+ var $e = this.$element
1443
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1444
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1445
+ }
1446
+ }
1447
+
1448
+ , hasContent: function () {
1449
+ return this.getTitle()
1450
+ }
1451
+
1452
+ , getPosition: function () {
1453
+ var el = this.$element[0]
1454
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1455
+ width: el.offsetWidth
1456
+ , height: el.offsetHeight
1457
+ }, this.$element.offset())
1458
+ }
1459
+
1460
+ , getTitle: function () {
1461
+ var title
1462
+ , $e = this.$element
1463
+ , o = this.options
1464
+
1465
+ title = $e.attr('data-original-title')
1466
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1467
+
1468
+ return title
1469
+ }
1470
+
1471
+ , tip: function () {
1472
+ return this.$tip = this.$tip || $(this.options.template)
1473
+ }
1474
+
1475
+ , arrow: function(){
1476
+ return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
1477
+ }
1478
+
1479
+ , validate: function () {
1480
+ if (!this.$element[0].parentNode) {
1481
+ this.hide()
1482
+ this.$element = null
1483
+ this.options = null
1484
+ }
1485
+ }
1486
+
1487
+ , enable: function () {
1488
+ this.enabled = true
1489
+ }
1490
+
1491
+ , disable: function () {
1492
+ this.enabled = false
1493
+ }
1494
+
1495
+ , toggleEnabled: function () {
1496
+ this.enabled = !this.enabled
1497
+ }
1498
+
1499
+ , toggle: function (e) {
1500
+ var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
1501
+ self.tip().hasClass('in') ? self.hide() : self.show()
1502
+ }
1503
+
1504
+ , destroy: function () {
1505
+ this.hide().$element.off('.' + this.type).removeData(this.type)
1506
+ }
1507
+
1508
+ }
1509
+
1510
+
1511
+ /* TOOLTIP PLUGIN DEFINITION
1512
+ * ========================= */
1513
+
1514
+ var old = $.fn.tooltip
1515
+
1516
+ $.fn.tooltip = function ( option ) {
1517
+ return this.each(function () {
1518
+ var $this = $(this)
1519
+ , data = $this.data('tooltip')
1520
+ , options = typeof option == 'object' && option
1521
+ if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1522
+ if (typeof option == 'string') data[option]()
1523
+ })
1524
+ }
1525
+
1526
+ $.fn.tooltip.Constructor = Tooltip
1527
+
1528
+ $.fn.tooltip.defaults = {
1529
+ animation: true
1530
+ , placement: 'top'
1531
+ , selector: false
1532
+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1533
+ , trigger: 'hover focus'
1534
+ , title: ''
1535
+ , delay: 0
1536
+ , html: false
1537
+ , container: false
1538
+ }
1539
+
1540
+
1541
+ /* TOOLTIP NO CONFLICT
1542
+ * =================== */
1543
+
1544
+ $.fn.tooltip.noConflict = function () {
1545
+ $.fn.tooltip = old
1546
+ return this
1547
+ }
1548
+
1549
+ $(document).on('ready', function(){
1550
+ $("[data-toggle=tooltip]").tooltip();
1551
+ });
1552
+
1553
+ }(window.jQuery);
1554
+
1555
+ /* ============================================================
1556
+ * bootstrap-dropdown.js v2.3.2
1557
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
1558
+ * ============================================================
1559
+ * Copyright 2012 Twitter, Inc.
1560
+ *
1561
+ * Licensed under the Apache License, Version 2.0 (the "License");
1562
+ * you may not use this file except in compliance with the License.
1563
+ * You may obtain a copy of the License at
1564
+ *
1565
+ * http://www.apache.org/licenses/LICENSE-2.0
1566
+ *
1567
+ * Unless required by applicable law or agreed to in writing, software
1568
+ * distributed under the License is distributed on an "AS IS" BASIS,
1569
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1570
+ * See the License for the specific language governing permissions and
1571
+ * limitations under the License.
1572
+ * ============================================================ */
1573
+
1574
+
1575
+ !function ($) {
1576
+
1577
+ "use strict"; // jshint ;_;
1578
+
1579
+
1580
+ /* DROPDOWN CLASS DEFINITION
1581
+ * ========================= */
1582
+
1583
+ var toggle = '[data-toggle=dropdown]'
1584
+ , Dropdown = function (element) {
1585
+ var $el = $(element).on('click.dropdown.data-api', this.toggle)
1586
+ $('html').on('click.dropdown.data-api', function () {
1587
+ $el.parent().removeClass('open')
1588
+ })
1589
+ }
1590
+
1591
+ Dropdown.prototype = {
1592
+
1593
+ constructor: Dropdown
1594
+
1595
+ , toggle: function (e) {
1596
+ var $this = $(this)
1597
+ , $parent
1598
+ , isActive
1599
+
1600
+ if ($this.is('.disabled, :disabled')) return
1601
+
1602
+ $parent = getParent($this)
1603
+
1604
+ isActive = $parent.hasClass('open')
1605
+
1606
+ clearMenus()
1607
+
1608
+ if (!isActive) {
1609
+ if ('ontouchstart' in document.documentElement) {
1610
+ // if mobile we we use a backdrop because click events don't delegate
1611
+ $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
1612
+ }
1613
+ $parent.toggleClass('open')
1614
+ }
1615
+
1616
+ $this.focus()
1617
+
1618
+ return false
1619
+ }
1620
+
1621
+ , keydown: function (e) {
1622
+ var $this
1623
+ , $items
1624
+ , $active
1625
+ , $parent
1626
+ , isActive
1627
+ , index
1628
+
1629
+ if (!/(38|40|27)/.test(e.keyCode)) return
1630
+
1631
+ $this = $(this)
1632
+
1633
+ e.preventDefault()
1634
+ e.stopPropagation()
1635
+
1636
+ if ($this.is('.disabled, :disabled')) return
1637
+
1638
+ $parent = getParent($this)
1639
+
1640
+ isActive = $parent.hasClass('open')
1641
+
1642
+ if (!isActive || (isActive && e.keyCode == 27)) {
1643
+ if (e.which == 27) $parent.find(toggle).focus()
1644
+ return $this.click()
1645
+ }
1646
+
1647
+ $items = $('[role=menu] li:not(.divider):visible a', $parent)
1648
+
1649
+ if (!$items.length) return
1650
+
1651
+ index = $items.index($items.filter(':focus'))
1652
+
1653
+ if (e.keyCode == 38 && index > 0) index-- // up
1654
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
1655
+ if (!~index) index = 0
1656
+
1657
+ $items
1658
+ .eq(index)
1659
+ .focus()
1660
+ }
1661
+
1662
+ }
1663
+
1664
+ function clearMenus() {
1665
+ $('.dropdown-backdrop').remove()
1666
+ $(toggle).each(function () {
1667
+ getParent($(this)).removeClass('open')
1668
+ })
1669
+ }
1670
+
1671
+ function getParent($this) {
1672
+ var selector = $this.attr('data-target')
1673
+ , $parent
1674
+
1675
+ if (!selector) {
1676
+ selector = $this.attr('href')
1677
+ selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1678
+ }
1679
+
1680
+ $parent = selector && $(selector)
1681
+
1682
+ if (!$parent || !$parent.length) $parent = $this.parent()
1683
+
1684
+ return $parent
1685
+ }
1686
+
1687
+
1688
+ /* DROPDOWN PLUGIN DEFINITION
1689
+ * ========================== */
1690
+
1691
+ var old = $.fn.dropdown
1692
+
1693
+ $.fn.dropdown = function (option) {
1694
+ return this.each(function () {
1695
+ var $this = $(this)
1696
+ , data = $this.data('dropdown')
1697
+ if (!data) $this.data('dropdown', (data = new Dropdown(this)))
1698
+ if (typeof option == 'string') data[option].call($this)
1699
+ })
1700
+ }
1701
+
1702
+ $.fn.dropdown.Constructor = Dropdown
1703
+
1704
+
1705
+ /* DROPDOWN NO CONFLICT
1706
+ * ==================== */
1707
+
1708
+ $.fn.dropdown.noConflict = function () {
1709
+ $.fn.dropdown = old
1710
+ return this
1711
+ }
1712
+
1713
+
1714
+ /* APPLY TO STANDARD DROPDOWN ELEMENTS
1715
+ * =================================== */
1716
+
1717
+ $(document)
1718
+ .on('click.dropdown.data-api', clearMenus)
1719
+ .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
1720
+ .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
1721
+ .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
1722
+
1723
+ $(document).ready(function() {
1724
+ $('.dropdown-toggle').dropdown();
1725
+
1726
+ $('.dropdown input, .dropdown label').click(function(e){
1727
+ e.stopPropagation();
1728
+ });
1729
+ })
1730
+
1731
+ $('.with-dropdown').on('touchstart click', function(e) {
1732
+ e.preventDefault();
1733
+ return $(this).toggleClass('opened');
1734
+ });
1735
+ return $('.with-dropdown').hover(function() {
1736
+ return $(this).addClass('opened');
1737
+ }, function() {
1738
+ return $(this).removeClass('opened');
1739
+ });
1740
+
1741
+ }(window.jQuery);
1742
+
1743
+ /*!
1744
+ * classie - class helper functions
1745
+ * from bonzo https://github.com/ded/bonzo
1746
+ *
1747
+ * classie.has( elem, 'my-class' ) -> true/false
1748
+ * classie.add( elem, 'my-new-class' )
1749
+ * classie.remove( elem, 'my-unwanted-class' )
1750
+ * classie.toggle( elem, 'my-class' )
1751
+ */
1752
+
1753
+ /*jshint browser: true, strict: true, undef: true */
1754
+ /*global define: false */
1755
+
1756
+ ( function( window ) {
1757
+
1758
+ 'use strict';
1759
+
1760
+ // class helper functions from bonzo https://github.com/ded/bonzo
1761
+
1762
+ function classReg( className ) {
1763
+ return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
1764
+ }
1765
+
1766
+ // classList support for class management
1767
+ // altho to be fair, the api sucks because it won't accept multiple classes at once
1768
+ var hasClass, addClass, removeClass;
1769
+
1770
+ if ( 'classList' in document.documentElement ) {
1771
+ hasClass = function( elem, c ) {
1772
+ return elem.classList.contains( c );
1773
+ };
1774
+ addClass = function( elem, c ) {
1775
+ elem.classList.add( c );
1776
+ };
1777
+ removeClass = function( elem, c ) {
1778
+ elem.classList.remove( c );
1779
+ };
1780
+ }
1781
+ else {
1782
+ hasClass = function( elem, c ) {
1783
+ return classReg( c ).test( elem.className );
1784
+ };
1785
+ addClass = function( elem, c ) {
1786
+ if ( !hasClass( elem, c ) ) {
1787
+ elem.className = elem.className + ' ' + c;
1788
+ }
1789
+ };
1790
+ removeClass = function( elem, c ) {
1791
+ elem.className = elem.className.replace( classReg( c ), ' ' );
1792
+ };
1793
+ }
1794
+
1795
+ function toggleClass( elem, c ) {
1796
+ var fn = hasClass( elem, c ) ? removeClass : addClass;
1797
+ fn( elem, c );
1798
+ }
1799
+
1800
+ var classie = {
1801
+ // full names
1802
+ hasClass: hasClass,
1803
+ addClass: addClass,
1804
+ removeClass: removeClass,
1805
+ toggleClass: toggleClass,
1806
+ // short names
1807
+ has: hasClass,
1808
+ add: addClass,
1809
+ remove: removeClass,
1810
+ toggle: toggleClass
1811
+ };
1812
+
1813
+ // transport
1814
+ if ( typeof define === 'function' && define.amd ) {
1815
+ // AMD
1816
+ define( classie );
1817
+ } else {
1818
+ // browser global
1819
+ window.classie = classie;
1820
+ }
1821
+
1822
+ })( window );