Module: CamaleonCms::ShortCodeHelper
- Included in:
- CamaleonController
- Defined in:
- app/helpers/camaleon_cms/short_code_helper.rb
Overview
Camaleon CMS is a content management system
Copyright (C) 2015 by Owen Peredo Diaz
Email: [email protected]
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License (GPLv3) for more details.
Instance Method Summary collapse
-
#cama_strip_shortcodes(text) ⇒ Object
remove all shortcodes from text Arguments text: String that contains shortcodes return String.
-
#do_shortcode(content, args = {}) ⇒ Object
run all shortcodes in the content content: (string) text to find a short codes args: custom arguments to pass for short codes render, sample: my_model, a: true if args != Hash, this will re send as args = args args should be include the owner model who is doing the action to optimize DB queries sample: do_shortcode(“hello [greeting ‘world’]!”, @my_post) ==> “hello world!” sample: do_shortcode(“hello [greeting ‘world’]”, ‘asd’, owner: @my_post) return rendered string.
-
#render_shortcode(text, key, template = nil) ⇒ Object
render direct a shortcode text: text that contain the shortcode key: shortcode key template: template to render, if nil this will render default render file Also can be a function to execute that instead a render, sample: lambda{|attrs, args| return “my custom content”; } render_shortcode(“asda dasdasdas[owen a=‘1’] [bbb] sdasdas dasd as das[owen a=213]”, “owen”, lambda{|attrs, args| puts attrs; return “my test”; }).
-
#shortcode_add(key, template = nil, descr = '') ⇒ Object
add shortcode key: shortcode key template: template to render, if nil will render “shortcode_templates/<key>” Also can be a function to execute that instead a render, sample: lambda{|attrs, args| return “my custom content”; } descr: description for shortcode.
-
#shortcode_change_template(key, template = nil) ⇒ Object
add or update shortcode template key: chortcode key to add or update template: template to render, if nil will render “shortcode_templates/<key>”.
-
#shortcode_delete(key) ⇒ Object
delete shortcode key: chortcode key to delete.
-
#shortcodes_init ⇒ Object
Internal method.
Instance Method Details
#cama_strip_shortcodes(text) ⇒ Object
remove all shortcodes from text Arguments
text: String that contains shortcodes
return String
117 118 119 |
# File 'app/helpers/camaleon_cms/short_code_helper.rb', line 117 def cama_strip_shortcodes(text) text.gsub(/#{cama_reg_shortcode}/, "") end |
#do_shortcode(content, args = {}) ⇒ Object
run all shortcodes in the content content: (string) text to find a short codes args: custom arguments to pass for short codes render, sample: my_model, a: true
if args != Hash, this will re send as args = {owner: args}
args should be include the owner model who is doing the action to optimize DB queries
sample: do_shortcode(“hello [greeting ‘world’]!”, @my_post) ==> “hello world!” sample: do_shortcode(“hello [greeting ‘world’]”, ‘asd’, owner: @my_post) return rendered string
104 105 106 107 108 109 110 111 |
# File 'app/helpers/camaleon_cms/short_code_helper.rb', line 104 def do_shortcode(content, args = {}) args = {owner: args} unless args.is_a?(Hash) content.scan(/#{cama_reg_shortcode}/) do |item| shortcode, code, space, attrs = item content = content.sub(shortcode, _eval_shortcode(code, attrs, args)) end content end |
#render_shortcode(text, key, template = nil) ⇒ Object
render direct a shortcode text: text that contain the shortcode key: shortcode key template: template to render, if nil this will render default render file Also can be a function to execute that instead a render, sample: lambda{|attrs, args| return “my custom content”; } render_shortcode(“asda dasdasdas[owen a=‘1’] [bbb] sdasdas dasd as das[owen a=213]”, “owen”, lambda{|attrs, args| puts attrs; return “my test”; })
127 128 129 130 131 132 133 |
# File 'app/helpers/camaleon_cms/short_code_helper.rb', line 127 def render_shortcode(text, key, template = nil) text.scan(/#{cama_reg_shortcode(key)}/).each do |item| shortcode, code, space, attrs = item text = text.sub(shortcode, _eval_shortcode(code, attrs, {}, template)) end text end |
#shortcode_add(key, template = nil, descr = '') ⇒ Object
add shortcode key: shortcode key template: template to render, if nil will render “shortcode_templates/<key>” Also can be a function to execute that instead a render, sample: lambda{|attrs, args| return “my custom content”; } descr: description for shortcode
77 78 79 80 81 |
# File 'app/helpers/camaleon_cms/short_code_helper.rb', line 77 def shortcode_add(key, template = nil, descr = '') @_shortcodes << key @_shortcodes_template = @_shortcodes_template.merge({"#{key}"=> template}) if template.present? @_shortcodes_descr[key] = descr if descr.present? end |
#shortcode_change_template(key, template = nil) ⇒ Object
add or update shortcode template key: chortcode key to add or update template: template to render, if nil will render “shortcode_templates/<key>”
86 87 88 |
# File 'app/helpers/camaleon_cms/short_code_helper.rb', line 86 def shortcode_change_template(key, template = nil) @_shortcodes_template[key] = template end |
#shortcode_delete(key) ⇒ Object
delete shortcode key: chortcode key to delete
92 93 94 |
# File 'app/helpers/camaleon_cms/short_code_helper.rb', line 92 def shortcode_delete(key) @_shortcodes.delete(key) end |
#shortcodes_init ⇒ Object
Internal method
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/helpers/camaleon_cms/short_code_helper.rb', line 11 def shortcodes_init @_shortcodes = [] @_shortcodes_template = {} @_shortcodes_descr = {} shortcode_add("widget", nil, "Renderize the widget content in this place. Don't forget to create and copy the shortcode of your widgets in appearance -> widgets Sample: [widget widget_key]") shortcode_add("load_libraries", lambda{|attrs, args| cama_load_libraries(*attrs["data"].to_s.split(",")); return ""; }, "Permit to load libraries on demand, sample: [load_libraries data='datepicker,tinymce']") shortcode_add("asset", lambda{|attrs, args| url = attrs["as_path"].present? ? ActionController::Base.helpers.asset_url(attrs["file"]) : ActionController::Base.helpers.asset_url(attrs["file"]) if attrs["image"].present? ActionController::Base.helpers.image_tag(attrs["file"], class: attrs["class"], style: attrs["style"]) else url end }, "Permit to generate an asset url ( add file='' asset file path, add as_path='true' to generate only the path and not the full url, add class='my_class' to setup image class, add style='height: 100px; width: 200px;...' to setup image style, add image='true' to generate the image tag with this url), sample: <img src=\"[asset as_path='true' file='themes/my_theme/assets/img/signature.png']\" /> or [asset image='true' file='themes/my_theme/assets/img/signature.png' style='height: 50px;']") shortcode_add("data", lambda{|attrs, args| cama_shortcode_data(attrs, args) rescue "" }, "Permit to generate specific data of a post. Attributes: object: (String, defaut post) Model name: post | posttype | category | posttag | site | user |theme | navmenu id: (Integer) Post id key: (String) Post slug field: (String) Custom field key, you can add render_field='true' to render field as html element, also you can add index=2 to indicate the value in position 2 for multitple values attrs: (String) attribute name post: title | created_at | excerpt | url | link | thumb | updated_at | author_name | author_url posttype: title | created_at | excerpt | url | link | thumb | updated_at category: title | created_at | excerpt | url | link | thumb | updated_at posttag: title | created_at | excerpt | url | link | thumb | updated_at site: title | created_at | excerpt | url | link | thumb | updated_at user: title | created_at | excerpt | url | link | thumb | updated_at theme: title | created_at | excerpt | url | link | thumb | updated_at navmenu: title | created_at | excerpt | url | link | thumb | updated_at Note: If id and key is not present, then will be rendered for current model Sample: [data id='122' attr='title'] ==> return the title of post with id = 122 [data key='contact' attr='url'] ==> return the url of post with slug = contact [data key='contact' attr='link'] ==> return the link with title as text of the link of post with slug = contact [data object='site' attr='url'] ==> return the url of currrent site [data key='page' object='posttype' attr='url'] ==> return the url of post_type with slug = page [data field=icon index=2] ==> return the second value (multiple values) for this custom field with key=icon of current object [data key='contact' field='sub_title'] ==> return the value of the custom_field with key=sub_title registered for post.slug = contact [data object='site' field='sub_title'] ==> return the value of the custom_field with key=sub_title registered for current_site") end |