infopark_cloud_connector 6.9.4 → 6.9.5
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 +15 -0
- data/README +1 -3
- data/app/controllers/cms_controller.rb +7 -0
- data/app/controllers/rails_connector/default_cms_controller.rb +43 -0
- data/app/controllers/rails_connector/objs_controller.rb +29 -0
- data/app/controllers/rails_connector/widget_renderer.rb +1 -1
- data/app/controllers/rails_connector/workspaces_controller.rb +4 -0
- data/app/helpers/cms_helper.rb +7 -0
- data/app/helpers/cms_routing_helper.rb +7 -0
- data/app/helpers/rails_connector/cms_asset_helper.rb +24 -17
- data/app/helpers/rails_connector/cms_tag_helper.rb +9 -6
- data/app/helpers/rails_connector/default_cms_helper.rb +23 -0
- data/app/helpers/rails_connector/default_cms_routing_helper.rb +101 -0
- data/app/helpers/rails_connector/display_helper.rb +4 -30
- data/app/helpers/rails_connector/editing_helper.rb +3 -0
- data/app/helpers/rails_connector/layout_helper.rb +29 -0
- data/app/helpers/rails_connector/table_of_contents_helper.rb +22 -0
- data/app/models/named_link.rb +2 -0
- data/app/views/cms/_index.html.erb +7 -0
- data/app/views/cms/index.html.erb +1 -0
- data/app/views/errors/403_forbidden.html.erb +3 -0
- data/app/views/errors/410_gone.html.erb +7 -0
- data/app/views/rails_connector/_editing_javascript.html.erb +2 -0
- data/config/ca-bundle.crt +1 -1
- data/config/cms_routes.rb +14 -0
- data/config/locales/de.rails_connector.errors.yml +11 -0
- data/config/locales/de.rails_connector.lib.yml +6 -0
- data/config/locales/de.rails_connector.views.yml +9 -0
- data/config/locales/en.rails_connector.errors.yml +10 -0
- data/config/locales/en.rails_connector.lib.yml +6 -0
- data/config/locales/en.rails_connector.views.yml +9 -0
- data/config/routes.rb +4 -0
- data/lib/assets/javascripts/infopark_editing.js +689 -285
- data/lib/assets/stylesheets/infopark_editing.css +17 -0
- data/lib/infopark_cloud_connector.rb +22 -0
- data/lib/obj.rb +3 -0
- data/lib/rails_connector/attribute_content.rb +190 -0
- data/lib/rails_connector/authenticable.rb +30 -0
- data/lib/rails_connector/basic_obj.rb +25 -139
- data/lib/rails_connector/basic_widget.rb +35 -0
- data/lib/rails_connector/cms_accessible.rb +114 -0
- data/lib/rails_connector/cms_cache_storage.rb +1 -1
- data/lib/rails_connector/cms_dispatch_controller.rb +46 -0
- data/lib/rails_connector/cms_env.rb +68 -0
- data/lib/rails_connector/cms_test_request.rb +23 -0
- data/lib/rails_connector/configuration.rb +3 -2
- data/lib/rails_connector/core_extensions.rb +1 -0
- data/lib/rails_connector/core_extensions/time.rb +18 -0
- data/lib/rails_connector/date_attribute.rb +1 -17
- data/lib/rails_connector/engine.rb +57 -0
- data/lib/rails_connector/html_string.rb +19 -0
- data/lib/rails_connector/link.rb +102 -17
- data/lib/rails_connector/link_resolvable.rb +9 -0
- data/lib/rails_connector/migrations/migrator.rb +8 -4
- data/lib/rails_connector/migrations/workspace_lock.rb +3 -2
- data/lib/rails_connector/named_link.rb +1 -1
- data/lib/rails_connector/obj_data_from_service.rb +18 -0
- data/lib/rails_connector/string_tagging.rb +29 -0
- data/lib/rails_connector/type_computer.rb +30 -0
- data/lib/widget.rb +3 -0
- metadata +103 -18
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NjQxZDQ1MTE2NzI2YjU3MTQ3Zjg0MDY0MWFjZDEyZTE4Y2Q0MzQzMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YmNmZjYwMGZiYWRmZjRmODEzNGZlNGEwMWY4YmVlOTIyOTBiOTZjNA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
Mzk1OGU2Y2FjNmY0Mzc4ZDA5MmFhOTVkZDI4ZWQ0ZjA2YjI0NmEyNjYzZDMw
|
10
|
+
MDRiNzIwNDNjMzhkZjI4MDJjNTliNDI0NDg5ZDM3NzllOTBiNDcwZjg3NjQy
|
11
|
+
ODI5NGNhZjNhMzQ0MzgzNTE3MDVjMGRlMzg3NzUwMDM2MDU2MDU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZmNiYjYyMTkzY2M3NzkzYTcwM2NlODk0YjRlNDExZDQ2MzM2ZTA0ZDc3M2U2
|
14
|
+
YmRlM2EyNTUzNzlmMGJlOTg4YzA2NjhjOGNhNzFiOWNlMDhhMzEyNDVjNDg5
|
15
|
+
N2QyNWI0MjhmZDU2OTFhZWZkMTkzOGZlYzA4NmNjOGMzMjFkNTc=
|
data/README
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
= Infopark Cloud Connector
|
2
2
|
|
3
|
-
Infopark Cloud Connector is part of {https://rubygems.org/gems/infopark_rails_connector Infopark Rails Connector}.
|
4
|
-
|
5
3
|
The Cloud Connector makes CMS objects maintained by means of the cloud-based Infopark CMS available to your Rails application. It offers easy-to-use functionality for rendering CMS content, doing searches, etc.
|
6
4
|
|
7
|
-
For more information about Infopark
|
5
|
+
For more information about Infopark Cloud Connector, please visit {http://dev.infopark.net/ the Infopark Dev Center}. For details regarding recent changes to the Infopark CMS and the Cloud Connector can be found in our {http://dev.infopark.net/blog Dev Center Blog}.
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
# This controller provides some default includes ({CmsAccessible}),
|
4
|
+
# before filters (+load_object+, among others), and actions to simplify
|
5
|
+
# CMS object handling. It should never be used directly, but only as a
|
6
|
+
# super class to {CmsController}.
|
7
|
+
# @api public
|
8
|
+
class DefaultCmsController < ApplicationController
|
9
|
+
include CmsAccessible
|
10
|
+
before_filter :load_object
|
11
|
+
before_filter :ensure_object_is_active
|
12
|
+
before_filter :ensure_object_is_permitted
|
13
|
+
before_filter :set_google_expire_header
|
14
|
+
|
15
|
+
# Default Action. Delivers files directly if their mime type is not text/html
|
16
|
+
# @api public
|
17
|
+
def index
|
18
|
+
deliver_file if @obj.mime_type != "text/html"
|
19
|
+
end
|
20
|
+
|
21
|
+
# Toggles edit markers. The current status is stored in the session.
|
22
|
+
# @api public
|
23
|
+
def toggle_editmarkers
|
24
|
+
session[:hide_editmarkers] = !session[:hide_editmarkers]
|
25
|
+
redirect_to cms_id_url(@obj)
|
26
|
+
end
|
27
|
+
|
28
|
+
# This method indicates if this controller should be used automatically when an Obj is
|
29
|
+
# requested via the Rails Connector's standard routes. It returns true by default.
|
30
|
+
#
|
31
|
+
# Overwrite it to return false if you do want your controller to be excluded from Obj dispatching.
|
32
|
+
#
|
33
|
+
# You may also implement a method with the name {use_for_obj_dispatch?} in controllers not
|
34
|
+
# descending from {DefaultCmsController} to include them in Obj dispatching.
|
35
|
+
#
|
36
|
+
# @see Obj#controller_name
|
37
|
+
# @api public
|
38
|
+
def self.use_for_obj_dispatch?
|
39
|
+
true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -33,6 +33,16 @@ module RailsConnector
|
|
33
33
|
render json: {}
|
34
34
|
end
|
35
35
|
|
36
|
+
def copy
|
37
|
+
render json: copy_obj(get_obj_attributes(params[:id]), params[:parent_path])
|
38
|
+
end
|
39
|
+
|
40
|
+
def duplicate
|
41
|
+
attributes = get_obj_attributes(params[:id])
|
42
|
+
|
43
|
+
render json: copy_obj(attributes, parent_path(attributes['_path']))
|
44
|
+
end
|
45
|
+
|
36
46
|
def page_class_selection
|
37
47
|
valid_page_classes = Obj.valid_page_classes_beneath(params[:parent_path]) || all_page_classes
|
38
48
|
valid_page_classes.map!(&:to_s)
|
@@ -104,6 +114,25 @@ module RailsConnector
|
|
104
114
|
end
|
105
115
|
end
|
106
116
|
|
117
|
+
def copy_obj(copied_attributes, target_path=nil)
|
118
|
+
copied_attributes.delete('id')
|
119
|
+
copied_attributes.delete('_last_changed')
|
120
|
+
|
121
|
+
copied_attributes['_path'] = "#{target_path}/#{SecureRandom.hex(6)}"
|
122
|
+
|
123
|
+
CmsRestApi.task_unaware_request(
|
124
|
+
:post, "revisions/#{Workspace.current.revision_id}/objs", obj: copied_attributes)
|
125
|
+
end
|
126
|
+
|
127
|
+
def get_obj_attributes(id)
|
128
|
+
CmsRestApi.task_unaware_request(
|
129
|
+
:get, "revisions/#{Workspace.current.revision_id}/objs/#{id}")
|
130
|
+
end
|
131
|
+
|
132
|
+
def parent_path(path)
|
133
|
+
path.split('/')[0..-2].join('/')
|
134
|
+
end
|
135
|
+
|
107
136
|
def current_page
|
108
137
|
Obj.find(params[:current_page_id]) if params[:current_page_id].present?
|
109
138
|
end
|
@@ -31,7 +31,7 @@ class WidgetRenderer < AbstractController::Base
|
|
31
31
|
rescue ActionView::MissingTemplate => e
|
32
32
|
view_context.widget_thumbnail(
|
33
33
|
widget_dir.titleize,
|
34
|
-
'thumbnail.html.erb does not
|
34
|
+
'thumbnail.html.erb does not exist. Please provide one.',
|
35
35
|
view_context.image_tag('180x120.gif')
|
36
36
|
)
|
37
37
|
end
|
@@ -25,6 +25,10 @@ module RailsConnector
|
|
25
25
|
render json: CmsRestApi.task_unaware_request(:put, "workspaces/#{params[:id]}/publish", {})
|
26
26
|
end
|
27
27
|
|
28
|
+
def rebase
|
29
|
+
render json: CmsRestApi.task_unaware_request(:put, "workspaces/#{params[:id]}/rebase", {})
|
30
|
+
end
|
31
|
+
|
28
32
|
private
|
29
33
|
|
30
34
|
def workspace_params
|
@@ -44,12 +44,6 @@ module RailsConnector
|
|
44
44
|
if args.second.nil? || args.second.is_a?(Hash)
|
45
45
|
# Backwards compatibility.
|
46
46
|
target = args.first
|
47
|
-
if target.is_a?(LinkList)
|
48
|
-
ActiveSupport::Deprecation.warn(%{
|
49
|
-
Calling "cms_image_tag" with a "LinkList" is not allowed anymore.
|
50
|
-
Please use following syntax instead: cms_image_tag(@obj, :linklist).
|
51
|
-
})
|
52
|
-
end
|
53
47
|
|
54
48
|
tag_options = args.second || {}
|
55
49
|
tag_options.symbolize_keys!
|
@@ -63,7 +57,7 @@ module RailsConnector
|
|
63
57
|
tag_options = args.third || {}
|
64
58
|
editing_options = args.fourth || {}
|
65
59
|
|
66
|
-
cms_tag('img', obj, field_name, cms_image_tag_options(
|
60
|
+
cms_tag('img', obj, field_name, cms_image_tag_options(obj, field_name,
|
67
61
|
tag_options.symbolize_keys, editing_options.symbolize_keys))
|
68
62
|
end
|
69
63
|
|
@@ -71,16 +65,29 @@ module RailsConnector
|
|
71
65
|
|
72
66
|
private
|
73
67
|
|
74
|
-
def cms_image_tag_options(
|
75
|
-
tag_options.reverse_merge(
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
68
|
+
def cms_image_tag_options(obj, field_name, tag_options, editing_options)
|
69
|
+
tag_options.reverse_merge(src: cms_image_tag_src(obj, field_name, editing_options),
|
70
|
+
alt: cms_image_tag_alt(obj, field_name))
|
71
|
+
end
|
72
|
+
|
73
|
+
def cms_image_tag_src(obj, field_name, editing_options)
|
74
|
+
cms_image_tag_path(obj, field_name) || editing_options[:placeholder] ||
|
75
|
+
image_path('rails_connector/image_placeholder.png')
|
76
|
+
end
|
77
|
+
|
78
|
+
def cms_image_tag_alt(obj, field_name)
|
79
|
+
display_title(obj[field_name])
|
80
|
+
end
|
81
|
+
|
82
|
+
def cms_image_tag_path(obj, field_name)
|
83
|
+
field_type = obj.type_of_attribute(field_name)
|
84
|
+
field_value = obj[field_name]
|
85
|
+
|
86
|
+
case field_type
|
87
|
+
when 'reference' then field_value && cms_path(field_value)
|
88
|
+
when 'linklist'
|
89
|
+
path = cms_path(field_value)
|
90
|
+
path == DefaultCmsRoutingHelper::LINK_TO_EMPTY_LINKLIST ? nil : path
|
84
91
|
end
|
85
92
|
end
|
86
93
|
|
@@ -46,7 +46,7 @@ module RailsConnector
|
|
46
46
|
end
|
47
47
|
|
48
48
|
options = options.merge({
|
49
|
-
'data-ip-field-id' => obj.id,
|
49
|
+
'data-ip-private-field-id' => obj.id,
|
50
50
|
'data-ip-field-obj-class' => obj.obj_class,
|
51
51
|
'data-ip-field-name' => field_name,
|
52
52
|
'data-ip-field-type' => field_type,
|
@@ -61,7 +61,7 @@ module RailsConnector
|
|
61
61
|
if inplace_editing_allowed? && FIELD_TYPES_WITH_ORIGINAL_CONTENT.include?(field_type)
|
62
62
|
original_value = display_original_value(obj[field_name])
|
63
63
|
original_content = cms_tag_original_content(field_type, original_value)
|
64
|
-
options['data-ip-field-original-content'] = MultiJson.encode(original_content)
|
64
|
+
options['data-ip-private-field-original-content'] = MultiJson.encode(original_content)
|
65
65
|
end
|
66
66
|
|
67
67
|
inner_html = block_given? ? capture { yield } : display_value(obj[field_name])
|
@@ -150,8 +150,11 @@ module RailsConnector
|
|
150
150
|
inner_html << list.output
|
151
151
|
end
|
152
152
|
|
153
|
+
valid_page_classes = Obj.valid_page_classes_beneath(obj.path)
|
154
|
+
|
153
155
|
options = options.merge({
|
154
|
-
'data-ip-child-list-path' => obj.path,
|
156
|
+
'data-ip-private-child-list-path' => obj.path,
|
157
|
+
'data-ip-private-child-list-allowed-classes' => valid_page_classes.to_json,
|
155
158
|
}) if inplace_editing_allowed?
|
156
159
|
|
157
160
|
content_tag(tag_name, inner_html, options)
|
@@ -163,9 +166,9 @@ module RailsConnector
|
|
163
166
|
options = {}
|
164
167
|
|
165
168
|
if inplace_editing_allowed?
|
166
|
-
options['data-ip-widget-id'] = widget.id
|
167
|
-
options['data-ip-widget-obj-class'] = widget.obj_class
|
168
|
-
options['data-ip-widget-has-edit-view'] = true if renderer.has_edit_view?(widget.obj_class)
|
169
|
+
options['data-ip-private-widget-id'] = widget.id
|
170
|
+
options['data-ip-private-widget-obj-class'] = widget.obj_class
|
171
|
+
options['data-ip-private-widget-has-edit-view'] = true if renderer.has_edit_view?(widget.obj_class)
|
169
172
|
end
|
170
173
|
|
171
174
|
content_tag(:div, options) do
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
# This is a wrapper module for the default set of Rails Connector helper modules.
|
4
|
+
#
|
5
|
+
# To make autoloading from +CmsController+ work, this module must be wrapped
|
6
|
+
# by a module named +CmsHelper+:
|
7
|
+
#
|
8
|
+
# module CmsHelper
|
9
|
+
# include RailsConnector::DefaultCmsHelper
|
10
|
+
# end
|
11
|
+
# @api public
|
12
|
+
module DefaultCmsHelper
|
13
|
+
include DisplayHelper
|
14
|
+
include MarkerHelper
|
15
|
+
include CmsAssetHelper
|
16
|
+
include RailsConnector::CmsAssetHelper
|
17
|
+
include RailsConnector::TableOfContentsHelper
|
18
|
+
include RailsConnector::EditingHelper
|
19
|
+
include RailsConnector::LayoutHelper
|
20
|
+
include RailsConnector::CmsTagHelper
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
# @api public
|
4
|
+
module DefaultCmsRoutingHelper
|
5
|
+
# Returns the path for +target+ using the +CmsController+ routes.
|
6
|
+
# +target+ can be an +Obj+ or a +Link+ or a +LinkList+.
|
7
|
+
# If +target+ is a +Linklist+, it must be non-empty. The first +Link+ from the +LinkList+ will be used.
|
8
|
+
# +options+ are optional and include url settings such as path parameters or protocol.
|
9
|
+
# @return [String]
|
10
|
+
# @api public
|
11
|
+
def cms_path(target, options = {})
|
12
|
+
cms_path_or_url(target, "path", options)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns the absolute URL for target using the +CmsController+ routes.
|
16
|
+
# +target+ can be an +Obj+ or a +Link+ or a +LinkList+.
|
17
|
+
# If +target+ is a +Linklist+, it must be non-empty. The first +Link+ from the +LinkList+ will be used.
|
18
|
+
# +options+ are optional and include url settings such as path parameters or protocol.
|
19
|
+
# @return [String]
|
20
|
+
# @api public
|
21
|
+
def cms_url(target, options = {})
|
22
|
+
cms_path_or_url(target, "url", options)
|
23
|
+
end
|
24
|
+
|
25
|
+
LINK_TO_UNREACHABLE = "#__target_object_not_reachable"
|
26
|
+
LINK_TO_EMPTY_LINKLIST = "#__empty_linklist"
|
27
|
+
|
28
|
+
def cms_path_or_url(target, path_or_url, options = {})
|
29
|
+
if target.is_a?(Link)
|
30
|
+
cms_path_or_url_for_links(target, path_or_url, options)
|
31
|
+
elsif target.is_a?(Obj)
|
32
|
+
cms_path_or_url_for_objs(target, path_or_url, options)
|
33
|
+
elsif target.respond_to?(:first)
|
34
|
+
if target.first.is_a?(Link)
|
35
|
+
cms_path_or_url_for_links(target.first, path_or_url, options)
|
36
|
+
else
|
37
|
+
return LINK_TO_EMPTY_LINKLIST
|
38
|
+
end
|
39
|
+
else
|
40
|
+
raise "cms_path or cms_url was called with an instance of #{target.class}. "+
|
41
|
+
"It must only be called with an Obj or a Link or a non-empty LinkList."
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def cms_path_or_url_for_links(link, path_or_url, options = {})
|
46
|
+
return LINK_TO_UNREACHABLE if link.internal? && link.obj.nil?
|
47
|
+
url = basic_url_or_path_for_link(link, path_or_url, options)
|
48
|
+
url = url + "?#{link.query}" if link.query.present? && options.empty?
|
49
|
+
url = url + "##{link.fragment}" if link.fragment.present?
|
50
|
+
url
|
51
|
+
end
|
52
|
+
|
53
|
+
def cms_path_or_url_for_objs(obj, path_or_url, options = {})
|
54
|
+
permalink = obj.permalink
|
55
|
+
ignore_body_data_url = options.delete(:ignore_body_data_url)
|
56
|
+
if permalink && !Configuration.editor_interface_enabled?
|
57
|
+
__send__("cms_permalink_#{path_or_url}", options.merge(:permalink => permalink))
|
58
|
+
elsif obj.homepage? && !Configuration.editor_interface_enabled?
|
59
|
+
__send__("root_#{path_or_url}", options)
|
60
|
+
else
|
61
|
+
if obj.body_data_url && !ignore_body_data_url
|
62
|
+
enforce_protocol_from_request(obj.body_data_url)
|
63
|
+
elsif obj.binary? && !obj.file_extension.blank?
|
64
|
+
__send__("cms_id_#{path_or_url}",
|
65
|
+
options.merge(:id => obj.id, :slug => obj.slug.presence, :format => obj.file_extension))
|
66
|
+
else
|
67
|
+
routing_options = options.merge(:id => obj.id, :slug => obj.slug.presence)
|
68
|
+
__send__("cms_id_#{path_or_url}", routing_options)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def basic_url_or_path_for_link(link, path_or_url, options = {})
|
76
|
+
if link.internal?
|
77
|
+
__send__("cms_#{path_or_url}", link.obj, options)
|
78
|
+
else
|
79
|
+
url = link.external_url
|
80
|
+
options.delete(:ignore_body_data_url)
|
81
|
+
url = merge_options(url, options) if options.any?
|
82
|
+
url
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def merge_options(url, options)
|
87
|
+
parsed_url = URI.parse(url)
|
88
|
+
|
89
|
+
query = Rack::Utils.parse_query(parsed_url.query)
|
90
|
+
merged_query = query.merge(options.stringify_keys)
|
91
|
+
parsed_url.query = merged_query.to_query
|
92
|
+
|
93
|
+
parsed_url.to_s
|
94
|
+
end
|
95
|
+
|
96
|
+
def enforce_protocol_from_request(url)
|
97
|
+
request.ssl? && !url.starts_with?('https') ? url.gsub(/^http/, 'https') : url
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
@@ -67,39 +67,13 @@ module RailsConnector
|
|
67
67
|
|
68
68
|
private
|
69
69
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
return content_attribute unless content_attribute =~ LINK_EXPRESSION
|
75
|
-
link_map = content_attribute.source.text_links.each_with_object({}) do |link, map|
|
76
|
-
map[link.id.to_s] = link
|
77
|
-
end
|
78
|
-
content_attribute.gsub(%r(#{LINK_PATTERN}(['"]?))) do
|
79
|
-
link = link_map[$1.to_s]
|
80
|
-
if link.blank?
|
81
|
-
"#{CmsRoutingHelper::LINK_TO_UNREACHABLE}#{$2}"
|
82
|
-
else
|
83
|
-
uri = "#{cms_path(link, cms_path_options)}#{$2}"
|
84
|
-
html_link(link, uri)
|
70
|
+
def convert_links(html, cms_path_options = {})
|
71
|
+
if html
|
72
|
+
html.gsub(%r{<?\bobjid:([a-f0-9]{16})\b>?}) do
|
73
|
+
cms_path(Obj.find($1), cms_path_options)
|
85
74
|
end
|
86
75
|
end
|
87
76
|
end
|
88
77
|
|
89
|
-
def html_link(link, uri)
|
90
|
-
subst = uri
|
91
|
-
name, value =
|
92
|
-
case link.tag_name
|
93
|
-
when 'img', 'input'
|
94
|
-
['alt', link.title || ""]
|
95
|
-
when 'a', 'link'
|
96
|
-
['title', begin link.title unless link.title.blank? end]
|
97
|
-
end
|
98
|
-
if value
|
99
|
-
subst << %( #{name}="#{h(value)}")
|
100
|
-
end
|
101
|
-
subst << %( target="#{h(link.target)}") unless link.target.blank?
|
102
|
-
subst
|
103
|
-
end
|
104
78
|
end
|
105
79
|
end
|