springboot012基于springboot的社区团购系统设计
没有账号的用户可进入注册界面进行注册操作,用户注册界面的运行效果.
用户要想实现商品购买等操作,必须进行登录操作,在登录界面输入正确的用户名和密码,选择登录类型,点击登录按钮进行登录,用户登录界面。
用户在系统前台可查看系统信息,包括首页、商品信息、团购信息等,系统主界面的运行效果.
用户可选择商品查看商品详情信息,登录后可进行收藏、加入购物车和购买操作,商品详情界面。
用户在购物车界面可查看购物车商品信息,并可进行修改数量、删除商品以及购买等操作,购物车界面展示。
用户在我的订单界面可查看个人订单信息,我的订单界面。
用户可选择团购查看详情信息,登录后可进行加入购物车、购买或者收藏等,团购详情界面。
管理员要想进入系统后台对系统进行管理,首要进入登录界面,需通过正确的账号、密码进行登录操作,管理员登录界面 。
管理员可查看、添加、修改、删除用户信息,用户管理界面展示 。
管理员可增删改查商品信息,商品信息管理界面展示,添加商品信息界面展示 。
图5-10 商品信息管理界面
管理员可添加、修改和删除团购信息,团购信息管理界面展示 。
管理员可查看所有订单信息,对未发货订单可进行发货操作,订单管理界面。
ShangpinxinxiController.java
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.ShangpinxinxiEntity;
import com.entity.view.ShangpinxinxiView;
import com.service.ShangpinxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 商品信息
* 后端接口
* @author
* @email
* @date 2021-04-07 21:27:10
*/
@RestController
@RequestMapping("/shangpinxinxi")
public class ShangpinxinxiController {
@Autowired
private ShangpinxinxiService shangpinxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi,
HttpServletRequest request){
EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( ShangpinxinxiEntity shangpinxinxi){
EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi"));
return R.ok().put("data", shangpinxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(ShangpinxinxiEntity shangpinxinxi){
EntityWrapper< ShangpinxinxiEntity> ew = new EntityWrapper< ShangpinxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi"));
ShangpinxinxiView shangpinxinxiView = shangpinxinxiService.selectView(ew);
return R.ok("查询商品信息成功").put("data", shangpinxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);
shangpinxinxi.setClicktime(new Date());
shangpinxinxiService.updateById(shangpinxinxi);
return R.ok().put("data", shangpinxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);
shangpinxinxi.setClicktime(new Date());
shangpinxinxiService.updateById(shangpinxinxi);
return R.ok().put("data", shangpinxinxi);
}
/**
* 赞或踩
*/
@RequestMapping("/thumbsup/{id}")
public R vote(@PathVariable("id") String id,String type){
ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
if(type.equals("1")) {
shangpinxinxi.setThumbsupnum(shangpinxinxi.getThumbsupnum()+1);
} else {
shangpinxinxi.setCrazilynum(shangpinxinxi.getCrazilynum()+1);
}
shangpinxinxiService.updateById(shangpinxinxi);
return R.ok("投票成功");
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(shangpinxinxi);
shangpinxinxiService.insert(shangpinxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(shangpinxinxi);
shangpinxinxiService.insert(shangpinxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(shangpinxinxi);
shangpinxinxiService.updateById(shangpinxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
shangpinxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<ShangpinxinxiEntity> wrapper = new EntityWrapper<ShangpinxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = shangpinxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request,String pre){
EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
Map<String, Object> newMap = new HashMap<String, Object>();
Map<String, Object> param = new HashMap<String, Object>();
Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = it.next();
String key = entry.getKey();
String newKey = entry.getKey();
if (pre.endsWith(".")) {
newMap.put(pre + newKey, entry.getValue());
} else if (StringUtils.isEmpty(pre)) {
newMap.put(newKey, entry.getValue());
} else {
newMap.put(pre + "." + newKey, entry.getValue());
}
}
params.put("sort", "clicknum");
params.put("order", "desc");
PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
return R.ok().put("data", page);
}
}
DiscusstuangouxinxiController.java
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.DiscusstuangouxinxiEntity;
import com.entity.view.DiscusstuangouxinxiView;
import com.service.DiscusstuangouxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 团购信息评论表
* 后端接口
* @author
* @email
* @date 2021-04-07 21:27:11
*/
@RestController
@RequestMapping("/discusstuangouxinxi")
public class DiscusstuangouxinxiController {
@Autowired
private DiscusstuangouxinxiService discusstuangouxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,DiscusstuangouxinxiEntity discusstuangouxinxi,
HttpServletRequest request){
EntityWrapper<DiscusstuangouxinxiEntity> ew = new EntityWrapper<DiscusstuangouxinxiEntity>();
PageUtils page = discusstuangouxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discusstuangouxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,DiscusstuangouxinxiEntity discusstuangouxinxi, HttpServletRequest request){
EntityWrapper<DiscusstuangouxinxiEntity> ew = new EntityWrapper<DiscusstuangouxinxiEntity>();
PageUtils page = discusstuangouxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discusstuangouxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( DiscusstuangouxinxiEntity discusstuangouxinxi){
EntityWrapper<DiscusstuangouxinxiEntity> ew = new EntityWrapper<DiscusstuangouxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discusstuangouxinxi, "discusstuangouxinxi"));
return R.ok().put("data", discusstuangouxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(DiscusstuangouxinxiEntity discusstuangouxinxi){
EntityWrapper< DiscusstuangouxinxiEntity> ew = new EntityWrapper< DiscusstuangouxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discusstuangouxinxi, "discusstuangouxinxi"));
DiscusstuangouxinxiView discusstuangouxinxiView = discusstuangouxinxiService.selectView(ew);
return R.ok("查询团购信息评论表成功").put("data", discusstuangouxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
DiscusstuangouxinxiEntity discusstuangouxinxi = discusstuangouxinxiService.selectById(id);
return R.ok().put("data", discusstuangouxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
DiscusstuangouxinxiEntity discusstuangouxinxi = discusstuangouxinxiService.selectById(id);
return R.ok().put("data", discusstuangouxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody DiscusstuangouxinxiEntity discusstuangouxinxi, HttpServletRequest request){
discusstuangouxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discusstuangouxinxi);
discusstuangouxinxiService.insert(discusstuangouxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody DiscusstuangouxinxiEntity discusstuangouxinxi, HttpServletRequest request){
discusstuangouxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discusstuangouxinxi);
discusstuangouxinxiService.insert(discusstuangouxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody DiscusstuangouxinxiEntity discusstuangouxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(discusstuangouxinxi);
discusstuangouxinxiService.updateById(discusstuangouxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
discusstuangouxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<DiscusstuangouxinxiEntity> wrapper = new EntityWrapper<DiscusstuangouxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = discusstuangouxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
api.js
const api = {
// 积分订单
orderpage: 'orders/page',
orderdelete: 'orders/delete',
orderinfo: 'orders/info/',
ordersave: 'orders/save',
orderupdate: 'orders/update',
// 配置
configpage: 'config/page',
configdelete: 'config/delete',
configinfo: 'config/info/',
configsave: 'config/save',
configupdate: 'config/update'
}
export default api
plugin.js
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*
* Version: 5.2.0 (2020-02-13)
*/
(function () {
'use strict';
var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
var global$2 = tinymce.util.Tools.resolve('tinymce.util.I18n');
var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');
var getTocClass = function (editor) {
return editor.getParam('toc_class', 'mce-toc');
};
var getTocHeader = function (editor) {
var tagName = editor.getParam('toc_header', 'h2');
return /^h[1-6]$/.test(tagName) ? tagName : 'h2';
};
var getTocDepth = function (editor) {
var depth = parseInt(editor.getParam('toc_depth', '3'), 10);
return depth >= 1 && depth <= 9 ? depth : 3;
};
var Settings = {
getTocClass: getTocClass,
getTocHeader: getTocHeader,
getTocDepth: getTocDepth
};
var create = function (prefix) {
var counter = 0;
return function () {
var guid = new Date().getTime().toString(32);
return prefix + guid + (counter++).toString(32);
};
};
var Guid = { create: create };
var tocId = Guid.create('mcetoc_');
var generateSelector = function generateSelector(depth) {
var i;
var selector = [];
for (i = 1; i <= depth; i++) {
selector.push('h' + i);
}
return selector.join(',');
};
var hasHeaders = function (editor) {
return readHeaders(editor).length > 0;
};
var readHeaders = function (editor) {
var tocClass = Settings.getTocClass(editor);
var headerTag = Settings.getTocHeader(editor);
var selector = generateSelector(Settings.getTocDepth(editor));
var headers = editor.$(selector);
if (headers.length && /^h[1-9]$/i.test(headerTag)) {
headers = headers.filter(function (i, el) {
return !editor.dom.hasClass(el.parentNode, tocClass);
});
}
return global$3.map(headers, function (h) {
return {
id: h.id ? h.id : tocId(),
level: parseInt(h.nodeName.replace(/^H/i, ''), 10),
title: editor.$.text(h),
element: h
};
});
};
var getMinLevel = function (headers) {
var i, minLevel = 9;
for (i = 0; i < headers.length; i++) {
if (headers[i].level < minLevel) {
minLevel = headers[i].level;
}
if (minLevel === 1) {
return minLevel;
}
}
return minLevel;
};
var generateTitle = function (tag, title) {
var openTag = '<' + tag + ' contenteditable="true">';
var closeTag = '</' + tag + '>';
return openTag + global$1.DOM.encode(title) + closeTag;
};
var generateTocHtml = function (editor) {
var html = generateTocContentHtml(editor);
return '<div class="' + editor.dom.encode(Settings.getTocClass(editor)) + '" contenteditable="false">' + html + '</div>';
};
var generateTocContentHtml = function (editor) {
var html = '';
var headers = readHeaders(editor);
var prevLevel = getMinLevel(headers) - 1;
var i, ii, h, nextLevel;
if (!headers.length) {
return '';
}
html += generateTitle(Settings.getTocHeader(editor), global$2.translate('Table of Contents'));
for (i = 0; i < headers.length; i++) {
h = headers[i];
h.element.id = h.id;
nextLevel = headers[i + 1] && headers[i + 1].level;
if (prevLevel === h.level) {
html += '<li>';
} else {
for (ii = prevLevel; ii < h.level; ii++) {
html += '<ul><li>';
}
}
html += '<a href="#' + h.id + '">' + h.title + '</a>';
if (nextLevel === h.level || !nextLevel) {
html += '</li>';
if (!nextLevel) {
html += '</ul>';
}
} else {
for (ii = h.level; ii > nextLevel; ii--) {
html += '</li></ul><li>';
}
}
prevLevel = h.level;
}
return html;
};
var isEmptyOrOffscren = function (editor, nodes) {
return !nodes.length || editor.dom.getParents(nodes[0], '.mce-offscreen-selection').length > 0;
};
var insertToc = function (editor) {
var tocClass = Settings.getTocClass(editor);
var $tocElm = editor.$('.' + tocClass);
if (isEmptyOrOffscren(editor, $tocElm)) {
editor.insertContent(generateTocHtml(editor));
} else {
updateToc(editor);
}
};
var updateToc = function (editor) {
var tocClass = Settings.getTocClass(editor);
var $tocElm = editor.$('.' + tocClass);
if ($tocElm.length) {
editor.undoManager.transact(function () {
$tocElm.html(generateTocContentHtml(editor));
});
}
};
var Toc = {
hasHeaders: hasHeaders,
insertToc: insertToc,
updateToc: updateToc
};
var register = function (editor) {
editor.addCommand('mceInsertToc', function () {
Toc.insertToc(editor);
});
editor.addCommand('mceUpdateToc', function () {
Toc.updateToc(editor);
});
};
var Commands = { register: register };
var setup = function (editor) {
var $ = editor.$, tocClass = Settings.getTocClass(editor);
editor.on('PreProcess', function (e) {
var $tocElm = $('.' + tocClass, e.node);
if ($tocElm.length) {
$tocElm.removeAttr('contentEditable');
$tocElm.find('[contenteditable]').removeAttr('contentEditable');
}
});
editor.on('SetContent', function () {
var $tocElm = $('.' + tocClass);
if ($tocElm.length) {
$tocElm.attr('contentEditable', false);
$tocElm.children(':first-child').attr('contentEditable', true);
}
});
};
var FilterContent = { setup: setup };
var toggleState = function (editor) {
return function (api) {
var toggleDisabledState = function () {
return api.setDisabled(editor.readonly || !Toc.hasHeaders(editor));
};
toggleDisabledState();
editor.on('LoadContent SetContent change', toggleDisabledState);
return function () {
return editor.on('LoadContent SetContent change', toggleDisabledState);
};
};
};
var isToc = function (editor) {
return function (elm) {
return elm && editor.dom.is(elm, '.' + Settings.getTocClass(editor)) && editor.getBody().contains(elm);
};
};
var register$1 = function (editor) {
editor.ui.registry.addButton('toc', {
icon: 'toc',
tooltip: 'Table of contents',
onAction: function () {
return editor.execCommand('mceInsertToc');
},
onSetup: toggleState(editor)
});
editor.ui.registry.addButton('tocupdate', {
icon: 'reload',
tooltip: 'Update',
onAction: function () {
return editor.execCommand('mceUpdateToc');
}
});
editor.ui.registry.addMenuItem('toc', {
icon: 'toc',
text: 'Table of contents',
onAction: function () {
return editor.execCommand('mceInsertToc');
},
onSetup: toggleState(editor)
});
editor.ui.registry.addContextToolbar('toc', {
items: 'tocupdate',
predicate: isToc(editor),
scope: 'node',
position: 'node'
});
};
var Buttons = { register: register$1 };
function Plugin () {
global.add('toc', function (editor) {
Commands.register(editor);
Buttons.register(editor);
FilterContent.setup(editor);
});
}
Plugin();
}());