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 } } | |