simple-page-compoents 0.0.1 → 0.0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 511a8915f04c49db9f1b60b494c5a1cc4a8bfc55
4
- data.tar.gz: 36068bb4d7860503d4c8436c3f12ba77a6c2fa99
3
+ metadata.gz: d5bf31f04aaf66c27168b79187a78b67a88ba35c
4
+ data.tar.gz: 1e9145991d9dedc42f924881ecc8d9374bfa59c1
5
5
  SHA512:
6
- metadata.gz: 9dea5bfbebc1290b24527194154a7767a7e240e8a50aaf7c8cb8353d7773fbf4db0bc78b23ebd0da17398166c8f8b7b7c1b53da869ec3ed8245a10ae2116f255
7
- data.tar.gz: 2b8868801cd9128397a5ac2be5f6ffb14575f57ed76f31f8bcb562735e9a31d06c597b755982b82a8c44d5436b257546c14e56a8b20b58910b24ee75e964beed
6
+ metadata.gz: 016c1c3c4b51d95f22473dd1c472b02fb8a1af6b4de9ce63e2d2b4cb124b2e895514a37ef9ab1ce229cf0c8b4ab35c9c380b0f5f11f2efe6681b94701c0850bc
7
+ data.tar.gz: f97e3a70c6fa86c66c2614f29b552cabc61e0acb4e82e4c83914d081b2ac921b842a7c4fbdfc9c2d5e9ceba6961145a8451d5c4c1a9131aad14581361af10542
@@ -0,0 +1,59 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module SimplePageCompoents
3
+ module ButtonGroup
4
+ class Button
5
+ attr_reader :text, :url, :button_group
6
+
7
+ def initialize(button_group, text, url, *args)
8
+ @view = button_group.view
9
+ @button_group = button_group
10
+ @text = text
11
+ @url = url
12
+
13
+ @primary = args.include? :primary
14
+ @info = args.include? :info
15
+ @success = args.include? :success
16
+ @warning = args.include? :warning
17
+ @danger = args.include? :danger
18
+ @inverse = args.include? :inverse
19
+ end
20
+
21
+ def css_class
22
+ c = ['btn']
23
+ c << 'primary' if @primary
24
+ c << 'info' if @info
25
+ c << 'success' if @success
26
+ c << 'warning' if @warning
27
+ c << 'danger' if @danger
28
+ c << 'inverse' if @inverse
29
+ c.join ' '
30
+ end
31
+
32
+ def render
33
+ @view.haml_tag 'a', text, :class => css_class, :href => url
34
+ end
35
+ end
36
+
37
+ class Render
38
+ attr_reader :view, :buttons
39
+
40
+ def initialize(view, *args)
41
+ @view = view
42
+ @buttons = []
43
+ end
44
+
45
+ def add(text, url, *args)
46
+ button = Button.new(self, text, url, *args)
47
+ @buttons << button
48
+ end
49
+
50
+ def render
51
+ @view.haml_tag 'div.btn-group' do
52
+ @buttons.each do |button|
53
+ button.render
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
data/lib/data_table.rb ADDED
@@ -0,0 +1,130 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module SimplePageCompoents
3
+ module DataTable
4
+ class TableColumn
5
+ attr_reader :name
6
+ attr_accessor :table
7
+
8
+ def initialize(name, &block)
9
+ @name = name
10
+ @block = block
11
+ end
12
+
13
+ def table=(table)
14
+ @table = table
15
+ @view = table.view
16
+ end
17
+
18
+ def name_string
19
+ I18n.t "compoents.data_table.#{@table.name}.#{@name}"
20
+ end
21
+
22
+ def value_of(item)
23
+ value = @block.nil? ? item.send(@name) : @view.capture {@block.call(item)}
24
+ value.to_s
25
+ # 如果返回 symbol,将会不能显示
26
+ # bugfix: Issue #1
27
+ end
28
+ end
29
+
30
+ class Render
31
+ attr_reader :view, :items, :columns, :name
32
+
33
+ def initialize(view, name, items = [], *args)
34
+ @view = view
35
+ @items = items
36
+ @name = name
37
+
38
+ @columns = []
39
+ @line_datas = []
40
+
41
+ # change color on mouse hover
42
+ @table_hover = args.include? :hover
43
+
44
+ # table lines with striped color
45
+ @striped = args.include? :striped
46
+
47
+ # table with cell border
48
+ @bordered = args.include? :bordered
49
+ end
50
+
51
+ def css_class
52
+ c = [
53
+ "page-data-table", @name
54
+ ]
55
+ c << 'table-hover' if @table_hover
56
+ c << 'striped' if @striped
57
+ c << 'bordered' if @bordered
58
+ c.join(' ')
59
+ end
60
+
61
+ def render
62
+ @view.haml_tag :table, :class => css_class do
63
+ _render_thead
64
+ _render_tbody
65
+ end
66
+ end
67
+
68
+ def add_column(name, &block)
69
+ column = TableColumn.new(name.to_s, &block)
70
+ column.table = self
71
+ @columns << column
72
+ self
73
+ end
74
+
75
+ def add_line_data(name, &block)
76
+ @line_datas << name
77
+ self
78
+ end
79
+
80
+ private
81
+ def _render_thead
82
+ @view.haml_tag :thead do
83
+ @view.haml_tag :tr do
84
+ _render_ths
85
+ end
86
+ end
87
+ end
88
+
89
+ def _render_ths
90
+ @columns.each do |column|
91
+ text = column.name_string
92
+ th_css_class = column.name
93
+ @view.haml_tag :th, text, :class => th_css_class
94
+ end
95
+ end
96
+
97
+ def _render_tbody
98
+ @view.haml_tag :tbody do
99
+ @items.each do |item|
100
+ _render_line(item)
101
+ end
102
+ end
103
+ end
104
+
105
+ def _render_line(item)
106
+ tr_css_class = item.class.to_s.tableize.singularize
107
+ data = _render_line_data(item)
108
+ @view.haml_tag :tr, :data => data, :class => tr_css_class do
109
+ _render_tds(item)
110
+ end
111
+ end
112
+
113
+ def _render_line_data(item)
114
+ re = Hash.new ''
115
+ @line_datas.each { |data|
116
+ re[data] = item.send(data)
117
+ }
118
+ re
119
+ end
120
+
121
+ def _render_tds(item)
122
+ @columns.each do |column|
123
+ text = column.value_of item
124
+ td_css_class = column.name
125
+ @view.haml_tag :td, text, :class => td_css_class
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
data/lib/navbar.rb ADDED
@@ -0,0 +1,169 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module SimplePageCompoents
3
+ module CanRenderNavUl
4
+ private
5
+ def _render_ul
6
+ @view.haml_tag :ul, :class => 'nav' do
7
+ @items.each { |item| item.render }
8
+ end if @items.present?
9
+ end
10
+ end
11
+
12
+ class NavItem
13
+ include CanRenderNavUl
14
+
15
+ attr_accessor :text, :url
16
+ attr_accessor :parent, :view
17
+ attr_accessor :items
18
+
19
+ def initialize(text, url, options = {})
20
+ @option_class = options[:class] || ''
21
+
22
+ @parent = nil
23
+ @view = nil
24
+
25
+ @text = text
26
+ @url = url
27
+
28
+ @items = []
29
+ end
30
+
31
+ def is_active?
32
+ @view.request.path == @url
33
+ rescue
34
+ false
35
+ end
36
+
37
+ def css_class
38
+ c = [@option_class]
39
+ c << 'active' if is_active?
40
+
41
+ re = c.join(' ')
42
+
43
+ re.blank? ? nil : re
44
+ end
45
+
46
+ def render
47
+ @view.haml_tag :li, :class => self.css_class do
48
+ _render_a
49
+ _render_ul
50
+ end
51
+ end
52
+
53
+ def add_item(text, url, options = {}, &block)
54
+ item = NavItem.new(text, url)
55
+ add_item_obj item
56
+ yield item if block_given?
57
+ self
58
+ end
59
+
60
+ # 此方法为预留钩子,一般不用
61
+ def add_item_obj(item)
62
+ item.parent = self
63
+ item.view = @view
64
+ @items << item
65
+ self
66
+ end
67
+
68
+ def with_icon?
69
+ @parent.with_icon?
70
+ end
71
+
72
+ private
73
+ def _render_a
74
+ if self.with_icon?
75
+ @view.haml_tag :a, :href => @url do
76
+ @view.haml_tag :i, '', :class => 'icon'
77
+ @view.haml_concat @text
78
+ end
79
+ return
80
+ end
81
+ @view.haml_tag :a, @text,:href => @url
82
+ end
83
+ end
84
+
85
+ class NavbarRender
86
+ include CanRenderNavUl
87
+
88
+ attr_accessor :view, :items
89
+
90
+ def initialize(view, *args)
91
+ @view = view
92
+ @items = []
93
+ @prepends = []
94
+
95
+ @fixed_top = args.include? :fixed_top
96
+ @fixed_bottom = args.include? :fixed_bottom
97
+ @color_inverse = args.include? :color_inverse
98
+
99
+ @as_list = args.include? :as_list
100
+
101
+ @with_icon = args.include? :with_icon
102
+ end
103
+
104
+ def css_class
105
+ if @as_list
106
+ return 'page-navlist'
107
+ end
108
+
109
+ c = ['page-navbar']
110
+ c << 'fixed-top' if @fixed_top
111
+ c << 'fixed-bottom' if @fixed_buttom
112
+ c << 'color-inverse' if @color_inverse
113
+
114
+ c.join(' ')
115
+ end
116
+
117
+ def inner_css_class
118
+ if @as_list
119
+ return 'navlist-inner'
120
+ end
121
+
122
+ 'navbar-inner'
123
+ end
124
+
125
+ def add_item(text, url, options = {}, &block)
126
+ item = NavItem.new(text, url)
127
+ add_item_obj item
128
+ yield item if block_given?
129
+ self
130
+ end
131
+
132
+ # 此方法为预留钩子,一般不用
133
+ def add_item_obj(item)
134
+ item.parent = self
135
+ item.view = @view
136
+ @items << item
137
+ self
138
+ end
139
+
140
+ def with_icon?
141
+ @with_icon
142
+ end
143
+
144
+ def prepend(str = '', &block)
145
+ @prepends << str
146
+ self
147
+ end
148
+
149
+ def render
150
+ @view.haml_tag :div, :class => self.css_class do
151
+ @view.haml_tag :div, :class => self.inner_css_class do
152
+ _render_prepend
153
+ _render_ul
154
+ end
155
+ end
156
+ end
157
+
158
+ private
159
+ def _render_prepend
160
+ return if @prepends.blank?
161
+ @view.haml_tag :div, :class => 'navbar-prepend' do
162
+ @prepends.each do |p|
163
+ @view.haml_concat p
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
169
+
@@ -0,0 +1,41 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module SimplePageCompoents
3
+ module ProgressBar
4
+ class Render
5
+ attr_reader :view, :percent
6
+
7
+ def initialize(view, percent = 0, *args)
8
+ @view = view
9
+ @percent = percent
10
+
11
+ @striped = args.include? :striped
12
+ @active = args.include? :active
13
+
14
+ @info = args.include? :info
15
+ @success = args.include? :success
16
+ @warning = args.include? :warning
17
+ @danger = args.include? :danger
18
+ end
19
+
20
+ def css_class
21
+ c = ['page-progress']
22
+
23
+ c << 'striped' if @striped
24
+ c << 'active' if @active
25
+
26
+ c << 'info' if @info
27
+ c << 'success' if @success
28
+ c << 'warning' if @warning
29
+ c << 'danger' if @danger
30
+
31
+ c.join(' ')
32
+ end
33
+
34
+ def render
35
+ @view.haml_tag :div, :class => css_class do
36
+ @view.haml_tag :div, '', :class => :bar, :style => "width:#{@percent}%;"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,65 +1,32 @@
1
- module SimplePageCompoents
2
- class NavbarRender
3
- class NavItem
4
- attr_accessor :text, :url
5
- def initialize(text, url)
6
- @text = text
7
- @url = url
8
- end
9
- end
10
-
11
- def initialize(view, *args)
12
- @view = view
13
- @items = []
14
- @prepends = []
15
-
16
- @fixed_top = args.include? :fixed_top
17
- @fixed_bottom = args.include? :fixed_bottom
18
- @color_inverse = args.include? :color_inverse
19
- end
20
-
21
- def add_item(text, url)
22
- @items << NavItem.new(text, url)
23
- self
24
- end
1
+ # -*- encoding : utf-8 -*-
2
+ require 'navbar'
3
+ require 'data_table'
4
+ require 'progress_bar'
5
+ require 'button_group'
25
6
 
