lib/string_tools.rb in string_tools-0.2.0 vs lib/string_tools.rb in string_tools-0.3.0
- old
+ new
@@ -4,10 +4,12 @@
require 'sanitize'
require 'active_support/core_ext/string'
require 'string_tools/core_ext/string'
module StringTools
+ autoload :HTML, 'string_tools/html'
+
module CharDet
# Возвращает true если строка содержит допустимую
# последовательность байтов для кодировки utf8 и false в обратном случае
# см. http://en.wikipedia.org/wiki/UTF-8
def valid_utf8? string
@@ -106,15 +108,14 @@
end
extend Sanitizing
module Sanitizer
class Base
-
TAGS_WITH_ATTRIBUTES = {
'p' => %w(align style),
'div' => %w(align style),
- 'span' => %w(align style),
+ 'span' => %w(align style),
'td' => %w(align width valign colspan rowspan style),
'th' => %w(align width valign colspan rowspan style),
'a' => %w(href target name style),
'table' => %w(cellpadding cellspacing width border align style),
'img' => %w(src width height style)
@@ -133,18 +134,43 @@
# Мерджим добавочные теги и атрибуты
attributes.merge!(attr)
elements = attributes.keys | TAGS_WITHOUT_ATTRIBUTES
- Sanitize.fragment(str,
+ Sanitize.fragment(
+ str,
:attributes => attributes,
:elements => elements,
:css => {:properties => Sanitize::Config::RELAXED[:css][:properties]},
:remove_contents => %w(style javascript),
- :allow_comments => false
+ :allow_comments => false,
+ :transformers => [LINK_NORMALIZER]
)
end
end
+
+ # приводит ссылки согласно стандарту, не корёжит
+ # http://www.фермаежей.рф => http://www.xn--80ajbaetq5a8a.xn--p1ai
+ class LinkNormalizer
+ def call(env)
+ node = env[:node]
+ case node.name
+ when 'a'.freeze
+ normalize_link node, 'href'.freeze
+ when 'img'.freeze
+ normalize_link node, 'src'.freeze
+ end
+ end
+
+ private
+
+ def normalize_link(node, attr_name)
+ return unless node[attr_name]
+ node[attr_name] = Addressable::URI.parse(node[attr_name]).normalize.to_s
+ end
+ end
+
+ LINK_NORMALIZER = LinkNormalizer.new
end
module SumInWords
# Сумма в рублях прописью. Кол-во копеек выводится всегда. Первая буква заглавная
def rublej_propisju(amount)