打开/关闭搜索
搜索
打开/关闭菜单
12.2K
18.1K
93
80.2K
导航
首页
最近更改
特殊页面
上传文件
随机页面
随机页面
随机歌曲
随机P主
编辑相关
帮助
讨论版
公共沙盒
待修改页面
批量上传文件
友情链接
VCPedia
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
登录后可编辑和发表评论。
user-interface-preferences
个人工具
创建账号
登录
欢迎加入
本站官方QQ群
!
查看“︁Module:SVG Data URL”︁的源代码
来自Vocawiki
查看
阅读
查看源代码
查看历史
associated-pages
模块
讨论
更多操作
←
Module:SVG Data URL
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
local p = {} local function formSvg(svg) assert(mw.ustring.match(svg, '^<svg[%s>]'), 'svg参数填写错误') --[[ 缩短长度 ]] local SUBSTITUTE = { {'%s+', ' '}, -- 如 <path ... /> -> <path .../> {' ?(</?) ?', '%1'}, {' ?(/?>) ?', '%1'}, -- 如 <path ...></path> -> <path .../> -- ([:%a_][:%w_%-%.]*) - tag name: https://www.w3.org/TR/REC-xml/#NT-Name -- ([^<>]*) - attributes {'<([:%a_][:%w_-.]*)([^<>]*)></%1>', '<%1%2/>'}, } for _i, v in ipairs(SUBSTITUTE) do svg = mw.ustring.gsub(svg, v[1], v[2]) end -- 添加xmlns if not mw.ustring.match(svg, 'xmlns') then svg = '<svg xmlns="http://www.w3.org/2000/svg"' .. string.sub(svg, 5) end return svg end local function formImg(src, attrs) attrs.alt = attrs.alt or 'SVG' local parts = {'<img srcset="', src, '"'} for k, v in pairs(attrs) do table.insert(parts, string.format(' %s="%s"', k, v)) end table.insert(parts, ">") return table.concat(parts) end --[[ -- 该函数借鉴了Taylor Hunt的https://github.com/tigt/mini-svg-data-uri --]] function p.toDataUrl(str) local PATTERN = { -- strip marker格式: -- \127'"`UNIQ--标签-8个16进制数-QINU`"'\127 -- 匹配(用PCRE格式表示,看得清楚些): -- \127'"`UNIQ--(.+?-.+?)-QINU`"'\127 stripMarker = '%%7F%%27%%22%%60UNIQ%-%-(.-%-.-)%-QINU%%60%%22%%27%%7F', hexEncode = '%%%x%x', } local ACCEPTABLE = { ['%22'] = "'", -- 把编码后"换成未编码的' ['%27'] = '%22', -- 把编码后'换成编码后的" ['%28'] = '(', ['%29'] = ')', ['%2C'] = ',', ['%2F'] = '/', ['%3A'] = ':', ['%3D'] = '=', } str = mw.uri.encode(str, 'PATH') -- 恢复strip marker str = string.gsub(str, PATTERN.stripMarker, '\127\'"`UNIQ--%1-QINU`"\'\127') -- 替换部分编码回原字符,减小文件体积 str = string.gsub(str, PATTERN.hexEncode, ACCEPTABLE) return "data:image/svg+xml," .. str end function p._main(args) local allArgs = {} for k, v in pairs(args) do allArgs[string.lower(k)] = v end local svg = formSvg(allArgs.svg) local NOT_IMG_ATTR = { 'svg', -- 并非用于<img> 'src', 'srcset', 'sizes' -- 不由用户指定 } for _i, attr in ipairs(NOT_IMG_ATTR) do allArgs[attr] = nil end return formImg(p.toDataUrl(svg), allArgs) end function p.main(frame) local parent = frame:getParent() if parent and parent:getTitle() == 'Template:Svg' then frame = parent end return p._main(frame.args) end return p
该页面嵌入的页面:
Template:Documentation
(
查看源代码
)
Template:Navbox
(
查看源代码
)
Template:Svg
(
查看源代码
)
Template:Svg/path
(
查看源代码
)
Template:Tl
(
查看源代码
)
Template:图像模板
(
查看源代码
)
Module:Nav
(
查看源代码
)(受保护)
Module:SVG Data URL
(
查看源代码
)
Module:SVG Data URL/doc
(
查看源代码
)
Module:SVG模拟
(
查看源代码
)
返回
Module:SVG Data URL
。
查看“︁Module:SVG Data URL”︁的源代码
来自Vocawiki