2018-05-09 12:01:36 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Banzai
|
|
|
|
# Object storing the current user, project, and other details used when
|
|
|
|
# parsing Markdown references.
|
|
|
|
class RenderContext
|
2023-05-27 22:25:52 +05:30
|
|
|
attr_reader :current_user, :options
|
2018-05-09 12:01:36 +05:30
|
|
|
|
|
|
|
# default_project - The default project to use for all documents, if any.
|
|
|
|
# current_user - The user viewing the document, if any.
|
2023-05-27 22:25:52 +05:30
|
|
|
def initialize(default_project = nil, current_user = nil, options: {})
|
2018-05-09 12:01:36 +05:30
|
|
|
@current_user = current_user
|
|
|
|
@projects = Hash.new(default_project)
|
2023-05-27 22:25:52 +05:30
|
|
|
@options = options
|
2018-05-09 12:01:36 +05:30
|
|
|
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
|