
Research
/Security News
Toptal’s GitHub Organization Hijacked: 10 Malicious Packages Published
Threat actors hijacked Toptal’s GitHub org, publishing npm packages with malicious payloads that steal tokens and attempt to wipe victim systems.
cb-template-browser
Advanced tools
一个浏览器端模板引擎
$ npm install cb-template-browser
<% if (user) %>
<p><%=user.name%></p>
<% /if %>
const cbT = require('cb-template-browser');
const template = cbT.compile(str);
template(data);
// => 已渲染的 HTML 字符串
cbT.render(str, data);
// => 已渲染的 HTML 字符串
定义左分隔符,默认值:<%
定义右分隔符,默认值:%>
编译模板字符串,返回模板函数。
参数:
返回值:
类型:函数,模板函数,用于后续直接渲染模板。
模板函数参数:
例子:
const template = cbT.compile(`<title><%=title%></title><p><%=nickname%></p>`);
template({ title: '标题', nickname: '昵称' });
// => 已渲染的 HTML 字符串
<script type="text/html" id="template-demo">
<h1><%=title%></h1>
<p><%=nickname%></p>
</script>
const template = cbT.compile('template-demo');
template({ title: '标题', nickname: '昵称' });
// => 已渲染的 HTML 字符串
const template = cbT.compile(document.getElementById('template-demo'));
template({ title: '标题', nickname: '昵称' });
// => 已渲染的 HTML 字符串
编译模板字符串,并返回渲染后的结果。
参数:
返回值:
类型:字符串,已渲染的字符串
例子:
cbT.render(`<title><%=title%></title><p><%=nickname%></p>`, { title: '标题', nickname: '昵称' });
// => 已渲染的 HTML 字符串
获取模板引擎的一个新实例,一般用于单独设置模板引擎的某个选项,比如单独设置左右分隔符。
例子:
const myInstance = cbT.getInstance();
myInstance.render(`<title><%=title%></title><p><%=nickname%></p>`, { title: '标题', nickname: '昵称' });
// => 已渲染的 HTML 字符串
注意:获取的新实例不能进行 getInstance() 操作,只能从 cbT 中 getInstance()
模板默认分隔符为 <% %>
,例如:<% if (条件表达式) %>内容<% /if %>
进行 HTML 转义后输出变量内容,可确保没有 XSS 安全问题。
基本用法:<%=变量%>
例子:
<title><%=title%></title>
<p><%=nickname%></p>
原样输出变量内容,除非你知道自己在做什么,否则不要使用,会有 XSS 安全问题。
基本用法:<%:=变量%>
或 <%-变量%>
例子:
<title><%:=title%></title>
<p><%-nickname%></p>
对变量做 URL 转义,一般用于 URL 传参中。
基本用法:<%:u=变量%>
例子:
<a href="https://domain.com/index?title=<%:u=title%>&nickname=<%:u=nickname%>">链接</a>
进行 HTML 属性值的转义输出,一般用于 HTML 属性值的安全输出。
基本用法:<%:v=变量%>
例子:
<div data-title="<%:v=title%>" data-nickname="<%:v=nickname%>">内容</div>
迭代数组并做 HTML 转义输出。
基本用法:<%:a=数组变量 | 分隔符%>
分隔符可不写,默认值为 <br>
例子:
<div><%:a=listing%></div> <!-- 输出 <div>元素0<br>元素1<br>元素2<div> -->
<div><%:a=listing | ,%></div> <!-- 输出 <div>元素0,元素1,元素2<div> -->
四舍五入保留两位小数输出变量内容。
基本用法:<%:m=变量%>
例子:
<div><%:m=money%></div>
截取内容后输出变量,如果被截断自动在末尾添加 ...
,否则不添加。
基本用法:<%:s=变量 | 保留字数%>
例子:
<div><%:s=title | 10%></div>
把 URL 处理成协议自适应格式,类似 //domian.com/index
。
基本用法:<%:p=变量%>
例子:
<img src="<%:p=avatar%>" alt="头像">
用于转义输出函数返回值。
基本用法:<%:func=函数%>
例子:
<p><%:func=getData()%></p>
不转义输出函数返回值,慎用。
基本用法:<%:func-函数%>
例子:
<p><%:func-getData()%></p>
用于在模板作用域中定义变量。
基本用法:<% let 变量名 = 变量值 %>
例子:
<% let myData = '123' %>
<p><%=myData%></p>
一般用于循环输出数组内容。
基本用法:
<% foreach (循环变量 in 数组变量) %>循环体<% /foreach %>
<% foreach (循环变量 in 数组变量) %>循环体<% foreachelse %>数组为空时的内容<% /foreach %>
如果需要获取数组下标,可以使用 循环变量Index
的形式获取。
例子:
<ul>
<% foreach (item in listing) %>
<li><%=itemIndex%>: <%=item.nickname%></li>
<% foreachelse %>
<li>暂无内容</li>
<% /foreach %>
</ul>
用于根据不同条件输出不同内容
基本用法:
<% if (标准 js 条件表达式) %>条件为真时输出<% else %>条件为假时输出<% /if %>
<% if (标准 js 条件表达式) %>本条件为真时输出<% elseif (标准 js 条件表达式) %>本条件为真时输出<% else %>条件都不符合时输出<% /if %>
例子:
<div>
<% if (nickname === 'name1') %>
<p>这是 name1</p>
<% elseif (nickname === 'name2') %>
<p>这是 name2</p>
<% elseif (nickname === 'name3') %>
<p>这是 name3</p>
<% else %>
<p>都不是</p>
<% /if %>
</div>
一般用于定义一个公共的模板部分,以方便重复使用
基本用法:<% define 子模板名称(参数) %>子模板内容<% /define %>
其中 参数
为合法变量名,用于在子模板中接收外部参数
例子:
<% define mySubTemplate(params) %>
<p><%=params.nickname%></p>
<p><%=params.title%></p>
<% /define %>
调用已经定义的子模板
基本用法:<% run 子模板名称(参数对象) %>
例子:
<% run mySubTemplate({ nickname: '昵称', title: '标题' }) %>
FAQs
We found that cb-template-browser demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
Threat actors hijacked Toptal’s GitHub org, publishing npm packages with malicious payloads that steal tokens and attempt to wipe victim systems.
Research
/Security News
Socket researchers investigate 4 malicious npm and PyPI packages with 56,000+ downloads that install surveillance malware.
Security News
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.