contentstack_utils 1.1.3.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,115 +1,122 @@
1
- require_relative '../interface/renderable.rb'
2
- require_relative './metadata.rb'
3
-
4
- module ContentstackUtils
5
- module Model
6
- class Options < Interface::Rendarable
7
-
8
- def initialize(entry = nil)
9
- @entry = entry
10
- end
11
-
12
- def entry
13
- @entry
14
- end
15
-
16
- def render_option(embeddedObject, metadata)
17
- renderString = ''
18
- case metadata.style_type
19
- when 'block'
20
- renderString = "<div><p>#{embeddedObject['title'] || embeddedObject['uid']}</p><p>Content type: <span>#{embeddedObject['_content_type_uid'] || embeddedObject['system']['content_type_uid']}</span></p></div>"
21
- when 'inline'
22
- renderString = "<span>#{embeddedObject["title"] || embeddedObject["uid"]}</span>";
23
- when 'link'
24
- metadata.get_attribute_value("href")
25
- renderString = "<a href='#{metadata.get_attribute_value("href") || embeddedObject["url"] || embeddedObject["title"] || embeddedObject["uid"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["title"] || embeddedObject["uid"]))}</a>";
26
- when 'display'
27
- renderString = "<img src='#{metadata.get_attribute_value("src")|| embeddedObject["url"]}' alt='#{(metadata.attributes["alt"] ? metadata.attributes["alt"].value : (embeddedObject["title"] || embeddedObject["filename"] || embeddedObject["uid"]))}' />";
28
- when 'download'
29
- renderString = "<a href='#{metadata.get_attribute_value("href") || embeddedObject["url"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["filename"] || embeddedObject["title"] || embeddedObject["uid"]))}</a>";
30
- end
31
- renderString
32
- end
33
-
34
- def render_mark(mark_type, text)
35
- renderString = text
36
- case mark_type
37
- when 'bold'
38
- renderString = "<strong>#{text}</strong>"
39
- when 'italic'
40
- renderString = "<em>#{text}</em>"
41
- when 'underline'
42
- renderString = "<u>#{text}</u>"
43
- when 'strikethrough'
44
- renderString = "<strike>#{text}</strike>"
45
- when 'inlineCode'
46
- renderString = "<span>#{text}</span>"
47
- when 'subscript'
48
- renderString = "<sub>#{text}</sub>"
49
- when 'superscript'
50
- renderString = "<sup>#{text}</sup>"
51
- end
52
- renderString
53
- end
54
-
55
- def render_node(node_type, node, inner_html)
56
- renderString = ""
57
- case node_type
58
- when 'doc'
59
- renderString = ""
60
- when 'p'
61
- renderString = "<p>#{inner_html}</p>"
62
- when 'a'
63
- renderString = "<a href='#{node["attrs"]["href"] || node["attrs"]["url"] || ""}'>#{inner_html}</a>"
64
- when 'img'
65
- renderString = "<img src='#{node["attrs"]["src"] || node["attrs"]["url"] || ""}' />#{inner_html}"
66
- when 'embed'
67
- renderString = "<iframe src='#{node["attrs"]["src"] || node["attrs"]["url"] || ""}'></iframe>"
68
- when 'h1'
69
- renderString = "<h1>#{inner_html}</h1>"
70
- when 'h2'
71
- renderString = "<h2>#{inner_html}</h2>"
72
- when 'h3'
73
- renderString = "<h3>#{inner_html}</h3>"
74
- when 'h4'
75
- renderString = "<h4>#{inner_html}</h4>"
76
- when 'h5'
77
- renderString = "<h5>#{inner_html}</h5>"
78
- when 'h6'
79
- renderString = "<h6>#{inner_html}</h6>"
80
- when 'ol'
81
- renderString = "<ol>#{inner_html}</ol>"
82
- when 'ul'
83
- renderString = "<ul>#{inner_html}</ul>"
84
- when 'li'
85
- renderString = "<li>#{inner_html}</li>"
86
- when 'hr'
87
- renderString = "<hr />"
88
- when 'table'
89
- renderString = "<table>#{inner_html}</table>"
90
- when 'thead'
91
- renderString = "<thead>#{inner_html}</thead>"
92
- when 'tbody'
93
- renderString = "<tbody>#{inner_html}</tbody>"
94
- when 'tfoot'
95
- renderString = "<tfoot>#{inner_html}</tfoot>"
96
- when 'tr'
97
- renderString = "<tr>#{inner_html}</tr>"
98
- when 'th'
99
- renderString = "<th>#{inner_html}</th>"
100
- when 'td'
101
- renderString = "<td>#{inner_html}</td>"
102
- when 'blockquote'
103
- renderString = "<blockquote>#{inner_html}</blockquote>"
104
- when 'code'
105
- renderString = "<code>#{inner_html}</code>"
106
- when 'reference'
107
- renderString = ""
108
- when 'span'
109
- renderString = "<span>#{inner_html}</span>"
110
- end
111
- renderString
112
- end
113
- end
114
- end
115
- end
1
+ require_relative '../interface/renderable.rb'
2
+ require_relative './metadata.rb'
3
+
4
+ module ContentstackUtils
5
+ module Model
6
+ class Options < Interface::Rendarable
7
+
8
+ def initialize(entry = nil)
9
+ @entry = entry
10
+ end
11
+
12
+ def entry
13
+ @entry
14
+ end
15
+
16
+ def render_option(embeddedObject, metadata)
17
+ renderString = ''
18
+ case metadata.style_type
19
+ when 'block'
20
+ renderString = "<div><p>#{embeddedObject['title'] || embeddedObject['uid']}</p><p>Content type: <span>#{embeddedObject['_content_type_uid'] || embeddedObject['system']['content_type_uid']}</span></p></div>"
21
+ when 'inline'
22
+ renderString = "<span>#{embeddedObject["title"] || embeddedObject["uid"]}</span>";
23
+ when 'link'
24
+ metadata.get_attribute_value("href")
25
+ renderString = "<a href='#{metadata.get_attribute_value("href") || embeddedObject["url"] || embeddedObject["title"] || embeddedObject["uid"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["title"] || embeddedObject["uid"]))}</a>";
26
+ when 'display'
27
+ renderString = "<img src='#{metadata.get_attribute_value("src")|| embeddedObject["url"]}' alt='#{(metadata.attributes["alt"] ? metadata.attributes["alt"].value : (embeddedObject["title"] || embeddedObject["filename"] || embeddedObject["uid"]))}' />";
28
+ when 'download'
29
+ renderString = "<a href='#{metadata.get_attribute_value("href") || embeddedObject["url"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["filename"] || embeddedObject["title"] || embeddedObject["uid"]))}</a>";
30
+ end
31
+ renderString
32
+ end
33
+
34
+ def render_mark(mark_type, text)
35
+ renderString = text
36
+ case mark_type
37
+ when 'bold'
38
+ renderString = "<strong>#{text}</strong>"
39
+ when 'italic'
40
+ renderString = "<em>#{text}</em>"
41
+ when 'underline'
42
+ renderString = "<u>#{text}</u>"
43
+ when 'strikethrough'
44
+ renderString = "<strike>#{text}</strike>"
45
+ when 'inlineCode'
46
+ renderString = "<span>#{text}</span>"
47
+ when 'subscript'
48
+ renderString = "<sub>#{text}</sub>"
49
+ when 'superscript'
50
+ renderString = "<sup>#{text}</sup>"
51
+ when 'break'
52
+ renderString = "<br />"
53
+ end
54
+ renderString
55
+ end
56
+
57
+ def render_node(node_type, node, inner_html)
58
+ renderString = ""
59
+ case node_type
60
+ when 'doc'
61
+ renderString = ""
62
+ when 'p'
63
+ renderString = "<p>#{inner_html}</p>"
64
+ when 'a'
65
+ renderString = "<a href='#{node["attrs"]["href"] || node["attrs"]["url"] || ""}'>#{inner_html}</a>"
66
+ when 'img'
67
+ renderString = "<img src='#{node["attrs"]["src"] || node["attrs"]["url"] || ""}' />#{inner_html}"
68
+ when 'embed'
69
+ renderString = "<iframe src='#{node["attrs"]["src"] || node["attrs"]["url"] || ""}'></iframe>"
70
+ when 'h1'
71
+ renderString = "<h1>#{inner_html}</h1>"
72
+ when 'h2'
73
+ renderString = "<h2>#{inner_html}</h2>"
74
+ when 'h3'
75
+ renderString = "<h3>#{inner_html}</h3>"
76
+ when 'h4'
77
+ renderString = "<h4>#{inner_html}</h4>"
78
+ when 'h5'
79
+ renderString = "<h5>#{inner_html}</h5>"
80
+ when 'h6'
81
+ renderString = "<h6>#{inner_html}</h6>"
82
+ when 'ol'
83
+ renderString = "<ol>#{inner_html}</ol>"
84
+ when 'ul'
85
+ renderString = "<ul>#{inner_html}</ul>"
86
+ when 'li'
87
+ renderString = "<li>#{inner_html}</li>"
88
+ when 'hr'
89
+ renderString = "<hr />"
90
+ when 'table'
91
+ renderString = "<table>#{inner_html}</table>"
92
+ when 'thead'
93
+ renderString = "<thead>#{inner_html}</thead>"
94
+ when 'tbody'
95
+ renderString = "<tbody>#{inner_html}</tbody>"
96
+ when 'tfoot'
97
+ renderString = "<tfoot>#{inner_html}</tfoot>"
98
+ when 'tr'
99
+ renderString = "<tr>#{inner_html}</tr>"
100
+ when 'th'
101
+ renderString = "<th>#{inner_html}</th>"
102
+ when 'td'
103
+ renderString = "<td>#{inner_html}</td>"
104
+ when 'blockquote'
105
+ renderString = "<blockquote>#{inner_html}</blockquote>"
106
+ when 'code'
107
+ renderString = "<code>#{inner_html}</code>"
108
+ when 'reference'
109
+ if (node["attrs"]['type'] === 'asset')
110
+ renderString = "<img src=#{node["attrs"]['asset-link']} alt=#{node["attrs"]['asset-name']} />"
111
+ else
112
+ renderString = ""
113
+ end
114
+
115
+ when 'span'
116
+ renderString = "<span>#{inner_html}</span>"
117
+ end
118
+ renderString
119
+ end
120
+ end
121
+ end
122
+ end
@@ -1,3 +1,3 @@
1
- def appendFrame(string)
2
- "<documentfragmentcontainer>#{string}</documentfragmentcontainer>"
1
+ def appendFrame(string)
2
+ "<documentfragmentcontainer>#{string}</documentfragmentcontainer>"
3
3
  end
