Class: Banzai::Filter::References::ExternalIssueReferenceFilter::LinkResolutionFilter
- Inherits:
-
HTML::Pipeline::Filter
- Object
- HTML::Pipeline::Filter
- Banzai::Filter::References::ExternalIssueReferenceFilter::LinkResolutionFilter
- Defined in:
- lib/banzai/filter/references/external_issue_reference_filter.rb
Overview
Called from PostProcessPipeline to add hrefs to anchors created above.
We might be operating on cached HTML which already has hrefs; replace them anyway, as they could be out of date.
Instance Method Summary collapse
Instance Method Details
#call ⇒ Object
100 101 102 103 104 105 106 107 108 109 |
# File 'lib/banzai/filter/references/external_issue_reference_filter.rb', line 100 def call # Early return if the project isn't using an external tracker return doc if project.nil? || ExternalIssueReferenceFilter.default_issues_tracker?(project) doc.xpath(query).each do |node| node["href"] = url_for_issue(node["data-external-issue"]) end doc end |
#project ⇒ Object
117 118 119 |
# File 'lib/banzai/filter/references/external_issue_reference_filter.rb', line 117 def project context[:project] end |
#query ⇒ Object
111 112 113 114 115 |
# File 'lib/banzai/filter/references/external_issue_reference_filter.rb', line 111 def query @query ||= %{descendant-or-self::a[ @data-reference-type="external_issue" and boolean(@data-external-issue) ]} end |
#url_for_issue(issue_id) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/banzai/filter/references/external_issue_reference_filter.rb', line 121 def url_for_issue(issue_id) url = if context[:only_path] project.external_issue_tracker.issue_path(issue_id) else project.external_issue_tracker.issue_url(issue_id) end # Ensure we return a valid URL to prevent possible XSS. URI.parse(url).to_s rescue URI::InvalidURIError '' end |