修正一大堆的bug
|
|
@ -70,7 +70,7 @@ class Admin extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('username', '登录账号')->col(10);
|
||||
$form[] = Elm::input('nickname', '昵称')->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/images/index', array('fodder' => 'avatar', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/image/index', array('fodder' => 'avatar', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::password('password', '密码')->col(10);
|
||||
$form[] = Elm::input('realname', '真实姓名')->col(10);
|
||||
$form[] = Elm::select('role_id', '角色')->options(function () {
|
||||
|
|
@ -102,7 +102,7 @@ class Admin extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('username', '登录账号', $ainfo['username'])->col(10);
|
||||
$form[] = Elm::input('nickname', '昵称', $ainfo['nickname'])->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/images/index', array('fodder' => 'avatar', 'limit' => 1)), $ainfo['avatar'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/image/index', array('fodder' => 'avatar', 'limit' => 1)), $ainfo['avatar'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::password('password', '密码', $ainfo['password'])->col(10);
|
||||
$form[] = Elm::input('realname', '真实姓名', $ainfo['realname'])->col(10);
|
||||
$form[] = Elm::select('role_id', '角色', $ainfo['role_id'])->options(function () {
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ class Advert extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('title', '广告名称')->col(10);
|
||||
$form[] = Elm::input('url', '链接地址')->col(10);
|
||||
$form[] = Elm::frameImage('cover_path', '广告图片', Url::buildUrl('admin/images/index', array('fodder' => 'cover_path', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('cover_path', '广告图片', Url::buildUrl('admin/image/index', array('fodder' => 'cover_path', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::input('sort', '排序')->col(10);
|
||||
$form[] = Elm::select('position', '位置')->options(function () {
|
||||
$options = [];
|
||||
|
|
@ -102,7 +102,7 @@ class Advert extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('title', '广告名称', $info['title'])->col(10);
|
||||
$form[] = Elm::input('url', '链接地址', $info['url'])->col(10);
|
||||
$form[] = Elm::frameImage('cover_path', '广告图片', Url::buildUrl('admin/images/index', array('fodder' => 'cover_path', 'limit' => 1)), $info['cover_path'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('cover_path', '广告图片', Url::buildUrl('admin/image/index', array('fodder' => 'cover_path', 'limit' => 1)), $info['cover_path'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::input('sort', '排序', $info['sort'])->col(10);
|
||||
$form[] = Elm::select('position', '位置', $info['position'])->options(function () {
|
||||
$options = [];
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ use think\exception\ValidateException;
|
|||
use think\facade\Filesystem;
|
||||
use think\Request;
|
||||
|
||||
class Files extends AuthController
|
||||
class File extends AuthController
|
||||
{
|
||||
/**
|
||||
* 单个图片上传
|
||||
|
|
@ -25,24 +25,25 @@ class Files extends AuthController
|
|||
public function image()
|
||||
{
|
||||
$file = $this->request->file("file");
|
||||
$fileType = "image";
|
||||
$storage_type = system_config("storage_type") ?: 1;//默认未本地存储
|
||||
switch ($storage_type) {
|
||||
case 1:
|
||||
$savename = Filesystem::putFile('images', $file);
|
||||
$filePath = "/uploads/" . $savename;
|
||||
$saveName = Filesystem::putFile($fileType, $file);
|
||||
$filePath = Filesystem::url($saveName);
|
||||
//转换因为win导致的兼容问题
|
||||
if(strtoupper(substr(PHP_OS,0,3))==='WIN'){
|
||||
$filePath = str_replace( DIRECTORY_SEPARATOR, '/',$filePath);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
$savename = Filesystem::putFile('images', $file);
|
||||
$saveName = Filesystem::putFile('image', $file);
|
||||
$ext = $file->getOriginalExtension();
|
||||
$key = '/image/' . date('Ymd') . "/" . substr(md5($file->getRealPath()), 0, 5) . date('YmdHis') . rand(0, 9999) . '.' . $ext;
|
||||
$filePath = QcloudCoService::put($key, $file->getRealPath());
|
||||
break;
|
||||
}
|
||||
return Attachment::addAttachment($this->request->param("cid", 0), $savename, $filePath, 'images', $file->getMime(), $file->getSize(), $storage_type) ? app("json")->code()->success("上传成功", ['filePath' => $filePath, "name" => $savename]) : app("json")->fail("上传失败");
|
||||
return Attachment::addAttachment($this->request->param("cid", 0), $saveName, $filePath, 'image', $file->getMime(), $file->getSize(), $storage_type) ? app("json")->code()->success("上传成功", ['filePath' => $filePath, "name" => $saveName]) : app("json")->fail("上传失败");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -55,37 +56,24 @@ class Files extends AuthController
|
|||
['image', '']
|
||||
]);
|
||||
if ($data['image'] == '') return app("json")->fail("上传失败,没有文件");
|
||||
$path = "uploads/image/" . date("Ymd") . '/';
|
||||
$path = "upload/image/" . date("Ymd") . '/';
|
||||
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $data['image'], $result)) {
|
||||
$type = $result[2];
|
||||
if (!file_exists($path)) mkdir($path, 0755, true);
|
||||
$savename = $path . md5(time()) . ".{$type}";
|
||||
$saveName = $path . md5(time()) . ".{$type}";
|
||||
//转换因为win导致的兼容问题
|
||||
if(strtoupper(substr(PHP_OS,0,3))==='WIN'){
|
||||
$savename = str_replace( DIRECTORY_SEPARATOR, '/',$savename);
|
||||
$saveName = str_replace( DIRECTORY_SEPARATOR, '/',$saveName);
|
||||
}
|
||||
if (file_put_contents($savename, base64_decode(str_replace($result[1], '', $data['image'])))) return app("json")->success("上传成功", ['src' => "/" . $savename]);
|
||||
if (file_put_contents($saveName, base64_decode(str_replace($result[1], '', $data['image'])))) return app("json")->success("上传成功", ['src' => "/" . $saveName]);
|
||||
else return app("json")->fail("上传失败,写入文件失败!");
|
||||
} else return app("json")->fail("上传失败,图片格式有误!");
|
||||
}
|
||||
|
||||
/**
|
||||
* tinymec
|
||||
* @return mixed
|
||||
*/
|
||||
public function tinymce()
|
||||
{
|
||||
$filePath = Filesystem::putFile('image', request()->file('file'));
|
||||
if(strtoupper(substr(PHP_OS,0,3))==='WIN'){
|
||||
$filePath = str_replace( DIRECTORY_SEPARATOR, '/',$filePath);
|
||||
}
|
||||
return json_encode(['location' => "/uploads/" . $filePath]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @单文件上传
|
||||
* @param string $type 类型 files images documents banners
|
||||
* @param string $type 类型 files image documents banners
|
||||
* @return mixed
|
||||
*/
|
||||
public function upload(Request $request)
|
||||
|
|
@ -93,18 +81,17 @@ class Files extends AuthController
|
|||
if ($request->isPost()) {
|
||||
// 获取表单上传文件 例如上传了001.jpg
|
||||
$file = $this->request->file('file');//根据表单name替换imgFile
|
||||
$type = $this->request->post("type");
|
||||
$type = $type ?: 'files';
|
||||
switch ($type) {
|
||||
case 'files':
|
||||
$fileType = $this->request->post("type")?:'file';
|
||||
switch ($fileType) {
|
||||
case 'file':
|
||||
$fileSize = 10 * 1024 * 1024;
|
||||
$fileExt = 'pdf,doc,docx,png,jpeg,jpg,text,mp4';
|
||||
break;
|
||||
case 'slides':
|
||||
case 'slide':
|
||||
$fileSize = 10 * 1024 * 1024;
|
||||
$fileExt = 'png,jpeg,jpg';
|
||||
break;
|
||||
case 'documents':
|
||||
case 'document':
|
||||
$fileSize = 5 * 1024 * 1024;
|
||||
$fileExt = 'pdf,doc,docx';
|
||||
break;
|
||||
|
|
@ -112,16 +99,12 @@ class Files extends AuthController
|
|||
$fileSize = 5 * 1024 * 1024;
|
||||
$fileExt = 'png,jpeg,jpg';
|
||||
break;
|
||||
case 'images':
|
||||
$fileSize = 5 * 1024 * 1024;
|
||||
$fileExt = 'png,jpeg,jpg';
|
||||
break;
|
||||
case 'avatar':
|
||||
$fileSize = 4 * 1024 * 1024;
|
||||
$fileExt = 'png,jpeg,jpg';
|
||||
break;
|
||||
default:
|
||||
$fileSize = 0 * 1024 * 1024;
|
||||
$fileSize = 10 * 1024 * 1024;
|
||||
$fileExt = 'pdf,doc,docx';
|
||||
break;
|
||||
}
|
||||
|
|
@ -134,13 +117,13 @@ class Files extends AuthController
|
|||
'fileExt' => $fileExt
|
||||
// 更多规则请看“上传验证”的规则,文档地址https://www.kancloud.cn/manual/thinkphp6_0/1037629#_444
|
||||
]])->check(['file' => $file]);
|
||||
$savename = Filesystem::putFile($type, $file);
|
||||
$filePath = "/uploads/" . $savename;
|
||||
$saveName = Filesystem::putFile($fileType, $file);
|
||||
$filePath = Filesystem::url($saveName);
|
||||
//转换因为win导致的兼容问题
|
||||
if(strtoupper(substr(PHP_OS,0,3))==='WIN'){
|
||||
$filePath = str_replace( DIRECTORY_SEPARATOR, '/',$filePath);
|
||||
}
|
||||
return $savename ? app("json")->code()->success("上传成功", ['filePath' => $filePath, "name" => basename($savename)]) : app("json")->fail("上传失败");
|
||||
return $saveName ? app("json")->code()->success("上传成功", ['filePath' => $filePath, "name" => basename($saveName)]) : app("json")->fail("上传失败");
|
||||
} catch (ValidateException $e) {
|
||||
return app("json")->fail($e->getMessage());
|
||||
}
|
||||
|
|
@ -66,7 +66,7 @@ class FriendLink extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('title', '链接名称')->col(10);
|
||||
$form[] = Elm::input('url', '链接地址')->col(10);
|
||||
$form[] = Elm::frameImage('image', '网站图标', Url::buildUrl('admin/images/index', array('fodder' => 'image', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('image', '网站图标', Url::buildUrl('admin/image/index', array('fodder' => 'image', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::input('sort', '排序')->col(10);
|
||||
$form[] = Elm::textarea('description', '描述')->col(10);
|
||||
$form[] = Elm::radio('status', '状态', 1)->options([['label' => '启用', 'value' => 1], ['label' => '冻结', 'value' => 0]])->col(10);
|
||||
|
|
@ -88,7 +88,7 @@ class FriendLink extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('title', '链接名称', $ainfo['title'])->col(10);
|
||||
$form[] = Elm::input('url', '链接地址', $ainfo['url'])->col(10);
|
||||
$form[] = Elm::frameImage('image', '网站图标', Url::buildUrl('admin/images/index', array('fodder' => 'image', 'limit' => 1)), $ainfo['image'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('image', '网站图标', Url::buildUrl('admin/image/index', array('fodder' => 'image', 'limit' => 1)), $ainfo['image'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::input('sort', '排序', $ainfo['sort'])->col(10);
|
||||
$form[] = Elm::textarea('description', '描述', $ainfo['description'])->col(10);
|
||||
$form[] = Elm::radio('status', '状态', $ainfo['status'])->options([['label' => '启用', 'value' => 1], ['label' => '冻结', 'value' => 0]])->col(10);
|
||||
|
|
|
|||
|
|
@ -18,13 +18,13 @@ use think\db\exception\ModelNotFoundException;
|
|||
* Class Images
|
||||
* @package app\admin\controller\widget
|
||||
*/
|
||||
class Images extends AuthController
|
||||
class Image extends AuthController
|
||||
{
|
||||
/**
|
||||
* 附件类型
|
||||
* @var string
|
||||
*/
|
||||
private $type = "images";
|
||||
private $type = "image";
|
||||
|
||||
public function index()
|
||||
{
|
||||
|
|
@ -39,7 +39,7 @@ class Images extends AuthController
|
|||
*/
|
||||
public function category()
|
||||
{
|
||||
return app("json")->success(AttachmentCategory::buildNodes("images", 0, $this->request->param("title", "")));
|
||||
return app("json")->success(AttachmentCategory::buildNodes("image", 0, $this->request->param("title", "")));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -60,7 +60,7 @@ class Images extends AuthController
|
|||
return $menu;
|
||||
})->col(18);
|
||||
$form[] = Elm::input('name', '分类名称')->col(18);
|
||||
$form[] = Elm::hidden('type', 'images')->col(18);
|
||||
$form[] = Elm::hidden('type', $this->type)->col(18);
|
||||
$form = Form::make_post_form($form, url('saveCategory')->build());
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch("public/form-builder");
|
||||
|
|
@ -85,7 +85,7 @@ class Images extends AuthController
|
|||
return $menu;
|
||||
})->col(18);
|
||||
$form[] = Elm::input('name', '分类名称', AttachmentCategory::getNameById($id))->col(18);
|
||||
$form[] = Elm::hidden('type', 'images')->col(18);
|
||||
$form[] = Elm::hidden('type', $this->type)->col(18);
|
||||
$form = Form::make_post_form($form, Url('saveCategory', ['id' => $id])->build());
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch("public/form-builder");
|
||||
|
|
@ -100,7 +100,7 @@ class Images extends AuthController
|
|||
{
|
||||
$data = Util::postMore([
|
||||
['pid', 0],
|
||||
['type', 'images'],
|
||||
['type', $this->type],
|
||||
['name', '']
|
||||
]);
|
||||
if ($data['name'] == '') return app("json")->fail("分类名称不能为空");
|
||||
|
|
@ -155,7 +155,7 @@ class Images extends AuthController
|
|||
$image = Attachment::get($id);
|
||||
$form = array();
|
||||
$form[] = Elm::select('cid', '选中分类', (int)$image['cid'])->options(AttachmentCategory::returnOptions())->col(18);
|
||||
$form[] = Elm::hidden('type', 'images')->col(18);
|
||||
$form[] = Elm::hidden('type', $this->type)->col(18);
|
||||
$form = Form::make_post_form($form, Url('saveImage', ['id' => $id])->build());
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch("public/form-builder");
|
||||
|
|
@ -183,7 +183,10 @@ class Images extends AuthController
|
|||
try {
|
||||
switch ($image['storage']) {
|
||||
case 1:
|
||||
unlink(app()->getRootPath() . 'public' . $image['path']);
|
||||
$filePath = app()->getRootPath() . 'public' . $image['path'];
|
||||
if (file_exists($filePath)){
|
||||
unlink(app()->getRootPath() . 'public' . $image['path']);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
QcloudCoService::del(str_replace(system_config("storage_domain"), "", $image['path']));
|
||||
|
|
@ -43,7 +43,10 @@ class SystemConfig extends AuthController
|
|||
}
|
||||
}
|
||||
}
|
||||
$tabList = tModel::lst($where['status'] = 1);
|
||||
$where = [
|
||||
'status' => 1
|
||||
];
|
||||
$tabList = tModel::lst($where);
|
||||
$this->assign("tab_id", $tab_id);
|
||||
$this->assign("tab_list", $tabList['data']);
|
||||
$this->assign("system", $system);
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class User extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('username', '登录账号')->col(10);
|
||||
$form[] = Elm::input('nickname', '昵称')->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/images/index', array('fodder' => 'avatar', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/image/index', array('fodder' => 'avatar', 'limit' => 1)))->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::password('password', '密码')->col(10);
|
||||
$form[] = Elm::input('tel', '电话')->col(10);
|
||||
$form[] = Elm::email('email', '邮箱')->col(10);
|
||||
|
|
@ -91,7 +91,7 @@ class User extends AuthController
|
|||
$form = array();
|
||||
$form[] = Elm::input('username', '登录账号', $ainfo['username'])->col(10);
|
||||
$form[] = Elm::input('nickname', '昵称', $ainfo['nickname'])->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/images/index', array('fodder' => 'avatar', 'limit' => 1)), $ainfo['avatar'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::frameImage('avatar', '头像', Url::buildUrl('admin/image/index', array('fodder' => 'avatar', 'limit' => 1)), $ainfo['avatar'])->icon("ios-image")->width('96%')->height('440px')->col(10);
|
||||
$form[] = Elm::password('password', '密码', $ainfo['password'])->col(10);
|
||||
$form[] = Elm::input('tel', '电话', $ainfo['tel'])->col(10);
|
||||
$form[] = Elm::email('email', '邮箱', $ainfo['email'])->col(10);
|
||||
|
|
|
|||
|
|
@ -389,7 +389,7 @@
|
|||
$loading;
|
||||
|
||||
// ajax上传
|
||||
$.ajax("/admin/files/baseToImage", {
|
||||
$.ajax("/admin/file/baseToImage", {
|
||||
type: 'post',
|
||||
data: {"image": base64Data},
|
||||
dataType: 'json',
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
{include file="public/header" /}
|
||||
<!--标签插件-->
|
||||
<link rel="stylesheet" href="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.css">
|
||||
<!--富文本输入框-->
|
||||
<link rel="stylesheet" href="/static/admin/js/summernote/summernote.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="row">
|
||||
|
|
@ -72,7 +74,7 @@
|
|||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label for="content">文章内容</label>
|
||||
<textarea id="content" name="content"></textarea>
|
||||
<textarea id="content" name="content" data-provide="summernote" data-toolbar="full"></textarea>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<button type="submit" class="btn btn-primary ajax-post" target-form="add-form">立即提交
|
||||
|
|
@ -140,31 +142,60 @@
|
|||
</div>
|
||||
{include file="public/footer"/}
|
||||
<!--select2-->
|
||||
<script src="/static/admin/js/select2.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/select2.min.js"></script>
|
||||
<!--富文本输入框-->
|
||||
<script src="/static/admin/js/tinymce/tinymce.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/summernote.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/lang/summernote-zh-CN.min.js"></script>
|
||||
<!--标签-->
|
||||
<script src="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('#tag').select2();
|
||||
});
|
||||
$(document).ready(function () {
|
||||
tinymce.init({
|
||||
selector: '#content',
|
||||
language: 'zh_CN',
|
||||
directionality: 'ltl',
|
||||
browser_spellcheck: true,
|
||||
contextmenu: false,
|
||||
height: 480,
|
||||
plugins: [
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime media table contextmenu paste imagetools wordcount",
|
||||
"code"
|
||||
],
|
||||
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | code",
|
||||
images_upload_url: '/admin/files/tinymce',
|
||||
$(document).ready(function(){
|
||||
$('[data-provide="summernote"]').each(function() {
|
||||
var options = {
|
||||
dialogsInBody: true,
|
||||
lang: 'zh-CN',
|
||||
dialogsFade: true
|
||||
};
|
||||
var config = {};
|
||||
$.each( $(this).data(), function(key, value){
|
||||
key = key.replace(/-([a-z])/g, function(x){return x[1].toUpperCase();});
|
||||
if ( key == 'provide' ) {
|
||||
return;
|
||||
}
|
||||
config[key] = value;
|
||||
});
|
||||
|
||||
options = $.extend(options, config);
|
||||
options.toolbar = [
|
||||
// [groupName, [list of button]]
|
||||
['para_style', ['style']],
|
||||
['style', ['bold', 'italic', 'underline', 'clear']],
|
||||
['font', ['strikethrough', 'superscript', 'subscript']],
|
||||
['fontsize', ['fontname', 'fontsize', 'height']],
|
||||
['color', ['color']],
|
||||
['para', ['ul', 'ol', 'paragraph', 'hr']],
|
||||
['table', ['table']],
|
||||
['insert', ['link', 'picture', 'video']],
|
||||
['do', ['undo', 'redo']],
|
||||
['misc', ['fullscreen', 'codeview', 'help']]
|
||||
];
|
||||
$(this).summernote(options);
|
||||
});
|
||||
|
||||
$(document).on('click', '[data-summernote-edit]', function(){
|
||||
var target = $(this).data('summernote-edit');
|
||||
$(target).summernote({focus: true});
|
||||
});
|
||||
|
||||
|
||||
$(document).on('click', '[data-summernote-save]', function(){
|
||||
var target = $(this).data('summernote-save');
|
||||
var markup = $(target).summernote('code');
|
||||
$(target).summernote('destroy');
|
||||
alert('修改完成');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -182,11 +213,11 @@
|
|||
*/
|
||||
function upload(inputName) {
|
||||
var formData = new FormData();
|
||||
formData.append("type", 'images');
|
||||
formData.append("type", 'image');
|
||||
formData.append("file", $("#file_" + inputName)[0].files[0]);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/files/upload',
|
||||
url: '/admin/file/upload',
|
||||
data: formData,
|
||||
cache: false,
|
||||
processData: false,
|
||||
|
|
@ -209,13 +240,10 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$(".add-form").submit(function () {
|
||||
let Arr = $('.add-form').serializeArray();
|
||||
let checkResult = true;
|
||||
let content = tinyMCE.activeEditor.getContent();
|
||||
$("#content").val(content);
|
||||
|
||||
$.each(Arr, function (index, item) {
|
||||
try {
|
||||
switch (item.name) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
{include file="public/header" /}
|
||||
<!--标签插件-->
|
||||
<link rel="stylesheet" href="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.css">
|
||||
<!--富文本输入框-->
|
||||
<link rel="stylesheet" href="/static/admin/js/summernote/summernote.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="row">
|
||||
|
|
@ -87,7 +89,7 @@
|
|||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label for="content">文章内容</label>
|
||||
<textarea id="content" name="content">{$info.content}</textarea>
|
||||
<textarea id="content" name="content" data-provide="summernote" data-toolbar="full">{$info.content}</textarea>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<button type="submit" class="btn btn-primary ajax-post" target-form="add-form">立即提交
|
||||
|
|
@ -157,31 +159,60 @@
|
|||
</div>
|
||||
{include file="public/footer"/}
|
||||
<!--select2-->
|
||||
<script src="/static/admin/js/select2.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/select2.min.js"></script>
|
||||
<!--富文本输入框-->
|
||||
<script src="/static/admin/js/tinymce/tinymce.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/summernote.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/lang/summernote-zh-CN.min.js"></script>
|
||||
<!--标签-->
|
||||
<script src="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('#tag').select2();
|
||||
});
|
||||
$(document).ready(function () {
|
||||
tinymce.init({
|
||||
selector: '#content',
|
||||
language: 'zh_CN',
|
||||
directionality: 'ltl',
|
||||
browser_spellcheck: true,
|
||||
contextmenu: false,
|
||||
height: 480,
|
||||
plugins: [
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime media table contextmenu paste imagetools wordcount",
|
||||
"code"
|
||||
],
|
||||
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | code",
|
||||
images_upload_url: '/admin/files/tinymce',
|
||||
$(document).ready(function(){
|
||||
$('[data-provide="summernote"]').each(function() {
|
||||
var options = {
|
||||
dialogsInBody: true,
|
||||
lang: 'zh-CN',
|
||||
dialogsFade: true
|
||||
};
|
||||
var config = {};
|
||||
$.each( $(this).data(), function(key, value){
|
||||
key = key.replace(/-([a-z])/g, function(x){return x[1].toUpperCase();});
|
||||
if ( key == 'provide' ) {
|
||||
return;
|
||||
}
|
||||
config[key] = value;
|
||||
});
|
||||
|
||||
options = $.extend(options, config);
|
||||
options.toolbar = [
|
||||
// [groupName, [list of button]]
|
||||
['para_style', ['style']],
|
||||
['style', ['bold', 'italic', 'underline', 'clear']],
|
||||
['font', ['strikethrough', 'superscript', 'subscript']],
|
||||
['fontsize', ['fontname', 'fontsize', 'height']],
|
||||
['color', ['color']],
|
||||
['para', ['ul', 'ol', 'paragraph', 'hr']],
|
||||
['table', ['table']],
|
||||
['insert', ['link', 'picture', 'video']],
|
||||
['do', ['undo', 'redo']],
|
||||
['misc', ['fullscreen', 'codeview', 'help']]
|
||||
];
|
||||
$(this).summernote(options);
|
||||
});
|
||||
|
||||
$(document).on('click', '[data-summernote-edit]', function(){
|
||||
var target = $(this).data('summernote-edit');
|
||||
$(target).summernote({focus: true});
|
||||
});
|
||||
|
||||
|
||||
$(document).on('click', '[data-summernote-save]', function(){
|
||||
var target = $(this).data('summernote-save');
|
||||
var markup = $(target).summernote('code');
|
||||
$(target).summernote('destroy');
|
||||
alert('修改完成');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -199,11 +230,11 @@
|
|||
*/
|
||||
function upload(inputName) {
|
||||
var formData = new FormData();
|
||||
formData.append("type", 'images');
|
||||
formData.append("type", 'image');
|
||||
formData.append("file", $("#file_" + inputName)[0].files[0]);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/files/upload',
|
||||
url: '/admin/file/upload',
|
||||
data: formData,
|
||||
cache: false,
|
||||
processData: false,
|
||||
|
|
@ -226,12 +257,10 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$(".add-form").submit(function () {
|
||||
let Arr = $('.add-form').serializeArray();
|
||||
let checkResult = true;
|
||||
let content = tinyMCE.activeEditor.getContent();
|
||||
$("#content").val(content);
|
||||
$.each(Arr, function (index, item) {
|
||||
try {
|
||||
switch (item.name) {
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@
|
|||
onEditableSave: function (field, row) {
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "/admin/article/update",
|
||||
url: "/admin/article/save",
|
||||
data: row,
|
||||
success: function (res) {
|
||||
if (res.code == 200 || res.status == 200) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
{include file="public/header" /}
|
||||
<!--标签插件-->
|
||||
<link rel="stylesheet" href="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.css">
|
||||
<!--富文本输入框-->
|
||||
<link rel="stylesheet" href="/static/admin/js/summernote/summernote.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="row">
|
||||
|
|
@ -74,7 +76,7 @@
|
|||
</div>
|
||||
<div class="form-group col-md-12" id="page-content" style="display: none">
|
||||
<label>单页内容</label>
|
||||
<textarea id="content" name="content"></textarea>
|
||||
<textarea id="content" name="content" data-provide="summernote" data-min-height="480"></textarea>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<button type="submit" class="btn btn-primary ajax-post" target-form="add-form">立即提交
|
||||
|
|
@ -112,31 +114,60 @@
|
|||
</div>
|
||||
{include file="public/footer"/}
|
||||
<!--select2-->
|
||||
<script src="/static/admin/js/select2.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/select2.min.js"></script>
|
||||
<!--富文本输入框-->
|
||||
<script src="/static/admin/js/tinymce/tinymce.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/summernote.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/lang/summernote-zh-CN.min.js"></script>
|
||||
<!--标签-->
|
||||
<script src="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('#tag').select2();
|
||||
});
|
||||
$(document).ready(function () {
|
||||
tinymce.init({
|
||||
selector: '#content',
|
||||
language: 'zh_CN',
|
||||
directionality: 'ltl',
|
||||
browser_spellcheck: true,
|
||||
contextmenu: false,
|
||||
height: 480,
|
||||
plugins: [
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime media table contextmenu paste imagetools wordcount",
|
||||
"code"
|
||||
],
|
||||
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | code",
|
||||
images_upload_url: '/admin/files/tinymce',
|
||||
$(document).ready(function(){
|
||||
$('[data-provide="summernote"]').each(function() {
|
||||
var options = {
|
||||
dialogsInBody: true,
|
||||
lang: 'zh-CN',
|
||||
dialogsFade: true
|
||||
};
|
||||
var config = {};
|
||||
$.each( $(this).data(), function(key, value){
|
||||
key = key.replace(/-([a-z])/g, function(x){return x[1].toUpperCase();});
|
||||
if ( key == 'provide' ) {
|
||||
return;
|
||||
}
|
||||
config[key] = value;
|
||||
});
|
||||
|
||||
options = $.extend(options, config);
|
||||
options.toolbar = [
|
||||
// [groupName, [list of button]]
|
||||
['para_style', ['style']],
|
||||
['style', ['bold', 'italic', 'underline', 'clear']],
|
||||
['font', ['strikethrough', 'superscript', 'subscript']],
|
||||
['fontsize', ['fontname', 'fontsize', 'height']],
|
||||
['color', ['color']],
|
||||
['para', ['ul', 'ol', 'paragraph', 'hr']],
|
||||
['table', ['table']],
|
||||
['insert', ['link', 'picture', 'video']],
|
||||
['do', ['undo', 'redo']],
|
||||
['misc', ['fullscreen', 'codeview']]
|
||||
];
|
||||
$(this).summernote(options);
|
||||
});
|
||||
|
||||
$(document).on('click', '[data-summernote-edit]', function(){
|
||||
var target = $(this).data('summernote-edit');
|
||||
$(target).summernote({focus: true});
|
||||
});
|
||||
|
||||
|
||||
$(document).on('click', '[data-summernote-save]', function(){
|
||||
var target = $(this).data('summernote-save');
|
||||
var markup = $(target).summernote('code');
|
||||
$(target).summernote('destroy');
|
||||
alert('修改完成');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -154,11 +185,11 @@
|
|||
*/
|
||||
function upload(inputName) {
|
||||
var formData = new FormData();
|
||||
formData.append("type", 'images');
|
||||
formData.append("type", 'image');
|
||||
formData.append("file", $("#file_" + inputName)[0].files[0]);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/files/upload',
|
||||
url: '/admin/file/upload',
|
||||
data: formData,
|
||||
cache: false,
|
||||
processData: false,
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
{include file="public/header" /}
|
||||
<!--标签插件-->
|
||||
<link rel="stylesheet" href="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.css">
|
||||
<!--富文本输入框-->
|
||||
<link rel="stylesheet" href="/static/admin/js/summernote/summernote.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="row">
|
||||
|
|
@ -84,7 +86,7 @@
|
|||
<div class="form-group col-md-12" id="page-content" {if
|
||||
2!=$info.type}style="display:none;"{/if}>
|
||||
<label>单页内容</label>
|
||||
<textarea id="content" name="content">{$info.content}</textarea>
|
||||
<textarea id="content" name="content" data-min-height="480" data-provide="summernote">{$info.content}</textarea>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<button type="submit" class="btn btn-primary ajax-post" target-form="add-form">立即提交
|
||||
|
|
@ -122,31 +124,60 @@
|
|||
</div>
|
||||
{include file="public/footer"/}
|
||||
<!--select2-->
|
||||
<script src="/static/admin/js/select2.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/select2.min.js"></script>
|
||||
<!--富文本输入框-->
|
||||
<script src="/static/admin/js/tinymce/tinymce.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/summernote.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/summernote/lang/summernote-zh-CN.min.js"></script>
|
||||
<!--标签-->
|
||||
<script src="/static/admin/js/jquery-tags-input/jquery.tagsinput.min.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('#tag').select2();
|
||||
});
|
||||
$(document).ready(function () {
|
||||
tinymce.init({
|
||||
selector: '#content',
|
||||
language: 'zh_CN',
|
||||
directionality: 'ltl',
|
||||
browser_spellcheck: true,
|
||||
contextmenu: false,
|
||||
height: 480,
|
||||
plugins: [
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime media table contextmenu paste imagetools wordcount",
|
||||
"code"
|
||||
],
|
||||
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | code",
|
||||
images_upload_url: '/admin/files/tinymce',
|
||||
$(document).ready(function(){
|
||||
$('[data-provide="summernote"]').each(function() {
|
||||
var options = {
|
||||
dialogsInBody: true,
|
||||
lang: 'zh-CN',
|
||||
dialogsFade: true
|
||||
};
|
||||
var config = {};
|
||||
$.each( $(this).data(), function(key, value){
|
||||
key = key.replace(/-([a-z])/g, function(x){return x[1].toUpperCase();});
|
||||
if ( key == 'provide' ) {
|
||||
return;
|
||||
}
|
||||
config[key] = value;
|
||||
});
|
||||
|
||||
options = $.extend(options, config);
|
||||
options.toolbar = [
|
||||
// [groupName, [list of button]]
|
||||
['para_style', ['style']],
|
||||
['style', ['bold', 'italic', 'underline', 'clear']],
|
||||
['font', ['strikethrough', 'superscript', 'subscript']],
|
||||
['fontsize', ['fontname', 'fontsize', 'height']],
|
||||
['color', ['color']],
|
||||
['para', ['ul', 'ol', 'paragraph', 'hr']],
|
||||
['table', ['table']],
|
||||
['insert', ['link', 'picture', 'video']],
|
||||
['do', ['undo', 'redo']],
|
||||
['misc', ['fullscreen', 'codeview']]
|
||||
];
|
||||
$(this).summernote(options);
|
||||
});
|
||||
|
||||
$(document).on('click', '[data-summernote-edit]', function(){
|
||||
var target = $(this).data('summernote-edit');
|
||||
$(target).summernote({focus: true});
|
||||
});
|
||||
|
||||
|
||||
$(document).on('click', '[data-summernote-save]', function(){
|
||||
var target = $(this).data('summernote-save');
|
||||
var markup = $(target).summernote('code');
|
||||
$(target).summernote('destroy');
|
||||
alert('修改完成');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -164,11 +195,11 @@
|
|||
*/
|
||||
function upload(inputName) {
|
||||
var formData = new FormData();
|
||||
formData.append("type", 'images');
|
||||
formData.append("type", 'image');
|
||||
formData.append("file", $("#file_" + inputName)[0].files[0]);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/files/upload',
|
||||
url: '/admin/file/upload',
|
||||
data: formData,
|
||||
cache: false,
|
||||
processData: false,
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@
|
|||
},
|
||||
tree: function () {
|
||||
const that = this;
|
||||
$.post(url = "/admin/images/category", data = {'title': $('#search').val()}, function (res) {
|
||||
$.post(url = "/admin/image/category", data = {'title': $('#search').val()}, function (res) {
|
||||
if (res.status === 200) {
|
||||
$('#tree').treeview({
|
||||
expandIcon: 'glyphicon glyphicon-chevron-right',
|
||||
|
|
@ -267,15 +267,15 @@
|
|||
const that = this;
|
||||
switch (type) {
|
||||
case 'addCategory':
|
||||
iframe.createIframe('添加分类', '/admin/images/addCategory?id=' + id + '&pid=' + pid, {height: '215px;'});
|
||||
iframe.createIframe('添加分类', '/admin/image/addCategory?id=' + id + '&pid=' + pid, {height: '215px;'});
|
||||
break;
|
||||
case 'editCategory':
|
||||
if (id == '') return lightyear.notify('未选择分类', 'danger', 1000, 'mdi mdi-emoticon-neutral', 'top', 'center');
|
||||
iframe.createIframe('修改分类', '/admin/images/editCategory?id=' + id + '&pid=' + pid, {height: '215px;'});
|
||||
iframe.createIframe('修改分类', '/admin/image/editCategory?id=' + id + '&pid=' + pid, {height: '215px;'});
|
||||
break;
|
||||
case 'delCategory':
|
||||
if (id == '') return lightyear.notify('未选择分类', 'danger', 1000, 'mdi mdi-emoticon-neutral', 'top', 'center');
|
||||
$.get(url = "/admin/images/delCategory", data = {id: id}, function (res) {
|
||||
$.get(url = "/admin/image/delCategory", data = {id: id}, function (res) {
|
||||
if (res.status === 200 || res.code === 200) {
|
||||
lightyear.notify(res.msg, 'success', 1000, 'mdi mdi-emoticon-happy', 'top', 'center');
|
||||
return tree();
|
||||
|
|
@ -288,11 +288,11 @@
|
|||
break;
|
||||
case 'moveImage':
|
||||
if (this.checkedImageId.length <= 0) return lightyear.notify('未选择图片', 'danger', 1000, 'mdi mdi-emoticon-neutral', 'top', 'center');
|
||||
iframe.createIframe('修改图片分类', '/admin/images/editImage?id=' + this.checkedImageId[this.checkedImageId.length - 1], {height: '215px;'});
|
||||
iframe.createIframe('修改图片分类', '/admin/image/editImage?id=' + this.checkedImageId[this.checkedImageId.length - 1], {height: '215px;'});
|
||||
break;
|
||||
case 'delImage':
|
||||
if (this.checkedImageId.length <= 0) return lightyear.notify('未选择图片', 'danger', 1000, 'mdi mdi-emoticon-neutral', 'top', 'center');
|
||||
$.get(url = "/admin/images/delImage", data = {id: this.checkedImageId[this.checkedImageId.length - 1]}, function (res) {
|
||||
$.get(url = "/admin/image/delImage", data = {id: this.checkedImageId[this.checkedImageId.length - 1]}, function (res) {
|
||||
if (res.status === 200 || res.code === 200) {
|
||||
lightyear.notify(res.msg, 'success', 1000, 'mdi mdi-emoticon-happy', 'top', 'center');
|
||||
that.checkedImageId.length--;
|
||||
|
|
@ -312,11 +312,11 @@
|
|||
if (!$("#fileUpload").val()) return;
|
||||
var formData = new FormData();
|
||||
formData.append("file", $("#fileUpload")[0].files[0]);
|
||||
formData.append("type", 'images');
|
||||
formData.append("type", 'image');
|
||||
formData.append("cid", id);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/admin/files/image",
|
||||
url: "/admin/file/image",
|
||||
enctype: 'multipart/form-data',
|
||||
data: formData,
|
||||
processData: false,
|
||||
|
|
@ -328,7 +328,7 @@
|
|||
},
|
||||
getImageList: function (page = 1) {
|
||||
const th = this;
|
||||
$.post(url = "/admin/images/getImageList", data = {
|
||||
$.post(url = "/admin/image/getImageList", data = {
|
||||
cid: id,
|
||||
page: page,
|
||||
limit: th.model.size
|
||||
|
|
@ -347,6 +347,7 @@
|
|||
if (this.checkedImage.length >= limit) return lightyear.notify('不能再选了,最多只能选' + limit + '个', 'danger', 1000, 'mdi mdi-emoticon-neutral', 'top', 'center');
|
||||
|
||||
this.checkedImageId.push(item.id);
|
||||
console.log(item.path,item.id)
|
||||
this.checkedImage.push(item.path);
|
||||
}
|
||||
this.$set(this.imageList[index], 'isSelect', item.isSelect == undefined ? true : !item.isSelect);
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
<aside class="lyear-layout-sidebar">
|
||||
<!-- logo -->
|
||||
<div id="logo" class="sidebar-header">
|
||||
<a href="/admin/index/index.html"><img src="/static/admin/images/logo-sidebar.png"
|
||||
<a href="/admin/index/index.html"><img src="/static/admin/img/logo-sidebar.png"
|
||||
title="{:system_config('title')}后台管理系统"
|
||||
alt="{:system_config('title')}后台管理系统"/></a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -69,83 +69,10 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>每周用户</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<canvas class="js-chartjs-bars"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>交易历史记录</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<canvas class="js-chartjs-lines"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/main.min.js"></script>
|
||||
|
||||
<!--图表插件-->
|
||||
<script type="text/javascript" src="/static/admin/js/Chart.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function (e) {
|
||||
var $dashChartBarsCnt = jQuery('.js-chartjs-bars')[0].getContext('2d'),
|
||||
$dashChartLinesCnt = jQuery('.js-chartjs-lines')[0].getContext('2d');
|
||||
|
||||
var $dashChartBarsData = {
|
||||
labels: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
|
||||
datasets: [
|
||||
{
|
||||
label: '注册用户',
|
||||
borderWidth: 1,
|
||||
borderColor: 'rgba(0,0,0,0)',
|
||||
backgroundColor: 'rgba(51,202,185,0.5)',
|
||||
hoverBackgroundColor: "rgba(51,202,185,0.7)",
|
||||
hoverBorderColor: "rgba(0,0,0,0)",
|
||||
data: [2500, 1500, 1200, 3200, 4800, 3500, 1500]
|
||||
}
|
||||
]
|
||||
};
|
||||
var $dashChartLinesData = {
|
||||
labels: ['2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014'],
|
||||
datasets: [
|
||||
{
|
||||
label: '交易资金',
|
||||
data: [20, 25, 40, 30, 45, 40, 55, 40, 48, 40, 42, 50],
|
||||
borderColor: '#358ed7',
|
||||
backgroundColor: 'rgba(53, 142, 215, 0.175)',
|
||||
borderWidth: 1,
|
||||
fill: false,
|
||||
lineTension: 0.5
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
new Chart($dashChartBarsCnt, {
|
||||
type: 'bar',
|
||||
data: $dashChartBarsData
|
||||
});
|
||||
|
||||
var myLineChart = new Chart($dashChartLinesCnt, {
|
||||
type: 'line',
|
||||
data: $dashChartLinesData,
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -56,7 +56,7 @@
|
|||
</style>
|
||||
</head>
|
||||
|
||||
<body style="background: url('/static/admin/images/back.jpg')">
|
||||
<body style="background: url('/static/admin/img/back.jpg')">
|
||||
<div class="row lyear-wrapper">
|
||||
<div class="lyear-login">
|
||||
<div class="login-center">
|
||||
|
|
@ -100,6 +100,7 @@
|
|||
</div>
|
||||
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/layer/layer.js"></script>
|
||||
<script>
|
||||
// 账号登录
|
||||
function btnLogin() {
|
||||
|
|
@ -108,7 +109,7 @@
|
|||
if ($("#captchas").val() == "") {$(".has-captchas").addClass("has-error");return false;}
|
||||
$.post(url="/admin/login/verify",$("#loginFrm").serialize(),function (res) {
|
||||
if (res.status == 200) window.location = "/admin/index/index";
|
||||
else alert(res.msg);
|
||||
else layer.alert(res.msg, {icon:5})
|
||||
return true;
|
||||
});
|
||||
$("#captcha").attr("src",'/admin/login/captcha?d='+Math.random());
|
||||
|
|
|
|||
|
|
@ -127,11 +127,11 @@
|
|||
function upload(inputName) {
|
||||
var formData = new FormData();
|
||||
formData.append("file", $("#file" + inputName)[0].files[0]);
|
||||
formData.append("type", "images");
|
||||
formData.append("type", "image");
|
||||
formData.append("storage", 1);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/files/upload',
|
||||
url: '/admin/file/upload',
|
||||
data: formData,
|
||||
cache: false,
|
||||
processData: false,
|
||||
|
|
|
|||
|
|
@ -1,145 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
|
||||
<title>网站配置 - {:system_config('title')}后台管理系统</title>
|
||||
<link rel="icon" href="{:system_config('favicon')}" type="image/ico">
|
||||
<meta name="keywords" content="{:system_config('keywords')}">
|
||||
<meta name="description" content="{:system_config('description')}">
|
||||
<meta name="author" content="{:system_config('author')}">
|
||||
<link href="/static/admin/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="/static/admin/css/materialdesignicons.min.css" rel="stylesheet">
|
||||
<link href="/static/admin/css/style.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/static/admin/js/jconfirm/jquery-confirm.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container-fluid p-t-15">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<ul class="nav nav-tabs page-tabs">
|
||||
<li {eq name="tab_id" value="38" }class="active" {
|
||||
/eq}><a href="/admin/system_config/base?tab_id=38">公众号</a></li>
|
||||
<li {eq name="tab_id" value="39" }class="active" {
|
||||
/eq}><a href="/admin/system_config/base?tab_id=39">支付宝</a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active">
|
||||
<form name="edit-form" id="edit-form" class="edit-form" onsubmit="return toSubmit()">
|
||||
{volist name="system" id="vo"}
|
||||
{switch $vo.tag_type}
|
||||
{case textarea}
|
||||
<div class="form-group">
|
||||
<label for="{$vo.form_name}">{$vo.name}</label>
|
||||
<textarea class="form-control" id="{$vo.form_name}" rows="5" name="{$vo.form_name}"
|
||||
placeholder="请输入{$vo.name}">{$vo.value}</textarea>
|
||||
<small class="help-block">{$vo.remark}</small>
|
||||
</div>
|
||||
{/case}
|
||||
{case select}
|
||||
{/case}
|
||||
{default/}
|
||||
<div class="form-group">
|
||||
<label for="web_site_title">{$vo.name}</label>
|
||||
{switch $vo.form_type}
|
||||
{case file}
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" name="{$vo.form_name}" id="{$vo.form_name}"
|
||||
value="{$vo.value}"/>
|
||||
<input type="file" id="file{$vo.form_name}" style="display: none;"
|
||||
onchange="upload('{$vo.form_name}')"/>
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-success" type="button" for-input="{$vo.form_name}"
|
||||
onclick="btnClick('{$vo.form_name}')">上传
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{/case}
|
||||
{case radio}
|
||||
<div class="controls-box">
|
||||
{php}
|
||||
foreach(explode("\n",$vo['param']) as $k=>$v)
|
||||
{
|
||||
$tmp = explode("=>",$v);
|
||||
$checked = $tmp[0] == $vo["value"] ? 'checked' : '';
|
||||
echo '<label class="lyear-radio radio-inline radio-primary">
|
||||
<input type="radio" name="'.$vo[" form_name"].'" value="'.$tmp[0].'"
|
||||
'.$checked.'><span>'.$tmp[1].'</span>
|
||||
</label>';
|
||||
}
|
||||
{/php}
|
||||
</div>
|
||||
{/case}
|
||||
{default/}
|
||||
<input class="form-control" type="{$vo.form_type}" id="web_site_title"
|
||||
name="{$vo.form_name}" value="{$vo.value}" placeholder="请输入{$vo.name}">
|
||||
{/switch}
|
||||
<small class="help-block" style="color: #da6565;">{$vo.remark}</small>
|
||||
</div>
|
||||
{/switch}
|
||||
{/volist}
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary m-r-5">确 定</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/main.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/bootstrap-notify.min.js"></script>
|
||||
<script type="text/javascript" src="/static/admin/js/lightyear.js"></script>
|
||||
<script src="/static/admin/js/jconfirm/jquery-confirm.min.js"></script>
|
||||
<script>
|
||||
/**
|
||||
* 选择文件
|
||||
* @param inputName
|
||||
*/
|
||||
function btnClick(inputName) {
|
||||
$("#file" + inputName).click()
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步上传
|
||||
* @param inputName
|
||||
*/
|
||||
function upload(inputName) {
|
||||
var formData = new FormData();
|
||||
formData.append("file", $("#file" + inputName)[0].files[0]);
|
||||
formData.append("cid", 0);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/files/cert',
|
||||
data: formData,
|
||||
cache: false,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function (res) {
|
||||
$("#" + inputName).val(res.data.filePath);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交表单
|
||||
*/
|
||||
function toSubmit() {
|
||||
$.post(
|
||||
url = '/admin/system_config/ajaxSave',
|
||||
data = $("#edit-form").serializeArray(),
|
||||
function (res) {
|
||||
//if (!Array.isArray(res)) res = jQuery.parseJSON(res);
|
||||
if (res.status === 200 || res.code === 200) lightyear.notify(res.msg, 'success', 3000, 'mdi mdi-emoticon-happy', 'top', 'center');
|
||||
else lightyear.notify(res.msg, 'danger', 3000, 'mdi mdi-emoticon-neutral', 'top', 'center');
|
||||
}
|
||||
);
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -109,6 +109,28 @@ if (!function_exists('unicode_decode')) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务器地址
|
||||
* 协议和域名
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function server_url()
|
||||
{
|
||||
if (isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))) {
|
||||
$http = 'https://';
|
||||
} elseif (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'])) {
|
||||
$http = 'https://';
|
||||
} else {
|
||||
$http = 'http://';
|
||||
}
|
||||
|
||||
$host = $_SERVER['HTTP_HOST'];
|
||||
$res = $http . $host;
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
if (!function_exists('file_cdn')) {
|
||||
/**
|
||||
* 文件cdn
|
||||
|
|
@ -120,21 +142,24 @@ if (!function_exists('file_cdn')) {
|
|||
function file_cdn($path)
|
||||
{
|
||||
if (empty($path)) {
|
||||
return $path;
|
||||
return '';
|
||||
}
|
||||
|
||||
if (strpos($path, 'http') !== false) {
|
||||
//是网址开头的不处理
|
||||
return $path;
|
||||
}
|
||||
|
||||
$path = str_replace(public_path(), '', $path);
|
||||
if (!(substr($path, 0, 1) == '/')) {
|
||||
//统一路径
|
||||
$path = '/' . $path;
|
||||
}
|
||||
|
||||
//转换因为win导致的兼容问题
|
||||
if(strtoupper(substr(PHP_OS,0,3))==='WIN'){
|
||||
$path = str_replace( DIRECTORY_SEPARATOR, '/',$path);
|
||||
}
|
||||
return config("app.cdn_url") . $path;
|
||||
|
||||
if (!(substr($path, 0, 1) == '/')) {
|
||||
//统一路径
|
||||
$path = '/' . $path;
|
||||
}
|
||||
return (config("app.cdn_url")?:$server_url = server_url()) . $path;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ class Attachment extends BaseModel
|
|||
if ($where['cid'] != "") $model = $model->where("cid", $where['cid']);
|
||||
$count = self::counts($model);
|
||||
$model = $model->order("id desc");
|
||||
$model = $model->field("path");
|
||||
$model = $model->field("id,path");
|
||||
$data = $model->page((int)$where['page'], (int)$where['limit'])->select();
|
||||
if ($data) $data = $data->toArray();
|
||||
return compact("data", "count");
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ class AttachmentCategory extends BaseModel
|
|||
* @throws DbException
|
||||
* @throws ModelNotFoundException
|
||||
*/
|
||||
public static function buildNodes(string $type = "images", int $pid = 0, string $title = "")
|
||||
public static function buildNodes(string $type = "image", int $pid = 0, string $title = "")
|
||||
{
|
||||
$model = new self;
|
||||
$model = $model->where("type", $type);
|
||||
|
|
|
|||
|
|
@ -10,16 +10,21 @@ class SystemConfigTab extends BaseModel
|
|||
* 列表
|
||||
* @param $where
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @author 李玉坤
|
||||
* @date 2022-02-28 9:19
|
||||
*/
|
||||
public static function lst($where)
|
||||
{
|
||||
$model = new self;
|
||||
if ($where['status'] != "") $model = $model->where("status", $where['status']);
|
||||
if ($where['name'] != "") $model = $model->where("name", "like", "%$where[name]%");
|
||||
if (!empty($where['name'])) $model = $model->where("name", "like", "%$where[name]%");
|
||||
$count = self::counts($model);
|
||||
$model = $model->page((int)$where['page'], (int)$where['limit']);
|
||||
if (isset($where['page']) && isset($where['limit'])) $model = $model->page((int)$where['page'], (int)$where['limit']);
|
||||
$data = $model->select();
|
||||
if ($data) $data = $data->toArray();
|
||||
return compact("data", "count");
|
||||
return compact('data', 'count');
|
||||
}
|
||||
}
|
||||
|
|
@ -42,5 +42,5 @@ return [
|
|||
// 显示错误信息
|
||||
'show_error_msg' => env('app_debug', false),
|
||||
//cdn
|
||||
'cdn_url' => env('app.cdn', 'http://apeblog.io/'),
|
||||
'cdn_url' => env('app.cdn', ''),
|
||||
];
|
||||
|
|
|
|||
|
|
@ -7,7 +7,11 @@ return [
|
|||
'disks' => [
|
||||
'local' => [
|
||||
'type' => 'local',
|
||||
'root' => app()->getRootPath() . 'public/uploads',
|
||||
'root' => app()->getRootPath() . 'public/upload',
|
||||
// 磁盘路径对应的外部URL路径
|
||||
'url' => '/upload',
|
||||
// 可见性
|
||||
'visibility' => 'public',
|
||||
],
|
||||
'public' => [
|
||||
// 磁盘类型
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ CREATE TABLE `ape_admin` (
|
|||
-- ----------------------------
|
||||
-- Records of ape_admin
|
||||
-- ----------------------------
|
||||
INSERT INTO `ape_admin` VALUES (1, 1, 'admin', '超级管理员', '4760f3fbfe9e42ace8bea27edfb85d65', '超级管理员', '/static/admin/images/logo2.png', 1, '13500000000', '123@qq.com', '', 1, '', 1, 1, 1642090317, 1642946994);
|
||||
INSERT INTO `ape_admin` VALUES (1, 1, 'admin', '超级管理员', '4760f3fbfe9e42ace8bea27edfb85d65', '超级管理员', '/static/admin/img/logo2.png', 1, '13500000000', '123@qq.com', '', 1, '', 1, 1, 1642090317, 1642946994);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for ape_admin_auth
|
||||
|
|
|
|||
|
|
@ -334,9 +334,9 @@ switch ($step) {
|
|||
mysqli_query($conn, "truncate table {$dbPrefix}admin");
|
||||
mysqli_query($conn, "truncate table {$dbPrefix}user");
|
||||
$addAdminSql = "INSERT INTO `{$dbPrefix}admin` (`id`, `uid`,`username`,`realname`, `nickname`, `avatar`, `password`, `role_id`, `status`, `create_time`, `create_user`) VALUES" .
|
||||
"(1, 1,'" . $username . "', '超级管理员' ,'超级管理员','/static/admin/images/logo2.png','" . $password . "', 1, 1, $time, '1')";
|
||||
"(1, 1,'" . $username . "', '超级管理员' ,'超级管理员','/static/admin/img/logo2.png','" . $password . "', 1, 1, $time, '1')";
|
||||
$addUserSql = "INSERT INTO `{$dbPrefix}user` (`id`, `username`, `nickname`, `avatar`, `password`, `status`, `is_admin`, `create_time`) VALUES " .
|
||||
"(1,'" . $username . "', '超级管理员' ,'/static/admin/images/logo2.png','" . $password . "', 1, 1, $time);";
|
||||
"(1,'" . $username . "', '超级管理员' ,'/static/admin/img/logo2.png','" . $password . "', 1, 1, $time);";
|
||||
//插入前台用户和管理员
|
||||
mysqli_query($conn, $addUserSql);
|
||||
$res = mysqli_query($conn, $addAdminSql);
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
|
@ -47,7 +47,7 @@ jQuery( function() {
|
|||
//图片加载失败
|
||||
$("img").error(function(){
|
||||
//当图片加载失败时,你要进行的操作
|
||||
$(this).attr('src','/static/admin/images/logo-ico.png');
|
||||
$(this).attr('src','/static/admin/img/logo-ico.png');
|
||||
});
|
||||
|
||||
// 侧边栏导航
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
/*! For license information please see summernote-zh-CN.min.js.LICENSE.txt */
|
||||
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var o in r)("object"==typeof exports?exports:e)[o]=r[o]}}(window,(function(){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=49)}({49:function(e,t){var r;(r=jQuery).extend(r.summernote.lang,{"zh-CN":{font:{bold:"粗体",italic:"斜体",underline:"下划线",clear:"清除格式",height:"行高",name:"字体",strikethrough:"删除线",subscript:"下标",superscript:"上标",size:"字号"},image:{image:"图片",insert:"插入图片",resizeFull:"缩放至 100%",resizeHalf:"缩放至 50%",resizeQuarter:"缩放至 25%",floatLeft:"靠左浮动",floatRight:"靠右浮动",floatNone:"取消浮动",shapeRounded:"形状: 圆角",shapeCircle:"形状: 圆",shapeThumbnail:"形状: 缩略图",shapeNone:"形状: 无",dragImageHere:"将图片拖拽至此处",dropImage:"拖拽图片或文本",selectFromFiles:"从本地上传",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"图片地址",remove:"移除图片",original:"原始图片"},video:{video:"视频",videoLink:"视频链接",insert:"插入视频",url:"视频地址",providers:"(优酷, 腾讯, Instagram, DailyMotion, Youtube等)"},link:{link:"链接",insert:"插入链接",unlink:"去除链接",edit:"编辑链接",textToDisplay:"显示文本",url:"链接地址",openInNewWindow:"在新窗口打开",useProtocol:"使用默认协议"},table:{table:"表格",addRowAbove:"在上方插入行",addRowBelow:"在下方插入行",addColLeft:"在左侧插入列",addColRight:"在右侧插入列",delRow:"删除行",delCol:"删除列",delTable:"删除表格"},hr:{insert:"水平线"},style:{style:"样式",p:"普通",blockquote:"引用",pre:"代码",h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",h5:"标题 5",h6:"标题 6"},lists:{unordered:"无序列表",ordered:"有序列表"},options:{help:"帮助",fullscreen:"全屏",codeview:"源代码"},paragraph:{paragraph:"段落",outdent:"减少缩进",indent:"增加缩进",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐"},color:{recent:"最近使用",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重置",resetToDefault:"默认"},shortcut:{shortcuts:"快捷键",close:"关闭",textFormatting:"文本格式",action:"动作",paragraphFormatting:"段落格式",documentStyle:"文档样式",extraKeys:"额外按键"},help:{insertParagraph:"插入段落",undo:"撤销",redo:"重做",tab:"增加缩进",untab:"减少缩进",bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",removeFormat:"清除格式",justifyLeft:"左对齐",justifyCenter:"居中对齐",justifyRight:"右对齐",justifyFull:"两端对齐",insertUnorderedList:"无序列表",insertOrderedList:"有序列表",outdent:"减少缩进",indent:"增加缩进",formatPara:"设置选中内容样式为 普通",formatH1:"设置选中内容样式为 标题1",formatH2:"设置选中内容样式为 标题2",formatH3:"设置选中内容样式为 标题3",formatH4:"设置选中内容样式为 标题4",formatH5:"设置选中内容样式为 标题5",formatH6:"设置选中内容样式为 标题6",insertHorizontalRule:"插入水平线","linkDialog.show":"显示链接对话框"},history:{undo:"撤销",redo:"重做"},specialChar:{specialChar:"特殊字符",select:"选取特殊字符"}}})}})}));
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
/*! For license information please see summernote-zh-TW.min.js.LICENSE.txt */
|
||||
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var o in r)("object"==typeof exports?exports:e)[o]=r[o]}}(window,(function(){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=50)}({50:function(e,t){var r;(r=jQuery).extend(r.summernote.lang,{"zh-TW":{font:{bold:"粗體",italic:"斜體",underline:"底線",clear:"清除格式",height:"行高",name:"字體",strikethrough:"刪除線",subscript:"下標",superscript:"上標",size:"字號"},image:{image:"圖片",insert:"插入圖片",resizeFull:"縮放至100%",resizeHalf:"縮放至 50%",resizeQuarter:"縮放至 25%",floatLeft:"靠左浮動",floatRight:"靠右浮動",floatNone:"取消浮動",shapeRounded:"形狀: 圓角",shapeCircle:"形狀: 圓",shapeThumbnail:"形狀: 縮略圖",shapeNone:"形狀: 無",dragImageHere:"將圖片拖曳至此處",dropImage:"Drop image or Text",selectFromFiles:"從本機上傳",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"圖片網址",remove:"移除圖片",original:"Original"},video:{video:"影片",videoLink:"影片連結",insert:"插入影片",url:"影片網址",providers:"(優酷, Instagram, DailyMotion, Youtube等)"},link:{link:"連結",insert:"插入連結",unlink:"取消連結",edit:"編輯連結",textToDisplay:"顯示文字",url:"連結網址",openInNewWindow:"在新視窗開啟",useProtocol:"使用默認協定"},table:{table:"表格",addRowAbove:"Add row above",addRowBelow:"Add row below",addColLeft:"Add column left",addColRight:"Add column right",delRow:"Delete row",delCol:"Delete column",delTable:"Delete table"},hr:{insert:"水平線"},style:{style:"樣式",p:"一般",blockquote:"引用區塊",pre:"程式碼區塊",h1:"標題 1",h2:"標題 2",h3:"標題 3",h4:"標題 4",h5:"標題 5",h6:"標題 6"},lists:{unordered:"項目清單",ordered:"編號清單"},options:{help:"幫助",fullscreen:"全螢幕",codeview:"原始碼"},paragraph:{paragraph:"段落",outdent:"取消縮排",indent:"增加縮排",left:"靠右對齊",center:"靠中對齊",right:"靠右對齊",justify:"左右對齊"},color:{recent:"字型顏色",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重設",resetToDefault:"默認"},shortcut:{shortcuts:"快捷鍵",close:"關閉",textFormatting:"文字格式",action:"動作",paragraphFormatting:"段落格式",documentStyle:"文件格式",extraKeys:"額外按鍵"},help:{insertParagraph:"Insert Paragraph",undo:"Undoes the last command",redo:"Redoes the last command",tab:"Tab",untab:"Untab",bold:"Set a bold style",italic:"Set a italic style",underline:"Set a underline style",strikethrough:"Set a strikethrough style",removeFormat:"Clean a style",justifyLeft:"Set left align",justifyCenter:"Set center align",justifyRight:"Set right align",justifyFull:"Set full align",insertUnorderedList:"Toggle unordered list",insertOrderedList:"Toggle ordered list",outdent:"Outdent on current paragraph",indent:"Indent on current paragraph",formatPara:"Change current block's format as a paragraph(P tag)",formatH1:"Change current block's format as H1",formatH2:"Change current block's format as H2",formatH3:"Change current block's format as H3",formatH4:"Change current block's format as H4",formatH5:"Change current block's format as H5",formatH6:"Change current block's format as H6",insertHorizontalRule:"Insert horizontal rule","linkDialog.show":"Show Link Dialog"},history:{undo:"復原",redo:"取消復原"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}})}));
|
||||
1
public/static/admin/js/summernote/plugin/databasic/summernote-ext-databasic.min.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.ext-databasic{position:relative;display:block;min-height:50px;background-color:#0ff;text-align:center;padding:20px;border:1px solid #fff;border-radius:10px}.ext-databasic p{color:#fff;font-size:1.2em;margin:0}
|
||||
1
public/static/admin/js/summernote/plugin/databasic/summernote-ext-databasic.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(window.jQuery)}(function(d){var c=d.summernote.ui,l=d.summernote.dom;d.extend(!0,d.summernote,{plugins:{databasic:function(i){var r=this,n=i.options,s=n.langInfo;r.icon='<i class="fa fa-object-group"/>',i.memo("button.databasic",function(){return c.button({contents:r.icon,tooltip:s.databasic.insert,click:i.createInvokeHandler("databasic.showDialog")}).render()}),i.memo("button.databasicDialog",function(){return c.button({contents:r.icon,tooltip:s.databasic.edit,click:i.createInvokeHandler("databasic.showDialog")}).render()}),i.memo("button.databasicSize100",function(){return c.button({contents:'<span class="note-fontsize-10">100%</span>',tooltip:s.image.resizeFull,click:i.createInvokeHandler("editor.resize","1")}).render()}),i.memo("button.databasicSize50",function(){return c.button({contents:'<span class="note-fontsize-10">50%</span>',tooltip:s.image.resizeHalf,click:i.createInvokeHandler("editor.resize","0.5")}).render()}),i.memo("button.databasicSize25",function(){return c.button({contents:'<span class="note-fontsize-10">25%</span>',tooltip:s.image.resizeQuarter,click:i.createInvokeHandler("editor.resize","0.25")}).render()}),r.events={"summernote.init":function(e,t){d("data.ext-databasic",t.editable).each(function(){r.setContent(d(this))})},"summernote.keyup summernote.mouseup summernote.change summernote.scroll":function(){r.update()},"summernote.dialog.shown":function(){r.hidePopover()}},r.initialize=function(){var e=n.dialogsInBody?d(document.body):i.layoutInfo.editor,t='<div class="form-group row-fluid"><label>'+s.databasic.testLabel+'</label><input class="ext-databasic-test form-control" type="text" /></div>',o='<button href="#" class="btn btn-primary ext-databasic-save">'+s.databasic.insert+"</button>";r.$dialog=c.dialog({title:s.databasic.name,fade:n.dialogsFade,body:t,footer:o}).render().appendTo(e),r.$popover=c.popover({className:"ext-databasic-popover"}).render().appendTo("body");var a=r.$popover.find(".popover-content");i.invoke("buttons.build",a,n.popover.databasic)},r.destroy=function(){r.$popover.remove(),r.$popover=null,r.$dialog.remove(),r.$dialog=null},r.update=function(){var e,t,o,a;i.invoke("editor.hasFocus")?(t=!1,!(e=i.invoke("editor.createRange")).isOnData()||(o=d(e.sc).closest("data.ext-databasic")).length&&(a=l.posFromPlaceholder(o[0]),r.$popover.css({display:"block",left:a.left,top:a.top}),i.invoke("editor.saveTarget",o[0]),t=!0),t||r.hidePopover()):r.hidePopover()},r.hidePopover=function(){r.$popover.hide()},r.getInfo=function(){var e=i.invoke("editor.createRange");if(e.isOnData()){var t=d(e.sc).closest("data.ext-databasic");if(t.length)return{node:t,test:t.attr("data-test")}}return{}},r.setContent=function(e){e.html('<p contenteditable="false">'+r.icon+" "+s.databasic.name+": "+e.attr("data-test")+"</p>")},r.updateNode=function(e){r.setContent(e.node.attr("data-test",e.test))},r.createNode=function(e){var t=d('<data class="ext-databasic"></data>');return t&&(e.node=t,i.invoke("editor.insertNode",t[0])),t},r.showDialog=function(){var t=r.getInfo(),o=!t.node;i.invoke("editor.saveRange"),r.openDialog(t).then(function(e){c.hideDialog(r.$dialog),i.invoke("editor.restoreRange"),o&&r.createNode(t),d.extend(t,e),r.updateNode(t)}).fail(function(){i.invoke("editor.restoreRange")})},r.openDialog=function(n){return d.Deferred(function(t){function e(e){13===e.keyCode&&a.trigger("click")}var o=r.$dialog.find(".ext-databasic-test"),a=r.$dialog.find(".ext-databasic-save");c.onDialogShown(r.$dialog,function(){i.triggerEvent("dialog.shown"),o.val(n.test).on("input",function(){c.toggleBtn(a,o.val())}).trigger("focus").on("keyup",e),a.text(n.node?s.databasic.edit:s.databasic.insert).click(function(e){e.preventDefault(),t.resolve({test:o.val()})}),c.toggleBtn(a,o.val())}),c.onDialogHidden(r.$dialog,function(){o.off("input keyup"),a.off("click"),"pending"===t.state()&&t.reject()}),c.showDialog(r.$dialog)})}}},options:{popover:{databasic:[["databasic",["databasicDialog","databasicSize100","databasicSize50","databasicSize25"]]]}},lang:{"en-US":{databasic:{name:"Basic Data Container",insert:"insert basic data container",edit:"edit basic data container",testLabel:"test input"}}}})});
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
(function(factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && module.exports) {
|
||||
// Node/CommonJS
|
||||
module.exports = factory(require('jquery'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(window.jQuery);
|
||||
}
|
||||
}(function($) {
|
||||
// Extends plugins for adding hello.
|
||||
// - plugin is external module for customizing.
|
||||
$.extend($.summernote.plugins, {
|
||||
/**
|
||||
* @param {Object} context - context object has status of editor.
|
||||
*/
|
||||
'hello': function(context) {
|
||||
var self = this;
|
||||
|
||||
// ui has renders to build ui elements.
|
||||
// - you can create a button with `ui.button`
|
||||
var ui = $.summernote.ui;
|
||||
|
||||
// add hello button
|
||||
context.memo('button.hello', function() {
|
||||
// create button
|
||||
var button = ui.button({
|
||||
contents: '<i class="fa fa-child"/> Hello',
|
||||
tooltip: 'hello',
|
||||
click: function() {
|
||||
self.$panel.show();
|
||||
self.$panel.hide(500);
|
||||
// invoke insertText method with 'hello' on editor module.
|
||||
context.invoke('editor.insertText', 'hello');
|
||||
},
|
||||
});
|
||||
|
||||
// create jQuery object from button instance.
|
||||
var $hello = button.render();
|
||||
return $hello;
|
||||
});
|
||||
|
||||
// This events will be attached when editor is initialized.
|
||||
this.events = {
|
||||
// This will be called after modules are initialized.
|
||||
'summernote.init': function(we, e) {
|
||||
// eslint-disable-next-line
|
||||
console.log('summernote initialized', we, e);
|
||||
},
|
||||
// This will be called when user releases a key on editable.
|
||||
'summernote.keyup': function(we, e) {
|
||||
// eslint-disable-next-line
|
||||
console.log('summernote keyup', we, e);
|
||||
},
|
||||
};
|
||||
|
||||
// This method will be called when editor is initialized by $('..').summernote();
|
||||
// You can create elements for plugin
|
||||
this.initialize = function() {
|
||||
this.$panel = $('<div class="hello-panel"/>').css({
|
||||
position: 'absolute',
|
||||
width: 100,
|
||||
height: 100,
|
||||
left: '50%',
|
||||
top: '50%',
|
||||
background: 'red',
|
||||
}).hide();
|
||||
|
||||
this.$panel.appendTo('body');
|
||||
};
|
||||
|
||||
// This methods will be called when editor is destroyed by $('..').summernote('destroy');
|
||||
// You should remove elements on `initialize`.
|
||||
this.destroy = function() {
|
||||
this.$panel.remove();
|
||||
this.$panel = null;
|
||||
};
|
||||
},
|
||||
});
|
||||
}));
|
||||
|
|
@ -0,0 +1 @@
|
|||
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(window.jQuery)}(function(t){t.extend(t.summernote.plugins,{hello:function(e){var n=this,o=t.summernote.ui;e.memo("button.hello",function(){return o.button({contents:'<i class="fa fa-child"/> Hello',tooltip:"hello",click:function(){n.$panel.show(),n.$panel.hide(500),e.invoke("editor.insertText","hello")}}).render()}),this.events={"summernote.init":function(e,n){console.log("summernote initialized",e,n)},"summernote.keyup":function(e,n){console.log("summernote keyup",e,n)}},this.initialize=function(){this.$panel=t('<div class="hello-panel"/>').css({position:"absolute",width:100,height:100,left:"50%",top:"50%",background:"red"}).hide(),this.$panel.appendTo("body")},this.destroy=function(){this.$panel.remove(),this.$panel=null}}})});
|
||||
|
|
@ -0,0 +1,311 @@
|
|||
(function(factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && module.exports) {
|
||||
// Node/CommonJS
|
||||
module.exports = factory(require('jquery'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(window.jQuery);
|
||||
}
|
||||
}(function($) {
|
||||
$.extend($.summernote.plugins, {
|
||||
'specialchars': function(context) {
|
||||
var self = this;
|
||||
var ui = $.summernote.ui;
|
||||
|
||||
var $editor = context.layoutInfo.editor;
|
||||
var options = context.options;
|
||||
var lang = options.langInfo;
|
||||
|
||||
var KEY = {
|
||||
UP: 38,
|
||||
DOWN: 40,
|
||||
LEFT: 37,
|
||||
RIGHT: 39,
|
||||
ENTER: 13,
|
||||
};
|
||||
var COLUMN_LENGTH = 15;
|
||||
var COLUMN_WIDTH = 35;
|
||||
|
||||
var currentColumn = 0;
|
||||
var currentRow = 0;
|
||||
var totalColumn = 0;
|
||||
var totalRow = 0;
|
||||
|
||||
// special characters data set
|
||||
var specialCharDataSet = [
|
||||
'"', '&', '<', '>', '¡', '¢',
|
||||
'£', '¤', '¥', '¦', '§',
|
||||
'¨', '©', 'ª', '«', '¬',
|
||||
'®', '¯', '°', '±', '²',
|
||||
'³', '´', 'µ', '¶', '·',
|
||||
'¸', '¹', 'º', '»', '¼',
|
||||
'½', '¾', '¿', '×', '÷',
|
||||
'ƒ', 'ˆ', '˜', '–', '—',
|
||||
'‘', '’', '‚', '“', '”',
|
||||
'„', '†', '‡', '•', '…',
|
||||
'‰', '′', '″', '‹', '›',
|
||||
'‾', '⁄', '€', 'ℑ', '℘',
|
||||
'ℜ', '™', 'ℵ', '←', '↑',
|
||||
'→', '↓', '↔', '↵', '⇐',
|
||||
'⇑', '⇒', '⇓', '⇔', '∀',
|
||||
'∂', '∃', '∅', '∇', '∈',
|
||||
'∉', '∋', '∏', '∑', '−',
|
||||
'∗', '√', '∝', '∞', '∠',
|
||||
'∧', '∨', '∩', '∪', '∫',
|
||||
'∴', '∼', '≅', '≈', '≠',
|
||||
'≡', '≤', '≥', '⊂', '⊃',
|
||||
'⊄', '⊆', '⊇', '⊕', '⊗',
|
||||
'⊥', '⋅', '⌈', '⌉', '⌊',
|
||||
'⌋', '◊', '♠', '♣', '♥',
|
||||
'♦',
|
||||
];
|
||||
|
||||
context.memo('button.specialchars', function() {
|
||||
return ui.button({
|
||||
contents: '<i class="fa fa-font fa-flip-vertical">',
|
||||
tooltip: lang.specialChar.specialChar,
|
||||
click: function() {
|
||||
self.show();
|
||||
},
|
||||
}).render();
|
||||
});
|
||||
|
||||
/**
|
||||
* Make Special Characters Table
|
||||
*
|
||||
* @member plugin.specialChar
|
||||
* @private
|
||||
* @return {jQuery}
|
||||
*/
|
||||
this.makeSpecialCharSetTable = function() {
|
||||
var $table = $('<table/>');
|
||||
$.each(specialCharDataSet, function(idx, text) {
|
||||
var $td = $('<td/>').addClass('note-specialchar-node');
|
||||
var $tr = (idx % COLUMN_LENGTH === 0) ? $('<tr/>') : $table.find('tr').last();
|
||||
|
||||
var $button = ui.button({
|
||||
callback: function($node) {
|
||||
$node.html(text);
|
||||
$node.attr('title', text);
|
||||
$node.attr('data-value', encodeURIComponent(text));
|
||||
$node.css({
|
||||
width: COLUMN_WIDTH,
|
||||
'margin-right': '2px',
|
||||
'margin-bottom': '2px',
|
||||
});
|
||||
},
|
||||
}).render();
|
||||
|
||||
$td.append($button);
|
||||
|
||||
$tr.append($td);
|
||||
if (idx % COLUMN_LENGTH === 0) {
|
||||
$table.append($tr);
|
||||
}
|
||||
});
|
||||
|
||||
totalRow = $table.find('tr').length;
|
||||
totalColumn = COLUMN_LENGTH;
|
||||
|
||||
return $table;
|
||||
};
|
||||
|
||||
this.initialize = function() {
|
||||
var $container = options.dialogsInBody ? $(document.body) : $editor;
|
||||
|
||||
var body = '<div class="form-group row-fluid">' + this.makeSpecialCharSetTable()[0].outerHTML + '</div>';
|
||||
|
||||
this.$dialog = ui.dialog({
|
||||
title: lang.specialChar.select,
|
||||
body: body,
|
||||
}).render().appendTo($container);
|
||||
};
|
||||
|
||||
this.show = function() {
|
||||
var text = context.invoke('editor.getSelectedText');
|
||||
context.invoke('editor.saveRange');
|
||||
this.showSpecialCharDialog(text).then(function(selectChar) {
|
||||
context.invoke('editor.restoreRange');
|
||||
|
||||
// build node
|
||||
var $node = $('<span></span>').html(selectChar)[0];
|
||||
|
||||
if ($node) {
|
||||
// insert video node
|
||||
context.invoke('editor.insertNode', $node);
|
||||
}
|
||||
}).fail(function() {
|
||||
context.invoke('editor.restoreRange');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* show image dialog
|
||||
*
|
||||
* @param {jQuery} $dialog
|
||||
* @return {Promise}
|
||||
*/
|
||||
this.showSpecialCharDialog = function(text) {
|
||||
return $.Deferred(function(deferred) {
|
||||
var $specialCharDialog = self.$dialog;
|
||||
var $specialCharNode = $specialCharDialog.find('.note-specialchar-node');
|
||||
var $selectedNode = null;
|
||||
var ARROW_KEYS = [KEY.UP, KEY.DOWN, KEY.LEFT, KEY.RIGHT];
|
||||
var ENTER_KEY = KEY.ENTER;
|
||||
|
||||
function addActiveClass($target) {
|
||||
if (!$target) {
|
||||
return;
|
||||
}
|
||||
$target.find('button').addClass('active');
|
||||
$selectedNode = $target;
|
||||
}
|
||||
|
||||
function removeActiveClass($target) {
|
||||
$target.find('button').removeClass('active');
|
||||
$selectedNode = null;
|
||||
}
|
||||
|
||||
// find next node
|
||||
function findNextNode(row, column) {
|
||||
var findNode = null;
|
||||
$.each($specialCharNode, function(idx, $node) {
|
||||
var findRow = Math.ceil((idx + 1) / COLUMN_LENGTH);
|
||||
var findColumn = ((idx + 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx + 1) % COLUMN_LENGTH;
|
||||
if (findRow === row && findColumn === column) {
|
||||
findNode = $node;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return $(findNode);
|
||||
}
|
||||
|
||||
function arrowKeyHandler(keyCode) {
|
||||
// left, right, up, down key
|
||||
var $nextNode;
|
||||
var lastRowColumnLength = $specialCharNode.length % totalColumn;
|
||||
|
||||
if (KEY.LEFT === keyCode) {
|
||||
if (currentColumn > 1) {
|
||||
currentColumn = currentColumn - 1;
|
||||
} else if (currentRow === 1 && currentColumn === 1) {
|
||||
currentColumn = lastRowColumnLength;
|
||||
currentRow = totalRow;
|
||||
} else {
|
||||
currentColumn = totalColumn;
|
||||
currentRow = currentRow - 1;
|
||||
}
|
||||
} else if (KEY.RIGHT === keyCode) {
|
||||
if (currentRow === totalRow && lastRowColumnLength === currentColumn) {
|
||||
currentColumn = 1;
|
||||
currentRow = 1;
|
||||
} else if (currentColumn < totalColumn) {
|
||||
currentColumn = currentColumn + 1;
|
||||
} else {
|
||||
currentColumn = 1;
|
||||
currentRow = currentRow + 1;
|
||||
}
|
||||
} else if (KEY.UP === keyCode) {
|
||||
if (currentRow === 1 && lastRowColumnLength < currentColumn) {
|
||||
currentRow = totalRow - 1;
|
||||
} else {
|
||||
currentRow = currentRow - 1;
|
||||
}
|
||||
} else if (KEY.DOWN === keyCode) {
|
||||
currentRow = currentRow + 1;
|
||||
}
|
||||
|
||||
if (currentRow === totalRow && currentColumn > lastRowColumnLength) {
|
||||
currentRow = 1;
|
||||
} else if (currentRow > totalRow) {
|
||||
currentRow = 1;
|
||||
} else if (currentRow < 1) {
|
||||
currentRow = totalRow;
|
||||
}
|
||||
|
||||
$nextNode = findNextNode(currentRow, currentColumn);
|
||||
|
||||
if ($nextNode) {
|
||||
removeActiveClass($selectedNode);
|
||||
addActiveClass($nextNode);
|
||||
}
|
||||
}
|
||||
|
||||
function enterKeyHandler() {
|
||||
if (!$selectedNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value')));
|
||||
$specialCharDialog.modal('hide');
|
||||
}
|
||||
|
||||
function keyDownEventHandler(event) {
|
||||
event.preventDefault();
|
||||
var keyCode = event.keyCode;
|
||||
if (keyCode === undefined || keyCode === null) {
|
||||
return;
|
||||
}
|
||||
// check arrowKeys match
|
||||
if (ARROW_KEYS.indexOf(keyCode) > -1) {
|
||||
if ($selectedNode === null) {
|
||||
addActiveClass($specialCharNode.eq(0));
|
||||
currentColumn = 1;
|
||||
currentRow = 1;
|
||||
return;
|
||||
}
|
||||
arrowKeyHandler(keyCode);
|
||||
} else if (keyCode === ENTER_KEY) {
|
||||
enterKeyHandler();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// remove class
|
||||
removeActiveClass($specialCharNode);
|
||||
|
||||
// find selected node
|
||||
if (text) {
|
||||
for (var i = 0; i < $specialCharNode.length; i++) {
|
||||
var $checkNode = $($specialCharNode[i]);
|
||||
if ($checkNode.text() === text) {
|
||||
addActiveClass($checkNode);
|
||||
currentRow = Math.ceil((i + 1) / COLUMN_LENGTH);
|
||||
currentColumn = (i + 1) % COLUMN_LENGTH;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ui.onDialogShown(self.$dialog, function() {
|
||||
$(document).on('keydown', keyDownEventHandler);
|
||||
|
||||
self.$dialog.find('button').tooltip();
|
||||
|
||||
$specialCharNode.on('click', function(event) {
|
||||
event.preventDefault();
|
||||
deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value')));
|
||||
ui.hideDialog(self.$dialog);
|
||||
});
|
||||
});
|
||||
|
||||
ui.onDialogHidden(self.$dialog, function() {
|
||||
$specialCharNode.off('click');
|
||||
|
||||
self.$dialog.find('button').tooltip('destroy');
|
||||
|
||||
$(document).off('keydown', keyDownEventHandler);
|
||||
|
||||
if (deferred.state() === 'pending') {
|
||||
deferred.reject();
|
||||
}
|
||||
});
|
||||
|
||||
ui.showDialog(self.$dialog);
|
||||
});
|
||||
};
|
||||
},
|
||||
});
|
||||
}));
|
||||
1
public/static/admin/js/summernote/plugin/specialchars/summernote-ext-specialchars.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(window.jQuery)}(function(D){D.extend(D.summernote.plugins,{specialchars:function(t){var p=this,m=D.summernote.ui,n=t.layoutInfo.editor,i=t.options,r=i.langInfo,h=38,g=40,v=37,b=39,y=13,q=15,k=0,w=0,C=0,x=0,e=[""","&","<",">","¡","¢","£","¤","¥","¦","§","¨","©","ª","«","¬","®","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","×","÷","ƒ","ˆ","˜","–","—","‘","’","‚","“","”","„","†","‡","•","…","‰","′","″","‹","›","‾","⁄","€","ℑ","℘","ℜ","™","ℵ","←","↑","→","↓","↔","↵","⇐","⇑","⇒","⇓","⇔","∀","∂","∃","∅","∇","∈","∉","∋","∏","∑","−","∗","√","∝","∞","∠","∧","∨","∩","∪","∫","∴","∼","≅","≈","≠","≡","≤","≥","⊂","⊃","⊄","⊆","⊇","⊕","⊗","⊥","⋅","⌈","⌉","⌊","⌋","◊","♠","♣","♥","♦"];t.memo("button.specialchars",function(){return m.button({contents:'<i class="fa fa-font fa-flip-vertical">',tooltip:r.specialChar.specialChar,click:function(){p.show()}}).render()}),this.makeSpecialCharSetTable=function(){var r=D("<table/>");return D.each(e,function(e,o){var t=D("<td/>").addClass("note-specialchar-node"),n=e%q==0?D("<tr/>"):r.find("tr").last(),i=m.button({callback:function(e){e.html(o),e.attr("title",o),e.attr("data-value",encodeURIComponent(o)),e.css({width:35,"margin-right":"2px","margin-bottom":"2px"})}}).render();t.append(i),n.append(t),e%q==0&&r.append(n)}),x=r.find("tr").length,C=q,r},this.initialize=function(){var e=i.dialogsInBody?D(document.body):n,o='<div class="form-group row-fluid">'+this.makeSpecialCharSetTable()[0].outerHTML+"</div>";this.$dialog=m.dialog({title:r.specialChar.select,body:o}).render().appendTo(e)},this.show=function(){var e=t.invoke("editor.getSelectedText");t.invoke("editor.saveRange"),this.showSpecialCharDialog(e).then(function(e){t.invoke("editor.restoreRange");var o=D("<span></span>").html(e)[0];o&&t.invoke("editor.insertNode",o)}).fail(function(){t.invoke("editor.restoreRange")})},this.showSpecialCharDialog=function(f){return D.Deferred(function(t){var n=p.$dialog,a=n.find(".note-specialchar-node"),l=null,i=[h,g,v,b],r=y;function d(e){e&&(e.find("button").addClass("active"),l=e)}function u(e){e.find("button").removeClass("active"),l=null}function s(e){var o,t,n,i,r=a.length%C;v===e?1<k?--k:1===w&&1===k?(k=r,w=x):(k=C,--w):b===e?w===x&&r===k?w=k=1:k<C?k+=1:w+=k=1:h===e?1===w&&r<k?w=x-1:--w:g===e&&(w+=1),w===x&&r<k||x<w?w=1:w<1&&(w=x),t=w,n=k,i=null,D.each(a,function(e,o){if(Math.ceil((e+1)/q)===t&&((e+1)%q==0?q:(e+1)%q)===n)return i=o,!1}),(o=D(i))&&(u(l),d(o))}function e(e){e.preventDefault();var o=e.keyCode;if(null!=o){if(-1<i.indexOf(o)){if(null===l)return d(a.eq(0)),void(w=k=1);s(o)}else o===r&&l&&(t.resolve(decodeURIComponent(l.find("button").attr("data-value"))),n.modal("hide"));return!1}}if(u(a),f)for(var o=0;o<a.length;o++){var c=D(a[o]);c.text()===f&&(d(c),w=Math.ceil((o+1)/q),k=(o+1)%q)}m.onDialogShown(p.$dialog,function(){D(document).on("keydown",e),p.$dialog.find("button").tooltip(),a.on("click",function(e){e.preventDefault(),t.resolve(decodeURIComponent(D(e.currentTarget).find("button").attr("data-value"))),m.hideDialog(p.$dialog)})}),m.onDialogHidden(p.$dialog,function(){a.off("click"),p.$dialog.find("button").tooltip("destroy"),D(document).off("keydown",e),"pending"===t.state()&&t.reject()}),m.showDialog(p.$dialog)})}}})});
|
||||
|
|
@ -1,389 +0,0 @@
|
|||
tinymce.addI18n('zh_CN',{
|
||||
"Redo": "\u91cd\u505a",
|
||||
"Undo": "\u64a4\u9500",
|
||||
"Cut": "\u526a\u5207",
|
||||
"Copy": "\u590d\u5236",
|
||||
"Paste": "\u7c98\u8d34",
|
||||
"Select all": "\u5168\u9009",
|
||||
"New document": "\u65b0\u6587\u4ef6",
|
||||
"Ok": "\u786e\u5b9a",
|
||||
"Cancel": "\u53d6\u6d88",
|
||||
"Visual aids": "\u7f51\u683c\u7ebf",
|
||||
"Bold": "\u7c97\u4f53",
|
||||
"Italic": "\u659c\u4f53",
|
||||
"Underline": "\u4e0b\u5212\u7ebf",
|
||||
"Strikethrough": "\u5220\u9664\u7ebf",
|
||||
"Superscript": "\u4e0a\u6807",
|
||||
"Subscript": "\u4e0b\u6807",
|
||||
"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
|
||||
"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
|
||||
"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
|
||||
"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
|
||||
"Justify": "\u4e24\u7aef\u5bf9\u9f50",
|
||||
"Bullet list": "\u9879\u76ee\u7b26\u53f7",
|
||||
"Numbered list": "\u7f16\u53f7\u5217\u8868",
|
||||
"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
|
||||
"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
|
||||
"Close": "\u5173\u95ed",
|
||||
"Formats": "\u683c\u5f0f",
|
||||
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
|
||||
"Headers": "\u6807\u9898",
|
||||
"Header 1": "\u6807\u98981",
|
||||
"Header 2": "\u6807\u98982",
|
||||
"Header 3": "\u6807\u98983",
|
||||
"Header 4": "\u6807\u98984",
|
||||
"Header 5": "\u6807\u98985",
|
||||
"Header 6": "\u6807\u98986",
|
||||
"Headings": "\u6807\u9898",
|
||||
"Heading 1": "\u6807\u98981",
|
||||
"Heading 2": "\u6807\u98982",
|
||||
"Heading 3": "\u6807\u98983",
|
||||
"Heading 4": "\u6807\u98984",
|
||||
"Heading 5": "\u6807\u98985",
|
||||
"Heading 6": "\u6807\u98986",
|
||||
"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
|
||||
"Div": "Div",
|
||||
"Pre": "Pre",
|
||||
"Code": "\u4ee3\u7801",
|
||||
"Paragraph": "\u6bb5\u843d",
|
||||
"Blockquote": "\u5f15\u6587\u533a\u5757",
|
||||
"Inline": "\u6587\u672c",
|
||||
"Blocks": "\u57fa\u5757",
|
||||
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
|
||||
"Fonts": "\u5b57\u4f53",
|
||||
"Font Sizes": "\u5b57\u53f7",
|
||||
"Class": "\u7c7b\u578b",
|
||||
"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
|
||||
"OR": "\u6216",
|
||||
"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
|
||||
"Upload": "\u4e0a\u4f20",
|
||||
"Block": "\u5757",
|
||||
"Align": "\u5bf9\u9f50",
|
||||
"Default": "\u9ed8\u8ba4",
|
||||
"Circle": "\u7a7a\u5fc3\u5706",
|
||||
"Disc": "\u5b9e\u5fc3\u5706",
|
||||
"Square": "\u65b9\u5757",
|
||||
"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
|
||||
"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
|
||||
"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
|
||||
"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
|
||||
"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
|
||||
"Anchor...": "\u951a\u70b9...",
|
||||
"Name": "\u540d\u79f0",
|
||||
"Id": "\u6807\u8bc6\u7b26",
|
||||
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
|
||||
"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
|
||||
"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
|
||||
"Special characters...": "\u7279\u6b8a\u5b57\u7b26...",
|
||||
"Source code": "\u6e90\u4ee3\u7801",
|
||||
"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
|
||||
"Language": "\u8bed\u8a00",
|
||||
"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
|
||||
"Color Picker": "\u9009\u8272\u5668",
|
||||
"R": "R",
|
||||
"G": "G",
|
||||
"B": "B",
|
||||
"Left to right": "\u4ece\u5de6\u5230\u53f3",
|
||||
"Right to left": "\u4ece\u53f3\u5230\u5de6",
|
||||
"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
|
||||
"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
|
||||
"Title": "\u6807\u9898",
|
||||
"Keywords": "\u5173\u952e\u8bcd",
|
||||
"Description": "\u63cf\u8ff0",
|
||||
"Robots": "\u673a\u5668\u4eba",
|
||||
"Author": "\u4f5c\u8005",
|
||||
"Encoding": "\u7f16\u7801",
|
||||
"Fullscreen": "\u5168\u5c4f",
|
||||
"Action": "\u64cd\u4f5c",
|
||||
"Shortcut": "\u5feb\u6377\u952e",
|
||||
"Help": "\u5e2e\u52a9",
|
||||
"Address": "\u5730\u5740",
|
||||
"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
|
||||
"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
|
||||
"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
|
||||
"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
|
||||
"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
|
||||
"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
|
||||
"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
|
||||
"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
|
||||
"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
|
||||
"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
|
||||
"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
|
||||
"Plugins": "\u63d2\u4ef6",
|
||||
"Handy Shortcuts": "\u5feb\u6377\u952e",
|
||||
"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
|
||||
"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
|
||||
"Image description": "\u56fe\u7247\u63cf\u8ff0",
|
||||
"Source": "\u5730\u5740",
|
||||
"Dimensions": "\u5927\u5c0f",
|
||||
"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
|
||||
"General": "\u666e\u901a",
|
||||
"Advanced": "\u9ad8\u7ea7",
|
||||
"Style": "\u6837\u5f0f",
|
||||
"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
|
||||
"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
|
||||
"Border": "\u8fb9\u6846",
|
||||
"Insert image": "\u63d2\u5165\u56fe\u7247",
|
||||
"Image...": "\u56fe\u7247...",
|
||||
"Image list": "\u56fe\u7247\u5217\u8868",
|
||||
"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
|
||||
"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
|
||||
"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
|
||||
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
|
||||
"Edit image": "\u7f16\u8f91\u56fe\u7247",
|
||||
"Image options": "\u56fe\u7247\u9009\u9879",
|
||||
"Zoom in": "\u653e\u5927",
|
||||
"Zoom out": "\u7f29\u5c0f",
|
||||
"Crop": "\u88c1\u526a",
|
||||
"Resize": "\u8c03\u6574\u5927\u5c0f",
|
||||
"Orientation": "\u65b9\u5411",
|
||||
"Brightness": "\u4eae\u5ea6",
|
||||
"Sharpen": "\u9510\u5316",
|
||||
"Contrast": "\u5bf9\u6bd4\u5ea6",
|
||||
"Color levels": "\u989c\u8272\u5c42\u6b21",
|
||||
"Gamma": "\u4f3d\u9a6c\u503c",
|
||||
"Invert": "\u53cd\u8f6c",
|
||||
"Apply": "\u5e94\u7528",
|
||||
"Back": "\u540e\u9000",
|
||||
"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
|
||||
"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
|
||||
"Insert\/Edit Link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
|
||||
"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
|
||||
"Text to display": "\u663e\u793a\u6587\u5b57",
|
||||
"Url": "\u5730\u5740",
|
||||
"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
|
||||
"Current window": "\u5f53\u524d\u7a97\u53e3",
|
||||
"None": "\u65e0",
|
||||
"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
|
||||
"Remove link": "\u5220\u9664\u94fe\u63a5",
|
||||
"Anchors": "\u951a\u70b9",
|
||||
"Link...": "\u94fe\u63a5...",
|
||||
"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
|
||||
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
|
||||
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
|
||||
"Link list": "\u94fe\u63a5\u5217\u8868",
|
||||
"Insert video": "\u63d2\u5165\u89c6\u9891",
|
||||
"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
|
||||
"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
|
||||
"Alternative source": "\u955c\u50cf",
|
||||
"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
|
||||
"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
|
||||
"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
|
||||
"Embed": "\u5185\u5d4c",
|
||||
"Media...": "\u591a\u5a92\u4f53...",
|
||||
"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
|
||||
"Page break": "\u5206\u9875\u7b26",
|
||||
"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
|
||||
"Preview": "\u9884\u89c8",
|
||||
"Print...": "\u6253\u5370...",
|
||||
"Save": "\u4fdd\u5b58",
|
||||
"Find": "\u67e5\u627e",
|
||||
"Replace with": "\u66ff\u6362\u4e3a",
|
||||
"Replace": "\u66ff\u6362",
|
||||
"Replace all": "\u5168\u90e8\u66ff\u6362",
|
||||
"Previous": "\u4e0a\u4e00\u4e2a",
|
||||
"Next": "\u4e0b\u4e00\u4e2a",
|
||||
"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
|
||||
"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
|
||||
"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
|
||||
"Find whole words only": "\u5168\u5b57\u5339\u914d",
|
||||
"Spell check": "\u62fc\u5199\u68c0\u67e5",
|
||||
"Ignore": "\u5ffd\u7565",
|
||||
"Ignore all": "\u5168\u90e8\u5ffd\u7565",
|
||||
"Finish": "\u5b8c\u6210",
|
||||
"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
|
||||
"Insert table": "\u63d2\u5165\u8868\u683c",
|
||||
"Table properties": "\u8868\u683c\u5c5e\u6027",
|
||||
"Delete table": "\u5220\u9664\u8868\u683c",
|
||||
"Cell": "\u5355\u5143\u683c",
|
||||
"Row": "\u884c",
|
||||
"Column": "\u5217",
|
||||
"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
|
||||
"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
|
||||
"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
|
||||
"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
|
||||
"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
|
||||
"Delete row": "\u5220\u9664\u884c",
|
||||
"Row properties": "\u884c\u5c5e\u6027",
|
||||
"Cut row": "\u526a\u5207\u884c",
|
||||
"Copy row": "\u590d\u5236\u884c",
|
||||
"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
|
||||
"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
|
||||
"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
|
||||
"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
|
||||
"Delete column": "\u5220\u9664\u5217",
|
||||
"Cols": "\u5217",
|
||||
"Rows": "\u884c",
|
||||
"Width": "\u5bbd",
|
||||
"Height": "\u9ad8",
|
||||
"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
|
||||
"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
|
||||
"Show caption": "\u663e\u793a\u6807\u9898",
|
||||
"Left": "\u5de6\u5bf9\u9f50",
|
||||
"Center": "\u5c45\u4e2d",
|
||||
"Right": "\u53f3\u5bf9\u9f50",
|
||||
"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
|
||||
"Scope": "\u8303\u56f4",
|
||||
"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
|
||||
"H Align": "\u6c34\u5e73\u5bf9\u9f50",
|
||||
"V Align": "\u5782\u76f4\u5bf9\u9f50",
|
||||
"Top": "\u9876\u90e8\u5bf9\u9f50",
|
||||
"Middle": "\u5782\u76f4\u5c45\u4e2d",
|
||||
"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
|
||||
"Header cell": "\u8868\u5934\u5355\u5143\u683c",
|
||||
"Row group": "\u884c\u7ec4",
|
||||
"Column group": "\u5217\u7ec4",
|
||||
"Row type": "\u884c\u7c7b\u578b",
|
||||
"Header": "\u8868\u5934",
|
||||
"Body": "\u8868\u4f53",
|
||||
"Footer": "\u8868\u5c3e",
|
||||
"Border color": "\u8fb9\u6846\u989c\u8272",
|
||||
"Insert template...": "\u63d2\u5165\u6a21\u677f...",
|
||||
"Templates": "\u6a21\u677f",
|
||||
"Template": "\u6a21\u677f",
|
||||
"Text color": "\u6587\u5b57\u989c\u8272",
|
||||
"Background color": "\u80cc\u666f\u8272",
|
||||
"Custom...": "\u81ea\u5b9a\u4e49...",
|
||||
"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
|
||||
"No color": "\u65e0",
|
||||
"Remove color": "\u79fb\u9664\u989c\u8272",
|
||||
"Table of Contents": "\u5185\u5bb9\u5217\u8868",
|
||||
"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
|
||||
"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
|
||||
"Word count": "\u5b57\u6570",
|
||||
"Words: {0}": "\u5b57\u6570\uff1a{0}",
|
||||
"{0} words": "{0} \u5b57",
|
||||
"File": "\u6587\u4ef6",
|
||||
"Edit": "\u7f16\u8f91",
|
||||
"Insert": "\u63d2\u5165",
|
||||
"View": "\u89c6\u56fe",
|
||||
"Format": "\u683c\u5f0f",
|
||||
"Table": "\u8868\u683c",
|
||||
"Tools": "\u5de5\u5177",
|
||||
"Powered by {0}": "\u7531{0}\u9a71\u52a8",
|
||||
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
|
||||
"Image title": "\u56fe\u7247\u6807\u9898",
|
||||
"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
|
||||
"Border style": "\u8fb9\u6846\u6837\u5f0f",
|
||||
"Error": "\u9519\u8bef",
|
||||
"Warn": "\u8b66\u544a",
|
||||
"Valid": "\u6709\u6548",
|
||||
"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
|
||||
"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
|
||||
"System Font": "\u7cfb\u7edf\u5b57\u4f53",
|
||||
"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
|
||||
"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
|
||||
"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
|
||||
"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
|
||||
"example": "\u793a\u4f8b",
|
||||
"Search": "\u641c\u7d22",
|
||||
"All": "\u5168\u90e8",
|
||||
"Currency": "\u8d27\u5e01",
|
||||
"Text": "\u6587\u5b57",
|
||||
"Quotations": "\u5f15\u7528",
|
||||
"Mathematical": "\u6570\u5b66",
|
||||
"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
|
||||
"Symbols": "\u7b26\u53f7",
|
||||
"Arrows": "\u7bad\u5934",
|
||||
"User Defined": "\u81ea\u5b9a\u4e49",
|
||||
"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
|
||||
"currency sign": "\u8d27\u5e01\u7b26\u53f7",
|
||||
"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
|
||||
"colon sign": "\u5192\u53f7",
|
||||
"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
|
||||
"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
|
||||
"lira sign": "\u91cc\u62c9\u7b26\u53f7",
|
||||
"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
|
||||
"naira sign": "\u5948\u62c9\u7b26\u53f7",
|
||||
"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
|
||||
"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
|
||||
"won sign": "\u97e9\u5143\u7b26\u53f7",
|
||||
"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
|
||||
"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
|
||||
"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
|
||||
"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
|
||||
"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
|
||||
"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
|
||||
"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
|
||||
"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
|
||||
"austral sign": "\u6fb3\u5143\u7b26\u53f7",
|
||||
"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
|
||||
"cedi sign": "\u585e\u5730\u7b26\u53f7",
|
||||
"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
|
||||
"spesmilo sign": "spesmilo\u7b26\u53f7",
|
||||
"tenge sign": "\u575a\u6208\u7b26\u53f7",
|
||||
"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
|
||||
"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
|
||||
"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
|
||||
"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
|
||||
"ruble sign": "\u5362\u5e03\u7b26\u53f7",
|
||||
"yen character": "\u65e5\u5143\u5b57\u6837",
|
||||
"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
|
||||
"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
|
||||
"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
|
||||
"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
|
||||
"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
|
||||
"People": "\u4eba\u7c7b",
|
||||
"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
|
||||
"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
|
||||
"Activity": "\u6d3b\u52a8",
|
||||
"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
|
||||
"Objects": "\u7269\u4ef6",
|
||||
"Flags": "\u65d7\u5e1c",
|
||||
"Characters": "\u5b57\u7b26",
|
||||
"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
|
||||
"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
|
||||
"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
|
||||
"Update": "\u66f4\u65b0",
|
||||
"Color swatch": "\u989c\u8272\u6837\u672c",
|
||||
"Turquoise": "\u9752\u7eff\u8272",
|
||||
"Green": "\u7eff\u8272",
|
||||
"Blue": "\u84dd\u8272",
|
||||
"Purple": "\u7d2b\u8272",
|
||||
"Navy Blue": "\u6d77\u519b\u84dd",
|
||||
"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
|
||||
"Dark Green": "\u6df1\u7eff\u8272",
|
||||
"Medium Blue": "\u4e2d\u84dd\u8272",
|
||||
"Medium Purple": "\u4e2d\u7d2b\u8272",
|
||||
"Midnight Blue": "\u6df1\u84dd\u8272",
|
||||
"Yellow": "\u9ec4\u8272",
|
||||
"Orange": "\u6a59\u8272",
|
||||
"Red": "\u7ea2\u8272",
|
||||
"Light Gray": "\u6d45\u7070\u8272",
|
||||
"Gray": "\u7070\u8272",
|
||||
"Dark Yellow": "\u6697\u9ec4\u8272",
|
||||
"Dark Orange": "\u6df1\u6a59\u8272",
|
||||
"Dark Red": "\u6df1\u7ea2\u8272",
|
||||
"Medium Gray": "\u4e2d\u7070\u8272",
|
||||
"Dark Gray": "\u6df1\u7070\u8272",
|
||||
"Black": "\u9ed1\u8272",
|
||||
"White": "\u767d\u8272",
|
||||
"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
|
||||
"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
|
||||
"history": "\u5386\u53f2",
|
||||
"styles": "\u6837\u5f0f",
|
||||
"formatting": "\u683c\u5f0f\u5316",
|
||||
"alignment": "\u5bf9\u9f50",
|
||||
"indentation": "\u7f29\u8fdb",
|
||||
"permanent pen": "\u8bb0\u53f7\u7b14",
|
||||
"comments": "\u5907\u6ce8",
|
||||
"Anchor": "\u951a\u70b9",
|
||||
"Special character": "\u7279\u6b8a\u7b26\u53f7",
|
||||
"Code sample": "\u4ee3\u7801\u793a\u4f8b",
|
||||
"Color": "\u989c\u8272",
|
||||
"Emoticons": "\u8868\u60c5",
|
||||
"Document properties": "\u6587\u6863\u5c5e\u6027",
|
||||
"Image": "\u56fe\u7247",
|
||||
"Insert link": "\u63d2\u5165\u94fe\u63a5",
|
||||
"Target": "\u6253\u5f00\u65b9\u5f0f",
|
||||
"Link": "\u94fe\u63a5",
|
||||
"Poster": "\u5c01\u9762",
|
||||
"Media": "\u5a92\u4f53",
|
||||
"Print": "\u6253\u5370",
|
||||
"Prev": "\u4e0a\u4e00\u4e2a",
|
||||
"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
|
||||
"Whole words": "\u5168\u5b57\u5339\u914d",
|
||||
"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
|
||||
"Caption": "\u6807\u9898",
|
||||
"Insert template": "\u63d2\u5165\u6a21\u677f"
|
||||
});
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";function n(){}function o(n){return function(){return n}}function t(){return d}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(n,t,e){var r="UL"===t?"InsertUnorderedList":"InsertOrderedList";n.execCommand(r,!1,!1===e?null:{"list-style-type":e})},i=function(e){e.addCommand("ApplyUnorderedListStyle",function(n,t){l(e,"UL",t["list-style-type"])}),e.addCommand("ApplyOrderedListStyle",function(n,t){l(e,"OL",t["list-style-type"])})},c=function(n){var t=n.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");return t?t.split(/[ ,]/):[]},s=function(n){var t=n.getParam("advlist_bullet_styles","default,circle,square");return t?t.split(/[ ,]/):[]},f=o(!1),a=o(!0),d=(e={fold:function(n,t){return n()},is:f,isSome:f,isNone:a,getOr:m,getOrThunk:p,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:m,orThunk:p,map:t,each:n,bind:t,exists:f,forall:a,filter:t,equals:g,equals_:g,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(e),e);function g(n){return n.isNone()}function p(n){return n()}function m(n){return n}function y(n,t,e){var r=function(n,t){for(var e=0;e<n.length;e++){if(t(n[e]))return e}return-1}(t.parents,L),i=-1!==r?t.parents.slice(0,r):t.parents,o=u.grep(i,N(n));return 0<o.length&&o[0].nodeName===e}function O(n,t,e,r,i,o){0<o.length?function(e,n,t,r,i,o){e.ui.registry.addSplitButton(n,{tooltip:t,icon:"OL"===i?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:function(n){n(u.map(o,function(n){return{type:"choiceitem",value:"default"===n?"":n,icon:"list-"+("OL"===i?"num":"bull")+"-"+("disc"===n||"decimal"===n?"default":n),text:function(n){return n.replace(/\-/g," ").replace(/\b\w/g,function(n){return n.toUpperCase()})}(n)}}))},onAction:function(){return e.execCommand(r)},onItemAction:function(n,t){l(e,i,t)},select:function(t){return S(e).map(function(n){return t===n}).getOr(!1)},onSetup:function(t){function n(n){t.setActive(y(e,n,i))}return e.on("NodeChange",n),function(){return e.off("NodeChange",n)}}})}(n,t,e,r,i,o):function(e,n,t,r,i){e.ui.registry.addToggleButton(n,{active:!1,tooltip:t,icon:"OL"===i?"ordered-list":"unordered-list",onSetup:function(t){function n(n){t.setActive(y(e,n,i))}return e.on("NodeChange",n),function(){return e.off("NodeChange",n)}},onAction:function(){return e.execCommand(r)}})}(n,t,e,r,i)}var v=function(e){function n(){return i}function t(n){return n(e)}var r=o(e),i={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:a,isNone:f,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return v(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?i:d},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(f,function(n){return t(e,n)})}};return i},h=function(n){return null===n||n===undefined?d:v(n)},L=function(n){return n&&/^(TH|TD)$/.test(n.nodeName)},N=function(t){return function(n){return n&&/^(OL|UL|DL)$/.test(n.nodeName)&&function(n,t){return n.$.contains(n.getBody(),t)}(t,n)}},S=function(n){var t=n.dom.getParent(n.selection.getNode(),"ol,ul"),e=n.dom.getStyle(t,"listStyleType");return h(e)},T=function(n){O(n,"numlist","Numbered list","InsertOrderedList","OL",c(n)),O(n,"bullist","Bullet list","InsertUnorderedList","UL",s(n))};!function b(){r.add("advlist",function(n){var t,e,r;e="lists",r=(t=n).settings.plugins?t.settings.plugins:"",-1!==u.inArray(r.split(/[ ,]/),e)&&(T(n),i(n))})}()}();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";function e(o){return function(t){for(var e=0;e<t.length;e++)(n=t[e]).attr("href")||!n.attr("id")&&!n.attr("name")||n.firstChild||t[e].attr("contenteditable",o);var n}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(t){return/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)},o=function(t){var e=t.selection.getNode();return"A"===e.tagName&&""===t.dom.getAttrib(e,"href")?e.getAttribute("id")||e.getAttribute("name"):""},r=function(t,e){var n=t.selection.getNode();"A"===n.tagName&&""===t.dom.getAttrib(n,"href")?(n.removeAttribute("name"),n.id=e,t.undoManager.add()):(t.focus(),t.selection.collapse(!0),t.execCommand("mceInsertContent",!1,t.dom.createHTML("a",{id:e})))},a=function(e){var t=o(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:function(t){!function(t,e){return n(e)?(r(t,e),!1):(t.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!0)}(e,t.getData().id)&&t.close()}})},i=function(t){t.addCommand("mceAnchor",function(){a(t)})},c=function(t){t.on("PreInit",function(){t.parser.addNodeFilter("a",e("false")),t.serializer.addNodeFilter("a",e(null))})},d=function(e){e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:function(){return e.execCommand("mceAnchor")},onSetup:function(t){return e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind}}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:function(){return e.execCommand("mceAnchor")}})};!function u(){t.add("anchor",function(t){c(t),i(t),d(t)})}()}();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";function i(t,e){if(e<0&&(e=0),3===t.nodeType){var n=t.data.length;n<e&&(e=n)}return e}function C(t,e,n){1!==e.nodeType||e.hasChildNodes()?t.setStart(e,i(e,n)):t.setStartBefore(e)}function m(t,e,n){1!==e.nodeType||e.hasChildNodes()?t.setEnd(e,i(e,n)):t.setEndAfter(e)}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),y=function(t){return t.getParam("autolink_pattern",/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i)},k=function(t){return t.getParam("default_link_target",!1)},r=function(t,e,n){var i,o,r,f,a,s,d,c,l,u,g=y(t),h=k(t);if("A"!==t.selection.getNode().tagName){if((i=t.selection.getRng(!0).cloneRange()).startOffset<5){if(!(c=i.endContainer.previousSibling)){if(!i.endContainer.firstChild||!i.endContainer.firstChild.nextSibling)return;c=i.endContainer.firstChild.nextSibling}if(l=c.length,C(i,c,l),m(i,c,l),i.endOffset<5)return;o=i.endOffset,f=c}else{if(3!==(f=i.endContainer).nodeType&&f.firstChild){for(;3!==f.nodeType&&f.firstChild;)f=f.firstChild;3===f.nodeType&&(C(i,f,0),m(i,f,f.nodeValue.length))}o=1===i.endOffset?2:i.endOffset-1-e}for(r=o;C(i,f,2<=o?o-2:0),m(i,f,1<=o?o-1:0),o-=1," "!==(u=i.toString())&&""!==u&&160!==u.charCodeAt(0)&&0<=o-2&&u!==n;);!function(t,e){return t===e||" "===t||160===t.charCodeAt(0)}(i.toString(),n)?(0===i.startOffset?C(i,f,0):C(i,f,o),m(i,f,r)):(C(i,f,o),m(i,f,r),o+=1),"."===(s=i.toString()).charAt(s.length-1)&&m(i,f,r-1),(d=(s=i.toString().trim()).match(g))&&("www."===d[1]?d[1]="http://www.":/@$/.test(d[1])&&!/^mailto:/.test(d[1])&&(d[1]="mailto:"+d[1]),a=t.selection.getBookmark(),t.selection.setRng(i),t.execCommand("createlink",!1,d[1]+d[2]),!1!==h&&t.dom.setAttrib(t.selection.getNode(),"target",h),t.selection.moveToBookmark(a),t.nodeChanged())}},e=function(e){var n;e.on("keydown",function(t){if(13===t.keyCode)return function(t){r(t,-1,"")}(e)}),o.browser.isIE()?e.on("focus",function(){if(!n){n=!0;try{e.execCommand("AutoUrlDetect",!1,!0)}catch(t){}}}):(e.on("keypress",function(t){if(41===t.keyCode)return function(t){r(t,-1,"(")}(e)}),e.on("keyup",function(t){if(32===t.keyCode)return function(t){r(t,0,"")}(e)}))};!function n(){t.add("autolink",function(t){e(t)})}()}();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e,n){e.focus(),e.undoManager.transact(function(){e.setContent(n)}),e.selection.setCursorLocation(),e.nodeChanged()},o=function(e){return e.getContent({source_view:!0})},n=function(n){var e=o(n);n.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){t(n,e.getData().code),e.close()}})},c=function(e){e.addCommand("mceCodeEditor",function(){n(e)})},i=function(e){e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:function(){return n(e)}}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:function(){return n(e)}})};!function u(){e.add("code",function(e){return c(e),i(e),{}})}()}();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(n){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager");!function e(){o.add("contextmenu",function(){n.console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window);
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";function n(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))}function r(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])}function a(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e}function i(e,t,n){return n=n||new Date,t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",a(n.getMonth()+1,2))).replace("%d",a(n.getDate(),2))).replace("%H",""+a(n.getHours(),2))).replace("%M",""+a(n.getMinutes(),2))).replace("%S",""+a(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(f[n.getMonth()]))).replace("%b",""+e.translate(d[n.getMonth()]))).replace("%A",""+e.translate(s[n.getDay()]))).replace("%a",""+e.translate(l[n.getDay()]))).replace("%%","%")}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d"))},o=n,u=r,c=function(e){var t=r(e);return 0<t.length?t[0]:n(e)},m=function(e){return e.getParam("insertdatetime_element",!1)},l="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),s="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),d="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),f="January February March April May June July August September October November December".split(" "),p=function(e,t){if(m(e)){var n=i(e,t),r=void 0;r=/%[HMSIp]/.test(t)?i(e,"%Y-%m-%dT%H:%M"):i(e,"%Y-%m-%d");var a=e.dom.getParent(e.selection.getStart(),"time");a?function(e,t,n,r){var a=e.dom.create("time",{datetime:n},r);t.parentNode.insertBefore(a,t),e.dom.remove(t),e.selection.select(a,!0),e.selection.collapse(!1)}(e,a,r,n):e.insertContent('<time datetime="'+r+'">'+n+"</time>")}else e.insertContent(i(e,t))},g=i,y=function(e){e.addCommand("mceInsertDate",function(){p(e,t(e))}),e.addCommand("mceInsertTime",function(){p(e,o(e))})},M=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return S(t())}}},v=function(n){var t=u(n),r=S(c(n));n.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:function(e){return e===r.get()},fetch:function(e){e(M.map(t,function(e){return{type:"choiceitem",text:g(n,e),value:e}}))},onAction:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];p(n,r.get())},onItemAction:function(e,t){r.set(t),p(n,t)}});n.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:function(){return M.map(t,function(e){return{type:"menuitem",text:g(n,e),onAction:function(e){return function(){r.set(e),p(n,e)}}(e)}})}})};!function h(){e.add("insertdatetime",function(e){y(e),v(e)})}()}();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),m=function(e){return e.getParam("content_style","")},u=function(e){return e.getParam("content_css_cors",!1,"boolean")},y=tinymce.util.Tools.resolve("tinymce.Env"),n=function(t){var n="",i=t.dom.encode,e=m(t);n+='<base href="'+i(t.documentBaseURI.getURI())+'">',e&&(n+='<style type="text/css">'+e+"</style>");var o=u(t)?' crossorigin="anonymous"':"";l.each(t.contentCSS,function(e){n+='<link type="text/css" rel="stylesheet" href="'+i(t.documentBaseURI.toAbsolute(e))+'"'+o+">"});var r=t.settings.body_id||"tinymce";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_id","","hash"))[t.id]||r);var a=t.settings.body_class||"";-1!==a.indexOf("=")&&(a=(a=t.getParam("body_class","","hash"))[t.id]||"");var c='<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A" && !('+(y.mac?"e.metaKey":"e.ctrlKey && !e.altKey")+")) {e.preventDefault();}}}, false);<\/script> ",s=t.getBody().dir,d=s?' dir="'+i(s)+'"':"";return"<!DOCTYPE html><html><head>"+n+'</head><body id="'+i(r)+'" class="mce-content-body '+i(a)+'"'+d+">"+t.getContent()+c+"</body></html>"},t=function(e){e.addCommand("mcePreview",function(){!function(e){var t=n(e);e.windowManager.open({title:"Preview",size:"large",body:{type:"panel",items:[{name:"preview",type:"iframe",sandboxed:!0}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{preview:t}}).focus("close")}(e)})},i=function(e){e.ui.registry.addButton("preview",{icon:"preview",tooltip:"Preview",onAction:function(){return e.execCommand("mcePreview")}}),e.ui.registry.addMenuItem("preview",{icon:"preview",text:"Preview",onAction:function(){return e.execCommand("mcePreview")}})};!function o(){e.add("preview",function(e){t(e),i(e)})}()}();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),i=function(n){n.addCommand("mcePrint",function(){t.browser.isIE()?n.getDoc().execCommand("print",!1,null):n.getWin().print()})},e=function(n){n.ui.registry.addButton("print",{icon:"print",tooltip:"Print",onAction:function(){return n.execCommand("mcePrint")}}),n.ui.registry.addMenuItem("print",{text:"Print...",icon:"print",onAction:function(){return n.execCommand("mcePrint")}})};!function o(){n.add("print",function(n){i(n),e(n),n.addShortcut("Meta+P","","mcePrint")})}()}();
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
/**
|
||||
* 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.1.2 (2019-11-19)
|
||||
*/
|
||||
!function(){"use strict";function n(n,e){return function(o){o.setActive(e.get());function t(t){return o.setActive(t.state)}return n.on("VisualBlocks",t),function(){return n.off("VisualBlocks",t)}}}var e=function(t){function o(){return n}var n=t;return{get:o,set:function(t){n=t},clone:function(){return e(o())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(t,o){t.fire("VisualBlocks",{state:o})},u=function(t,o,n){t.dom.toggleClass(t.getBody(),"mce-visualblocks"),n.set(!n.get()),i(t,n.get())},c=function(t,o,n){t.addCommand("mceVisualBlocks",function(){u(t,o,n)})},s=function(t){return t.getParam("visualblocks_default_state",!1,"boolean")},l=function(o,t,n){o.on("PreviewFormats AfterPreviewFormats",function(t){n.get()&&o.dom.toggleClass(o.getBody(),"mce-visualblocks","afterpreviewformats"===t.type)}),o.on("init",function(){s(o)&&u(o,t,n)}),o.on("remove",function(){o.dom.removeClass(o.getBody(),"mce-visualblocks")})},r=function(t,o){t.ui.registry.addToggleButton("visualblocks",{icon:"visualblocks",tooltip:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:n(t,o)}),t.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:n(t,o)})};!function o(){t.add("visualblocks",function(t,o){var n=e(!1);c(t,o,n),r(t,n),l(t,o,n)})}()}();
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
/**
|
||||
* 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/
|
||||
*/
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 257 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 181 KiB |
|
Before Width: | Height: | Size: 210 KiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 395 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 587 B |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |