loyal_admin 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +39 -0
  4. data/app/assets/javascripts/loyal_admin/application.js +5 -0
  5. data/app/assets/javascripts/loyal_admin/display/boards.js +2 -0
  6. data/app/assets/javascripts/loyal_admin/display/recipes.js +2 -0
  7. data/app/assets/stylesheets/loyal_admin/application.css.scss +312 -0
  8. data/app/assets/stylesheets/loyal_admin/display/boards.css +4 -0
  9. data/app/assets/stylesheets/loyal_admin/display/recipes.css +4 -0
  10. data/app/controllers/loyal_admin/application_controller.rb +9 -0
  11. data/app/controllers/loyal_admin/display/boards_controller.rb +49 -0
  12. data/app/controllers/loyal_admin/display/recipes_controller.rb +49 -0
  13. data/app/controllers/loyal_admin/welcome_controller.rb +9 -0
  14. data/app/helpers/loyal_admin/application_helper.rb +5 -0
  15. data/app/helpers/loyal_admin/display/boards_helper.rb +5 -0
  16. data/app/helpers/loyal_admin/display/recipes_helper.rb +5 -0
  17. data/app/models/loyal_admin/display/board.rb +30 -0
  18. data/app/models/loyal_admin/display/item.rb +16 -0
  19. data/app/models/loyal_admin/display/recipe.rb +35 -0
  20. data/app/views/layouts/loyal_admin/application.html.erb +75 -0
  21. data/app/views/loyal_admin/display/boards/_form.html.erb +11 -0
  22. data/app/views/loyal_admin/display/boards/_links.html.erb +3 -0
  23. data/app/views/loyal_admin/display/boards/edit.html.erb +12 -0
  24. data/app/views/loyal_admin/display/boards/index.html.erb +23 -0
  25. data/app/views/loyal_admin/display/boards/new.html.erb +11 -0
  26. data/app/views/loyal_admin/display/boards/show.html.erb +30 -0
  27. data/app/views/loyal_admin/display/recipes/_form.html.erb +11 -0
  28. data/app/views/loyal_admin/display/recipes/edit.html.erb +12 -0
  29. data/app/views/loyal_admin/display/recipes/index.html.erb +25 -0
  30. data/app/views/loyal_admin/display/recipes/new.html.erb +11 -0
  31. data/app/views/loyal_admin/display/recipes/show.html.erb +23 -0
  32. data/app/views/loyal_admin/shared/_side_panel.html.erb +0 -0
  33. data/app/views/loyal_admin/welcome/index.html.erb +0 -0
  34. data/config/routes.rb +13 -0
  35. data/db/migrate/20130325145548_create_loyal_admin_display_items.rb +18 -0
  36. data/db/migrate/20130503053259_create_loyal_admin_display_recipes.rb +22 -0
  37. data/db/migrate/20130612063348_create_loyal_admin_display_boards.rb +43 -0
  38. data/lib/loyal_admin/config.rb +71 -0
  39. data/lib/loyal_admin/controllers/controller_extends.rb +28 -0
  40. data/lib/loyal_admin/engine.rb +11 -0
  41. data/lib/loyal_admin/version.rb +4 -0
  42. data/lib/loyal_admin.rb +9 -0
  43. data/lib/tasks/loyal_admin_tasks.rake +4 -0
  44. data/spec/controllers/loyal_admin/display/boards_controller_spec.rb +8 -0
  45. data/spec/controllers/loyal_admin/display/recipes_controller_spec.rb +8 -0
  46. data/spec/dummy/README.rdoc +28 -0
  47. data/spec/dummy/Rakefile +6 -0
  48. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  49. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  50. data/spec/dummy/app/controllers/application_controller.rb +6 -0
  51. data/spec/dummy/app/helpers/application_helper.rb +3 -0
  52. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  53. data/spec/dummy/bin/bundle +3 -0
  54. data/spec/dummy/bin/rails +4 -0
  55. data/spec/dummy/bin/rake +4 -0
  56. data/spec/dummy/config/application.rb +24 -0
  57. data/spec/dummy/config/boot.rb +6 -0
  58. data/spec/dummy/config/database.yml +25 -0
  59. data/spec/dummy/config/environment.rb +6 -0
  60. data/spec/dummy/config/environments/development.rb +30 -0
  61. data/spec/dummy/config/environments/production.rb +81 -0
  62. data/spec/dummy/config/environments/test.rb +37 -0
  63. data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
  64. data/spec/dummy/config/initializers/filter_parameter_logging.rb +5 -0
  65. data/spec/dummy/config/initializers/inflections.rb +17 -0
  66. data/spec/dummy/config/initializers/mime_types.rb +6 -0
  67. data/spec/dummy/config/initializers/secret_token.rb +13 -0
  68. data/spec/dummy/config/initializers/session_store.rb +4 -0
  69. data/spec/dummy/config/initializers/wrap_parameters.rb +15 -0
  70. data/spec/dummy/config/locales/en.yml +23 -0
  71. data/spec/dummy/config/routes.rb +57 -0
  72. data/spec/dummy/config.ru +4 -0
  73. data/spec/dummy/public/404.html +58 -0
  74. data/spec/dummy/public/422.html +58 -0
  75. data/spec/dummy/public/500.html +57 -0
  76. data/spec/dummy/public/favicon.ico +0 -0
  77. data/spec/helpers/loyal_admin/display/boards_helper_spec.rb +18 -0
  78. data/spec/helpers/loyal_admin/display/recipes_helper_spec.rb +18 -0
  79. data/spec/models/loyal_admin/display/board_spec.rb +8 -0
  80. data/spec/models/loyal_admin/display/item_spec.rb +8 -0
  81. data/spec/models/loyal_admin/display/recipe_spec.rb +8 -0
  82. data/spec/spec_helper.rb +39 -0
  83. metadata +214 -0
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = LoyalAdmin
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'LoyalAdmin'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+ Bundler::GemHelper.install_tasks
28
+
29
+ require 'rake/testtask'
30
+
31
+ Rake::TestTask.new(:test) do |t|
32
+ t.libs << 'lib'
33
+ t.libs << 'test'
34
+ t.pattern = 'test/**/*_test.rb'
35
+ t.verbose = false
36
+ end
37
+
38
+
39
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require jquery.ui.all
4
+ //= require kindeditor
5
+ //= require_self
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,312 @@
1
+ /*
2
+ *= require kindeditor
3
+ *= require jquery.ui.all
4
+ *= require_self
5
+ */
6
+
7
+ $page-default-width: 1024px;
8
+ $page-nav-background-color: #000089;
9
+ $page-sub-nav-background-color: #EFEFEF;
10
+ $page-body-background-color: #eee;
11
+
12
+ body, div {
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+
17
+ dl, dt, dd, ul, ol, li, pre, form, fieldset, input, textarea, p, blockquote, th, td {
18
+ margin: 5px;
19
+ padding: 5px;
20
+ }
21
+
22
+ table {
23
+ border-collapse: collapse;
24
+ border-spacing: 0;
25
+ }
26
+ fieldset, img {
27
+ border: 0 none;
28
+ }
29
+ address, caption, cite, code, dfn, em, strong, th, var {
30
+ font-style: normal;
31
+ font-weight: normal;
32
+ }
33
+ ol, ul {
34
+ list-style: none outside none;
35
+ }
36
+ caption, th {
37
+ text-align: left;
38
+ }
39
+
40
+ /*
41
+ h1, h2, h3, h4, h5, h6 {
42
+ font-size: 100%;
43
+ font-weight: normal;
44
+ }
45
+ */
46
+ abbr, acronym {
47
+ border: 0 none;
48
+ }
49
+ textarea, input {
50
+ resize: none;
51
+ }
52
+ button {
53
+ border: 0 none;
54
+ margin: 0;
55
+ outline: medium none;
56
+ overflow: visible;
57
+ padding: 0;
58
+ width: auto;
59
+ }
60
+ body {
61
+ background-color: $page-body-background-color;
62
+ color: #503E2C;
63
+ font-family: Arial,Tahoma,'hiragino sans gb',Helvetica;
64
+ font-size: 14px;
65
+ }
66
+
67
+ a {
68
+ color: #9B8878;
69
+ text-decoration: none;
70
+ }
71
+ a:hover {
72
+ color: red !important;
73
+ background-color: yellow;
74
+ }
75
+ .clearfix:after {
76
+ clear: both;
77
+ content: ".";
78
+ display: block;
79
+ height: 0;
80
+ visibility: hidden;
81
+ }
82
+ .clearfix {
83
+ display: inline-block;
84
+ }
85
+ .clearfix {
86
+ display: block;
87
+ }
88
+
89
+ textarea, input[type="text"], input[type="email"], input[type="password"] {
90
+ border: 1px solid #DACEB7;
91
+ border-radius: 4px 4px 4px 4px;
92
+ box-shadow: 0 2px 1px rgba(0, 0, 0, 0.05) inset, 0 1px 0 #FFFFFF;
93
+ line-height: 100%;
94
+ }
95
+ textarea:focus, input[type="text"]:focus, input[type="email"]:focus, input[type="password"]:focus {
96
+ border: 1px solid #996633;
97
+ box-shadow: 0 0 4px rgba(153, 102, 51, 0.6);
98
+ outline: medium none;
99
+ }
100
+
101
+ .text-right {
102
+ text-align: right;
103
+ }
104
+
105
+ .wrapper {
106
+ margin: 0 auto;
107
+ width: $page-default-width;
108
+ }
109
+
110
+ #menu {
111
+ font-size: 18px;
112
+ padding: 5px;
113
+ margin: 5px auto;
114
+ background-color: #afa;
115
+ }
116
+
117
+ #nav {
118
+ background: $page-nav-background-color;
119
+
120
+ .nav-inner {
121
+ margin: 0 auto;
122
+ padding: 0;
123
+
124
+ color: #FFFFFF;
125
+
126
+ a {
127
+ color: #FFFFFF;
128
+ line-height: 40px;
129
+ margin: auto 6px;
130
+ text-align: center;
131
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
132
+ }
133
+
134
+ ul.nav-links {
135
+ list-style: none outside none;
136
+ margin: 0;
137
+ padding: 0;
138
+
139
+ li {
140
+ float: left;
141
+ list-style: none outside none;
142
+ margin: 0;
143
+ padding: 0;
144
+ }
145
+ }
146
+ .status {
147
+ float: right;
148
+ }
149
+ }
150
+ }
151
+
152
+ #footer {
153
+ .footer-inner {
154
+ text-align: center;
155
+
156
+ a {
157
+ color: #888;
158
+ }
159
+ }
160
+ }
161
+
162
+ #container {
163
+ padding: 10px 0;
164
+
165
+ .content-block {
166
+
167
+ .sub-nav {
168
+ background-color: $page-sub-nav-background-color;
169
+ border: 1px solid #FBEED5;
170
+ border-radius: 4px 4px 4px 4px;
171
+ margin-bottom: 18px;
172
+ padding: 8px 35px 8px 14px;
173
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
174
+ }
175
+
176
+ .main-content {
177
+
178
+ form {
179
+ padding: 10px;
180
+ background: #efefef;
181
+ }
182
+
183
+ margin: 0 auto;
184
+ padding: 10px;
185
+ width: 760px;
186
+ float: left;
187
+
188
+ .other-links {
189
+ padding: 5px;
190
+
191
+ .link-line {
192
+ padding: 5px;
193
+ }
194
+ }
195
+
196
+ .error-explanation {
197
+ border: 2px solid #FF6347;
198
+ padding: 7px;
199
+ padding-bottom: 0;
200
+ background-color: #f0f0f0;
201
+ margin: 10px;
202
+
203
+ h2 {
204
+ text-align: left;
205
+ font-weight: bold;
206
+ padding: 5px 5px 5px 15px;
207
+ font-size: 12px;
208
+ margin: -7px;
209
+ margin-bottom: 0px;
210
+ background-color: #FF6347;
211
+ color: #fff;
212
+ }
213
+
214
+ ul {
215
+ margin-left: 15px;
216
+ li {
217
+ padding: 5px 0 0 0;
218
+ font-size: 12px;
219
+ list-style: square;
220
+ }
221
+ padding-bottom: 5px;
222
+ }
223
+ }
224
+
225
+ }
226
+
227
+ .side-content {
228
+ background-color: #f5deb3;
229
+ float: right;
230
+ width: 220px;
231
+ padding: 10px;
232
+ a {
233
+ color: blue;
234
+ }
235
+ }
236
+ }
237
+
238
+ form {
239
+ .select-areas {
240
+ height: 100px;
241
+ overflow: auto;
242
+ margin: 10px;
243
+ background: #fff;
244
+ padding: 5px;
245
+ }
246
+
247
+ fieldset {
248
+
249
+ legend {
250
+ border-color: #EEEEEE;
251
+ border-style: none none solid;
252
+ border-width: 0 0 1px;
253
+ color: #333333;
254
+ display: block;
255
+ font-size: 22px;
256
+ line-height: 36px;
257
+ margin-bottom: 15px;
258
+ padding: 0;
259
+ width: 100%;
260
+ }
261
+
262
+ .fields {
263
+ padding: 5px;
264
+ .field {
265
+ margin: 5px;
266
+ line-height: 1.5;
267
+
268
+ input {
269
+ font-size: 26px;
270
+ padding: 5px;
271
+ }
272
+
273
+ input[type="text"], input[type='email'], input[type='password'] {
274
+ width: 380px;
275
+ }
276
+
277
+ .error_message {
278
+ padding: 5px;
279
+ color: red;
280
+ }
281
+
282
+ input[type="submit"] {
283
+ cursor: pointer;
284
+ font-size: 16px;
285
+ }
286
+ }
287
+ }
288
+ }
289
+ }
290
+
291
+ .flash-messages {
292
+ .notice, .alert {
293
+ background-color: #FCF8E3;
294
+ border: 1px solid #FBEED5;
295
+ border-radius: 4px 4px 4px 4px;
296
+ margin-bottom: 18px;
297
+ padding: 8px 35px 8px 14px;
298
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
299
+ }
300
+
301
+ .notice {
302
+ color: green;
303
+ }
304
+
305
+ .alert {
306
+ color: red;
307
+ }
308
+ }
309
+ }
310
+
311
+
312
+
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,9 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ class ApplicationController < ActionController::Base
4
+ before_filter :loyal_authenticate_admin!
5
+
6
+ layout 'loyal_admin/application'
7
+ end
8
+ end
9
+
@@ -0,0 +1,49 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ class Display::BoardsController < ::LoyalAdmin::ApplicationController
4
+ def index
5
+ @boards = ::LoyalAdmin::Display::Board.page(params[:page]).per(30)
6
+ end
7
+
8
+ def show
9
+ @board = ::LoyalAdmin::Display::Board.find params[:id]
10
+ end
11
+
12
+ def new
13
+ @board = ::LoyalAdmin::Display::Board.new
14
+ end
15
+
16
+ def create
17
+ @board = ::LoyalAdmin::Display::Board.new(params[:display_board])
18
+
19
+ if @board.save
20
+ redirect_to loyal_admin_app.display_board_url(:id => @board.id)
21
+ else
22
+ render :new
23
+ end
24
+ end
25
+
26
+ def edit
27
+ @board = ::LoyalAdmin::Display::Board.find params[:id]
28
+ end
29
+
30
+ def update
31
+ @board = ::LoyalAdmin::Display::Board.find params[:id]
32
+
33
+ if @board.update_attributes(params[:display_board])
34
+ redirect_to loyal_admin_app.display_board_url(:id => @board.id)
35
+ else
36
+ render :edit
37
+ end
38
+ end
39
+
40
+ def destroy
41
+ @board = ::LoyalAdmin::Display::Board.find params[:id]
42
+
43
+ @board.destroy
44
+
45
+ redirect_to params[:return_to] || loyal_admin_app.display_boards_url
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ class Display::RecipesController < ::LoyalAdmin::ApplicationController
4
+ def index
5
+ @display_recipes = ::LoyalAdmin::Display::Recipe.page(params[:page]).per(30)
6
+ end
7
+
8
+ def show
9
+ @display_recipe = ::LoyalAdmin::Display::Recipe.find params[:id]
10
+ end
11
+
12
+ def new
13
+ @display_recipe = ::LoyalAdmin::Display::Recipe.new
14
+ end
15
+
16
+ def create
17
+ @display_recipe = ::LoyalAdmin::Display::Recipe.new(params[:display_recipe])
18
+
19
+ if @display_recipe.save
20
+ redirect_to loyal_admin_app.display_recipe_url(:id => @display_recipe.id)
21
+ else
22
+ render :new
23
+ end
24
+ end
25
+
26
+ def edit
27
+ @display_recipe = ::LoyalAdmin::Display::Recipe.find params[:id]
28
+ end
29
+
30
+ def update
31
+ @display_recipe = ::LoyalAdmin::Display::Recipe.find params[:id]
32
+
33
+ if @display_recipe.update_attributes(params[:display_recipe])
34
+ redirect_to loyal_admin_app.display_recipe_url(:id => @display_recipe.id)
35
+ else
36
+ render :edit
37
+ end
38
+ end
39
+
40
+ def destroy
41
+ @display_recipe = ::LoyalAdmin::Display::Recipe.find params[:id]
42
+
43
+ @display_recipe.destroy
44
+
45
+ redirect_to params[:return_to] || loyal_admin_app.display_recipes_url
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,9 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ class WelcomeController < ::LoyalAdmin::ApplicationController
4
+ def index
5
+
6
+ end
7
+ end
8
+ end
9
+
@@ -0,0 +1,5 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ module ApplicationHelper
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ module Display::BoardsHelper
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ module Display::RecipesHelper
4
+ end
5
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ class Display::Board < ActiveRecord::Base
4
+ self.acts_as_paranoid
5
+
6
+ self.acts_as_tiny_cached
7
+
8
+ attr_accessible :name, :space, :permalink, :instroduction,
9
+ :description, :item_ids, :short_name
10
+
11
+ self.table_name = 'loyal_admin_display_boards'
12
+ self.loyal_core_acts_as_tree
13
+
14
+ has_many :items, :class_name => "LoyalAdmin::Display::Item",
15
+ :include => [:target], :dependent => :destroy
16
+
17
+ self.strip_whitespace_before_validation :name, :short_name, :space, :permalink
18
+
19
+ validates :name, :short_name, :presence => true
20
+
21
+ self.loyal_core_acts_as_has_permalink :with_space => true
22
+
23
+ # display_board.append_item category_1, :position => 2
24
+ def append_item *args
25
+ options = args.extract_options!
26
+ target = args.first
27
+ self.items.create options.slice(:position).merge(:target => target)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,16 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ class Display::Item < ActiveRecord::Base
4
+ # attr_accessible :title, :body
5
+
6
+ attr_accessible :target
7
+
8
+ self.table_name = 'loyal_admin_display_items'
9
+
10
+ self.acts_as_tiny_cached
11
+
12
+ belongs_to :board, :class_name => 'LoyalAdmin::Display::Board'
13
+ belongs_to :target, :polymorphic => true
14
+
15
+ end
16
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module LoyalAdmin
3
+ class Display::Recipe < ActiveRecord::Base
4
+ attr_accessible :url, :text, :title, :content, :open_style, :style
5
+
6
+ validates_presence_of :url, :text
7
+
8
+ self.table_name = 'loyal_admin_display_recipes'
9
+
10
+ #
11
+ # has method:
12
+ # - filter_named_open_style
13
+ #
14
+ self.loyal_core_acts_as_named_filter_able :open_style, :config => ::LoyalCore::ConfigUtil.new(
15
+ { :value => 1, :desc => '新窗口打开', :key => :_blank },
16
+ { :value => 2, :desc => '当前窗口打开', :key => :_self }
17
+ )
18
+
19
+ def open_style_key
20
+ self.filter_named_open_style.key
21
+ end
22
+
23
+ # 输出
24
+ def generate_html style=:default
25
+ html = ""
26
+
27
+ html << <<-HTML
28
+ <a href='#{self.url.to_s.html_safe}' target='#{self.open_style_key}' style='#{self.style.to_s.html_safe}' title='#{self.title.to_s.html_safe}'>#{self.text.to_s.html_safe}</a>
29
+ HTML
30
+
31
+ html
32
+ end
33
+
34
+ end
35
+ end