26
- def prepend(str)
27
- @prepends << str
7
+ module SimplePageCompoents
8
+ module Helper
9
+ def page_navbar(*args, &block)
10
+ navbar = NavbarRender.new(self, *args)
11
+ yield navbar
12
+ capture {navbar.render}
28
13
  end
29
14
 
30
- def css_class
31
- c = ['page-navbar']
32
- c << 'navbar-fixed-top' if @fixed_top
33
- c << 'navbar-fixed-bottom' if @fixed_buttom
34
- c << 'color-inverse' if @color_inverse
35
-
36
- c.join(' ')
15
+ def page_data_table(name, items, *args)
16
+ table = DataTable::Render.new(self, name, items, *args)
17
+ yield table
18
+ capture {table.render}
37
19
  end
38
20
 
39
- def render
40
- @view.haml_tag :div, :class => self.css_class do
41
- @view.haml_tag :div, :class => 'navbar-inner' do
42
- @view.haml_tag :div, :class => 'nav-prepend' do
43
- @prepends.each do |p|
44
- @view.haml_concat p
45
- end
46
- end
47
-
48
- @view.haml_tag :ul, :class => 'nav' do
49
- @items.each do |item|
50
- @view.haml_tag :li do
51
- @view.haml_tag :a, item.text,:href => item.url
52
- end
53
- end
54
- end
55
- end
56
- end
21
+ def page_progress_bar(percent = 0, *args)
22
+ pb = ProgressBar::Render.new(self, percent, *args)
23
+ capture {pb.render}
57
24
  end
