33 lines
1 KiB
Ruby
33 lines
1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Banzai
|
||
|
# Object storing the current user, project, and other details used when
|
||
|
# parsing Markdown references.
|
||
|
class RenderContext
|
||
|
attr_reader :current_user
|
||
|
|
||
|
# default_project - The default project to use for all documents, if any.
|
||
|
# current_user - The user viewing the document, if any.
|
||
|
def initialize(default_project = nil, current_user = nil)
|
||
|
@current_user = current_user
|
||
|
@projects = Hash.new(default_project)
|
||
|
end
|
||
|
|
||
|
# Associates an HTML document with a Project.
|
||
|
#
|
||
|
# document - The HTML document to map to a Project.
|
||
|
# object - The object that produced the HTML document.
|
||
|
def associate_document(document, object)
|
||
|
# XML nodes respond to "document" but will return a Document instance,
|
||
|
# even when they belong to a DocumentFragment.
|
||
|
document = document.document if document.fragment?
|
||
|
|
||
|
@projects[document] = object.project if object.respond_to?(:project)
|
||
|
end
|
||
|
|
||
|
def project_for_node(node)
|
||
|
@projects[node.document]
|
||
|
end
|
||
|
end
|
||
|
end
|