feat: create freemarker custom tag of tools. (#505)

* feat: create freemarker custom tag of tools.
pull/816/head
Ryan Wang 2020-01-17 17:12:13 +08:00 committed by John Niang
parent bd6cb393ff
commit 47e9563fe2
1 changed files with 50 additions and 0 deletions

View File

@ -0,0 +1,50 @@
package run.halo.app.core.freemarker.tag;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.RandomUtil;
import freemarker.core.Environment;
import freemarker.template.*;
import org.springframework.stereotype.Component;
import run.halo.app.model.support.HaloConst;
import java.io.IOException;
import java.util.Map;
/**
* Freemarker custom tag of tools.
*
* @author ryanwang
* @date 2020-01-17
*/
@Component
public class ToolTagDirective implements TemplateDirectiveModel {
public ToolTagDirective(Configuration configuration) {
configuration.setSharedVariable("toolTag", this);
}
@Override
public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException {
final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25);
if (params.containsKey(HaloConst.METHOD_KEY)) {
String method = params.get(HaloConst.METHOD_KEY).toString();
switch (method) {
case "rainbowPage":
int page = Integer.parseInt(params.get("page").toString());
int total = Integer.parseInt(params.get("total").toString());
int display = Integer.parseInt(params.get("display").toString());
env.setVariable("numbers", builder.build().wrap(PageUtil.rainbow(page, total, display)));
break;
case "random":
int min = Integer.parseInt(params.get("min").toString());
int max = Integer.parseInt(params.get("max").toString());
env.setVariable("number", builder.build().wrap(RandomUtil.randomInt(min, max)));
break;
default:
break;
}
}
body.render(env.getOut());
}
}