58
- end
59
25
 
60
- module Helper
61
- def page_navbar(*args)
62
- NavbarRender.new(self, *args)
26
+ def page_button_group(name, *args)
27
+ button_group = ButtonGroup::Render.new(self, name, *args)
28
+ yield button_group
29
+ capture {button_group.render}
63
30
  end
64
31
  end
65
32
 
@@ -73,4 +40,5 @@ module SimplePageCompoents
73
40
  class Engine < ::Rails::Engine
74
41
  end
75
42
  end
76
- end
43
+ end
44
+
@@ -0,0 +1,152 @@
1
+ .btn{
2
+ background-color:#f5f5f5;
3
+ @include gradient(#fff, #e6e6e6);
4
+ border-color:rgba(black, 0.1) rgba(black, 0.1) #b3b3b3;
5
+ border-image:none;
6
+ @include border-radius(3px);
7
+ border-style:solid;
8
+ border-width:1px;
9
+ @include box-shadow(
10
+ (0 1px 0 rgba(white, 0.2) inset, 0 1px 2px rgba(black, 0.05))
11
+ );
12
+ color:#333;
13
+ cursor:pointer;
14
+ display:inline-block;
15
+ font-size:14px;
16
+ line-height:20px;
17
+ margin-bottom:0;
18
+ padding:4px 12px;
19
+ text-align:center;
20
+ text-shadow:0 1px 1px rgba(white, 0.75);
21
+ vertical-align:middle;
22
+ &:hover, &:focus {
23
+ background-position:0 -15px;
24
+ color:#333;
25
+ text-decoration:none;
26
+ @include transition(background-position 0.1s linear 0s);
27
+ }
28
+ &:focus {
29
+ outline:thin dotted #333;
30
+ outline-offset:-2px;
31
+ @include box-shadow((0 2px 4px rgba(black, 0.15) inset, 0 1px 2px rgba(black, 0.05)));
32
+ }
33
+ &:active, &.active {
34
+ border-image:none;
35
+ outline:0 none;
36
+ }
37
+
38
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
39
+ background-color:#e6e6e6;
40
+ }
41
+ &.disabled, &[disabled] {
42
+ background-image:none;
43
+ @include box-shadow(none);
44
+ cursor:default;
45
+ opacity:0.65;
46
+ }
47
+
48
+ &.primary {
49
+ background-color: #006DCC;
50
+ background-image: linear-gradient(to bottom, #0088CC, #0044CC);
51
+ background-repeat: repeat-x;
52
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
53
+ color: #FFFFFF;
54
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
55
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
56
+ background-color: #0044CC;
57
+ color:#fff;
58
+ }
59
+ }
60
+
61
+ &.info {
62
+ background-color: #49AFCD;
63
+ background-image: linear-gradient(to bottom, #5BC0DE, #2F96B4);
64
+ background-repeat: repeat-x;
65
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
66
+ color: #FFFFFF;
67
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
68
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
69
+ background-color: #2F96B4;
70
+ color:#fff;
71
+ }
72
+ }
73
+
74
+ &.success {
75
+ background-color: #5BB75B;
76
+ background-image: linear-gradient(to bottom, #62C462, #51A351);
77
+ background-repeat: repeat-x;
78
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
79
+ color: #FFFFFF;
80
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
81
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
82
+ background-color: #51A351;
83
+ color:#fff;
84
+ }
85
+ }
86
+
87
+ &.warning {
88
+ background-color: #FAA732;
89
+ background-image: linear-gradient(to bottom, #FBB450, #F89406);
90
+ background-repeat: repeat-x;
91
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
92
+ color: #FFFFFF;
93
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
94
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
95
+ background-color: #F89406;
96
+ color:#fff;
97
+ }
98
+ }
99
+
100
+ &.danger {
101
+ background-color: #DA4F49;
102
+ background-image: linear-gradient(to bottom, #EE5F5B, #BD362F);
103
+ background-repeat: repeat-x;
104
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
105
+ color: #FFFFFF;
106
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
107
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
108
+ background-color: #BD362F;
109
+ color:#fff;
110
+ }
111
+ }
112
+
113
+ &.inverse {
114
+ background-color: #363636;
115
+ background-image: linear-gradient(to bottom, #444444, #222222);
116
+ background-repeat: repeat-x;
117
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
118
+ color: #FFFFFF;
119
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
120
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
121
+ background-color: #222;
122
+ color:#fff;
123
+ }
124
+ }
125
+ }
126
+
127
+ .btn-group {
128
+ display:inline-block;
129
+ font-size:0;
130
+ position:relative;
131
+ vertical-align:middle;
132
+ white-space:nowrap;
133
+
134
+ > .btn {
135
+ @include border-radius(0);
136
+ font-size:14px;
137
+ position:relative;
138
+
139
+ &:first-child {
140
+ @include border-radius(4px 0 0 4px);
141
+ margin-left:0;
142
+ }
143
+
144
+ &:last-child {
145
+ @include border-radius(0 4px 4px 0);
146
+ }
147
+
148
+ & + .btn {
149
+ margin-left:-1px;
150
+ }
151
+ }
152
+ }
@@ -57,42 +57,4 @@ input[type="radio"],
57
57
  input[type="checkbox"] {
58
58
  line-height:normal;
59
59
  margin-top:4px;
60
- }
61
-
62
- .btn{
63
- background-color:#f5f5f5;
64
- @include gradient(#fff, #e6e6e6);
65
- border-color:rgba(black, 0.1) rgba(black, 0.1) #b3b3b3;
66
- border-image:none;
67
- @include border-radius(3px);
68
- border-style:solid;
69
- border-width:1px;
70
- @include box-shadow(
71
- (0 1px 0 rgba(white, 0.2) inset, 0 1px 2px rgba(black, 0.05))
72
- );
73
- color:#333;
74
- cursor:pointer;
75
- display:inline-block;
76
- font-size:14px;
77
- line-height:20px;
78
- margin-bottom:0;
79
- padding:4px 12px;
80
- text-align:center;
81
- text-shadow:0 1px 1px rgba(white, 0.75);
82
- vertical-align:middle;
83
- &:hover, &:focus{
84
- background-position:0 -15px;
85
- color:#333;
86
- text-decoration:none;
87
- @include transition(background-position 0.1s linear 0s);
88
- }
89
- &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
90
- background-color:#e6e6e6;
91
- }
92
- &.disabled, &[disabled] {
93
- background-image:none;
94
- @include box-shadow(none);
95
- cursor:default;
96
- opacity:0.65;
97
- }
98
- }
60
+ }