@@ -1,163 +1,171 @@
1
- require_relative './model/options.rb'
2
- require_relative './model/metadata.rb'
3
- require_relative './support/helper.rb'
4
- require 'nokogiri'
5
-
6
- module ContentstackUtils
7
- def self.render_content(content, options)
8
- if (content.instance_of? Array)
9
- result = []
10
- content.each do |n|
11
- result.push(render_string(n, options))
12
- end
13
- result
14
- elsif content.instance_of? String
15
- render_string(content, options)
16
- end
17
- end
18
-
19
- def self.json_to_html(content, options)
20
- reference = -> (metadata){
21
- result = ""
22
- if options.entry != nil
23
- object = findObject(metadata, options.entry)
24
- if object!= nil && object.length() > 0
25
- result = options.render_option(object[0], metadata)
26
- end
27
- end
28
- result
29
- }
30
- if (content.instance_of? Array)
31
- result = []
32
- content.each do |n|
33
- result.push(json_doc_to_html(n, options, reference) )
34
- end
35
- result
36
- elsif content.instance_of? Hash
37
- json_doc_to_html(content, options, reference)
38
- end
39
- end
40
-
41
- def self.json_doc_to_html(node, options, callback)
42
- result = ""
43
- if node["children"] && node["children"].length() > 0
44
- result = node_children_to_html(node["children"], options, callback)
45
- end
46
- result
47
- end
48
-
49
- private_class_method def self.node_children_to_html(nodes, options, callback)
50
- nodes.map {|node| node_to_html(node, options, callback)}.join("")
51
- end
52
-
53
- private_class_method def self.node_to_html(node, options, callback)
54
- html_result = ""
55
- if node["type"] == nil && node["text"]
56
- html_result = text_to_htms(node, options)
57
- elsif node["type"]
58
- if node["type"] == "reference"
59
- metadata = Model::Metadata.new(node)
60
- html_result = callback.call(metadata)
61
- else
62
- inner_html = json_doc_to_html(node, options, callback)
63
- html_result = options.render_node(node["type"], node, inner_html)
64
- end
65
- end
66
- html_result
67
- end
68
-
69
- private_class_method def self.text_to_htms(node, options)
70
- text = node["text"]
71
- if node["superscript"]
72
- text = options.render_mark("superscript", text)
73
- end
74
- if node["subscript"]
75
- text = options.render_mark("subscript", text)
76
- end
77
- if node["inlineCode"]
78
- text = options.render_mark("inlineCode", text)
79
- end
80
- if node["strikethrough"]
81
- text = options.render_mark("strikethrough", text)
82
- end
83
- if node["underline"]
84
- text = options.render_mark("underline", text)
85
- end
86
- if node["italic"]
87
- text = options.render_mark("italic", text)
88
- end
89
- if node["bold"]
90
- text = options.render_mark("bold", text)
91
- end
92
- text
93
- end
94
-
95
- private_class_method def self.render_string(string, options)
96
- xml_doc = Nokogiri::HTML(appendFrame(string))
97
- result = xml_doc.xpath('//documentfragmentcontainer').inner_html
98
- findEmbeddedObject(xml_doc).each do |metadata|
99
- object = findObject(metadata, options.entry)
100
- replaceString = ''
101
- if object!= nil && object.length() > 0
102
- replaceString = options.render_option(object[0], metadata)
103
- end
104
- result = result.sub(metadata.element.to_html, replaceString)
105
- end
106
- result
107
- end
108
-
109
- private_class_method def self.findEmbeddedObject(doc)
110
- metadataArray = []
111
- doc.xpath('//*[contains(@class, "embedded-asset") or contains(@class, "embedded-entry")]').each do |n|
112
- metadataArray.push(Model::Metadata.new(n))
113
- end
114
- metadataArray
115
- end
116
-
117
- private_class_method def self.findObject(metadata, entry)
118
- if entry.has_key? '_embedded_items'
119
- embedItems = entry['_embedded_items']
120
- keys = embedItems.keys
121
- keys.each do |key|
122
- object = embedItems[key].select { |embedObject| embedObject['uid'] == metadata.item_uid }
123
- if object != nil && object.length() > 0
124
- return object
125
- end
126
- end
127
- end
128
- return nil
129
- end
130
-
131
- module GQL
132
- include ContentstackUtils
133
- def self.json_to_html(content, options)
134
- embeddedItems = []
135
- if content.has_key? 'embedded_itemsConnection'
136
- embeddedItems = content['embedded_itemsConnection']['edges'] || []
137
- end
138
- reference = -> (metadata){
139
- result = ""
140
- if embeddedItems != nil
141
- object = embeddedItems.select { |embedObject| embedObject['node']["system"]["uid"] == metadata.item_uid }
142
- if object != nil && object.length() > 0
143
- result = options.render_option(object[0]["node"], metadata)
144
- end
145
- end
146
- result
147
- }
148
-
149
- if content.has_key? 'json'
150
- json = content['json']
151
- if (json.instance_of? Array)
152
- result = []
153
- json.each do |n|
154
- result.push(ContentstackUtils.json_doc_to_html(n, options, reference))
155
- end
156
- result
157
- elsif json.instance_of? Hash
158
- ContentstackUtils.json_doc_to_html(json, options, reference)
159
- end
160
- end
161
- end
162
- end
163
- end
1
+ require_relative './model/options.rb'
2
+ require_relative './model/metadata.rb'
3
+ require_relative './support/helper.rb'
4
+ require 'nokogiri'
5
+
6
+ module ContentstackUtils
7
+ def self.render_content(content, options)
8
+ if (content.instance_of? Array)
9
+ result = []
10
+ content.each do |n|
11
+ result.push(render_string(n, options))
12
+ end
13
+ result
14
+ elsif content.instance_of? String
15
+ render_string(content, options)
16
+ end
17
+ end
18
+
19
+ def self.json_to_html(content, options)
20
+ reference = -> (metadata){
21
+ result = ""
22
+ if options.entry != nil
23
+ object = findObject(metadata, options.entry)
24
+ if object!= nil && object.length() > 0
25
+ result = options.render_option(object[0], metadata)
26
+ else
27
+ content.each do |node|
28
+ inner_html = json_doc_to_html(node, options, reference)
29
+ result = options.render_node(node["type"], node, inner_html)
30
+ end
31
+ end
32
+ end
33
+ result
34
+ }
35
+ if (content.instance_of? Array)
36
+ result = []
37
+ content.each do |n|
38
+ result.push(json_doc_to_html(n, options, reference) )
39
+ end
40
+ result
41
+ elsif content.instance_of? Hash
42
+ json_doc_to_html(content, options, reference)
43
+ end
44
+ end
45
+
46
+ def self.json_doc_to_html(node, options, callback)
47
+ result = ""
48
+ if node["children"] && node["children"].length() > 0
49
+ result = node_children_to_html(node["children"], options, callback)
50
+ end
51
+ result
52
+ end
53
+
54
+ private_class_method def self.node_children_to_html(nodes, options, callback)
55
+ nodes.map {|node| node_to_html(node, options, callback)}.join("")
56
+ end
57
+
58
+ private_class_method def self.node_to_html(node, options, callback)
59
+ html_result = ""
60
+ if node["type"] == nil && node["text"]
61
+ html_result = text_to_html(node, options)
62
+ elsif node["type"]
63
+ if node["type"] == "reference"
64
+ metadata = Model::Metadata.new(node)
65
+ html_result = callback.call(metadata)
66
+ else
67
+ inner_html = json_doc_to_html(node, options, callback)
68
+ html_result = options.render_node(node["type"], node, inner_html)
69
+ end
70
+ end
71
+ html_result
72
+ end
73
+
74
+ private_class_method def self.text_to_html(node, options)
75
+ text = node["text"]
76
+ if node["superscript"]
77
+ text = options.render_mark("superscript", text)
78
+ end
79
+ if node["subscript"]
80
+ text = options.render_mark("subscript", text)
81
+ end
82
+ if node["inlineCode"]
83
+ text = options.render_mark("inlineCode", text)
84
+ end
85
+ if node["strikethrough"]
86
+ text = options.render_mark("strikethrough", text)
87
+ end
88
+ if node["underline"]
89
+ text = options.render_mark("underline", text)
90
+ end
91
+ if node["italic"]
92
+ text = options.render_mark("italic", text)
93
+ end
94
+ if node["bold"]
95
+ text = options.render_mark("bold", text)
96
+ end
97
+ if node["break"]
98
+ text = options.render_mark("break", text)
99
+ end
100
+ text
101
+ end
102
+
103
+ private_class_method def self.render_string(string, options)
104
+ xml_doc = Nokogiri::HTML(appendFrame(string))
105
+ result = xml_doc.xpath('//documentfragmentcontainer').inner_html
106
+ findEmbeddedObject(xml_doc).each do |metadata|
107
+ object = findObject(metadata, options.entry)
108
+ replaceString = ''
109
+ if object!= nil && object.length() > 0
110
+ replaceString = options.render_option(object[0], metadata)
111
+ end
112
+ result = result.sub(metadata.element.to_html, replaceString)
113
+ end
114
+ result
115
+ end
116
+
117
+ private_class_method def self.findEmbeddedObject(doc)
118
+ metadataArray = []
119
+ doc.xpath('//*[contains(@class, "embedded-asset") or contains(@class, "embedded-entry")]').each do |n|
120
+ metadataArray.push(Model::Metadata.new(n))
121
+ end
122
+ metadataArray
123
+ end
124
+
125
+ private_class_method def self.findObject(metadata, entry)
126
+ if entry.has_key? '_embedded_items'
127
+ embedItems = entry['_embedded_items']
128
+ keys = embedItems.keys
129
+ keys.each do |key|
130
+ object = embedItems[key].select { |embedObject| embedObject['uid'] == metadata.item_uid }
131
+ if object != nil && object.length() > 0
132
+ return object
133
+ end
134
+ end
135
+ end
136
+ return nil
137
+ end
138
+
139
+ module GQL
140
+ include ContentstackUtils
141
+ def self.json_to_html(content, options)
142
+ embeddedItems = []
143
+ if content.has_key? 'embedded_itemsConnection'
144
+ embeddedItems = content['embedded_itemsConnection']['edges'] || []
145
+ end
146
+ reference = -> (metadata){
147
+ result = ""
148
+ if embeddedItems != nil
149
+ object = embeddedItems.select { |embedObject| embedObject['node']["system"]["uid"] == metadata.item_uid }
150
+ if object != nil && object.length() > 0
151
+ result = options.render_option(object[0]["node"], metadata)
152
+ end
153
+ end
154
+ result
155
+ }
156
+
157
+ if content.has_key? 'json'
158
+ json = content['json']
159
+ if (json.instance_of? Array)
160
+ result = []
161
+ json.each do |n|
162
+ result.push(ContentstackUtils.json_doc_to_html(n, options, reference))
163
+ end
164
+ result
165
+ elsif json.instance_of? Hash
166
+ ContentstackUtils.json_doc_to_html(json, options, reference)
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
@@ -1,3 +1,3 @@
1
- module ContentstackUtils
2
- VERSION = "1.1.3.1"
1
+ module ContentstackUtils
2
+ VERSION = "1.2.0"
3
3
  end
@@ -1,4 +1,4 @@
1
- $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
2
-
3
- require 'contentstack_utils/version'
1
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
2
+
3
+ require 'contentstack_utils/version'
4
4
  require 'contentstack_utils/utils'