twitter_bootstrap_markup 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +4 -0
  3. data/README.md +29 -0
  4. data/Rakefile +1 -0
  5. data/lib/twitter_bootstrap_markup.rb +45 -0
  6. data/lib/twitter_bootstrap_markup/add_on.rb +9 -0
  7. data/lib/twitter_bootstrap_markup/alert.rb +35 -0
  8. data/lib/twitter_bootstrap_markup/badge.rb +4 -0
  9. data/lib/twitter_bootstrap_markup/brand.rb +9 -0
  10. data/lib/twitter_bootstrap_markup/breadcrumb.rb +21 -0
  11. data/lib/twitter_bootstrap_markup/button.rb +16 -0
  12. data/lib/twitter_bootstrap_markup/button_base.rb +41 -0
  13. data/lib/twitter_bootstrap_markup/control_group.rb +26 -0
  14. data/lib/twitter_bootstrap_markup/divider.rb +30 -0
  15. data/lib/twitter_bootstrap_markup/dropdown_button.rb +59 -0
  16. data/lib/twitter_bootstrap_markup/extended_input.rb +11 -0
  17. data/lib/twitter_bootstrap_markup/extension/hash.rb +11 -0
  18. data/lib/twitter_bootstrap_markup/fieldset.rb +18 -0
  19. data/lib/twitter_bootstrap_markup/form.rb +27 -0
  20. data/lib/twitter_bootstrap_markup/grid_column.rb +14 -0
  21. data/lib/twitter_bootstrap_markup/grid_row.rb +9 -0
  22. data/lib/twitter_bootstrap_markup/help.rb +24 -0
  23. data/lib/twitter_bootstrap_markup/icon.rb +18 -0
  24. data/lib/twitter_bootstrap_markup/input.rb +31 -0
  25. data/lib/twitter_bootstrap_markup/label.rb +4 -0
  26. data/lib/twitter_bootstrap_markup/label_base.rb +29 -0
  27. data/lib/twitter_bootstrap_markup/link.rb +17 -0
  28. data/lib/twitter_bootstrap_markup/link_button.rb +17 -0
  29. data/lib/twitter_bootstrap_markup/nav_bar.rb +32 -0
  30. data/lib/twitter_bootstrap_markup/nav_container.rb +10 -0
  31. data/lib/twitter_bootstrap_markup/nav_header.rb +9 -0
  32. data/lib/twitter_bootstrap_markup/nav_list.rb +11 -0
  33. data/lib/twitter_bootstrap_markup/nav_list_container.rb +10 -0
  34. data/lib/twitter_bootstrap_markup/nav_tab.rb +10 -0
  35. data/lib/twitter_bootstrap_markup/nav_tab_container.rb +13 -0
  36. data/lib/twitter_bootstrap_markup/page_header.rb +17 -0
  37. data/lib/twitter_bootstrap_markup/pagination.rb +29 -0
  38. data/lib/twitter_bootstrap_markup/popover.rb +20 -0
  39. data/lib/twitter_bootstrap_markup/progress_bar.rb +43 -0
  40. data/lib/twitter_bootstrap_markup/select.rb +67 -0
  41. data/lib/twitter_bootstrap_markup/side_position.rb +15 -0
  42. data/lib/twitter_bootstrap_markup/submit.rb +10 -0
  43. data/lib/twitter_bootstrap_markup/tab.rb +14 -0
  44. data/lib/twitter_bootstrap_markup/tab_content.rb +29 -0
  45. data/lib/twitter_bootstrap_markup/table.rb +28 -0
  46. data/lib/twitter_bootstrap_markup/tag.rb +51 -0
  47. data/lib/twitter_bootstrap_markup/tooltip.rb +19 -0
  48. data/lib/twitter_bootstrap_markup/ul_container.rb +21 -0
  49. data/lib/twitter_bootstrap_markup/version.rb +3 -0
  50. data/lib/twitter_bootstrap_markup/well.rb +27 -0
  51. data/markup/alerts.html +75 -0
  52. data/markup/badges.html +65 -0
  53. data/markup/breadcrumbs.html +59 -0
  54. data/markup/buttons.html +95 -0
  55. data/markup/control_groups.html +77 -0
  56. data/markup/css/bootstrap-responsive.css +815 -0
  57. data/markup/css/bootstrap-responsive.min.css +9 -0
  58. data/markup/css/bootstrap.css +4983 -0
  59. data/markup/css/bootstrap.min.css +9 -0
  60. data/markup/dropdown_buttons.html +248 -0
  61. data/markup/form_fields.html +88 -0
  62. data/markup/forms.html +81 -0
  63. data/markup/grid_system.html +87 -0
  64. data/markup/img/glyphicons-halflings-white.png +0 -0
  65. data/markup/img/glyphicons-halflings.png +0 -0
  66. data/markup/index.html +37 -0
  67. data/markup/js/bootstrap.js +1825 -0
  68. data/markup/js/bootstrap.min.js +6 -0
  69. data/markup/js/jquery-1.7.2.js +9402 -0
  70. data/markup/labels.html +65 -0
  71. data/markup/link_buttons.html +95 -0
  72. data/markup/nav_bars.html +104 -0
  73. data/markup/nav_lists.html +54 -0
  74. data/markup/paginations.html +68 -0
  75. data/markup/popovers.html +56 -0
  76. data/markup/progress_bars.html +93 -0
  77. data/markup/selects.html +124 -0
  78. data/markup/tabs.html +46 -0
  79. data/markup/textboxes.html +95 -0
  80. data/markup/tooltips.html +56 -0
  81. data/spec/add_on_spec.rb +10 -0
  82. data/spec/alert_spec.rb +77 -0
  83. data/spec/badge_spec.rb +29 -0
  84. data/spec/brand_spec.rb +10 -0
  85. data/spec/breadcrumb_spec.rb +32 -0
  86. data/spec/button_spec.rb +52 -0
  87. data/spec/control_group_spec.rb +29 -0
  88. data/spec/divider_spec.rb +17 -0
  89. data/spec/dropdown_button_spec.rb +101 -0
  90. data/spec/fieldset_spec.rb +22 -0
  91. data/spec/form_fields_spec.rb +71 -0
  92. data/spec/form_spec.rb +35 -0
  93. data/spec/grid_system_spec.rb +69 -0
  94. data/spec/help_spec.rb +13 -0
  95. data/spec/icon_spec.rb +18 -0
  96. data/spec/input_spec.rb +11 -0
  97. data/spec/label_spec.rb +29 -0
  98. data/spec/link_button_spec.rb +52 -0
  99. data/spec/link_spec.rb +29 -0
  100. data/spec/nav_bar_spec.rb +27 -0
  101. data/spec/nav_list_spec.rb +27 -0
  102. data/spec/page_header_spec.rb +13 -0
  103. data/spec/pagination_spec.rb +18 -0
  104. data/spec/popover_spec.rb +15 -0
  105. data/spec/progress_bar_spec.rb +53 -0
  106. data/spec/select_spec.rb +61 -0
  107. data/spec/spec_helper.rb +12 -0
  108. data/spec/support/helpers/html_helper.rb +11 -0
  109. data/spec/table_spec.rb +29 -0
  110. data/spec/tabs_spec.rb +22 -0
  111. data/spec/tag_spec.rb +40 -0
  112. data/spec/textbox_spec.rb +60 -0
  113. data/spec/tooltip_spec.rb +15 -0
  114. data/spec/well_spec.rb +17 -0
  115. data/twitter_bootstrap_markup.gemspec +23 -0
  116. metadata +182 -0
