agile_rails 0.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +5 -0
- data/MIT-LICENSE +20 -0
- data/README.md +285 -0
- data/Rakefile +39 -0
- data/agile_rails.gemspec +36 -0
- data/app/assets/fonts/ibm-plex-sans-300.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-400.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-500.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-600.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-700.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-italic.woff2 +0 -0
- data/app/assets/images/32px.png +0 -0
- data/app/assets/images/throbber.gif +0 -0
- data/app/assets/javascripts/agile/agile.js +1489 -0
- data/app/assets/javascripts/agile/jquery-migrate.js +702 -0
- data/app/assets/javascripts/agile/jquery.bpopup.js +372 -0
- data/app/assets/javascripts/agile/jquery.datetimepicker.js +1353 -0
- data/app/assets/javascripts/agile/jstree.min.js +6 -0
- data/app/assets/javascripts/agile/select-multiple.js +459 -0
- data/app/assets/javascripts/agile/some_scripts.js +33 -0
- data/app/assets/javascripts/agile.js +22 -0
- data/app/assets/javascripts/agile_application.js +22 -0
- data/app/assets/javascripts/agile_editor.js +22 -0
- data/app/assets/stylesheets/agile/agile.css +1882 -0
- data/app/assets/stylesheets/agile/agile_apps.css +149 -0
- data/app/assets/stylesheets/agile/jquery.datetimepicker.css +304 -0
- data/app/assets/stylesheets/agile/jstree.css +1107 -0
- data/app/assets/stylesheets/agile/select-multiple.css +110 -0
- data/app/assets/stylesheets/agile/th-bg.png +0 -0
- data/app/assets/stylesheets/agile/theme.css +49 -0
- data/app/assets/stylesheets/agile.css +21 -0
- data/app/assets/stylesheets/agile_application.css +20 -0
- data/app/assets/stylesheets/agile_editor.css +19 -0
- data/app/controllers/agile_application_controller.rb +735 -0
- data/app/controllers/agile_common_controller.rb +345 -0
- data/app/controllers/agile_controller.rb +977 -0
- data/app/controllers/agile_main_controller.rb +36 -0
- data/app/controls/agile_control.rb +120 -0
- data/app/controls/agile_report.rb +364 -0
- data/app/controls/ar_category_control.rb +39 -0
- data/app/controls/ar_help_control.rb +139 -0
- data/app/controls/ar_image_control.rb +180 -0
- data/app/controls/ar_journal_control.rb +47 -0
- data/app/controls/ar_menu_item_control.rb +55 -0
- data/app/controls/ar_page_control.rb +64 -0
- data/app/controls/ar_poll_result_control.rb +84 -0
- data/app/controls/ar_setup_control.rb +62 -0
- data/app/controls/belongs_to_control.rb +61 -0
- data/app/controls/browse_models_control.rb +98 -0
- data/app/controls/settings_form_control.rb +137 -0
- data/app/forms/agile_help.yml +112 -0
- data/app/forms/agile_menu.yml +140 -0
- data/app/forms/agile_report_defaults.yml +39 -0
- data/app/forms/all_options.yml +810 -0
- data/app/forms/ar_ad.yml +121 -0
- data/app/forms/ar_big_table.yml +60 -0
- data/app/forms/ar_big_table_value.yml +52 -0
- data/app/forms/ar_browse_fields.yml +35 -0
- data/app/forms/ar_browse_models.yml +48 -0
- data/app/forms/ar_category.yml +73 -0
- data/app/forms/ar_category_as_tree.yml +31 -0
- data/app/forms/ar_design.yml +75 -0
- data/app/forms/ar_filter.yml +52 -0
- data/app/forms/ar_folder_permission.yml +56 -0
- data/app/forms/ar_folder_rule.yml +48 -0
- data/app/forms/ar_gallery.yml +55 -0
- data/app/forms/ar_image.yml +126 -0
- data/app/forms/ar_image_search.yml +83 -0
- data/app/forms/ar_journal.yml +76 -0
- data/app/forms/ar_json_ld.yml +56 -0
- data/app/forms/ar_key_value.yml +33 -0
- data/app/forms/ar_key_value_store.yml +33 -0
- data/app/forms/ar_link.yml +60 -0
- data/app/forms/ar_menu.yml +67 -0
- data/app/forms/ar_menu_item.yml +141 -0
- data/app/forms/ar_page.yml +187 -0
- data/app/forms/ar_part.yml +91 -0
- data/app/forms/ar_permission.yml +52 -0
- data/app/forms/ar_permission_rule.yml +40 -0
- data/app/forms/ar_piece.yml +106 -0
- data/app/forms/ar_policy.yml +64 -0
- data/app/forms/ar_policy_rule.yml +42 -0
- data/app/forms/ar_policy_rule_nocms.yml +40 -0
- data/app/forms/ar_poll.yml +118 -0
- data/app/forms/ar_poll_item.yml +78 -0
- data/app/forms/ar_poll_result.yml +88 -0
- data/app/forms/ar_poll_result_export.yml +35 -0
- data/app/forms/ar_removed_url.yml +41 -0
- data/app/forms/ar_role.yml +43 -0
- data/app/forms/ar_seo.yml +32 -0
- data/app/forms/ar_setup.yml +45 -0
- data/app/forms/ar_site.yml +149 -0
- data/app/forms/ar_steps_template.yml +51 -0
- data/app/forms/ar_user.yml +140 -0
- data/app/forms/ar_user_role.yml +57 -0
- data/app/forms/help/dc_category_as_tree.en +4 -0
- data/app/forms/help/dc_category_as_tree.sl +5 -0
- data/app/forms/json_ld_schema.yml +168 -0
- data/app/helpers/agile_application_helper.rb +1162 -0
- data/app/helpers/agile_category_helper.rb +128 -0
- data/app/helpers/agile_common_helper.rb +308 -0
- data/app/helpers/agile_edit_helper.rb +645 -0
- data/app/helpers/agile_helper.rb +509 -0
- data/app/helpers/agile_index_helper.rb +677 -0
- data/app/helpers/ar_image_helper.rb +128 -0
- data/app/models/agile_form_fields/action.rb +61 -0
- data/app/models/agile_form_fields/agile_form_field.rb +322 -0
- data/app/models/agile_form_fields/belongs_to.rb +112 -0
- data/app/models/agile_form_fields/check_box.rb +73 -0
- data/app/models/agile_form_fields/comment.rb +62 -0
- data/app/models/agile_form_fields/date_picker.rb +104 -0
- data/app/models/agile_form_fields/date_select.rb +68 -0
- data/app/models/agile_form_fields/datetime_picker.rb +88 -0
- data/app/models/agile_form_fields/datetime_select.rb +73 -0
- data/app/models/agile_form_fields/file_field.rb +52 -0
- data/app/models/agile_form_fields/file_select.rb +69 -0
- data/app/models/agile_form_fields/hidden_field.rb +51 -0
- data/app/models/agile_form_fields/html_field.rb +69 -0
- data/app/models/agile_form_fields/journal_diff.rb +62 -0
- data/app/models/agile_form_fields/link_to.rb +69 -0
- data/app/models/agile_form_fields/method.rb +66 -0
- data/app/models/agile_form_fields/multitext_autocomplete.rb +215 -0
- data/app/models/agile_form_fields/number_field.rb +92 -0
- data/app/models/agile_form_fields/password_field.rb +63 -0
- data/app/models/agile_form_fields/radio_button.rb +95 -0
- data/app/models/agile_form_fields/readonly.rb +77 -0
- data/app/models/agile_form_fields/select.rb +281 -0
- data/app/models/agile_form_fields/submit_tag.rb +58 -0
- data/app/models/agile_form_fields/text_area.rb +61 -0
- data/app/models/agile_form_fields/text_autocomplete.rb +171 -0
- data/app/models/agile_form_fields/text_field.rb +55 -0
- data/app/models/agile_form_fields/text_with_select.rb +94 -0
- data/app/models/agile_form_fields/tree_select.rb +170 -0
- data/app/models/ar_big_table.rb +82 -0
- data/app/models/ar_big_table_value.rb +53 -0
- data/app/models/ar_category.rb +109 -0
- data/app/models/ar_design.rb +116 -0
- data/app/models/ar_filter.rb +200 -0
- data/app/models/ar_folder_permission.rb +50 -0
- data/app/models/ar_folder_rule.rb +47 -0
- data/app/models/ar_gallery.rb +53 -0
- data/app/models/ar_image.rb +198 -0
- data/app/models/ar_internals.rb +60 -0
- data/app/models/ar_journal.rb +46 -0
- data/app/models/ar_json_ld.rb +131 -0
- data/app/models/ar_key_value_store.rb +128 -0
- data/app/models/ar_link.rb +48 -0
- data/app/models/ar_memory.rb +172 -0
- data/app/models/ar_menu.rb +144 -0
- data/app/models/ar_menu_item.rb +106 -0
- data/app/models/ar_page.rb +74 -0
- data/app/models/ar_part.rb +66 -0
- data/app/models/ar_permission.rb +180 -0
- data/app/models/ar_permission_rule.rb +65 -0
- data/app/models/ar_policy.rb +78 -0
- data/app/models/ar_policy_rule.rb +65 -0
- data/app/models/ar_poll.rb +74 -0
- data/app/models/ar_poll_item.rb +47 -0
- data/app/models/ar_poll_result.rb +38 -0
- data/app/models/ar_removed_url.rb +42 -0
- data/app/models/ar_role.rb +84 -0
- data/app/models/ar_setup.rb +115 -0
- data/app/models/ar_site.rb +68 -0
- data/app/models/ar_temp.rb +150 -0
- data/app/models/ar_user.rb +72 -0
- data/app/models/ar_user_group.rb +38 -0
- data/app/models/ar_user_role.rb +54 -0
- data/app/models/ar_visit.rb +41 -0
- data/app/models/concerns/ar_page_concern.rb +128 -0
- data/app/models/concerns/ar_part_concern.rb +48 -0
- data/app/models/concerns/ar_piece_concern.rb +48 -0
- data/app/models/concerns/ar_policy_rule_concern.rb +87 -0
- data/app/models/concerns/ar_seo_concern.rb +66 -0
- data/app/models/concerns/ar_site_concern.rb +103 -0
- data/app/models/concerns/ar_user_concern.rb +195 -0
- data/app/renderers/agile_common_renderer.rb +93 -0
- data/app/renderers/agile_renderer.rb +59 -0
- data/app/renderers/ar_ad_renderer.rb +219 -0
- data/app/renderers/ar_captcha_renderer.rb +113 -0
- data/app/renderers/ar_common_renderer.rb +90 -0
- data/app/renderers/ar_gallery_renderer.rb +107 -0
- data/app/renderers/ar_menu_renderer.rb +195 -0
- data/app/renderers/ar_page_renderer.rb +147 -0
- data/app/renderers/ar_part_renderer.rb +235 -0
- data/app/renderers/ar_piece_renderer.rb +119 -0
- data/app/renderers/ar_poll_renderer.rb +272 -0
- data/app/views/agile/_edit_stuff.html.erb +57 -0
- data/app/views/agile/_form.html.erb +24 -0
- data/app/views/agile/_result.html.erb +28 -0
- data/app/views/agile/edit.html.erb +13 -0
- data/app/views/agile/error.html.erb +2 -0
- data/app/views/agile/index.html.erb +14 -0
- data/app/views/agile/login.html.erb +19 -0
- data/app/views/agile/new.html.erb +12 -0
- data/app/views/agile_common/_help.html.erb +18 -0
- data/app/views/agile_common/_iframe_edit.html.erb +2 -0
- data/app/views/agile_common/paste_clipboard.html.erb +17 -0
- data/app/views/layouts/agile.html.erb +17 -0
- data/app/views/layouts/content.html.erb +20 -0
- data/app/views/models/dump_models.html.erb +47 -0
- data/config/initializers/kaminari_patch.rb +56 -0
- data/config/locales/agile_de.yml +138 -0
- data/config/locales/agile_en.yml +162 -0
- data/config/locales/agile_sl.yml +163 -0
- data/config/locales/datetimepicker.yml +19 -0
- data/config/locales/de.yml +231 -0
- data/config/locales/en.yml +13 -0
- data/config/locales/kaminari.yml +26 -0
- data/config/locales/models_en.yml +1032 -0
- data/config/locales/models_sl.yml +1065 -0
- data/config/locales/sl.yml +211 -0
- data/db/migrate/20240120160001_add_sessions_table.rb +12 -0
- data/db/migrate/20240120160002_ar_big_table.rb +17 -0
- data/db/migrate/20240120160003_ar_big_table_value.rb +18 -0
- data/db/migrate/20240120160004_ar_category.rb +22 -0
- data/db/migrate/20240120160005_ar_design.rb +20 -0
- data/db/migrate/20240120160006_ar_filter.rb +17 -0
- data/db/migrate/20240120160007_ar_gallery.rb +21 -0
- data/db/migrate/20240120160008_ar_journal.rb +19 -0
- data/db/migrate/20240120160009_ar_key_value_store.rb +11 -0
- data/db/migrate/20240120160010_ar_link.rb +19 -0
- data/db/migrate/20240120160011_ar_memory.rb +8 -0
- data/db/migrate/20240120160012_ar_menu.rb +21 -0
- data/db/migrate/20240120160013_ar_menu_item.rb +28 -0
- data/db/migrate/20240120160014_ar_page.rb +50 -0
- data/db/migrate/20240120160015_ar_part.rb +33 -0
- data/db/migrate/20240120160016_ar_permission.rb +16 -0
- data/db/migrate/20240120160017_ar_permission_rule.rb +17 -0
- data/db/migrate/20240120160018_ar_piece.rb +28 -0
- data/db/migrate/20240120160019_ar_policy.rb +21 -0
- data/db/migrate/20240120160020_ar_policy_rule.rb +18 -0
- data/db/migrate/20240120160021_ar_poll.rb +27 -0
- data/db/migrate/20240120160022_ar_poll_item.rb +23 -0
- data/db/migrate/20240120160023_ar_poll_result.rb +14 -0
- data/db/migrate/20240120160024_ar_removed_url.rb +16 -0
- data/db/migrate/20240120160025_ar_role.rb +17 -0
- data/db/migrate/20240120160026_ar_site.rb +37 -0
- data/db/migrate/20240120160027_ar_temp.rb +11 -0
- data/db/migrate/20240120160028_ar_user.rb +42 -0
- data/db/migrate/20240120160029_ar_user_group.rb +12 -0
- data/db/migrate/20240120160030_ar_user_role.rb +18 -0
- data/db/migrate/20240120160031_ar_visit.rb +15 -0
- data/db/migrate/20240703016001_ar_setup.rb +16 -0
- data/db/migrate/20240703016002_ar_folder_permission.rb +15 -0
- data/db/migrate/20240703016003_ar_folder_rule.rb +14 -0
- data/db/migrate/20250115000001_ar_image.rb +25 -0
- data/lib/agile/configuration.rb +43 -0
- data/lib/agile/engine.rb +29 -0
- data/lib/agile/version.rb +27 -0
- data/lib/agile.rb +282 -0
- data/lib/agile_rails.rb +1 -0
- data/lib/generators/agile/USAGE +11 -0
- data/lib/generators/agile/new_form_generator.rb +369 -0
- data/lib/generators/convert_to_ar/convert_to_ar_generator.rb +158 -0
- data/lib/tasks/agile_db_clone.rake +132 -0
- data/lib/tasks/agile_db_export_to_yaml.rake +37 -0
- data/lib/tasks/agile_db_migrate.rake +35 -0
- metadata +414 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#+
|
23
|
+
module AgileFormFields
|
24
|
+
|
25
|
+
###########################################################################
|
26
|
+
# Implementation of html_field AgileRails form field.
|
27
|
+
#
|
28
|
+
# HtmlField class only implements code for calling actual html edit field code.
|
29
|
+
# This is by default agile_rails_html_editor gem which uses CK editor javascript plugin
|
30
|
+
# or any other plugin. Which plugin will be used as html editor is defined by
|
31
|
+
# ar_site.settings html_editor setting.
|
32
|
+
#
|
33
|
+
# Example of ar_site.setting used for agile_rails_html_editor gem.
|
34
|
+
# html_editor: ckeditor
|
35
|
+
# ck_editor:
|
36
|
+
# config_file: /files/ck_config.js
|
37
|
+
# css_file: /files/ck_css.css
|
38
|
+
# file_select: elfinder
|
39
|
+
#
|
40
|
+
# Form example:
|
41
|
+
# 10:
|
42
|
+
# name: body
|
43
|
+
# type: html_field
|
44
|
+
# options: "height: 500, width: 550, toolbar: 'basic'"
|
45
|
+
###########################################################################
|
46
|
+
class HtmlField < AgileFormField
|
47
|
+
|
48
|
+
###########################################################################
|
49
|
+
# Render html_field AgileRails form field code
|
50
|
+
###########################################################################
|
51
|
+
def render
|
52
|
+
# html editor is defined on site params
|
53
|
+
editor_string = @env.agile_get_site.params['html_editor'] if @env.agile_get_site
|
54
|
+
editor_string ||= 'ckeditor'
|
55
|
+
|
56
|
+
klas_string = editor_string.camelize
|
57
|
+
if AgileFormFields.const_defined?(klas_string)
|
58
|
+
klas = AgileFormFields::const_get(klas_string)
|
59
|
+
o = klas.new(@env, @record, @yaml).render
|
60
|
+
@js += o.js
|
61
|
+
@html += o.html
|
62
|
+
else
|
63
|
+
@html += 'HTML editor not defined. Check site.settings or include agile_rails_html_editor gem.'
|
64
|
+
end
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#+
|
23
|
+
module AgileFormFields
|
24
|
+
|
25
|
+
###########################################################################
|
26
|
+
# Implementation of journal_diff AgileRails form field. journal_diff field is used to
|
27
|
+
# show differences between two fields in ArJournal collection.
|
28
|
+
#
|
29
|
+
# Internal use.
|
30
|
+
#
|
31
|
+
# ===Form options:
|
32
|
+
# * +name:+ field name (required)
|
33
|
+
# * +type:+ journal_diff (required)
|
34
|
+
#
|
35
|
+
# Form example:
|
36
|
+
# 10:
|
37
|
+
# name: diff
|
38
|
+
# type: journal_diff
|
39
|
+
# html:
|
40
|
+
# size: 100x25
|
41
|
+
###########################################################################
|
42
|
+
class JournalDiff < AgileFormField
|
43
|
+
|
44
|
+
###########################################################################
|
45
|
+
# Render journal_diff AgileRails form field code
|
46
|
+
###########################################################################
|
47
|
+
def render
|
48
|
+
@yaml['name'] = 'old' if @record[@yaml['name']].nil?
|
49
|
+
@html += '<div class="ar-journal">'
|
50
|
+
JSON.parse(@record[@yaml['name']]).each do |k, v|
|
51
|
+
old_value = v.class == Array ? v[0] : v
|
52
|
+
new_value = v.class == Array ? v[1] : v
|
53
|
+
@html += %(<div class="field">#{@env.check_box('select', k)} #{k}</div>
|
54
|
+
<div class="diff-m">#{@env.mi_icon('remove red')}<div>#{old_value}</div></div>
|
55
|
+
<div class="diff-p">#{@env.mi_icon('add green')}<div>#{new_value}</div></div>)
|
56
|
+
end
|
57
|
+
@html += '</div>'
|
58
|
+
self
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#+
|
23
|
+
module AgileFormFields
|
24
|
+
|
25
|
+
###########################################################################
|
26
|
+
# Implementation of link_to AgileRails form field. link_to form field is mostly used by polls but can
|
27
|
+
# be also incorporated anywhere on the form.
|
28
|
+
#
|
29
|
+
# ===Form options:
|
30
|
+
# * +type:+ link_to (required)
|
31
|
+
# * +caption:+ Link caption
|
32
|
+
# * +icon:+ Link icon
|
33
|
+
# * +url:+ direct url link
|
34
|
+
# * +controller:+ controller name
|
35
|
+
# * +action:+ action name
|
36
|
+
# * +html:+ html options which apply to link_to (optional)
|
37
|
+
#
|
38
|
+
# Form example:
|
39
|
+
# 30:
|
40
|
+
# type: link_to
|
41
|
+
# caption: Some action
|
42
|
+
# icon: cogs
|
43
|
+
# controller: my_controller
|
44
|
+
# action: my_action
|
45
|
+
# id: id # will be replaced by record.id
|
46
|
+
###########################################################################
|
47
|
+
class LinkTo < AgileFormField
|
48
|
+
|
49
|
+
###########################################################################
|
50
|
+
# Render link_to AgileRails form field code
|
51
|
+
###########################################################################
|
52
|
+
def render
|
53
|
+
@yaml['html'] ||= {}
|
54
|
+
@yaml['html']['class'] ||= 'ar-link'
|
55
|
+
@yaml['html'].symbolize_keys!
|
56
|
+
|
57
|
+
@yaml[:id] = record.id if @yaml[:id] == 'id'
|
58
|
+
url = @yaml['url'] || "#{@yaml[:controller]}/#{@yaml[:action]}/#{@yaml[:id]}"
|
59
|
+
url.gsub!('//','/') # no action and id
|
60
|
+
url = '/' + @yaml['url'] unless url[0,1] == '/' # no leading /
|
61
|
+
url.chop if url[0,-1] == '/' # remove trailing /
|
62
|
+
|
63
|
+
caption = @yaml['caption'] || @yaml['text']
|
64
|
+
@html += @env.agile_link_to(caption, @yaml['icon'], url, @yaml['html'])
|
65
|
+
self
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#+
|
23
|
+
module AgileFormFields
|
24
|
+
|
25
|
+
###########################################################################
|
26
|
+
# Implementation of custom AgileRails form field. Method field will call method or class method
|
27
|
+
# defined in eval option and add returned code to HTML output code.
|
28
|
+
#
|
29
|
+
# It can be used in case when form contains complex data structure. For example set of pictures which can not
|
30
|
+
# be simply displayed by any other AgileRails Forms field.
|
31
|
+
#
|
32
|
+
# Form example:
|
33
|
+
# 50:
|
34
|
+
# name: galery
|
35
|
+
# type: method
|
36
|
+
# eval: show_gallery
|
37
|
+
# or
|
38
|
+
# eval: MyClass.show_gallery
|
39
|
+
#
|
40
|
+
###########################################################################
|
41
|
+
class Method < AgileFormField
|
42
|
+
|
43
|
+
###########################################################################
|
44
|
+
# Render file_select AgileRails form field code
|
45
|
+
###########################################################################
|
46
|
+
def render
|
47
|
+
# might be defined as my_method or MyClass.my_method
|
48
|
+
clas, method = @yaml['eval'].split(/\.|\,/).map(&:strip)
|
49
|
+
if method.nil?
|
50
|
+
if @env.respond_to?(clas)
|
51
|
+
@html += @env.send(clas, @record, @yaml, @readonly)
|
52
|
+
return self
|
53
|
+
end
|
54
|
+
else
|
55
|
+
klass = clas.camelize.constantize
|
56
|
+
if klass.respond_to?(method)
|
57
|
+
@html += klass.send(method, @record, @yaml, @readonly)
|
58
|
+
return self
|
59
|
+
end
|
60
|
+
end
|
61
|
+
@html += "Error: #{@yaml['name']} : #{@yaml['eval']} not defined!"
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#+
|
23
|
+
module AgileFormFields
|
24
|
+
|
25
|
+
###########################################################################
|
26
|
+
# Implementation of multitext_autocomplete AgileRails Form field.
|
27
|
+
#
|
28
|
+
# multitext_autocomplete field is complex data entry field which uses autocomplete
|
29
|
+
# function when selecting multiple values for MongoDB Array field. Array typically holds
|
30
|
+
# id's of selected documents and control typically displays value of the field name
|
31
|
+
# defined by search options.
|
32
|
+
#
|
33
|
+
# ===Form options:
|
34
|
+
# * +name:+ field name (required)
|
35
|
+
# * +type:+ multitext_autocomplete (required)
|
36
|
+
# * +table+ Model (table) name which must contain searched field name.
|
37
|
+
# * +search:+ Search may consist of three parameters from which are separated either by dot (.) or comma(,)
|
38
|
+
# * search_field_name; when table option is defined search must define field name which will be used for search query
|
39
|
+
# * collection_name.search_field_name; Same as above except that table options must be ommited.
|
40
|
+
# * collection_name.search_field_name.method_name; When searching is more complex custom search
|
41
|
+
# method may be defined in CollectionName model which will provide dataset for search.
|
42
|
+
# * +with_new+ Will add an icon for shortcut to add new document to collection
|
43
|
+
#
|
44
|
+
# Form example:
|
45
|
+
# 90:
|
46
|
+
# name: kats
|
47
|
+
# type: multitext_autocomplete
|
48
|
+
# search: ar_category.name
|
49
|
+
# with_new: model_name
|
50
|
+
# size: 30
|
51
|
+
###########################################################################
|
52
|
+
class MultitextAutocomplete < AgileFormField
|
53
|
+
|
54
|
+
###########################################################################
|
55
|
+
# Returns value for readonly field
|
56
|
+
###########################################################################
|
57
|
+
def ro_standard(table, search)
|
58
|
+
current_values = @record.send(@yaml['name'])
|
59
|
+
return self if current_values.blank?
|
60
|
+
|
61
|
+
table = table.classify.constantize
|
62
|
+
search = search.split(/\.|\,/).first if search.match(/\.|\,/)
|
63
|
+
html = current_values.map { |element| table.find(element)[search] + '<br>' }.join
|
64
|
+
super(html)
|
65
|
+
end
|
66
|
+
|
67
|
+
###########################################################################
|
68
|
+
# Render multitext_autocomplete AgileRails form field code
|
69
|
+
###########################################################################
|
70
|
+
def render
|
71
|
+
# get field name
|
72
|
+
if @yaml['search'].class.to_s == 'Hash'
|
73
|
+
#if @yaml['search'].kind_of?(Hash)
|
74
|
+
table = @yaml['search']['table']
|
75
|
+
field_name = @yaml['search']['field']
|
76
|
+
method = @yaml['search']['method']
|
77
|
+
search = method.nil? ? field_name : "#{field_name}.#{method}"
|
78
|
+
elsif @yaml['search'].to_s.match(/[.,]/)
|
79
|
+
table, field_name, method = @yaml['search'].split(/[.,]/).map(&:strip)
|
80
|
+
search = method.nil? ? field_name : "#{field_name}.#{method}"
|
81
|
+
else # search and table name are separated
|
82
|
+
search = field_name = @yaml['search']
|
83
|
+
end
|
84
|
+
# get table name
|
85
|
+
if @yaml['table']
|
86
|
+
table = if @yaml['table'].class == String
|
87
|
+
@yaml['table']
|
88
|
+
# eval(how_to_get_my_table_name)
|
89
|
+
elsif @yaml['table']['eval']
|
90
|
+
eval @yaml['table']['eval']
|
91
|
+
else
|
92
|
+
Rails.logger.error "Field #{@yaml['name']}: Invalid table parameter!"
|
93
|
+
nil
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
if table.blank? || search.blank?
|
98
|
+
@html += 'Table or search field not defined!'
|
99
|
+
return self
|
100
|
+
end
|
101
|
+
|
102
|
+
# does collection exists
|
103
|
+
collection = table.classify.constantize rescue nil
|
104
|
+
if collection.nil?
|
105
|
+
@html += "Invalid table name: #{table}"
|
106
|
+
return self
|
107
|
+
end
|
108
|
+
|
109
|
+
# does field exists
|
110
|
+
unless @record.respond_to?(@yaml['name'])
|
111
|
+
@html += "Invalid field name: #{@yaml['name']}"
|
112
|
+
return self
|
113
|
+
end
|
114
|
+
|
115
|
+
# search data entry
|
116
|
+
@yaml['html'] ||= {}
|
117
|
+
@yaml['html']['value'] = '' # must be. Otherwise it will look into record and return error
|
118
|
+
@yaml['html']['placeholder'] = t('agile.search_placeholder')
|
119
|
+
_name = '_' + @yaml['name']
|
120
|
+
@html += '<div class="ui-autocomplete-border">'
|
121
|
+
@html += @env.link_to(@env.mi_icon('plus-square-o green'), '#', onclick: 'return false;') # dummy add. But it is useful.
|
122
|
+
|
123
|
+
# text_field for autocomplete
|
124
|
+
record = record_text_for(@yaml['name'])
|
125
|
+
@html += '<span class="ar-text-autocomplete">' + @env.text_field(record, _name, @yaml['html']) + '<span></span></span>'
|
126
|
+
|
127
|
+
# link for adding new documents to searched collection
|
128
|
+
if @yaml['with_new'] && !@readonly
|
129
|
+
@html += ' ' +
|
130
|
+
@env.mi_icon('plus-square-o', class: 'in-edit-add', title: t('agile.new'),
|
131
|
+
style: "vertical-align: top;", 'data-table' => @yaml['with_new'] )
|
132
|
+
end
|
133
|
+
|
134
|
+
# div to list active selections
|
135
|
+
@html += %(<div id ="#{record}#{@yaml['name']}">)
|
136
|
+
# fill with current values
|
137
|
+
current_values = @record.send(@yaml['name'])
|
138
|
+
unless current_values.nil?
|
139
|
+
current_values.each do |element|
|
140
|
+
# this is quick and dirty trick. We have model ar_big_table which can be used for retrive
|
141
|
+
# more complicated options
|
142
|
+
# TODO retrieve choices from big_table
|
143
|
+
rec = if table == 'ar_big_table'
|
144
|
+
collection.find(@yaml['name'], @env.session)
|
145
|
+
else
|
146
|
+
collection.find(element)
|
147
|
+
end
|
148
|
+
|
149
|
+
@html += if rec
|
150
|
+
link = @env.link_to(@env.mi_icon('remove_circle red'), '#',
|
151
|
+
onclick: %($('##{rec.id}').hide(); let v = $('##{record}_#{@yaml['name']}_#{rec.id}'); v.val("-" + v.val());return false;))
|
152
|
+
link = @env.mi_icon('check green') if @readonly
|
153
|
+
field = @env.hidden_field(record, "#{@yaml['name']}_#{rec.id}", value: element)
|
154
|
+
%(<div id="#{rec.id}" style="padding:4px;">#{link} #{rec.send(field_name)}<br>#{field}</div>)
|
155
|
+
else
|
156
|
+
'** error **' # Related data is missing. It happends.
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
@html += "</div></div>"
|
161
|
+
|
162
|
+
# Create text for new div when new category is added
|
163
|
+
link = @env.link_to(@env.mi_icon('remove_circle red'), '#',
|
164
|
+
onclick: %($('#rec_id').hide(); let v = $('##{record}_#{@yaml['name']}_rec_id'); v.val("-" + v.val());return false;"))
|
165
|
+
field = @env.hidden_field(record, "#{@yaml['name']}_rec_id", value: 'rec_id')
|
166
|
+
one_div = %(<div id="rec_id" style="padding:4px;">#{link} rec_search<br>#{field}</div>)
|
167
|
+
|
168
|
+
# JS stuff
|
169
|
+
@js += <<EOJS
|
170
|
+
$(document).ready(function() {
|
171
|
+
$("##{record}_#{_name}").autocomplete( {
|
172
|
+
source: function(request, response) {
|
173
|
+
$.ajax({
|
174
|
+
url: "#{ @env.url_for( controller: 'agile_common', action: 'autocomplete' )}",
|
175
|
+
type: "POST",
|
176
|
+
dataType: "json",
|
177
|
+
data: { input: request.term, table: "#{table}", search: "#{search}" #{(',id: "' + @yaml['id'] + '"') if @yaml['id']} },
|
178
|
+
success: function(data) {
|
179
|
+
response( $.map( data, function(key) {
|
180
|
+
return key;
|
181
|
+
}));
|
182
|
+
}
|
183
|
+
});
|
184
|
+
},
|
185
|
+
change: function (event, ui) {
|
186
|
+
let div = '#{one_div}';
|
187
|
+
div = div.replace(/rec_id/g, ui.item.id)
|
188
|
+
div = div.replace('rec_search', ui.item.value)
|
189
|
+
$("##{record}#{@yaml['name']}").append(div);
|
190
|
+
$("##{record}_#{_name}").val('');
|
191
|
+
$("##{record}_#{_name}").focus();
|
192
|
+
},
|
193
|
+
minLength: 2
|
194
|
+
});
|
195
|
+
});
|
196
|
+
EOJS
|
197
|
+
|
198
|
+
self
|
199
|
+
end
|
200
|
+
|
201
|
+
###########################################################################
|
202
|
+
# Class method for retrieving data from multitext_autocomplete form field.
|
203
|
+
###########################################################################
|
204
|
+
def self.get_data(params, name)
|
205
|
+
r = []
|
206
|
+
params['record'].each do |k, v|
|
207
|
+
# if it starts with - then it was removed
|
208
|
+
r << v if k.match("#{name}_") && v[0] != '-'
|
209
|
+
r
|
210
|
+
end
|
211
|
+
r.uniq
|
212
|
+
end
|
213
|
+
|
214
|
+
end
|
215
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#+
|
23
|
+
module AgileFormFields
|
24
|
+
|
25
|
+
###########################################################################
|
26
|
+
# Implementation of number_field AgileRails form field. Number fields can be
|
27
|
+
# formated for display with thousands delimiters and decimal separators and
|
28
|
+
# can have currency symbol.
|
29
|
+
#
|
30
|
+
# ===Form options:
|
31
|
+
# * +type:+ number_field (required)
|
32
|
+
# * +name:+ Field name (required)
|
33
|
+
# * +format:+ Format options
|
34
|
+
# * +decimals:+ No of decimal places
|
35
|
+
# * +separator:+ decimal separator (yes no , .) Default yes if decimals > 0
|
36
|
+
# * +delimiter:+ Thousands delimiter (yes no , .) Default defind by locals
|
37
|
+
# * +currency:+ Currency sign (yes no sign) Default no. If yes defined by locals
|
38
|
+
# * +html:+ html options which apply to text_field field (optional)
|
39
|
+
#
|
40
|
+
# Form example:
|
41
|
+
# 10:
|
42
|
+
# name: title
|
43
|
+
# type: number_field
|
44
|
+
# size: 10
|
45
|
+
# format:
|
46
|
+
# decimals: 2
|
47
|
+
# delimiter: false
|
48
|
+
###########################################################################
|
49
|
+
class NumberField < AgileFormField
|
50
|
+
|
51
|
+
###########################################################################
|
52
|
+
# Render text_field AgileRails form field
|
53
|
+
###########################################################################
|
54
|
+
def render
|
55
|
+
set_initial_value
|
56
|
+
|
57
|
+
record = record_text_for(@yaml['name'])
|
58
|
+
@yaml['html'] ||= {}
|
59
|
+
@yaml['html']['class'] = 'ar-number'
|
60
|
+
if @yaml['format'].class == String
|
61
|
+
format = @yaml['format']
|
62
|
+
@yaml['format'] = {}
|
63
|
+
@yaml['format']['decimal'] = format[1].blank? ? 2 : format[1].to_i
|
64
|
+
@yaml['format']['separator'] = format[2].blank? ? I18n.t('number.currency.format.separator') : format[2]
|
65
|
+
@yaml['format']['delimiter'] = format[3].blank? ? I18n.t('number.currency.format.delimiter') : format[3]
|
66
|
+
end
|
67
|
+
@yaml['html']['data-decimal'] = @yaml.dig('format', 'decimal') || 2
|
68
|
+
@yaml['html']['data-delimiter'] = @yaml.dig('format', 'delimiter') || I18n.t('number.currency.format.delimiter')
|
69
|
+
@yaml['html']['data-separator'] = @yaml.dig('format', 'separator') || I18n.t('number.currency.format.separator')
|
70
|
+
|
71
|
+
value = @yaml['html']['value'] || @record.send(@yaml['name']) || 0
|
72
|
+
@yaml['html']['value'] = AgileHelper.format_number(value, @yaml['html']['data-decimal'], @yaml['html']['data-separator'], @yaml['html']['data-delimiter'] )
|
73
|
+
|
74
|
+
return ro_standard(@yaml['html']['value']) if @readonly
|
75
|
+
|
76
|
+
@yaml['html']['autocomplete'] ||= 'off'
|
77
|
+
@html += @env.hidden_field( record, @yaml['name'], value: value )
|
78
|
+
@html += @env.text_field( nil, "record_#{@yaml['name']}_", @yaml['html'])
|
79
|
+
self
|
80
|
+
end
|
81
|
+
|
82
|
+
###########################################################################
|
83
|
+
# Return value. Return nil if input field is empty
|
84
|
+
###########################################################################
|
85
|
+
def self.get_data(params, name)
|
86
|
+
return 0 if params['record'][name].blank?
|
87
|
+
|
88
|
+
params['record'][name].match('.') ? params['record'][name].to_f : params['record'][name].to_i
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#+
|
23
|
+
module AgileFormFields
|
24
|
+
|
25
|
+
###########################################################################
|
26
|
+
# Implementation of password AgileRails form field.
|
27
|
+
#
|
28
|
+
# ===Form options:
|
29
|
+
# * +type:+ password_field (required)
|
30
|
+
# * +name:+ Field name (required)
|
31
|
+
# * +html:+ html options which apply to password field (optional)
|
32
|
+
#
|
33
|
+
# Form example:
|
34
|
+
# 20:
|
35
|
+
# name: password
|
36
|
+
# type: pasword_field
|
37
|
+
# html:
|
38
|
+
# size: 20
|
39
|
+
#
|
40
|
+
# 30:
|
41
|
+
# name: password_confirmation
|
42
|
+
# type: pasword_field
|
43
|
+
# html:
|
44
|
+
# size: 20
|
45
|
+
#
|
46
|
+
###########################################################################
|
47
|
+
class PasswordField < AgileFormField
|
48
|
+
|
49
|
+
###########################################################################
|
50
|
+
# Render password AgileRails form field code
|
51
|
+
###########################################################################
|
52
|
+
def render
|
53
|
+
return self if @readonly
|
54
|
+
|
55
|
+
@yaml['html'] ||= {}
|
56
|
+
@yaml['html']['size'] ||= @yaml['size']
|
57
|
+
record = record_text_for(@yaml['name'])
|
58
|
+
@html += @env.password_field(record, @yaml['name'], @yaml['html'])
|
59
|
+
self
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|