|
1 | 1 | require_relative './model/options.rb' |
| 2 | +require_relative './model/metadata.rb' |
| 3 | +require_relative './support/helper.rb' |
2 | 4 |
|
3 | 5 | module ContentstackUtils |
4 | | - def self.renderContent(content, options) |
| 6 | + def self.render_content(content, options) |
5 | 7 | if (content.instance_of? Array) |
6 | | - puts 'array' |
| 8 | + result = [] |
| 9 | + content.each do |n| |
| 10 | + result.push(render_string(n, options)) |
| 11 | + end |
| 12 | + result |
7 | 13 | elsif content.instance_of? String |
8 | | - puts 'string' |
| 14 | + render_string(content, options) |
9 | 15 | end |
10 | | - content |
| 16 | + end |
| 17 | + |
| 18 | + private_class_method def self.render_string(string, options) |
| 19 | + xml_doc = Nokogiri::HTML(appendFrame(string)) |
| 20 | + result = xml_doc.xpath('//documentfragmentcontainer').inner_html |
| 21 | + findEmbeddedObject(xml_doc).each do |metadata| |
| 22 | + object = findObject(metadata, options.entry) |
| 23 | + replaceString = '' |
| 24 | + if object!= nil && object.length() > 0 |
| 25 | + replaceString = options.render_option(object[0], metadata) |
| 26 | + end |
| 27 | + result = result.sub(metadata.element.to_html, replaceString) |
| 28 | + end |
| 29 | + result |
| 30 | + end |
| 31 | + |
| 32 | + private_class_method def self.findEmbeddedObject(doc) |
| 33 | + metadataArray = [] |
| 34 | + doc.xpath('//*[contains(@class, "embedded-asset") or contains(@class, "embedded-entry")]').each do |n| |
| 35 | + metadataArray.push(Model::Metadata.new(n)) |
| 36 | + end |
| 37 | + metadataArray |
| 38 | + end |
| 39 | + |
| 40 | + private_class_method def self.findObject(metadata, entry) |
| 41 | + if entry.has_key? '_embedded_items' |
| 42 | + embedItems = entry['_embedded_items'] |
| 43 | + keys = embedItems.keys |
| 44 | + keys.each do |key| |
| 45 | + object = embedItems[key].select { |embedObject| embedObject['uid'] == metadata.item_uid } |
| 46 | + if object != nil && object.length() > 0 |
| 47 | + return object |
| 48 | + end |
| 49 | + end |
| 50 | + # elsif entry.has_key? 'embeddedItems' |
| 51 | + # if entry['embeddedItems'].has_key? 'edges' |
| 52 | + # if entry['embeddedItems']['edges'].has_key? 'node' |
| 53 | + # node = entry['embeddedItems']['edges']['node'] |
| 54 | + # object = node.select { |embedObject| embedObject['uid'] == metadata.item_uid } |
| 55 | + # if object != nil && object.length() > 0 |
| 56 | + # return object |
| 57 | + # end |
| 58 | + # end |
| 59 | + # end |
| 60 | + end |
| 61 | + return nil |
11 | 62 | end |
12 | 63 | end |
0 commit comments