You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docuseal/vendor/bundle/ruby/4.0.0/gems/loofah-2.25.1/lib/loofah.rb

174 lines
5.6 KiB

# frozen_string_literal: true
require "nokogiri"
module Loofah
class << self
def html5_support?
# Note that Loofah can only support HTML5 in Nokogiri >= 1.14.0 because it requires the
# subclassing fix from https://github.com/sparklemotion/nokogiri/pull/2534
return @html5_support if defined? @html5_support
@html5_support =
Gem::Version.new(Nokogiri::VERSION) > Gem::Version.new("1.14.0") &&
Nokogiri.uses_gumbo?
end
end
end
require_relative "loofah/version"
require_relative "loofah/metahelpers"
require_relative "loofah/elements"
require_relative "loofah/html5/safelist"
require_relative "loofah/html5/libxml2_workarounds"
require_relative "loofah/html5/scrub"
require_relative "loofah/scrubber"
require_relative "loofah/scrubbers"
require_relative "loofah/concerns"
require_relative "loofah/xml/document"
require_relative "loofah/xml/document_fragment"
require_relative "loofah/html4/document"
require_relative "loofah/html4/document_fragment"
if Loofah.html5_support?
require_relative "loofah/html5/document"
require_relative "loofah/html5/document_fragment"
end
# == Strings and IO Objects as Input
#
# The following methods accept any IO object in addition to accepting a string:
#
# - Loofah.html4_document
# - Loofah.html4_fragment
# - Loofah.scrub_html4_document
# - Loofah.scrub_html4_fragment
#
# - Loofah.html5_document
# - Loofah.html5_fragment
# - Loofah.scrub_html5_document
# - Loofah.scrub_html5_fragment
#
# - Loofah.xml_document
# - Loofah.xml_fragment
# - Loofah.scrub_xml_document
# - Loofah.scrub_xml_fragment
#
# - Loofah.document
# - Loofah.fragment
# - Loofah.scrub_document
# - Loofah.scrub_fragment
#
# That IO object could be a file, or a socket, or a StringIO, or anything that responds to +read+
# and +close+.
#
module Loofah
# Alias for Loofah::HTML4
HTML = HTML4
class << self
# Shortcut for Loofah::HTML4::Document.parse(*args, &block)
#
# This method accepts the same parameters as Nokogiri::HTML4::Document.parse
def html4_document(*args, &block)
Loofah::HTML4::Document.parse(*args, &block)
end
# Shortcut for Loofah::HTML4::DocumentFragment.parse(*args, &block)
#
# This method accepts the same parameters as Nokogiri::HTML4::DocumentFragment.parse
def html4_fragment(*args, &block)
Loofah::HTML4::DocumentFragment.parse(*args, &block)
end
# Shortcut for Loofah::HTML4::Document.parse(string_or_io).scrub!(method)
def scrub_html4_document(string_or_io, method)
Loofah::HTML4::Document.parse(string_or_io).scrub!(method)
end
# Shortcut for Loofah::HTML4::DocumentFragment.parse(string_or_io).scrub!(method)
def scrub_html4_fragment(string_or_io, method)
Loofah::HTML4::DocumentFragment.parse(string_or_io).scrub!(method)
end
if Loofah.html5_support?
# Shortcut for Loofah::HTML5::Document.parse(*args, &block)
#
# This method accepts the same parameters as Nokogiri::HTML5::Document.parse
def html5_document(*args, &block)
Loofah::HTML5::Document.parse(*args, &block)
end
# Shortcut for Loofah::HTML5::DocumentFragment.parse(*args, &block)
#
# This method accepts the same parameters as Nokogiri::HTML5::DocumentFragment.parse
def html5_fragment(*args, &block)
Loofah::HTML5::DocumentFragment.parse(*args, &block)
end
# Shortcut for Loofah::HTML5::Document.parse(string_or_io).scrub!(method)
def scrub_html5_document(string_or_io, method)
Loofah::HTML5::Document.parse(string_or_io).scrub!(method)
end
# Shortcut for Loofah::HTML5::DocumentFragment.parse(string_or_io).scrub!(method)
def scrub_html5_fragment(string_or_io, method)
Loofah::HTML5::DocumentFragment.parse(string_or_io).scrub!(method)
end
else
def html5_document(*args, &block)
raise NotImplementedError, "Loofah::HTML5 is not supported by your version of Nokogiri"
end
def html5_fragment(*args, &block)
raise NotImplementedError, "Loofah::HTML5 is not supported by your version of Nokogiri"
end
def scrub_html5_document(string_or_io, method)
raise NotImplementedError, "Loofah::HTML5 is not supported by your version of Nokogiri"
end
def scrub_html5_fragment(string_or_io, method)
raise NotImplementedError, "Loofah::HTML5 is not supported by your version of Nokogiri"
end
end
alias_method :document, :html4_document
alias_method :fragment, :html4_fragment
alias_method :scrub_document, :scrub_html4_document
alias_method :scrub_fragment, :scrub_html4_fragment
# Shortcut for Loofah::XML::Document.parse(*args, &block)
#
# This method accepts the same parameters as Nokogiri::XML::Document.parse
def xml_document(*args, &block)
Loofah::XML::Document.parse(*args, &block)
end
# Shortcut for Loofah::XML::DocumentFragment.parse(*args, &block)
#
# This method accepts the same parameters as Nokogiri::XML::DocumentFragment.parse
def xml_fragment(*args, &block)
Loofah::XML::DocumentFragment.parse(*args, &block)
end
# Shortcut for Loofah.xml_fragment(string_or_io).scrub!(method)
def scrub_xml_fragment(string_or_io, method)
Loofah.xml_fragment(string_or_io).scrub!(method)
end
# Shortcut for Loofah.xml_document(string_or_io).scrub!(method)
def scrub_xml_document(string_or_io, method)
Loofah.xml_document(string_or_io).scrub!(method)
end
# A helper to remove extraneous whitespace from text-ified HTML
def remove_extraneous_whitespace(string)
string.gsub(/\n\s*\n\s*\n/, "\n\n")
end
end
end