Sha256: eb5ffe32e5bb24711a4d58a407c0814b6fb5cad7ed27a35228419d6ae1091d96

Contents?: true

Size: 1.68 KB

Versions: 35

Compression:

Stored size: 1.68 KB

Contents

module Scrivito
class BaseWidgetTag < Struct.new(
    :view, :widget, :placement_modification, :render_context, :inner_tag)

  DEFAULT_RENDER_CONTEXT = 'show'
  DEFAULT_TAG = 'div'

  include TagRenderer

  def initialize(view, widget, options = {})
    super view, widget, *options.values_at(:placement_modification, :render_context, :inner_tag)
  end

  def content
    raise NotImplementedError
  end

  def tag_name
    inner_tag || DEFAULT_TAG
  end

  def options
    options = {}

    if inplace_editing_allowed?
      options['private-widget'] = true
      options['private-widget-id'] = widget.id
      options['widget-obj-class'] = widget.obj_class
      options['private-widget-description-for-editor'] = description_for_editor

      if has_widget_details_view?(widget)
        options['private-widget-has-details-view'] = true
      end

      comparison = editing_context.comparison
      options['private-widget-modification'] =
        if comparison.revision == widget.revision
          if placement_modification && !widget.in_revision(Workspace.current.revision)
            Modification::DELETED
          end
        else
          comparison.modification(widget)
        end

      options['private-widget-placement-modification'] =
        placement_modification
    end

    options
  end

  private

  def has_widget_details_view?(widget)
    view.lookup_context.find(widget.details_view_path).present?
  rescue ActionView::MissingTemplate
    false
  end

  def description_for_editor
    raise NotImplementedError
  end

  def inplace_editing_allowed?
    editing_context.authenticated_editor?
  end

  def editing_context
    EditingContextMiddleware.from_request(view.request)
  end

end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
scrivito_sdk-1.18.0 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.18.0.rc1 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.17.0 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.17.0.rc3 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.17.0.rc2 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.17.0.rc1 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.16.0 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.16.0.rc2 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.16.0.rc1 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.15.0 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.15.0.rc2 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.15.0.rc1 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.14.0 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.14.0.rc3 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.14.0.rc2 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.14.0.rc1 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.13.0 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.13.0.rc2 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.13.0.rc1 app/cms/scrivito/base_widget_tag.rb
scrivito_sdk-1.12.0 app/cms/scrivito/base_widget_tag.rb