zurb-foundation-5 5.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.editorconfig +9 -0
  4. data/.gitignore +46 -0
  5. data/.travis.yml +34 -0
  6. data/CONTRIBUTING.md +55 -0
  7. data/Gemfile +3 -0
  8. data/Gemfile.lock +16 -0
  9. data/Gruntfile.js +222 -0
  10. data/LICENSE +22 -0
  11. data/README.md +44 -0
  12. data/bower.json +20 -0
  13. data/composer.json +9 -0
  14. data/foundation.gemspec +21 -0
  15. data/humans.txt +8 -0
  16. data/js/foundation/foundation.abide.js +299 -0
  17. data/js/foundation/foundation.accordion.js +54 -0
  18. data/js/foundation/foundation.alert.js +43 -0
  19. data/js/foundation/foundation.clearing.js +531 -0
  20. data/js/foundation/foundation.dropdown.js +306 -0
  21. data/js/foundation/foundation.equalizer.js +68 -0
  22. data/js/foundation/foundation.interchange.js +331 -0
  23. data/js/foundation/foundation.joyride.js +849 -0
  24. data/js/foundation/foundation.js +609 -0
  25. data/js/foundation/foundation.magellan.js +173 -0
  26. data/js/foundation/foundation.offcanvas.js +50 -0
  27. data/js/foundation/foundation.orbit.js +606 -0
  28. data/js/foundation/foundation.reveal.js +427 -0
  29. data/js/foundation/foundation.slider.js +200 -0
  30. data/js/foundation/foundation.tab.js +168 -0
  31. data/js/foundation/foundation.tooltip.js +272 -0
  32. data/js/foundation/foundation.topbar.js +422 -0
  33. data/karma.conf.js +114 -0
  34. data/lib/foundation/engine.rb +20 -0
  35. data/lib/foundation/generators/USAGE +15 -0
  36. data/lib/foundation/generators/install_generator.rb +54 -0
  37. data/lib/foundation/generators/templates/application.html.erb +47 -0
  38. data/lib/foundation/generators/templates/application.html.haml +31 -0
  39. data/lib/foundation/generators/templates/application.html.slim +35 -0
  40. data/lib/foundation/sprockets.rb +4 -0
  41. data/lib/foundation/version.rb +3 -0
  42. data/lib/scss.js +114 -0
  43. data/lib/zurb-foundation.rb +33 -0
  44. data/package.json +48 -0
  45. data/robots.txt +4 -0
  46. data/run-tests.sh +83 -0
  47. data/sache.json +5 -0
  48. data/scss/foundation.scss +45 -0
  49. data/scss/foundation/_functions.scss +101 -0
  50. data/scss/foundation/_settings.scss +1279 -0
  51. data/scss/foundation/components/_accordion.scss +52 -0
  52. data/scss/foundation/components/_alert-boxes.scss +126 -0
  53. data/scss/foundation/components/_block-grid.scss +132 -0
  54. data/scss/foundation/components/_breadcrumbs.scss +127 -0
  55. data/scss/foundation/components/_button-groups.scss +108 -0
  56. data/scss/foundation/components/_buttons.scss +222 -0
  57. data/scss/foundation/components/_clearing.scss +247 -0
  58. data/scss/foundation/components/_dropdown-buttons.scss +129 -0
  59. data/scss/foundation/components/_dropdown.scss +248 -0
  60. data/scss/foundation/components/_flex-video.scss +51 -0
  61. data/scss/foundation/components/_forms.scss +496 -0
  62. data/scss/foundation/components/_global.scss +365 -0
  63. data/scss/foundation/components/_grid.scss +261 -0
  64. data/scss/foundation/components/_inline-lists.scss +56 -0
  65. data/scss/foundation/components/_joyride.scss +220 -0
  66. data/scss/foundation/components/_keystrokes.scss +61 -0
  67. data/scss/foundation/components/_labels.scss +104 -0
  68. data/scss/foundation/components/_magellan.scss +34 -0
  69. data/scss/foundation/components/_offcanvas.scss +381 -0
  70. data/scss/foundation/components/_orbit.scss +415 -0
  71. data/scss/foundation/components/_pagination.scss +150 -0
  72. data/scss/foundation/components/_panels.scss +91 -0
  73. data/scss/foundation/components/_pricing-tables.scss +150 -0
  74. data/scss/foundation/components/_progress-bars.scss +79 -0
  75. data/scss/foundation/components/_range-slider.scss +148 -0
  76. data/scss/foundation/components/_reveal-new.scss +0 -0
  77. data/scss/foundation/components/_reveal.scss +216 -0
  78. data/scss/foundation/components/_side-nav.scss +93 -0
  79. data/scss/foundation/components/_split-buttons.scss +191 -0
  80. data/scss/foundation/components/_sub-nav.scss +125 -0
  81. data/scss/foundation/components/_switch.scss +294 -0
  82. data/scss/foundation/components/_tables.scss +97 -0
  83. data/scss/foundation/components/_tabs.scss +105 -0
  84. data/scss/foundation/components/_thumbs.scss +68 -0
  85. data/scss/foundation/components/_tooltips.scss +140 -0
  86. data/scss/foundation/components/_top-bar.scss +640 -0
  87. data/scss/foundation/components/_type.scss +493 -0
  88. data/scss/foundation/components/_visibility.scss +345 -0
  89. data/scss/foundation/test.html +0 -0
  90. data/scss/normalize.scss +423 -0
  91. data/spec/abide/abide.js +173 -0
  92. data/spec/abide/advanced.html +22 -0
  93. data/spec/abide/basic.html +13 -0
  94. data/spec/accordion/accordion.js +94 -0
  95. data/spec/accordion/basic.html +39 -0
  96. data/spec/accordion/grid.html +44 -0
  97. data/spec/accordion/multiexpand.html +20 -0
  98. data/spec/alert/alert.js +35 -0
  99. data/spec/alert/basic.html +4 -0
  100. data/spec/clearing/222.gif +0 -0
  101. data/spec/clearing/777.gif +0 -0
  102. data/spec/clearing/basic.html +5 -0
  103. data/spec/clearing/ccc.gif +0 -0
  104. data/spec/clearing/clearing.js +55 -0
  105. data/spec/dropdown/basic.html +10 -0
  106. data/spec/dropdown/dropdown.js +65 -0
  107. data/spec/equalizer/basic.html +24 -0
  108. data/spec/equalizer/equalizer.js +30 -0
  109. data/spec/framework/framework.js +14 -0
  110. data/spec/helpers.js +37 -0
  111. data/spec/interchange/basic.html +3 -0
  112. data/spec/interchange/interchange.js +60 -0
  113. data/spec/joyride/joyride.js +14 -0
  114. data/spec/magellan/magellan.js +14 -0
  115. data/spec/offcanvas/offcanvas.js +14 -0
  116. data/spec/orbit/orbit.js +14 -0
  117. data/spec/reveal/reveal.js +14 -0
  118. data/spec/tab/tab.js +14 -0
  119. data/spec/tooltip/tooltip.js +14 -0
  120. data/spec/topbar/multidropdown.html +60 -0
  121. data/spec/topbar/sticky.html +31 -0
  122. data/spec/topbar/topbar.js +96 -0
  123. metadata +238 -0
