an editable element knows the page where it has been parsed, this is required for fixed elements in a parent page in order to find its content

did committed Sep 26, 2015
commit fccc4fb62b3343aca76c181b4732fe46257b4c30
Showing 5 changed files with 17 additions and 5 deletions
locomotive/steam/liquid/tags/editable/base.rb b/lib/locomotive/steam/liquid/tags/editable/base.rb +13 -1
@@ @@ -11,6 +11,7 @@ module Locomotive
def initialize(tag_name, markup, options)
if markup =~ Syntax
+ @page_fullpath = options[:page].fullpath
@slug = $1.gsub(/[\"\']/, '')
@element_options = { fixed: false, inline_editing: true }
markup.scan(::Liquid::TagAttributes) { |key, value| @element_options[key.to_sym] = value.gsub(/^[\"\']/, '').gsub(/[\"\']$/, '') }
@@ @@ -31,7 +32,7 @@ module Locomotive
def render(context)
service = context.registers[:services].editable_element
- page = context.registers[:page]
+ page = fetch_page(context)
block = @element_options[:block] || context['block'].try(:name)
if element = service.find(page, block, @slug)
@@ @@ -44,6 +45,17 @@ module Locomotive
protected
+ def fetch_page(context)
+ page = context.registers[:page]
+
+ return page if page.fullpath == @page_fullpath
+
+ pages = context.registers[:pages] ||= {}
+ service = context.registers[:services].page_finder
+
+ pages[@page_fullpath] ||= service.find(@page_fullpath)
+ end
+
def default_element_attributes
{
block: self.current_inherited_block_name,
spec/unit/liquid/tags/editable/control_spec.rb +1 -1
@@ @@ -2,7 +2,7 @@ require 'spec_helper'
describe Locomotive::Steam::Liquid::Tags::Editable::Control do
- let(:page) { instance_double('Page') }
+ let(:page) { instance_double('Page', fullpath: 'hello-world') }
let!(:listener) { Liquid::SimpleEventsListener.new }
let(:options) { { page: page } }
spec/unit/liquid/tags/editable/file_spec.rb +1 -1
@@ @@ -2,7 +2,7 @@ require 'spec_helper'
describe Locomotive::Steam::Liquid::Tags::Editable::File do
- let(:page) { instance_double('Page', updated_at: DateTime.parse('2007-06-29 21:00:00')) }
+ let(:page) { instance_double('Page', fullpath: 'hello-world', updated_at: DateTime.parse('2007-06-29 21:00:00')) }
let!(:listener) { Liquid::SimpleEventsListener.new }
let(:options) { { page: page } }
spec/unit/liquid/tags/editable/model_spec.rb +1 -1
@@ @@ -2,7 +2,7 @@ require 'spec_helper'
describe Locomotive::Steam::Liquid::Tags::Editable::Model do
- let(:page) { instance_double('Page') }
+ let(:page) { instance_double('Page', fullpath: 'hello-world') }
let!(:listener) { Liquid::SimpleEventsListener.new }
let(:options) { { page: page } }
spec/unit/liquid/tags/editable/text_spec.rb +1 -1
@@ @@ -2,7 +2,7 @@ require 'spec_helper'
describe Locomotive::Steam::Liquid::Tags::Editable::Text do
- let(:page) { instance_double('Page') }
+ let(:page) { instance_double('Page', fullpath: 'hello-world') }
let!(:listener) { Liquid::SimpleEventsListener.new }
let(:options) { { page: page } }