mirror of https://github.com/docusealco/docuseal
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.
174 lines
5.6 KiB
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
|