@@ -0,0 +1,4 @@
1
+ <div data-alert class="alert-box">
2
+ <div id="myAlert">My Alert</div>
3
+ <a href="#" class="close">&times;</a>
4
+ </div>
Binary file
Binary file
@@ -0,0 +1,5 @@
1
+ <ul class="clearing-thumbs" data-clearing>
2
+ <li id="image1"><a href="/base/spec/clearing/ccc.gif"><img src="/base/spec/clearing/ccc.gif"></a></li>
3
+ <li id="image2"><a href="/base/spec/clearing/777.gif"><img src="/base/spec/clearing/777.gif"></a></li>
4
+ <li id="image3"><a href="/base/spec/clearing/222.gif"><img src="/base/spec/clearing/222.gif"></a></li>
5
+ </ul>
Binary file
@@ -0,0 +1,55 @@
1
+ describe('clearing:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place clearing-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+
15
+ describe('basic clearing', function() {
16
+ beforeEach(function() {
17
+ document.body.innerHTML = __html__['spec/clearing/basic.html'];
18
+ });
19
+
20
+ // TODO: Disabled - PhantomJS fails during Travis for this but works during watch...needs investigation.
21
+ xit('displays the first image on click', function() {
22
+ $(document).foundation();
23
+
24
+ $('#image1').click();
25
+
26
+ expect($('#image1').hasClass('visible')).toBe(true);
27
+ expect($('#image2').hasClass('visible')).toBe(false);
28
+ expect($('#image3').hasClass('visible')).toBe(false);
29
+ });
30
+
31
+ // TODO: Disabled - PhantomJS fails during Travis for this but works during watch...needs investigation.
32
+ xit('displays the second image on click', function() {
33
+ $(document).foundation();
34
+
35
+ $('#image2').click();
36
+
37
+ expect($('#image1').hasClass('visible')).toBe(false);
38
+ expect($('#image2').hasClass('visible')).toBe(true);
39
+ expect($('#image3').hasClass('visible')).toBe(false);
40
+ });
41
+
42
+ // TODO: Works in Firefox but nowhere else... disabling test until this is figured out.
43
+ xit('goes to the next slide on next', function() {
44
+ $(document).foundation();
45
+
46
+ $('#image1').click();
47
+
48
+ $('.clearing-main-next').click();
49
+
50
+ expect($('#image1').hasClass('visible')).toBe(false);
51
+ expect($('#image2').hasClass('visible')).toBe(true);
52
+ expect($('#image3').hasClass('visible')).toBe(false);
53
+ });
54
+ });
55
+ });
@@ -0,0 +1,10 @@
1
+ <a id="drop1link" href="#" data-dropdown="drop1">Has Dropdown</a>
2
+ <ul id="drop1" class="f-dropdown" data-dropdown-content>
3
+ <li><a href="#">This is a link</a></li>
4
+ <li><a href="#">This is another</a></li>
5
+ <li><a href="#">Yet another</a></li>
6
+ </ul>
7
+ <a id="drop2link" href="#" data-dropdown="drop2">Has Content Dropdown</a>
8
+ <div id="drop2" data-dropdown-content class="f-dropdown content">
9
+ <p>Some text that people will think is awesome! Some text that people will think is awesome! Some text that people will think is awesome!</p>
10
+ </div>
@@ -0,0 +1,65 @@
1
+ describe('dropdown:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place dropdown-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+
15
+ describe('basic clearing', function() {
16
+ beforeEach(function() {
17
+ document.body.innerHTML = __html__['spec/dropdown/basic.html'];
18
+ });
19
+
20
+ it('is hidden on initialization', function() {
21
+ $(document).foundation();
22
+
23
+ expect($('#drop1').hasClass('open')).toBe(false);
24
+ expect($('#drop2').hasClass('open')).toBe(false);
25
+ });
26
+
27
+ it('displays the dropdown on click', function() {
28
+ $(document).foundation();
29
+
30
+ $('#drop1link').click();
31
+
32
+ expect($('#drop1').hasClass('open')).toBe(true);
33
+ expect($('#drop2').hasClass('open')).toBe(false);
34
+ });
35
+
36
+ it('displays the content dropdown on click', function() {
37
+ $(document).foundation();
38
+
39
+ $('#drop2link').click();
40
+
41
+ expect($('#drop1').hasClass('open')).toBe(false);
42
+ expect($('#drop2').hasClass('open')).toBe(true);
43
+ });
44
+
45
+ it('closes an open dropdown when another is clicked', function() {
46
+ $(document).foundation();
47
+
48
+ $('#drop1link').click();
49
+ $('#drop2link').click();
50
+
51
+ expect($('#drop1').hasClass('open')).toBe(false);
52
+ expect($('#drop2').hasClass('open')).toBe(true);
53
+ });
54
+
55
+ it('closes an open dropdown when the document is clicked elsewhere', function() {
56
+ $(document).foundation();
57
+
58
+ $('#drop1link').click();
59
+ $('body').click();
60
+
61
+ expect($('#drop1').hasClass('open')).toBe(false);
62
+ expect($('#drop2').hasClass('open')).toBe(false);
63
+ });
64
+ });
65
+ });
@@ -0,0 +1,24 @@
1
+ <div class="row" data-equalizer="">
2
+ <div class="small-4 columns">
3
+ <div class="panel" data-equalizer-watch="" id="watchee1">
4
+ <h3>Panel 1</h3>
5
+ <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.</p>
6
+ </div>
7
+ </div>
8
+ <div class="small-4 columns">
9
+ <div class="callout panel" data-equalizer-watch="" id="watchee2">
10
+ <h3>Panel 2</h3>
11
+ <ul>
12
+ <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
13
+ <li>Aliquam tincidunt mauris eu risus.</li>
14
+ <li>Vestibulum auctor dapibus neque.</li>
15
+ </ul>
16
+ </div>
17
+ </div>
18
+ <div class="small-4 columns">
19
+ <div class="panel" data-equalizer-watch="" id="watchee3">
20
+ <h3>Panel 3</h3>
21
+ <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
22
+ </div>
23
+ </div>
24
+ </div>
@@ -0,0 +1,30 @@
1
+ describe('equalizer:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place equalize-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+
15
+ describe('basic height', function() {
16
+ beforeEach(function() {
17
+ document.body.innerHTML = __html__['spec/equalizer/basic.html'];
18
+ });
19
+
20
+ it('should have equal heights on load', function() {
21
+ $(document).foundation();
22
+
23
+ var equalized = $('[data-equalizer-watch]');
24
+
25
+ equalized.each(function(){
26
+ expect($(this).outerHeight()).toBe(equalized.first().outerHeight());
27
+ });
28
+ });
29
+ });
30
+ });
@@ -0,0 +1,14 @@
1
+ describe('Foundation Framework:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place framework-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,37 @@
1
+ function when(size, testFunc) {
2
+ $(document).foundation();
3
+ if (matchMedia(Foundation.media_queries[size]).matches) {
4
+ return testFunc;
5
+ } else {
6
+ return function() {};
7
+ }
8
+ }
9
+
10
+ function when_not(size, testFunc) {
11
+ $(document).foundation();
12
+ if (!matchMedia(Foundation.media_queries[size]).matches) {
13
+ return testFunc;
14
+ } else {
15
+ return function() {};
16
+ }
17
+ }
18
+
19
+ beforeEach(function() {
20
+ jasmine.Clock.useMock();
21
+
22
+ if($('head').has('#foundation-style').length === 0) {
23
+ $('head').append('<style id="foundation-style"></style>')
24
+ }
25
+
26
+ $.ajax({ url: '/base/dist/assets/css/normalize.css', cache: false, async: false, success: function(data) {
27
+ $('#foundation-style').html(data);
28
+ }});
29
+
30
+ $.ajax({ url: '/base/dist/assets/css/foundation.css', cache: false, async: false, success: function(data) {
31
+ $('#foundation-style').append(data);
32
+ }});
33
+ });
34
+
35
+ afterEach(function() {
36
+ $('body').empty().removeClass();
37
+ });
@@ -0,0 +1,3 @@
1
+ <div data-interchange="[default.html, (default)], [medium.html, (medium)], [large.html, (large)]">
2
+ <h1 id="default">DEFAULT</h1>
3
+ </div>
@@ -0,0 +1,60 @@
1
+ describe('interchange:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place interchange-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+
14
+ spyOn($, 'get').andCallFake(function(path, callback) {
15
+ switch(path) {
16
+ case 'default.html':
17
+ callback('<h1 id="default">DEFAULT</h1>');
18
+ case 'medium.html':
19
+ callback('<h1 id="medium">MEDIUM</h1>');
20
+ case 'large.html':
21
+ callback('<h1 id="large">LARGE</h1>');
22
+ }
23
+ });
24
+ });
25
+
26
+ describe('when below the large breakpoint', when_not('large', function() {
27
+ describe('when below the medium breakpoint', when_not('medium', function() {
28
+ describe('with html content interchange', function() {
29
+ beforeEach(function() {
30
+ document.body.innerHTML = __html__['spec/interchange/basic.html'];
31
+ });
32
+
33
+ it('shows the default html content', function() {
34
+ $(document).foundation();
35
+
36
+ expect($('[data-interchange]').length).toBe(1);
37
+ expect($('#medium').length).toBe(0);
38
+ expect($('#large').length).toBe(0);
39
+ });
40
+ });
41
+ }));
42
+ }));
43
+
44
+ describe('when above the large breakpoint', when('large', function() {
45
+ describe('with html content interchange', function() {
46
+ beforeEach(function() {
47
+ document.body.innerHTML = __html__['spec/interchange/basic.html'];
48
+ });
49
+
50
+ // Disabling for now... HTML partials may be misbehaving.
51
+ xit('shows the large html content', function() {
52
+ $(document).foundation();
53
+
54
+ expect($('#default').length).toBe(0);
55
+ expect($('#medium').length).toBe(0);
56
+ expect($('#large').length).toBe(1);
57
+ });
58
+ });
59
+ }));
60
+ });
@@ -0,0 +1,14 @@
1
+ describe('joyride:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place joyride-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,14 @@
1
+ describe('magellan:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place magellan-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,14 @@
1
+ describe('offcanvas:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place offcanvas-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,14 @@
1
+ describe('orbit:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place orbit-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,14 @@
1
+ describe('reveal:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place reveal-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,14 @@
1
+ describe('tab:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place tab-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,14 @@
1
+ describe('tooltip:', function() {
2
+ beforeEach(function() {
3
+ this.addMatchers({
4
+ // Place tooltip-specific matchers here...
5
+ });
6
+
7
+ var origFunc = $.fn.foundation;
8
+ spyOn($.fn, 'foundation').andCallFake(function() {
9
+ var result = origFunc.apply(this, arguments);
10
+ jasmine.Clock.tick(1000); // Let things settle...
11
+ return result;
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,60 @@
1
+ <nav class="top-bar" data-topbar>
2
+ <ul class="title-area">
3
+ <li class="name">
4
+ <h1><a href="#">Top Bar Title</a></h1>
5
+ </li>
6
+ <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
7
+ </ul>
8
+
9
+ <section class="top-bar-section">
10
+ <ul class="left">
11
+ <li class="divider"></li>
12
+ <li class="active"><a href="#">Main Item 1</a></li>
13
+ <li class="divider"></li>
14
+ <li class="has-dropdown"><a href="#">Main Item 2</a>
15
+
16
+ <ul class="dropdown">
17
+ <li class="has-dropdown"><a href="#">Dropdown Level 1a</a>
18
+
19
+ <ul class="dropdown">
20
+ <li><label>Dropdown Level 2 Label</label></li>
21
+ <li><a href="#">Dropdown Level 2a</a></li>
22
+ <li class="has-dropdown"><a href="#">Dropdown Level 2b</a>
23
+
24
+ <ul class="dropdown">
25
+ <li><label>Dropdown Level 3 Label</label></li>
26
+ <li><a href="#">Dropdown Level 3a</a></li>
27
+ <li><a href="#">Dropdown Level 3b</a></li>
28
+ <li class="divider"></li>
29
+ <li><a href="#">Dropdown Level 3c</a></li>
30
+ </ul>
31
+ </li>
32
+ <li><a href="#">Dropdown Level 2c</a></li>
33
+ </ul>
34
+ </li>
35
+ <li><a href="#">Dropdown Level 1b</a></li>
36
+ <li><a href="#">Dropdown Level 1c</a></li>
37
+ </ul>
38
+ </li>
39
+ <li class="divider"></li>
40
+ </ul>
41
+
42
+ <!-- Right Nav Section -->
43
+ <ul class="right">
44
+ <li class="divider hide-for-small"></li>
45
+ <li class="has-dropdown"><a href="#">Main Item 3</a>
46
+
47
+ <ul class="dropdown">
48
+ <li><label>Dropdown Level 1 Label</label></li>
49
+ <li class="has-dropdown"><a href="#" class="">Dropdown Level 1a</a>
50
+
51
+ <ul class="dropdown">
52
+ <li><a href="#">Dropdown Level 2a</a></li>
53
+ <li><a href="#">Dropdown Level 2b</a></li>
54
+ </ul>
55
+ </li>
56
+ </ul>
57
+ </li>
58
+ </ul>
59
+ </section>
60
+ </nav>