@@ -0,0 +1,93 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Twitter Bootstrap Markup</title>
5
+ <!--[if lt IE 9]>
6
+ <script src='http://html5shim.googlecode/svn/trunk/html5.js' type='text/javascript'></script>
7
+ <![endif]-->
8
+ <link href="css/bootstrap.css" media="screen" rel="stylesheet" type="text/css"/>
9
+ <meta content='width=device-width, initial-scale=1.0' name='viewport'>
10
+ </head>
11
+ <body>
12
+ <div class="container">
13
+ <h2>Progress bars</h2>
14
+ <table class="table table-bordered table-striped">
15
+ <thead>
16
+ <tr>
17
+ <th class="span2">Name</th>
18
+ <th>Component</th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <tr>
23
+ <td>Default</td>
24
+ <td id="default">
25
+ <div class="progress">
26
+ <div class="bar" style="width: 30%;"></div>
27
+ </div>
28
+ </td>
29
+ </tr>
30
+ <tr>
31
+ <td>Info</td>
32
+ <td id="info">
33
+ <div class="progress progress-info">
34
+ <div class="bar" style="width: 60%;"></div>
35
+ </div>
36
+ </td>
37
+ </tr>
38
+ <tr>
39
+ <td>Success</td>
40
+ <td id="success">
41
+ <div class="progress progress-success">
42
+ <div class="bar" style="width: 60%;"></div>
43
+ </div>
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <td>Danger</td>
48
+ <td id="danger">
49
+ <div class="progress progress-danger">
50
+ <div class="bar" style="width: 60%;"></div>
51
+ </div>
52
+ </td>
53
+ </tr>
54
+ <tr>
55
+ <td>Warning</td>
56
+ <td id="warning">
57
+ <div class="progress progress-warning">
58
+ <div class="bar" style="width: 60%;"></div>
59
+ </div>
60
+ </td>
61
+ </tr>
62
+ <tr>
63
+ <td>Striped</td>
64
+ <td id="striped">
65
+ <div class="progress progress-striped">
66
+ <div class="bar" style="width: 60%;"></div>
67
+ </div>
68
+ </td>
69
+ </tr>
70
+ <tr>
71
+ <td>Animated</td>
72
+ <td id="animated">
73
+ <div class="progress progress-striped active">
74
+ <div class="bar" style="width: 60%;"></div>
75
+ </div>
76
+ </td>
77
+ </tr>
78
+ <tr>
79
+ <td>Mixed</td>
80
+ <td id="mixed">
81
+ <div class="progress progress-info progress-striped">
82
+ <div class="bar" style="width: 60%;"></div>
83
+ </div>
84
+ </td>
85
+ </tr>
86
+ </tbody>
87
+ </table>
88
+ <a href="index.html">back to index</a>
89
+ </div>
90
+ <script src="js/jquery-1.7.2.js" type="text/javascript"></script>
91
+ <script src="js/bootstrap.js" type="text/javascript"></script>
92
+ </body>
93
+ </html>
@@ -0,0 +1,124 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Twitter Bootstrap Markup</title>
5
+ <!--[if lt IE 9]>
6
+ <script src='http://html5shim.googlecode/svn/trunk/html5.js' type='text/javascript'></script>
7
+ <![endif]-->
8
+ <link href="css/bootstrap.css" media="screen" rel="stylesheet" type="text/css"/>
9
+ <meta content='width=device-width, initial-scale=1.0' name='viewport'>
10
+ </head>
11
+ <body>
12
+ <div class="container">
13
+ <h2>Selects</h2>
14
+ <table class="table table-bordered table-striped">
15
+ <thead>
16
+ <tr>
17
+ <th class="span2">Name</th>
18
+ <th>Component</th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <tr>
23
+ <td>Empty</td>
24
+ <td id="empty">
25
+ <select id="empty_select"></select>
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td>Array</td>
30
+ <td id="array">
31
+ <select id="array_select">
32
+ <option value="1">1</option>
33
+ <option value="2">2</option>
34
+ </select>
35
+ </td>
36
+ </tr>
37
+ <tr>
38
+ <td>Hash</td>
39
+ <td id="hash">
40
+ <select id="hash_select">
41
+ <option value="1">option1</option>
42
+ <option value="2">option2</option>
43
+ </select>
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <td>Group</td>
48
+ <td id="group">
49
+ <select id="group_select">
50
+ <optgroup label="group1">
51
+ <option value="1">1</option>
52
+ <option value="2">2</option>
53
+ </optgroup>
54
+ <optgroup label="group2">
55
+ <option value="A">optionA</option>
56
+ <option value="B">optionB</option>
57
+ </optgroup>
58
+ </select>
59
+ </td>
60
+ </tr>
61
+ <tr>
62
+ <td>Selected value</td>
63
+ <td id="selected">
64
+ <select id="selected_select">
65
+ <option value="1">1</option>
66
+ <option value="2" selected="">2</option>
67
+ <option value="3">3</option>
68
+ </select>
69
+ </td>
70
+ </tr>
71
+ <tr>
72
+ <td>Prompt</td>
73
+ <td id="prompt">
74
+ <select id="prompt_select">
75
+ <option value="">[Select option]</option>
76
+ <option value="1">1</option>
77
+ <option value="2">2</option>
78
+ </select>
79
+ </td>
80
+ </tr>
81
+ <tr>
82
+ <td>Mini</td>
83
+ <td id="mini">
84
+ <select class="input-mini"></select>
85
+ </td>
86
+ </tr>
87
+ <tr>
88
+ <td>Small</td>
89
+ <td id="small">
90
+ <select class="input-small"></select>
91
+ </td>
92
+ </tr>
93
+ <tr>
94
+ <td>Medium</td>
95
+ <td id="medium">
96
+ <select class="input-medium"></select>
97
+ </td>
98
+ </tr>
99
+ <tr>
100
+ <td>Large</td>
101
+ <td id="large">
102
+ <select class="input-large"></select>
103
+ </td>
104
+ </tr>
105
+ <tr>
106
+ <td>X Large</td>
107
+ <td id="xlarge">
108
+ <select class="input-xlarge"></select>
109
+ </td>
110
+ </tr>
111
+ <tr>
112
+ <td>XX Large</td>
113
+ <td id="xxlarge">
114
+ <select class="input-xxlarge"></select>
115
+ </td>
116
+ </tr>
117
+ </tbody>
118
+ </table>
119
+ <a href="index.html">back to index</a>
120
+ </div>
121
+ <script src="js/jquery-1.7.2.js" type="text/javascript"></script>
122
+ <script src="js/bootstrap.js" type="text/javascript"></script>
123
+ </body>
124
+ </html>
data/markup/tabs.html ADDED
@@ -0,0 +1,46 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Twitter Bootstrap Markup</title>
5
+ <!--[if lt IE 9]>
6
+ <script src='http://html5shim.googlecode/svn/trunk/html5.js' type='text/javascript'></script>
7
+ <![endif]-->
8
+ <link href="css/bootstrap.css" media="screen" rel="stylesheet" type="text/css"/>
9
+ <meta content='width=device-width, initial-scale=1.0' name='viewport'>
10
+ </head>
11
+ <body>
12
+ <div class="container">
13
+ <h2>Breadcrumbs</h2>
14
+ <table class="table table-bordered">
15
+ <thead>
16
+ <tr>
17
+ <th class="span2">Name</th>
18
+ <th>Component</th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <tr>
23
+ <td>Default</td>
24
+ <td id="default">
25
+ <div class="tab">
26
+ <ul class="nav nav-tabs">
27
+ <li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li>
28
+ <li><a href="#tab2" data-toggle="tab">Tab 2</a></li>
29
+ <li><a href="#tab3" data-toggle="tab">Tab 3</a></li>
30
+ </ul>
31
+ <div class="tab-content">
32
+ <div class="tab-pane active" id="tab1"><i>Content for Tab 1</i></div>
33
+ <div class="tab-pane" id="tab2">Content for Tab 2</div>
34
+ <div class="tab-pane" id="tab3"><strong>Content for Tab 3</strong></div>
35
+ </div>
36
+ </div>
37
+ </td>
38
+ </tr>
39
+ </tbody>
40
+ </table>
41
+ <a href="index.html">back to index</a>
42
+ </div>
43
+ <script src="js/jquery-1.7.2.js" type="text/javascript"></script>
44
+ <script src="js/bootstrap.js" type="text/javascript"></script>
45
+ </body>
46
+ </html>
@@ -0,0 +1,95 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Twitter Bootstrap Markup</title>
5
+ <!--[if lt IE 9]>
6
+ <script src='http://html5shim.googlecode/svn/trunk/html5.js' type='text/javascript'></script>
7
+ <![endif]-->
8
+ <link href="css/bootstrap.css" media="screen" rel="stylesheet" type="text/css"/>
9
+ <meta content='width=device-width, initial-scale=1.0' name='viewport'>
10
+ </head>
11
+ <body>
12
+ <div class="container">
13
+ <h2>Textboxes</h2>
14
+ <table class="table table-bordered table-striped">
15
+ <thead>
16
+ <tr>
17
+ <th class="span2">Name</th>
18
+ <th>Component</th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <tr>
23
+ <td>Default</td>
24
+ <td id="default">
25
+ <input type="text">
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td>Mini</td>
30
+ <td id="mini">
31
+ <input type="text" class="input-mini">
32
+ </td>
33
+ </tr>
34
+ <tr>
35
+ <td>Small</td>
36
+ <td id="small">
37
+ <input type="text" class="input-small">
38
+ </td>
39
+ </tr>
40
+ <tr>
41
+ <td>Medium</td>
42
+ <td id="medium">
43
+ <input type="text" class="input-medium">
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <td>Large</td>
48
+ <td id="large">
49
+ <input type="text" class="input-large">
50
+ </td>
51
+ </tr>
52
+ <tr>
53
+ <td>X Large</td>
54
+ <td id="xlarge">
55
+ <input type="text" class="input-xlarge">
56
+ </td>
57
+ </tr>
58
+ <tr>
59
+ <td>XX Large</td>
60
+ <td id="xxlarge">
61
+ <input type="text" class="input-xxlarge">
62
+ </td>
63
+ </tr>
64
+ <tr>
65
+ <td>Prepend</td>
66
+ <td id="prepend">
67
+ <div class="input-prepend">
68
+ <span class="add-on">$</span><input type="text">
69
+ </div>
70
+ </td>
71
+ </tr>
72
+ <tr>
73
+ <td>Append</td>
74
+ <td id="append">
75
+ <div class="input-append">
76
+ <input type="text"><button class="btn">Save</button>
77
+ </div>
78
+ </td>
79
+ </tr>
80
+ <tr>
81
+ <td>Prepend and append</td>
82
+ <td id="prepend_append">
83
+ <div class="input-prepend input-append">
84
+ <span class="add-on">$</span><input type="text"><button class="btn">Save</button>
85
+ </div>
86
+ </td>
87
+ </tr>
88
+ </tbody>
89
+ </table>
90
+ <a href="index.html">back to index</a>
91
+ </div>
92
+ <script src="js/jquery-1.7.2.js" type="text/javascript"></script>
93
+ <script src="js/bootstrap.js" type="text/javascript"></script>
94
+ </body>
95
+ </html>
@@ -0,0 +1,56 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Twitter Bootstrap Markup</title>
5
+ <!--[if lt IE 9]>
6
+ <script src='http://html5shim.googlecode/svn/trunk/html5.js' type='text/javascript'></script>
7
+ <![endif]-->
8
+ <link href="css/bootstrap.css" media="screen" rel="stylesheet" type="text/css"/>
9
+ <meta content='width=device-width, initial-scale=1.0' name='viewport'>
10
+ </head>
11
+ <body>
12
+ <div class="container">
13
+ <h2>Tooltips</h2>
14
+ <table class="table table-bordered table-striped">
15
+ <thead>
16
+ <tr>
17
+ <th class="span2">Name</th>
18
+ <th>Component</th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <tr>
23
+ <td>Default</td>
24
+ <td id="default">
25
+ <p>Text with <a href="#" rel="tooltip" data-original-title="Simple tooltip" data-placement="top">simple</a> tooltip</p>
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td>Bottom</td>
30
+ <td id="bottom">
31
+ <p>Text with <a href="#" rel="tooltip" data-original-title="Simple tooltip" data-placement="bottom">simple</a> tooltip</p>
32
+ </td>
33
+ </tr>
34
+ <tr>
35
+ <td>Left</td>
36
+ <td id="left">
37
+ <p>Text with <a href="#" rel="tooltip" data-original-title="Simple tooltip" data-placement="left">simple</a> tooltip</p>
38
+ </td>
39
+ </tr>
40
+ <tr>
41
+ <td>Right</td>
42
+ <td id="right">
43
+ <p>Text with <a href="#" rel="tooltip" data-original-title="Simple tooltip" data-placement="right">simple</a> tooltip</p>
44
+ </td>
45
+ </tr>
46
+ </tbody>
47
+ </table>
48
+ <a href="index.html">back to index</a>
49
+ </div>
50
+ <script src="js/jquery-1.7.2.js" type="text/javascript"></script>
51
+ <script src="js/bootstrap.js" type="text/javascript"></script>
52
+ <script>
53
+ $("[rel=tooltip]").tooltip();
54
+ </script>
55
+ </body>
56
+ </html>
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe AddOn do
4
+
5
+ it 'text' do
6
+ AddOn.new('$').to_s.should eq '<span class="add-on">$</span>'
7
+ AddOn.new('.00').to_s.should eq '<span class="add-on">.00</span>'
8
+ end
9
+
10
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ describe Alert do
4
+
5
+ context 'Types' do
6
+
7
+ Alert::TYPES.each do |type|
8
+ it type do
9
+ tag = Alert.new do
10
+ append Tag.block(:strong) { append 'Alert!' }
11
+ append 'Message'
12
+ end
13
+
14
+ tag.send(type).to_s.should eq HtmlHelper.html_for('alerts', "##{type} div")
15
+ end
16
+ end
17
+
18
+ it 'closable' do
19
+ tag = Alert.new do
20
+ append Tag.block(:strong) { append 'Alert!' }
21
+ append 'Message'
22
+ end
23
+
24
+ tag.closable.to_s.should eq HtmlHelper.html_for('alerts', "#closable div")
25
+ end
26
+
27
+ end
28
+
29
+ context 'Constructors' do
30
+
31
+ Alert::TYPES.each do |type|
32
+ it type do
33
+ tag1 = Alert.send(type) do
34
+ append Tag.block(:strong) { append 'Alert!' }
35
+ append 'Message'
36
+ end
37
+
38
+ tag2 = Alert.new do
39
+ append Tag.block(:strong) { append 'Alert!' }
40
+ append 'Message'
41
+ end
42
+
43
+ tag1.to_s.should eq tag2.send(type).to_s
44
+ end
45
+
46
+ it "#{type}_closable" do
47
+ tag1 = Alert.send("#{type}_closable") do
48
+ append Tag.block(:strong) { append 'Alert!' }
49
+ append 'Message'
50
+ end
51
+
52
+ tag2 = Alert.new do
53
+ append Tag.block(:strong) { append 'Alert!' }
54
+ append 'Message'
55
+ end
56
+
57
+ tag1.to_s.should eq tag2.send(type).closable.to_s
58
+ end
59
+ end
60
+
61
+ it 'closable' do
62
+ tag1 = Alert.closable do
63
+ append Tag.block(:strong) { append 'Alert!' }
64
+ append 'Message'
65
+ end
66
+
67
+ tag2 = Alert.new do
68
+ append Tag.block(:strong) { append 'Alert!' }
69
+ append 'Message'
70
+ end
71
+
72
+ tag1.to_s.should eq tag2.closable.to_s
73
+ end
74
+
75
+ end
76
+
77
+ end