kindeditor替换vditor
markdown转html
13
app/Console/Migrations/Migration.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
||||
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Console\Migrations;
|
||||
|
||||
abstract class Migration
|
||||
{
|
||||
abstract public function run();
|
||||
}
|
162
app/Console/Migrations/V202207291145.php
Normal file
@ -0,0 +1,162 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
||||
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Console\Migrations;
|
||||
|
||||
use App\Models\Answer as AnswerModel;
|
||||
use App\Models\Article as ArticleModel;
|
||||
use App\Models\Course as CourseModel;
|
||||
use App\Models\Help as HelpModel;
|
||||
use App\Models\Page as PageModel;
|
||||
use App\Models\PointGift as PointGiftModel;
|
||||
use App\Models\Question as QuestionModel;
|
||||
use League\CommonMark\GithubFlavoredMarkdownConverter;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
|
||||
class V202207291145 extends Migration
|
||||
{
|
||||
|
||||
/**
|
||||
* @var GithubFlavoredMarkdownConverter
|
||||
*/
|
||||
protected $markdownConverter;
|
||||
|
||||
public function run()
|
||||
{
|
||||
$this->initMarkdownConverter();
|
||||
$this->courseMarkdownToHtml();
|
||||
$this->articleMarkdownToHtml();
|
||||
$this->questionMarkdownToHtml();
|
||||
$this->answerMarkdownToHtml();
|
||||
$this->pageMarkdownToHtml();
|
||||
$this->helpMarkdownToHtml();
|
||||
$this->pointGiftMarkdownToHtml();
|
||||
}
|
||||
|
||||
protected function initMarkdownConverter()
|
||||
{
|
||||
$this->markdownConverter = new GithubFlavoredMarkdownConverter([
|
||||
'html_input' => 'escape',
|
||||
'allow_unsafe_links' => false,
|
||||
]);
|
||||
}
|
||||
|
||||
protected function articleMarkdownToHtml()
|
||||
{
|
||||
/**
|
||||
* @var $articles Resultset|ArticleModel[]
|
||||
*/
|
||||
$articles = ArticleModel::query()->execute();
|
||||
|
||||
if ($articles->count() == 0) return;
|
||||
|
||||
foreach ($articles as $article) {
|
||||
$content = $this->markdownConverter->convertToHtml($article->content);
|
||||
$article->content = $content;
|
||||
$article->update();
|
||||
}
|
||||
}
|
||||
|
||||
protected function courseMarkdownToHtml()
|
||||
{
|
||||
/**
|
||||
* @var $courses Resultset|CourseModel[]
|
||||
*/
|
||||
$courses = CourseModel::query()->execute();
|
||||
|
||||
if ($courses->count() == 0) return;
|
||||
|
||||
foreach ($courses as $course) {
|
||||
$details = $this->markdownConverter->convertToHtml($course->details);
|
||||
$course->details = $details;
|
||||
$course->update();
|
||||
}
|
||||
}
|
||||
|
||||
protected function questionMarkdownToHtml()
|
||||
{
|
||||
/**
|
||||
* @var $questions Resultset|QuestionModel[]
|
||||
*/
|
||||
$questions = QuestionModel::query()->execute();
|
||||
|
||||
if ($questions->count() == 0) return;
|
||||
|
||||
foreach ($questions as $question) {
|
||||
$content = $this->markdownConverter->convertToHtml($question->content);
|
||||
$question->content = $content;
|
||||
$question->update();
|
||||
}
|
||||
}
|
||||
|
||||
protected function answerMarkdownToHtml()
|
||||
{
|
||||
/**
|
||||
* @var $answers Resultset|AnswerModel[]
|
||||
*/
|
||||
$answers = AnswerModel::query()->execute();
|
||||
|
||||
if ($answers->count() == 0) return;
|
||||
|
||||
foreach ($answers as $answer) {
|
||||
$content = $this->markdownConverter->convertToHtml($answer->content);
|
||||
$answer->content = $content;
|
||||
$answer->update();
|
||||
}
|
||||
}
|
||||
|
||||
protected function pageMarkdownToHtml()
|
||||
{
|
||||
/**
|
||||
* @var $pages Resultset|PageModel[]
|
||||
*/
|
||||
$pages = PageModel::query()->execute();
|
||||
|
||||
if ($pages->count() == 0) return;
|
||||
|
||||
foreach ($pages as $page) {
|
||||
$content = $this->markdownConverter->convertToHtml($page->content);
|
||||
$page->content = $content;
|
||||
$page->update();
|
||||
}
|
||||
}
|
||||
|
||||
protected function helpMarkdownToHtml()
|
||||
{
|
||||
/**
|
||||
* @var $helps Resultset|HelpModel[]
|
||||
*/
|
||||
$helps = HelpModel::query()->execute();
|
||||
|
||||
if ($helps->count() == 0) return;
|
||||
|
||||
foreach ($helps as $help) {
|
||||
$content = $this->markdownConverter->convertToHtml($help->content);
|
||||
$help->content = $content;
|
||||
$help->update();
|
||||
}
|
||||
}
|
||||
|
||||
protected function pointGiftMarkdownToHtml()
|
||||
{
|
||||
/**
|
||||
* @var $gifts Resultset|PointGiftModel[]
|
||||
*/
|
||||
$gifts = PointGiftModel::query()
|
||||
->where('type = :type:', ['type' => PointGiftModel::TYPE_GOODS])
|
||||
->execute();
|
||||
|
||||
if ($gifts->count() == 0) return;
|
||||
|
||||
foreach ($gifts as $gift) {
|
||||
$details = $this->markdownConverter->convertToHtml($gift->details);
|
||||
$gift->details = $details;
|
||||
$gift->update();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -7,16 +7,20 @@
|
||||
|
||||
namespace App\Console\Tasks;
|
||||
|
||||
use App\Caches\AppInfo as AppInfoCache;
|
||||
use App\Caches\NavTreeList as NavTreeListCache;
|
||||
use App\Caches\Setting as SettingCache;
|
||||
use App\Caches\AppInfo as AppInfoCache;
|
||||
use App\Models\MigrationTask as MigrationTaskModel;
|
||||
use App\Models\Setting as SettingModel;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
||||
class UpgradeTask extends Task
|
||||
{
|
||||
|
||||
public function mainAction()
|
||||
{
|
||||
$this->migrateAction();
|
||||
$this->resetAppInfoAction();
|
||||
$this->resetSettingAction();
|
||||
$this->resetAnnotationAction();
|
||||
@ -25,6 +29,51 @@ class UpgradeTask extends Task
|
||||
$this->resetNavAction();
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行迁移
|
||||
*
|
||||
* @command: php console.php upgrade migrate
|
||||
*/
|
||||
public function migrateAction()
|
||||
{
|
||||
$tasks = $this->findMigrationTasks();
|
||||
|
||||
$versionList = [];
|
||||
|
||||
if ($tasks->count() > 0) {
|
||||
$versionList = kg_array_column($tasks->toArray(), 'version');
|
||||
}
|
||||
|
||||
$files = scandir(app_path('Console/Migrations'));
|
||||
|
||||
foreach ($files as $file) {
|
||||
|
||||
if (preg_match('/^V[0-9]+\.php$/', $file)) {
|
||||
|
||||
$version = substr($file, 0, -4);
|
||||
|
||||
if (!in_array($version, $versionList)) {
|
||||
|
||||
$startTime = time();
|
||||
|
||||
$className = "\App\Console\Migrations\\{$version}";
|
||||
$obj = new $className();
|
||||
$obj->run();
|
||||
|
||||
$endTime = time();
|
||||
|
||||
$task = new MigrationTaskModel();
|
||||
$task->version = $version;
|
||||
$task->start_time = $startTime;
|
||||
$task->end_time = $endTime;
|
||||
$task->create();
|
||||
|
||||
echo "------ console migration {$version} ok ------" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置应用信息
|
||||
*
|
||||
@ -144,6 +193,14 @@ class UpgradeTask extends Task
|
||||
echo '------ end reset navigation ------' . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ResultsetInterface|Resultset|MigrationTaskModel[]
|
||||
*/
|
||||
protected function findMigrationTasks()
|
||||
{
|
||||
return MigrationTaskModel::query()->execute();
|
||||
}
|
||||
|
||||
protected function handlePhKeys($keys)
|
||||
{
|
||||
return array_map(function ($key) {
|
||||
|
@ -13,8 +13,7 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block" style="margin:0;">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea"></textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-input-block kg-center" style="margin:0;">
|
||||
@ -27,15 +26,10 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
@ -13,8 +13,7 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block" style="margin:0;">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ answer.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ answer.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-input-block kg-center" style="margin:0;">
|
||||
@ -26,15 +25,10 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
@ -14,7 +14,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ answer.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i:s',answer.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ answer.content }}</div>
|
||||
<div class="content ke-content">{{ answer.content }}</div>
|
||||
</div>
|
||||
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
@ -57,7 +57,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ answer.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i',answer.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ answer.content }}</div>
|
||||
<div class="content ke-content">{{ answer.content }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
@ -86,7 +86,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -23,17 +23,12 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('lib/xm-select.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.article.update','id':article.id}) }}">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block" style="margin:0;">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ article.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ article.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -17,7 +17,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ article.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i:s',article.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ article.content }}</div>
|
||||
<div class="content ke-content">{{ article.content }}</div>
|
||||
{% if article.tags %}
|
||||
<div class="tags">
|
||||
{% for item in article.tags %}
|
||||
@ -70,7 +70,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ article.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i',article.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ article.content }}</div>
|
||||
<div class="content ke-content">{{ article.content }}</div>
|
||||
{% if article.tags %}
|
||||
<div class="tags">
|
||||
{% for item in article.tags %}
|
||||
@ -99,7 +99,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -47,20 +47,13 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{% if chapter.model == 3 %}
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{% if chapter.model == 3 %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% elseif chapter.model == 1 %}
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.chapter.content','id':chapter.id}) }}">
|
||||
<div class="layui-form-item">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ read.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ read.content }}</textarea>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ comment.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i:s',comment.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ comment.content }}</div>
|
||||
<div class="content ke-content">{{ comment.content }}</div>
|
||||
</div>
|
||||
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
@ -56,7 +56,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ comment.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i',comment.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ comment.content }}</div>
|
||||
<div class="content ke-content">{{ comment.content }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
@ -85,7 +85,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -39,18 +39,13 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('lib/xm-select.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
{{ js_include('admin/js/cover.upload.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">详情</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="details" class="layui-hide" id="vditor-textarea">{{ course.details }}</textarea>
|
||||
<textarea name="details" class="layui-hide" id="editor-textarea">{{ course.details }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -26,8 +26,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">内容</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea"></textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -47,15 +46,10 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
@ -26,8 +26,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">内容</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ help.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ help.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -54,15 +53,10 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
@ -15,8 +15,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">内容</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea"></textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -30,15 +29,10 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
@ -21,8 +21,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">内容</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ page.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ page.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -43,15 +42,10 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
@ -14,20 +14,13 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{% if gift.type == 2 %}
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{% if gift.type == 2 %}
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
{{ js_include('admin/js/cover.upload.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
@ -27,8 +27,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品详情</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="details" class="layui-hide" id="vditor-textarea">{{ gift.details }}</textarea>
|
||||
<textarea name="details" class="layui-hide" id="editor-textarea">{{ gift.details }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -23,17 +23,12 @@
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('lib/vditor/dist/index.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('lib/vditor/dist/index.min.js') }}
|
||||
{{ js_include('lib/xm-select.js') }}
|
||||
{{ js_include('admin/js/vditor.js') }}
|
||||
{{ js_include('lib/kindeditor/kindeditor.min.js') }}
|
||||
{{ js_include('lib/kindeditor/lang/zh-CN.js') }}
|
||||
{{ js_include('admin/js/content.editor.js') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.question.update','id':question.id}) }}">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block" style="margin:0;">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ question.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ question.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -14,7 +14,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ question.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i:s',question.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ question.content }}</div>
|
||||
<div class="content ke-content">{{ question.content }}</div>
|
||||
{% if question.tags %}
|
||||
<div class="tags">
|
||||
{% for item in question.tags %}
|
||||
@ -62,7 +62,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
<span><a href="{{ owner_url }}" target="_blank">{{ question.owner.name }}</a></span>
|
||||
<span>{{ date('Y-m-d H:i',question.create_time) }}</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ question.content }}</div>
|
||||
<div class="content ke-content">{{ question.content }}</div>
|
||||
{% if question.tags %}
|
||||
<div class="tags">
|
||||
{% for item in question.tags %}
|
||||
@ -93,7 +93,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -19,8 +19,7 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea"></textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item center">
|
||||
|
@ -19,8 +19,7 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ answer.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ answer.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item center">
|
||||
|
@ -26,8 +26,7 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ article.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ article.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -61,7 +61,7 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ article.content }}</div>
|
||||
<div class="content ke-content">{{ article.content }}</div>
|
||||
{% if article.tags %}
|
||||
<div class="tags">
|
||||
{% for item in article.tags %}
|
||||
@ -111,7 +111,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
<div class="layout-content">
|
||||
<div class="article-info wrap">
|
||||
<div class="title">{{ chapter.title }}</div>
|
||||
<div class="content markdown-body">
|
||||
<div class="content ke-content">
|
||||
{{ chapter.content }}
|
||||
</div>
|
||||
</div>
|
||||
@ -57,7 +57,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -48,7 +48,7 @@
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<div class="course-details markdown-body">{{ course.details }}</div>
|
||||
<div class="course-details ke-content">{{ course.details }}</div>
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{{ partial('course/show_catalog') }}
|
||||
@ -107,7 +107,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
<div class="layout-main clearfix">
|
||||
<div class="layout-content">
|
||||
<div class="page-info wrap">
|
||||
<div class="content markdown-body">{{ help.content }}</div>
|
||||
<div class="content ke-content">{{ help.content }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout-sidebar">
|
||||
@ -38,6 +38,6 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
@ -30,7 +30,7 @@
|
||||
<a href="{{ owner_url }}" target="_blank">{{ item.owner.name }}</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ item.content }}</div>
|
||||
<div class="content ke-content">{{ item.content }}</div>
|
||||
<div class="footer">
|
||||
<div class="left">
|
||||
<div class="column">
|
||||
|
@ -14,7 +14,7 @@
|
||||
<div class="layout-main clearfix">
|
||||
<div class="layout-content">
|
||||
<div class="page-info wrap">
|
||||
<div class="content markdown-body">{{ page.content }}</div>
|
||||
<div class="content ke-content">{{ page.content }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout-sidebar">
|
||||
@ -37,6 +37,6 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
@ -55,7 +55,7 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">物品详情</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="gift-details markdown-body">{{ gift.details }}</div>
|
||||
<div class="gift-details ke-content">{{ gift.details }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -116,7 +116,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -25,8 +25,7 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<div id="vditor"></div>
|
||||
<textarea name="content" class="layui-hide" id="vditor-textarea">{{ question.content }}</textarea>
|
||||
<textarea name="content" class="layui-hide" id="editor-textarea">{{ question.content }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -53,7 +53,7 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="content markdown-body">{{ question.content }}</div>
|
||||
<div class="content ke-content">{{ question.content }}</div>
|
||||
{% if question.tags %}
|
||||
<div class="tags">
|
||||
{% for item in question.tags %}
|
||||
@ -111,7 +111,7 @@
|
||||
|
||||
{% block link_css %}
|
||||
|
||||
{{ css_link('home/css/markdown.css') }}
|
||||
{{ css_link('home/css/content.css') }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
use App\Caches\Setting as SettingCache;
|
||||
use App\Library\Purifier as HtmlPurifier;
|
||||
use App\Library\Validators\Common as CommonValidator;
|
||||
use App\Services\Storage as StorageService;
|
||||
use Koogua\Ip2Region\Searcher as Ip2RegionSearcher;
|
||||
@ -422,23 +423,16 @@ function kg_cos_img_style_trim($path)
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析markdown内容
|
||||
* 清理html内容
|
||||
*
|
||||
* @param string $content
|
||||
* @param string $htmlInput (escape|strip)
|
||||
* @param bool $allowUnsafeLinks
|
||||
* @return string
|
||||
*/
|
||||
function kg_parse_markdown($content, $htmlInput = 'escape', $allowUnsafeLinks = false)
|
||||
function kg_clean_html($content)
|
||||
{
|
||||
$content = str_replace('!content_800', '', $content);
|
||||
$purifier = new HtmlPurifier();
|
||||
|
||||
$parser = new League\CommonMark\GithubFlavoredMarkdownConverter([
|
||||
'html_input' => $htmlInput,
|
||||
'allow_unsafe_links' => $allowUnsafeLinks,
|
||||
]);
|
||||
|
||||
return $parser->convertToHtml($content);
|
||||
return $purifier->clean($content);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -450,11 +444,7 @@ function kg_parse_markdown($content, $htmlInput = 'escape', $allowUnsafeLinks =
|
||||
*/
|
||||
function kg_parse_summary($content, $length = 100)
|
||||
{
|
||||
$content = kg_parse_markdown($content);
|
||||
|
||||
$content = strip_tags($content);
|
||||
|
||||
$content = trim($content);
|
||||
$content = trim(strip_tags($content));
|
||||
|
||||
return kg_substr($content, 0, $length);
|
||||
}
|
||||
@ -469,7 +459,7 @@ function kg_parse_first_content_image($content)
|
||||
{
|
||||
$result = '';
|
||||
|
||||
$matched = preg_match('/\((.*?)\/img\/content\/(.*?)\)/', $content, $matches);
|
||||
$matched = preg_match('/src="(.*?)\/img\/content\/(.*?)"/', $content, $matches);
|
||||
|
||||
if ($matched) {
|
||||
$url = sprintf('%s/img/content/%s', trim($matches[1]), trim($matches[2]));
|
||||
|
63
app/Library/Purifier.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Library;
|
||||
|
||||
use HTMLPurifier;
|
||||
use HTMLPurifier_Config;
|
||||
|
||||
class Purifier
|
||||
{
|
||||
|
||||
/**
|
||||
* @var HTMLPurifier
|
||||
*/
|
||||
protected $purifier;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $options = [
|
||||
'CSS.AllowedProperties' => 'color,font-size,text-align,background-color',
|
||||
'AutoFormat.AutoParagraph' => true,
|
||||
'AutoFormat.RemoveEmpty' => true,
|
||||
'HTML.TargetBlank' => true,
|
||||
];
|
||||
|
||||
public function __construct($options = [])
|
||||
{
|
||||
$options = array_merge($this->options, $options);
|
||||
|
||||
$config = $this->getConfig($options);
|
||||
|
||||
$this->purifier = new HTMLPurifier($config);
|
||||
}
|
||||
|
||||
public function clean($html)
|
||||
{
|
||||
return $this->purifier->purify($html);
|
||||
}
|
||||
|
||||
public function cleanArray(array $html)
|
||||
{
|
||||
return $this->purifier->purifyArray($html);
|
||||
}
|
||||
|
||||
protected function getConfig(array $options)
|
||||
{
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
|
||||
foreach ($options as $key => $value) {
|
||||
$config->set($key, $value);
|
||||
}
|
||||
|
||||
$config->set('Cache.SerializerPath', cache_path('purifier'));
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
}
|
46
app/Models/MigrationTask.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
class MigrationTask extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $id = 0;
|
||||
|
||||
/**
|
||||
* 版本
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $version = '';
|
||||
|
||||
/**
|
||||
* 开始时间
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $start_time = 0;
|
||||
|
||||
/**
|
||||
* 结束时间
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $end_time = 0;
|
||||
|
||||
public function getSource(): string
|
||||
{
|
||||
return 'kg_migration_task';
|
||||
}
|
||||
|
||||
}
|
@ -71,8 +71,8 @@ class Volt extends Provider
|
||||
return 'kg_object_array(' . $resolvedArgs . ')';
|
||||
});
|
||||
|
||||
$compiler->addFilter('parse_markdown', function ($resolvedArgs) {
|
||||
return 'kg_parse_markdown(' . $resolvedArgs . ')';
|
||||
$compiler->addFilter('clean_html', function ($resolvedArgs) {
|
||||
return 'kg_clean_html(' . $resolvedArgs . ')';
|
||||
});
|
||||
|
||||
$compiler->addFilter('duration', function ($resolvedArgs) {
|
||||
|
@ -32,15 +32,13 @@ class AnswerInfo extends LogicService
|
||||
|
||||
protected function handleAnswer(AnswerModel $answer, UserModel $user)
|
||||
{
|
||||
$content = kg_parse_markdown($answer->content);
|
||||
|
||||
$question = $this->handleQuestionInfo($answer->question_id);
|
||||
$owner = $this->handleShallowUserInfo($answer->owner_id);
|
||||
$me = $this->handleMeInfo($answer, $user);
|
||||
|
||||
return [
|
||||
'id' => $answer->id,
|
||||
'content' => $content,
|
||||
'content' => $answer->content,
|
||||
'anonymous' => $answer->anonymous,
|
||||
'accepted' => $answer->accepted,
|
||||
'published' => $answer->published,
|
||||
|
@ -40,8 +40,6 @@ class ArticleInfo extends LogicService
|
||||
|
||||
protected function handleArticle(ArticleModel $article, UserModel $user)
|
||||
{
|
||||
$content = kg_parse_markdown($article->content);
|
||||
|
||||
$category = $this->handleCategoryInfo($article->category_id);
|
||||
$owner = $this->handleShallowUserInfo($article->owner_id);
|
||||
$me = $this->handleMeInfo($article, $user);
|
||||
@ -52,7 +50,7 @@ class ArticleInfo extends LogicService
|
||||
'cover' => $article->cover,
|
||||
'summary' => $article->summary,
|
||||
'tags' => $article->tags,
|
||||
'content' => $content,
|
||||
'content' => $article->content,
|
||||
'private' => $article->private,
|
||||
'closed' => $article->closed,
|
||||
'published' => $article->published,
|
||||
|
@ -134,8 +134,6 @@ class BasicInfo extends LogicService
|
||||
|
||||
$read = $chapterRepo->findChapterRead($chapter->id);
|
||||
|
||||
$read->content = kg_parse_markdown($read->content);
|
||||
|
||||
return [
|
||||
'id' => $chapter->id,
|
||||
'title' => $chapter->title,
|
||||
|
@ -27,8 +27,6 @@ class BasicInfo extends LogicService
|
||||
|
||||
public function handleBasicInfo(CourseModel $course)
|
||||
{
|
||||
$details = kg_parse_markdown($course->details);
|
||||
|
||||
$userCount = $course->user_count;
|
||||
|
||||
if ($course->fake_user_count > $course->user_count) {
|
||||
@ -44,7 +42,7 @@ class BasicInfo extends LogicService
|
||||
'title' => $course->title,
|
||||
'cover' => $course->cover,
|
||||
'summary' => $course->summary,
|
||||
'details' => $details,
|
||||
'details' => $course->details,
|
||||
'keywords' => $course->keywords,
|
||||
'origin_price' => (float)$course->origin_price,
|
||||
'market_price' => (float)$course->market_price,
|
||||
|
@ -25,8 +25,6 @@ class HelpInfo extends LogicService
|
||||
|
||||
protected function handleHelp(HelpModel $help)
|
||||
{
|
||||
$help->content = kg_parse_markdown($help->content);
|
||||
|
||||
return [
|
||||
'id' => $help->id,
|
||||
'title' => $help->title,
|
||||
|
@ -25,8 +25,6 @@ class PageInfo extends LogicService
|
||||
|
||||
protected function handlePage(PageModel $page)
|
||||
{
|
||||
$page->content = kg_parse_markdown($page->content);
|
||||
|
||||
return [
|
||||
'id' => $page->id,
|
||||
'title' => $page->title,
|
||||
|
@ -27,8 +27,6 @@ class GiftInfo extends LogicService
|
||||
$gift = $this->getCourseGift($gift);
|
||||
}
|
||||
|
||||
$gift->details = kg_parse_markdown($gift->details);
|
||||
|
||||
$meInfo = $this->handleMeInfo($gift);
|
||||
|
||||
return [
|
||||
|
@ -61,8 +61,6 @@ class AnswerList extends LogicService
|
||||
|
||||
foreach ($answers as $answer) {
|
||||
|
||||
$answer['content'] = kg_parse_markdown($answer['content']);
|
||||
|
||||
$owner = $users[$answer['owner_id']];
|
||||
|
||||
$me = $meMappings[$answer['id']];
|
||||
|
@ -41,8 +41,6 @@ class QuestionInfo extends LogicService
|
||||
|
||||
protected function handleQuestion(QuestionModel $question, UserModel $user)
|
||||
{
|
||||
$content = kg_parse_markdown($question->content);
|
||||
|
||||
$lastReplier = $this->handleShallowUserInfo($question->last_replier_id);
|
||||
$category = $this->handleCategoryInfo($question->category_id);
|
||||
$owner = $this->handleShallowUserInfo($question->owner_id);
|
||||
@ -52,7 +50,7 @@ class QuestionInfo extends LogicService
|
||||
'id' => $question->id,
|
||||
'title' => $question->title,
|
||||
'summary' => $question->summary,
|
||||
'content' => $content,
|
||||
'content' => $question->content,
|
||||
'tags' => $question->tags,
|
||||
'bounty' => $question->bounty,
|
||||
'anonymous' => $question->anonymous,
|
||||
|
@ -68,7 +68,7 @@ class Answer extends Validator
|
||||
throw new BadRequestException('answer.content_too_long');
|
||||
}
|
||||
|
||||
return $value;
|
||||
return kg_clean_html($value);
|
||||
}
|
||||
|
||||
public function checkPublishStatus($status)
|
||||
|
@ -104,7 +104,7 @@ class Article extends Validator
|
||||
throw new BadRequestException('article.content_too_long');
|
||||
}
|
||||
|
||||
return $value;
|
||||
return kg_clean_html($value);
|
||||
}
|
||||
|
||||
public function checkSourceType($type)
|
||||
|
@ -26,7 +26,7 @@ class ChapterRead extends Validator
|
||||
throw new BadRequestException('chapter_read.content_too_long');
|
||||
}
|
||||
|
||||
return $value;
|
||||
return kg_clean_html($value);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ class Course extends Validator
|
||||
throw new BadRequestException('course.details_too_long');
|
||||
}
|
||||
|
||||
return $value;
|
||||
return kg_clean_html($value);
|
||||
}
|
||||
|
||||
public function checkSummary($summary)
|
||||
|
@ -100,7 +100,7 @@ class Help extends Validator
|
||||
throw new BadRequestException('help.content_too_long');
|
||||
}
|
||||
|
||||
return $value;
|
||||
return kg_clean_html($value);
|
||||
}
|
||||
|
||||
public function checkPriority($priority)
|
||||
|
@ -121,7 +121,7 @@ class Page extends Validator
|
||||
throw new BadRequestException('page.content_too_long');
|
||||
}
|
||||
|
||||
return $value;
|
||||
return kg_clean_html($value);
|
||||
}
|
||||
|
||||
public function checkPublishStatus($status)
|
||||
|
@ -99,7 +99,7 @@ class Question extends Validator
|
||||
throw new BadRequestException('question.content_too_long');
|
||||
}
|
||||
|
||||
return $value;
|
||||
return kg_clean_html($value);
|
||||
}
|
||||
|
||||
public function checkPublishStatus($status)
|
||||
|
@ -20,7 +20,8 @@
|
||||
"robmorgan/phinx": "^0.12",
|
||||
"overtrue/wechat": "^4.2",
|
||||
"endroid/qr-code": "^3.9",
|
||||
"league/commonmark": "^1.5"
|
||||
"league/commonmark": "^1.5",
|
||||
"ezyang/htmlpurifier": "^4.14"
|
||||
},
|
||||
"require-dev": {
|
||||
"odan/phinx-migrations-generator": "^5.3",
|
||||
|
123
composer.lock
generated
@ -1,20 +1,20 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "08aae4a9db4b38cc2a4b8b6b4fa9868e",
|
||||
"packages": [
|
||||
{
|
||||
"name": "bacon/bacon-qr-code",
|
||||
"version": "2.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Bacon/BaconQrCode.git",
|
||||
"reference": "3e9d791b67d0a2912922b7b7c7312f4b37af41e4"
|
||||
},
|
||||
"dist": {
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "43344cdd5886ec75ae87aab19a6d2394",
|
||||
"packages": [
|
||||
{
|
||||
"name": "bacon/bacon-qr-code",
|
||||
"version": "2.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Bacon/BaconQrCode.git",
|
||||
"reference": "3e9d791b67d0a2912922b7b7c7312f4b37af41e4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/3e9d791b67d0a2912922b7b7c7312f4b37af41e4",
|
||||
"reference": "3e9d791b67d0a2912922b7b7c7312f4b37af41e4",
|
||||
@ -725,25 +725,82 @@
|
||||
"issues": "https://github.com/endroid/qr-code/issues",
|
||||
"source": "https://github.com/endroid/qr-code/tree/3.9.6"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/endroid",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-11-27T14:30:38+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/endroid",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-11-27T14:30:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ezyang/htmlpurifier",
|
||||
"version": "v4.14.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ezyang/htmlpurifier.git",
|
||||
"reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
|
||||
"reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"library/HTMLPurifier.composer.php"
|
||||
],
|
||||
"psr-0": {
|
||||
"HTMLPurifier": "library/"
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/library/HTMLPurifier/Language/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "guzzlehttp/command",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/command.git",
|
||||
"reference": "2aaa2521a8f8269d6f5dfc13fe2af12c76921034"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/command/zipball/2aaa2521a8f8269d6f5dfc13fe2af12c76921034",
|
||||
"name": "Edward Z. Yang",
|
||||
"email": "admin@htmlpurifier.org",
|
||||
"homepage": "http://ezyang.com"
|
||||
}
|
||||
],
|
||||
"description": "Standards compliant HTML filter written in PHP",
|
||||
"homepage": "http://htmlpurifier.org/",
|
||||
"keywords": [
|
||||
"html"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/ezyang/htmlpurifier/issues",
|
||||
"source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0"
|
||||
},
|
||||
"time": "2021-12-25T01:21:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/command",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/command.git",
|
||||
"reference": "2aaa2521a8f8269d6f5dfc13fe2af12c76921034"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/command/zipball/2aaa2521a8f8269d6f5dfc13fe2af12c76921034",
|
||||
"reference": "2aaa2521a8f8269d6f5dfc13fe2af12c76921034",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
|
31
public/static/admin/js/content.editor.js
Normal file
@ -0,0 +1,31 @@
|
||||
layui.use(['jquery'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
|
||||
var editor;
|
||||
|
||||
var options = {
|
||||
uploadJson: '/admin/upload/content/img',
|
||||
cssPath: '/static/lib/kindeditor/content.css',
|
||||
width: '100%',
|
||||
height: '300px',
|
||||
items: [
|
||||
'selectall', '|',
|
||||
'undo', 'redo', '|',
|
||||
'copy', 'plainpaste', 'wordpaste', '|',
|
||||
'formatblock', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline', 'removeformat', '|',
|
||||
'insertorderedlist', 'insertunorderedlist', 'table', '|',
|
||||
'superscript', 'subscript', '|', 'image', 'link', 'unlink', '|',
|
||||
'source', 'about'
|
||||
],
|
||||
};
|
||||
|
||||
KindEditor.ready(function (K) {
|
||||
editor = K.create('#editor-textarea', options);
|
||||
});
|
||||
|
||||
$('.kg-submit').on('click', function () {
|
||||
editor.sync();
|
||||
});
|
||||
|
||||
});
|
@ -277,8 +277,6 @@
|
||||
|
||||
.page-info {
|
||||
min-height: 500px;
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.help-list li {
|
||||
|
217
public/static/home/css/content.css
Normal file
@ -0,0 +1,217 @@
|
||||
.ke-content {
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.ke-content a {
|
||||
padding: 0;
|
||||
margin: 0 2px;
|
||||
color: #0099ff;
|
||||
vertical-align: baseline;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.ke-content img {
|
||||
max-width: 100%;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ke-content a:hover {
|
||||
text-decoration: none;
|
||||
color: #ff6600;
|
||||
}
|
||||
|
||||
.ke-content h1,
|
||||
.ke-content h2,
|
||||
.ke-content h3,
|
||||
.ke-content h4,
|
||||
.ke-content h5,
|
||||
.ke-content dl {
|
||||
padding: 0;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.ke-content p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.8em;
|
||||
}
|
||||
|
||||
.ke-content h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.ke-content h1,
|
||||
.ke-content h2,
|
||||
.ke-content h3 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.ke-content h2 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.ke-content h3 {
|
||||
font-size: 1.25em;
|
||||
}
|
||||
|
||||
.ke-content h4 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.ke-content h5 {
|
||||
font-size: .875em;
|
||||
}
|
||||
|
||||
.ke-content h6 {
|
||||
font-size: .85em;
|
||||
}
|
||||
|
||||
.ke-content hr {
|
||||
text-align: left;
|
||||
color: #999;
|
||||
height: 2px;
|
||||
padding: 0;
|
||||
margin: 15px 0;
|
||||
background-color: #e7e7e7;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.ke-content ul,
|
||||
.ke-content ol {
|
||||
padding-left: 20px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.ke-content ul li {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
.ke-content ol li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.ke-content li {
|
||||
line-height: 1.8em;
|
||||
}
|
||||
|
||||
.ke-content dl {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.ke-content dl dt {
|
||||
padding: 10px 0;
|
||||
margin-top: 15px;
|
||||
font-size: 1em;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.ke-content dl dd {
|
||||
padding: 0 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.ke-content dd {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.ke-content table {
|
||||
border-spacing: 0;
|
||||
border: solid #ccc 1px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ke-content table thead {
|
||||
background: #f7f7f7;
|
||||
}
|
||||
|
||||
.ke-content table thead tr:hover {
|
||||
background: #f7f7f7
|
||||
}
|
||||
|
||||
.ke-content table td,
|
||||
.ke-content .table th {
|
||||
text-align: left;
|
||||
border-left: 1px solid #ccc;
|
||||
border-top: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.ke-content table tr:hover {
|
||||
background: #fbf8e9;
|
||||
-o-transition: all 0.1s ease-in-out;
|
||||
-webkit-transition: all 0.1s ease-in-out;
|
||||
-moz-transition: all 0.1s ease-in-out;
|
||||
transition: all 0.1s ease-in-out;
|
||||
}
|
||||
|
||||
.ke-content table th {
|
||||
border-top: none;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
|
||||
border-left: 1px solid #ccc;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.ke-content table td:first-child,
|
||||
.ke-content table th:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.ke-content code,
|
||||
.ke-content pre {
|
||||
font-family: Consolas, Monaco, Andale Mono, monospace;
|
||||
background-color: #f7f7f7;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.ke-content code {
|
||||
font-family: Consolas, Monaco, Andale Mono, monospace;
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
.ke-content pre {
|
||||
font-family: Consolas, Monaco, Andale Mono, monospace;
|
||||
line-height: 1.7em;
|
||||
overflow: auto;
|
||||
padding: 6px 10px;
|
||||
border-left: 5px solid #6CE26C;
|
||||
}
|
||||
|
||||
.ke-content code {
|
||||
color: #666555;
|
||||
}
|
||||
|
||||
.ke-content pre > code {
|
||||
font-family: Consolas, Monaco, Andale Mono, monospace;
|
||||
display: inline;
|
||||
max-width: initial;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
overflow: initial;
|
||||
line-height: 1.6em;
|
||||
font-size: .95em;
|
||||
white-space: pre;
|
||||
background: 0 0;
|
||||
}
|
||||
|
||||
.ke-content blockquote {
|
||||
border-left: .5em solid #eee;
|
||||
padding: 0 0 0 2em;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.ke-content blockquote cite {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: #bfbfbf;
|
||||
}
|
||||
|
||||
.ke-content blockquote cite:before {
|
||||
content: '\2014 \00A0';
|
||||
}
|
||||
|
||||
.ke-content blockquote p {
|
||||
color: #666;
|
||||
}
|
@ -1,973 +0,0 @@
|
||||
.markdown-body .octicon {
|
||||
display: inline-block;
|
||||
fill: currentColor;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
.markdown-body .anchor {
|
||||
float: left;
|
||||
line-height: 1;
|
||||
margin-left: -20px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
.markdown-body .anchor:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.markdown-body h1 .octicon-link,
|
||||
.markdown-body h2 .octicon-link,
|
||||
.markdown-body h3 .octicon-link,
|
||||
.markdown-body h4 .octicon-link,
|
||||
.markdown-body h5 .octicon-link,
|
||||
.markdown-body h6 .octicon-link {
|
||||
color: #1b1f23;
|
||||
vertical-align: middle;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.markdown-body h1:hover .anchor,
|
||||
.markdown-body h2:hover .anchor,
|
||||
.markdown-body h3:hover .anchor,
|
||||
.markdown-body h4:hover .anchor,
|
||||
.markdown-body h5:hover .anchor,
|
||||
.markdown-body h6:hover .anchor {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.markdown-body h1:hover .anchor .octicon-link,
|
||||
.markdown-body h2:hover .anchor .octicon-link,
|
||||
.markdown-body h3:hover .anchor .octicon-link,
|
||||
.markdown-body h4:hover .anchor .octicon-link,
|
||||
.markdown-body h5:hover .anchor .octicon-link,
|
||||
.markdown-body h6:hover .anchor .octicon-link {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.markdown-body h1:hover .anchor .octicon-link:before,
|
||||
.markdown-body h2:hover .anchor .octicon-link:before,
|
||||
.markdown-body h3:hover .anchor .octicon-link:before,
|
||||
.markdown-body h4:hover .anchor .octicon-link:before,
|
||||
.markdown-body h5:hover .anchor .octicon-link:before,
|
||||
.markdown-body h6:hover .anchor .octicon-link:before {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
content: ' ';
|
||||
display: inline-block;
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath fill-rule='evenodd' d='M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z'%3E%3C/path%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.markdown-body {
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
line-height: 1.8;
|
||||
color: #24292e;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;
|
||||
font-size: 14px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.markdown-body details {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.markdown-body summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
.markdown-body a {
|
||||
background-color: initial;
|
||||
}
|
||||
|
||||
.markdown-body a:active,
|
||||
.markdown-body a:hover {
|
||||
outline-width: 0;
|
||||
}
|
||||
|
||||
.markdown-body strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
.markdown-body h1 {
|
||||
font-size: 2em;
|
||||
margin: .67em 0;
|
||||
}
|
||||
|
||||
.markdown-body img {
|
||||
border-style: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.markdown-body code,
|
||||
.markdown-body kbd,
|
||||
.markdown-body pre {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.markdown-body hr {
|
||||
box-sizing: initial;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.markdown-body input {
|
||||
font: inherit;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown-body input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.markdown-body [type=checkbox] {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.markdown-body * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.markdown-body input {
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.markdown-body a {
|
||||
color: #0366d6;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.markdown-body a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.markdown-body strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body hr {
|
||||
height: 0;
|
||||
margin: 15px 0;
|
||||
overflow: hidden;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
border-bottom: 1px solid #dfe2e5;
|
||||
}
|
||||
|
||||
.markdown-body hr:after,
|
||||
.markdown-body hr:before {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
|
||||
.markdown-body hr:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown-body table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.markdown-body td,
|
||||
.markdown-body th {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.markdown-body details summary {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.markdown-body kbd {
|
||||
display: inline-block;
|
||||
padding: 3px 5px;
|
||||
font: 11px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
line-height: 10px;
|
||||
color: #444d56;
|
||||
vertical-align: middle;
|
||||
background-color: #fafbfc;
|
||||
border: 1px solid #d1d5da;
|
||||
border-radius: 3px;
|
||||
box-shadow: inset 0 -1px 0 #d1d5da;
|
||||
}
|
||||
|
||||
.markdown-body h1,
|
||||
.markdown-body h2,
|
||||
.markdown-body h3,
|
||||
.markdown-body h4,
|
||||
.markdown-body h5,
|
||||
.markdown-body h6 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown-body h1 {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.markdown-body h1,
|
||||
.markdown-body h2 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body h2 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.markdown-body h3 {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.markdown-body h3,
|
||||
.markdown-body h4 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body h4 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.markdown-body h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.markdown-body h5,
|
||||
.markdown-body h6 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown-body p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.markdown-body blockquote {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown-body ol,
|
||||
.markdown-body ul {
|
||||
padding-left: 0;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown-body ol ol,
|
||||
.markdown-body ul ol {
|
||||
list-style-type: lower-roman;
|
||||
}
|
||||
|
||||
.markdown-body ol ol ol,
|
||||
.markdown-body ol ul ol,
|
||||
.markdown-body ul ol ol,
|
||||
.markdown-body ul ul ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
|
||||
.markdown-body dd {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.markdown-body code,
|
||||
.markdown-body pre {
|
||||
font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown-body input::-webkit-inner-spin-button,
|
||||
.markdown-body input::-webkit-outer-spin-button {
|
||||
margin: 0;
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
|
||||
.markdown-body :checked + .radio-label {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
border-color: #0366d6;
|
||||
}
|
||||
|
||||
.markdown-body .border {
|
||||
border: 1px solid #e1e4e8 !important;
|
||||
}
|
||||
|
||||
.markdown-body .border-0 {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body .border-bottom {
|
||||
border-bottom: 1px solid #e1e4e8 !important;
|
||||
}
|
||||
|
||||
.markdown-body .rounded-1 {
|
||||
border-radius: 3px !important;
|
||||
}
|
||||
|
||||
.markdown-body .bg-white {
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
.markdown-body .bg-gray-light {
|
||||
background-color: #fafbfc !important;
|
||||
}
|
||||
|
||||
.markdown-body .text-gray-light {
|
||||
color: #6a737d !important;
|
||||
}
|
||||
|
||||
.markdown-body .mb-0 {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body .my-2 {
|
||||
margin-top: 8px !important;
|
||||
margin-bottom: 8px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-0 {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body .py-0 {
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-1 {
|
||||
padding-left: 4px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-2 {
|
||||
padding-left: 8px !important;
|
||||
}
|
||||
|
||||
.markdown-body .py-2 {
|
||||
padding-top: 8px !important;
|
||||
padding-bottom: 8px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-3,
|
||||
.markdown-body .px-3 {
|
||||
padding-left: 16px !important;
|
||||
}
|
||||
|
||||
.markdown-body .px-3 {
|
||||
padding-right: 16px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-4 {
|
||||
padding-left: 24px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-5 {
|
||||
padding-left: 32px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-6 {
|
||||
padding-left: 40px !important;
|
||||
}
|
||||
|
||||
.markdown-body .f6 {
|
||||
font-size: 12px !important;
|
||||
}
|
||||
|
||||
.markdown-body .lh-condensed {
|
||||
line-height: 1.25 !important;
|
||||
}
|
||||
|
||||
.markdown-body .text-bold {
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-c {
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.markdown-body .pl-c1,
|
||||
.markdown-body .pl-s .pl-v {
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.markdown-body .pl-e,
|
||||
.markdown-body .pl-en {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.markdown-body .pl-s .pl-s1,
|
||||
.markdown-body .pl-smi {
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.markdown-body .pl-ent {
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.markdown-body .pl-k {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.markdown-body .pl-pds,
|
||||
.markdown-body .pl-s,
|
||||
.markdown-body .pl-s .pl-pse .pl-s1,
|
||||
.markdown-body .pl-sr,
|
||||
.markdown-body .pl-sr .pl-cce,
|
||||
.markdown-body .pl-sr .pl-sra,
|
||||
.markdown-body .pl-sr .pl-sre {
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.markdown-body .pl-smw,
|
||||
.markdown-body .pl-v {
|
||||
color: #e36209;
|
||||
}
|
||||
|
||||
.markdown-body .pl-bu {
|
||||
color: #b31d28;
|
||||
}
|
||||
|
||||
.markdown-body .pl-ii {
|
||||
color: #fafbfc;
|
||||
background-color: #b31d28;
|
||||
}
|
||||
|
||||
.markdown-body .pl-c2 {
|
||||
color: #fafbfc;
|
||||
background-color: #d73a49;
|
||||
}
|
||||
|
||||
.markdown-body .pl-c2:before {
|
||||
content: "^M";
|
||||
}
|
||||
|
||||
.markdown-body .pl-sr .pl-cce {
|
||||
font-weight: 700;
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.markdown-body .pl-ml {
|
||||
color: #735c0f;
|
||||
}
|
||||
|
||||
.markdown-body .pl-mh,
|
||||
.markdown-body .pl-mh .pl-en,
|
||||
.markdown-body .pl-ms {
|
||||
font-weight: 700;
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.markdown-body .pl-mi {
|
||||
font-style: italic;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.markdown-body .pl-mb {
|
||||
font-weight: 700;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.markdown-body .pl-md {
|
||||
color: #b31d28;
|
||||
background-color: #ffeef0;
|
||||
}
|
||||
|
||||
.markdown-body .pl-mi1 {
|
||||
color: #22863a;
|
||||
background-color: #f0fff4;
|
||||
}
|
||||
|
||||
.markdown-body .pl-mc {
|
||||
color: #e36209;
|
||||
background-color: #ffebda;
|
||||
}
|
||||
|
||||
.markdown-body .pl-mi2 {
|
||||
color: #f6f8fa;
|
||||
background-color: #005cc5;
|
||||
}
|
||||
|
||||
.markdown-body .pl-mdr {
|
||||
font-weight: 700;
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.markdown-body .pl-ba {
|
||||
color: #586069;
|
||||
}
|
||||
|
||||
.markdown-body .pl-sg {
|
||||
color: #959da5;
|
||||
}
|
||||
|
||||
.markdown-body .pl-corl {
|
||||
text-decoration: underline;
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.markdown-body .mb-0 {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body .my-2 {
|
||||
margin-bottom: 8px !important;
|
||||
}
|
||||
|
||||
.markdown-body .my-2 {
|
||||
margin-top: 8px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-0 {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body .py-0 {
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-1 {
|
||||
padding-left: 4px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-2 {
|
||||
padding-left: 8px !important;
|
||||
}
|
||||
|
||||
.markdown-body .py-2 {
|
||||
padding-top: 8px !important;
|
||||
padding-bottom: 8px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-3 {
|
||||
padding-left: 16px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-4 {
|
||||
padding-left: 24px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-5 {
|
||||
padding-left: 32px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-6 {
|
||||
padding-left: 40px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-7 {
|
||||
padding-left: 48px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-8 {
|
||||
padding-left: 64px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-9 {
|
||||
padding-left: 80px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-10 {
|
||||
padding-left: 96px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-11 {
|
||||
padding-left: 112px !important;
|
||||
}
|
||||
|
||||
.markdown-body .pl-12 {
|
||||
padding-left: 128px !important;
|
||||
}
|
||||
|
||||
.markdown-body hr {
|
||||
border-bottom-color: #eee;
|
||||
}
|
||||
|
||||
.markdown-body:after,
|
||||
.markdown-body:before {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
|
||||
.markdown-body:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown-body > :first-child {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body > :last-child {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body a:not([href]) {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.markdown-body blockquote,
|
||||
.markdown-body details,
|
||||
.markdown-body dl,
|
||||
.markdown-body ol,
|
||||
.markdown-body p,
|
||||
.markdown-body pre,
|
||||
.markdown-body table,
|
||||
.markdown-body ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown-body hr {
|
||||
height: .25em;
|
||||
padding: 0;
|
||||
margin: 24px 0;
|
||||
background-color: #e1e4e8;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.markdown-body blockquote {
|
||||
padding: 0 1em;
|
||||
color: #6a737d;
|
||||
border-left: .25em solid #dfe2e5;
|
||||
}
|
||||
|
||||
.markdown-body blockquote > :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.markdown-body blockquote > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown-body h1,
|
||||
.markdown-body h2,
|
||||
.markdown-body h3,
|
||||
.markdown-body h4,
|
||||
.markdown-body h5,
|
||||
.markdown-body h6 {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.markdown-body h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.markdown-body h1,
|
||||
.markdown-body h2 {
|
||||
padding-bottom: .3em;
|
||||
border-bottom: 1px solid #eaecef;
|
||||
}
|
||||
|
||||
.markdown-body h2 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.markdown-body h3 {
|
||||
font-size: 1.25em;
|
||||
}
|
||||
|
||||
.markdown-body h4 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.markdown-body h5 {
|
||||
font-size: .875em;
|
||||
}
|
||||
|
||||
.markdown-body h6 {
|
||||
font-size: .85em;
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.markdown-body ol,
|
||||
.markdown-body ul {
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
.markdown-body ol ol,
|
||||
.markdown-body ol ul,
|
||||
.markdown-body ul ol,
|
||||
.markdown-body ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown-body li {
|
||||
list-style: initial;
|
||||
}
|
||||
|
||||
.markdown-body li > p {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.markdown-body li + li {
|
||||
margin-top: .25em;
|
||||
}
|
||||
|
||||
.markdown-body dl {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.markdown-body dl dt {
|
||||
padding: 0;
|
||||
margin-top: 16px;
|
||||
font-size: 1em;
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body dl dd {
|
||||
padding: 0 16px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown-body table {
|
||||
display: block;
|
||||
width: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.markdown-body table th {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body table td,
|
||||
.markdown-body table th {
|
||||
padding: 6px 13px;
|
||||
border: 1px solid #dfe2e5;
|
||||
}
|
||||
|
||||
.markdown-body table tr {
|
||||
background-color: #fff;
|
||||
border-top: 1px solid #c6cbd1;
|
||||
}
|
||||
|
||||
.markdown-body table tr:nth-child(2n) {
|
||||
background-color: #f6f8fa;
|
||||
}
|
||||
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
box-sizing: initial;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.markdown-body img[align=right] {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.markdown-body img[align=left] {
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.markdown-body code {
|
||||
padding: .2em .4em;
|
||||
margin: 0;
|
||||
font-size: 85%;
|
||||
background-color: rgba(27, 31, 35, .05);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
word-wrap: normal;
|
||||
}
|
||||
|
||||
.markdown-body pre > code {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 100%;
|
||||
word-break: normal;
|
||||
white-space: pre;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.markdown-body .highlight {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown-body .highlight pre {
|
||||
margin-bottom: 0;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.markdown-body .highlight pre,
|
||||
.markdown-body pre {
|
||||
padding: 16px;
|
||||
overflow: auto;
|
||||
font-size: 85%;
|
||||
line-height: 1.45;
|
||||
background-color: #f6f8fa;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown-body pre code {
|
||||
display: inline;
|
||||
max-width: auto;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
line-height: inherit;
|
||||
word-wrap: normal;
|
||||
background-color: initial;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.markdown-body .commit-tease-sha {
|
||||
display: inline-block;
|
||||
font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
font-size: 90%;
|
||||
color: #444d56;
|
||||
}
|
||||
|
||||
.markdown-body .full-commit .btn-outline:not(:disabled):hover {
|
||||
color: #005cc5;
|
||||
border-color: #005cc5;
|
||||
}
|
||||
|
||||
.markdown-body .blob-wrapper {
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.markdown-body .blob-wrapper-embedded {
|
||||
max-height: 240px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.markdown-body .blob-num {
|
||||
width: 1%;
|
||||
min-width: 50px;
|
||||
padding-right: 10px;
|
||||
padding-left: 10px;
|
||||
font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
color: rgba(27, 31, 35, .3);
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
vertical-align: top;
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.markdown-body .blob-num:hover {
|
||||
color: rgba(27, 31, 35, .6);
|
||||
}
|
||||
|
||||
.markdown-body .blob-num:before {
|
||||
content: attr(data-line-number);
|
||||
}
|
||||
|
||||
.markdown-body .blob-code {
|
||||
position: relative;
|
||||
padding-right: 10px;
|
||||
padding-left: 10px;
|
||||
line-height: 20px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.markdown-body .blob-code-inner {
|
||||
overflow: visible;
|
||||
font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
font-size: 12px;
|
||||
color: #24292e;
|
||||
word-wrap: normal;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.markdown-body .pl-token.active,
|
||||
.markdown-body .pl-token:hover {
|
||||
cursor: pointer;
|
||||
background: #ffea7f;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="1"] {
|
||||
-moz-tab-size: 1;
|
||||
tab-size: 1;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="2"] {
|
||||
-moz-tab-size: 2;
|
||||
tab-size: 2;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="3"] {
|
||||
-moz-tab-size: 3;
|
||||
tab-size: 3;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="4"] {
|
||||
-moz-tab-size: 4;
|
||||
tab-size: 4;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="5"] {
|
||||
-moz-tab-size: 5;
|
||||
tab-size: 5;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="6"] {
|
||||
-moz-tab-size: 6;
|
||||
tab-size: 6;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="7"] {
|
||||
-moz-tab-size: 7;
|
||||
tab-size: 7;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="8"] {
|
||||
-moz-tab-size: 8;
|
||||
tab-size: 8;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="9"] {
|
||||
-moz-tab-size: 9;
|
||||
tab-size: 9;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="10"] {
|
||||
-moz-tab-size: 10;
|
||||
tab-size: 10;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="11"] {
|
||||
-moz-tab-size: 11;
|
||||
tab-size: 11;
|
||||
}
|
||||
|
||||
.markdown-body .tab-size[data-tab-size="12"] {
|
||||
-moz-tab-size: 12;
|
||||
tab-size: 12;
|
||||
}
|
||||
|
||||
.markdown-body .task-list-item {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.markdown-body .task-list-item + .task-list-item {
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.markdown-body .task-list-item input {
|
||||
margin: 0 .2em .25em -1.6em;
|
||||
vertical-align: middle;
|
||||
}
|
@ -127,7 +127,7 @@ layui.use(['jquery', 'form', 'element', 'layer', 'helper'], function () {
|
||||
window.history.back();
|
||||
});
|
||||
|
||||
$('.markdown-body').on('click', 'img', function () {
|
||||
$('.ke-content').on('click', 'img', function () {
|
||||
var width = $(window).width() * 0.8 + 'px';
|
||||
var height = $(window).height() * 0.8 + 'px';
|
||||
var src = $(this).attr('src');
|
||||
|
31
public/static/home/js/content.editor.js
Normal file
@ -0,0 +1,31 @@
|
||||
layui.use(['jquery'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
|
||||
var editor;
|
||||
|
||||
var options = {
|
||||
uploadJson: '/admin/upload/content/img',
|
||||
cssPath: '/static/home/css/content.css',
|
||||
width: '100%',
|
||||
height: '300px',
|
||||
items: [
|
||||
'selectall', '|',
|
||||
'undo', 'redo', '|',
|
||||
'copy', 'plainpaste', 'wordpaste', '|',
|
||||
'formatblock', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline', 'removeformat', '|',
|
||||
'insertorderedlist', 'insertunorderedlist', 'table', '|',
|
||||
'superscript', 'subscript', '|', 'image', 'link', 'unlink', '|',
|
||||
'source', 'about'
|
||||
],
|
||||
};
|
||||
|
||||
KindEditor.ready(function (K) {
|
||||
editor = K.create('#editor-textarea', options);
|
||||
});
|
||||
|
||||
$('.kg-submit').on('click', function () {
|
||||
editor.sync();
|
||||
});
|
||||
|
||||
});
|
21
public/static/lib/kindeditor/content.css
Normal file
@ -0,0 +1,21 @@
|
||||
body {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border: 1px solid #dedede;
|
||||
margin: 15px auto;
|
||||
border-collapse: collapse;
|
||||
empty-cells: show;
|
||||
}
|
||||
|
||||
table th,
|
||||
table td {
|
||||
border: 1px solid #dedede;
|
||||
padding: 5px 10px;
|
||||
}
|
10135
public/static/lib/kindeditor/kindeditor.js
Normal file
7
public/static/lib/kindeditor/kindeditor.min.js
vendored
Normal file
242
public/static/lib/kindeditor/lang/ar.js
Normal file
@ -0,0 +1,242 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
* Arabic Translation By daif alotaibi (http://daif.net/)
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.lang({
|
||||
source: 'عرض المصدر',
|
||||
preview: 'معاينة الصفحة',
|
||||
undo: 'تراجع(Ctrl+Z)',
|
||||
redo: 'إعادة التراجع(Ctrl+Y)',
|
||||
cut: 'قص(Ctrl+X)',
|
||||
copy: 'نسخ(Ctrl+C)',
|
||||
paste: 'لصق(Ctrl+V)',
|
||||
plainpaste: 'لصق كنص عادي',
|
||||
wordpaste: 'لصق من مايكروسفت ورد',
|
||||
selectall: 'تحديد الكل',
|
||||
justifyleft: 'محاذاه لليسار',
|
||||
justifycenter: 'محاذاه للوسط',
|
||||
justifyright: 'محاذاه لليمين',
|
||||
justifyfull: 'محاذاه تلقائية',
|
||||
insertorderedlist: 'قائمة مرقمه',
|
||||
insertunorderedlist: 'قائمة نقطية',
|
||||
indent: 'إزاحه النص',
|
||||
outdent: 'إلغاء الازاحة',
|
||||
subscript: 'أسفل النص',
|
||||
superscript: 'أعلى النص',
|
||||
formatblock: 'Paragraph format',
|
||||
fontname: 'نوع الخط',
|
||||
fontsize: 'حجم الخط',
|
||||
forecolor: 'لون النص',
|
||||
hilitecolor: 'لون خلفية النص',
|
||||
bold: 'عريض(Ctrl+B)',
|
||||
italic: 'مائل(Ctrl+I)',
|
||||
underline: 'خط تحت النص(Ctrl+U)',
|
||||
strikethrough: 'خط على النص',
|
||||
removeformat: 'إزالة التنسيق',
|
||||
image: 'إدراج صورة',
|
||||
multiimage: 'Multi image',
|
||||
flash: 'إدراج فلاش',
|
||||
media: 'إدراج وسائط متعددة',
|
||||
table: 'إدراج جدول',
|
||||
tablecell: 'خلية',
|
||||
hr: 'إدراج خط أفقي',
|
||||
emoticons: 'إدراج وجه ضاحك',
|
||||
link: 'رابط',
|
||||
unlink: 'إزالة الرابط',
|
||||
fullscreen: 'محرر ملئ الشاشة',
|
||||
about: 'حول',
|
||||
print: 'طباعة',
|
||||
filemanager: 'مدير الملفات',
|
||||
code: 'إدراج نص برمجي',
|
||||
map: 'خرائط قووقل',
|
||||
baidumap: 'خرائط قووقل',
|
||||
lineheight: 'إرتفاع السطر',
|
||||
clearhtml: 'مسح كود HTML',
|
||||
pagebreak: 'إدراج فاصل صفحات',
|
||||
quickformat: 'تنسيق سريع',
|
||||
insertfile: 'إدراج ملف',
|
||||
template: 'إدراج قالب',
|
||||
anchor: 'رابط',
|
||||
yes: 'موافق',
|
||||
no: 'إلغاء',
|
||||
close: 'إغلاق',
|
||||
editImage: 'خصائص الصورة',
|
||||
deleteImage: 'حذفالصورة',
|
||||
editFlash: 'خصائص الفلاش',
|
||||
deleteFlash: 'حذف الفلاش',
|
||||
editMedia: 'خصائص الوسائط',
|
||||
deleteMedia: 'حذف الوسائط',
|
||||
editLink: 'خصائص الرابط',
|
||||
deleteLink: 'إزالة الرابط',
|
||||
editAnchor: 'Anchor properties',
|
||||
deleteAnchor: 'Delete Anchor',
|
||||
tableprop: 'خصائص الجدول',
|
||||
tablecellprop: 'خصائص الخلية',
|
||||
tableinsert: 'إدراج جدول',
|
||||
tabledelete: 'حذف جدول',
|
||||
tablecolinsertleft: 'إدراج عمود لليسار',
|
||||
tablecolinsertright: 'إدراج عمود لليسار',
|
||||
tablerowinsertabove: 'إدراج صف للأعلى',
|
||||
tablerowinsertbelow: 'إدراج صف للأسفل',
|
||||
tablerowmerge: 'دمج للأسفل',
|
||||
tablecolmerge: 'دمج لليمين',
|
||||
tablerowsplit: 'تقسم الصف',
|
||||
tablecolsplit: 'تقسيم العمود',
|
||||
tablecoldelete: 'حذف العمود',
|
||||
tablerowdelete: 'حذف الصف',
|
||||
noColor: 'إفتراضي',
|
||||
pleaseSelectFile: 'Please select file.',
|
||||
invalidImg: "الرجاء إدخال رابط صحيح.\nالملفات المسموح بها: jpg,gif,bmp,png",
|
||||
invalidMedia: "الرجاء إدخال رابط صحيح.\nالملفات المسموح بها: swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb",
|
||||
invalidWidth: "العرض يجب أن يكون رقم.",
|
||||
invalidHeight: "الإرتفاع يجب أن يكون رقم.",
|
||||
invalidBorder: "عرض الحد يجب أن يكون رقم.",
|
||||
invalidUrl: "الرجاء إدخال رابط حيح.",
|
||||
invalidRows: 'صفوف غير صحيح.',
|
||||
invalidCols: 'أعمدة غير صحيحة.',
|
||||
invalidPadding: 'The padding must be number.',
|
||||
invalidSpacing: 'The spacing must be number.',
|
||||
invalidJson: 'Invalid JSON string.',
|
||||
uploadSuccess: 'تم رفع الملف بنجاح.',
|
||||
cutError: 'حاليا غير مدعومة من المتصفح, إستخدم إختصار لوحة المفاتيح (Ctrl+X).',
|
||||
copyError: 'حاليا غير مدعومة من المتصفح, إستخدم إختصار لوحة المفاتيح (Ctrl+C).',
|
||||
pasteError: 'حاليا غير مدعومة من المتصفح, إستخدم إختصار لوحة المفاتيح (Ctrl+V).',
|
||||
ajaxLoading: 'Loading ...',
|
||||
uploadLoading: 'Uploading ...',
|
||||
uploadError: 'Upload Error',
|
||||
'plainpaste.comment': 'إستخدم إختصار لوحة المفاتيح (Ctrl+V) للصق داخل النافذة.',
|
||||
'wordpaste.comment': 'إستخدم إختصار لوحة المفاتيح (Ctrl+V) للصق داخل النافذة.',
|
||||
'code.pleaseInput': 'Please input code.',
|
||||
'link.url': 'الرابط',
|
||||
'link.linkType': 'الهدف',
|
||||
'link.newWindow': 'نافذة جديدة',
|
||||
'link.selfWindow': 'نفس النافذة',
|
||||
'flash.url': 'الرابط',
|
||||
'flash.width': 'العرض',
|
||||
'flash.height': 'الإرتفاع',
|
||||
'flash.upload': 'رفع',
|
||||
'flash.viewServer': 'أستعراض',
|
||||
'media.url': 'الرابط',
|
||||
'media.width': 'العرض',
|
||||
'media.height': 'الإرتفاع',
|
||||
'media.autostart': 'تشغيل تلقائي',
|
||||
'media.upload': 'رفع',
|
||||
'media.viewServer': 'أستعراض',
|
||||
'image.remoteImage': 'إدراج الرابط',
|
||||
'image.localImage': 'رفع',
|
||||
'image.remoteUrl': 'الرابط',
|
||||
'image.localUrl': 'الملف',
|
||||
'image.size': 'الحجم',
|
||||
'image.width': 'العرض',
|
||||
'image.height': 'الإرتفاع',
|
||||
'image.resetSize': 'إستعادة الأبعاد',
|
||||
'image.align': 'محاذاة',
|
||||
'image.defaultAlign': 'الإفتراضي',
|
||||
'image.leftAlign': 'اليسار',
|
||||
'image.rightAlign': 'اليمين',
|
||||
'image.imgTitle': 'العنوان',
|
||||
'image.upload': 'أستعراض',
|
||||
'image.viewServer': 'أستعراض',
|
||||
'multiimage.uploadDesc': 'Allows users to upload <%=uploadLimit%> images, single image size not exceeding <%=sizeLimit%>',
|
||||
'multiimage.startUpload': 'Start upload',
|
||||
'multiimage.clearAll': 'Clear all',
|
||||
'multiimage.insertAll': 'Insert all',
|
||||
'multiimage.queueLimitExceeded': 'Queue limit exceeded.',
|
||||
'multiimage.fileExceedsSizeLimit': 'File exceeds size limit.',
|
||||
'multiimage.zeroByteFile': 'Zero byte file.',
|
||||
'multiimage.invalidFiletype': 'Invalid file type.',
|
||||
'multiimage.unknownError': 'Unknown upload error.',
|
||||
'multiimage.pending': 'Pending ...',
|
||||
'multiimage.uploadError': 'Upload error',
|
||||
'filemanager.emptyFolder': 'فارغ',
|
||||
'filemanager.moveup': 'المجلد الأب',
|
||||
'filemanager.viewType': 'العرض: ',
|
||||
'filemanager.viewImage': 'مصغرات',
|
||||
'filemanager.listImage': 'قائمة',
|
||||
'filemanager.orderType': 'الترتيب: ',
|
||||
'filemanager.fileName': 'بالإسم',
|
||||
'filemanager.fileSize': 'بالحجم',
|
||||
'filemanager.fileType': 'بالنوع',
|
||||
'insertfile.url': 'الرابط',
|
||||
'insertfile.title': 'العنوان',
|
||||
'insertfile.upload': 'رفع',
|
||||
'insertfile.viewServer': 'أستعراض',
|
||||
'table.cells': 'خلايا',
|
||||
'table.rows': 'صفوف',
|
||||
'table.cols': 'أعمدة',
|
||||
'table.size': 'الأبعاد',
|
||||
'table.width': 'العرض',
|
||||
'table.height': 'الإرتفاع',
|
||||
'table.percent': '%',
|
||||
'table.px': 'px',
|
||||
'table.space': 'الخارج',
|
||||
'table.padding': 'الداخل',
|
||||
'table.spacing': 'الفراغات',
|
||||
'table.align': 'محاذاه',
|
||||
'table.textAlign': 'افقى',
|
||||
'table.verticalAlign': 'رأسي',
|
||||
'table.alignDefault': 'إفتراضي',
|
||||
'table.alignLeft': 'يسار',
|
||||
'table.alignCenter': 'وسط',
|
||||
'table.alignRight': 'يمين',
|
||||
'table.alignTop': 'أعلى',
|
||||
'table.alignMiddle': 'منتصف',
|
||||
'table.alignBottom': 'أسفل',
|
||||
'table.alignBaseline': 'Baseline',
|
||||
'table.border': 'الحدود',
|
||||
'table.borderWidth': 'العرض',
|
||||
'table.borderColor': 'اللون',
|
||||
'table.backgroundColor': 'الخلفية',
|
||||
'map.address': 'العنوان: ',
|
||||
'map.search': 'بحث',
|
||||
'baidumap.address': 'العنوان: ',
|
||||
'baidumap.search': 'بحث',
|
||||
'baidumap.insertDynamicMap': 'Dynamic Map',
|
||||
'anchor.name': 'إسم الرابط',
|
||||
'formatblock.formatBlock': {
|
||||
h1: 'عنوان 1',
|
||||
h2: 'عنوان 2',
|
||||
h3: 'عنوان 3',
|
||||
h4: 'عنوان 4',
|
||||
p: 'عادي'
|
||||
},
|
||||
'fontname.fontName': {
|
||||
'Arial': 'Arial',
|
||||
'Arial Black': 'Arial Black',
|
||||
'Comic Sans MS': 'Comic Sans MS',
|
||||
'Courier New': 'Courier New',
|
||||
'Garamond': 'Garamond',
|
||||
'Georgia': 'Georgia',
|
||||
'Tahoma': 'Tahoma',
|
||||
'Times New Roman': 'Times New Roman',
|
||||
'Trebuchet MS': 'Trebuchet MS',
|
||||
'Verdana': 'Verdana'
|
||||
},
|
||||
'lineheight.lineHeight': [
|
||||
{'1': 'إرتفاع السطر 1'},
|
||||
{'1.5': 'إرتفاع السطر 1.5'},
|
||||
{'2': 'إرتفاع السطر 2'},
|
||||
{'2.5': 'إرتفاع السطر 2.5'},
|
||||
{'3': 'إرتفاع السطر 3'}
|
||||
],
|
||||
'template.selectTemplate': 'قالب',
|
||||
'template.replaceContent': 'إستبدال المحتوى الحالي',
|
||||
'template.fileList': {
|
||||
'1.html': 'صورة ونص',
|
||||
'2.html': 'جدول',
|
||||
'3.html': 'قائمة'
|
||||
}
|
||||
}, 'ar');
|
||||
|
||||
KindEditor.each(KindEditor.options.items, function (i, name) {
|
||||
if (name == 'baidumap') {
|
||||
KindEditor.options.items[i] = 'map';
|
||||
}
|
||||
});
|
||||
KindEditor.options.langType = 'ar';
|
241
public/static/lib/kindeditor/lang/en.js
Normal file
@ -0,0 +1,241 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.lang({
|
||||
source: 'Source',
|
||||
preview: 'Preview',
|
||||
undo: 'Undo(Ctrl+Z)',
|
||||
redo: 'Redo(Ctrl+Y)',
|
||||
cut: 'Cut(Ctrl+X)',
|
||||
copy: 'Copy(Ctrl+C)',
|
||||
paste: 'Paste(Ctrl+V)',
|
||||
plainpaste: 'Paste as plain text',
|
||||
wordpaste: 'Paste from Word',
|
||||
selectall: 'Select all',
|
||||
justifyleft: 'Align left',
|
||||
justifycenter: 'Align center',
|
||||
justifyright: 'Align right',
|
||||
justifyfull: 'Align full',
|
||||
insertorderedlist: 'Ordered list',
|
||||
insertunorderedlist: 'Unordered list',
|
||||
indent: 'Increase indent',
|
||||
outdent: 'Decrease indent',
|
||||
subscript: 'Subscript',
|
||||
superscript: 'Superscript',
|
||||
formatblock: 'Paragraph format',
|
||||
fontname: 'Font family',
|
||||
fontsize: 'Font size',
|
||||
forecolor: 'Text color',
|
||||
hilitecolor: 'Highlight color',
|
||||
bold: 'Bold(Ctrl+B)',
|
||||
italic: 'Italic(Ctrl+I)',
|
||||
underline: 'Underline(Ctrl+U)',
|
||||
strikethrough: 'Strikethrough',
|
||||
removeformat: 'Remove format',
|
||||
image: 'Image',
|
||||
multiimage: 'Multi image',
|
||||
flash: 'Flash',
|
||||
media: 'Embeded media',
|
||||
table: 'Table',
|
||||
tablecell: 'Cell',
|
||||
hr: 'Insert horizontal line',
|
||||
emoticons: 'Insert emoticon',
|
||||
link: 'Link',
|
||||
unlink: 'Unlink',
|
||||
fullscreen: 'Toggle fullscreen mode',
|
||||
about: 'About',
|
||||
print: 'Print',
|
||||
filemanager: 'File Manager',
|
||||
code: 'Insert code',
|
||||
map: 'Google Maps',
|
||||
baidumap: 'Baidu Maps',
|
||||
lineheight: 'Line height',
|
||||
clearhtml: 'Clear HTML code',
|
||||
pagebreak: 'Insert Page Break',
|
||||
quickformat: 'Quick Format',
|
||||
insertfile: 'Insert file',
|
||||
template: 'Insert Template',
|
||||
anchor: 'Anchor',
|
||||
yes: 'OK',
|
||||
no: 'Cancel',
|
||||
close: 'Close',
|
||||
editImage: 'Image properties',
|
||||
deleteImage: 'Delete image',
|
||||
editFlash: 'Flash properties',
|
||||
deleteFlash: 'Delete flash',
|
||||
editMedia: 'Media properties',
|
||||
deleteMedia: 'Delete media',
|
||||
editLink: 'Link properties',
|
||||
deleteLink: 'Unlink',
|
||||
editAnchor: 'Anchor properties',
|
||||
deleteAnchor: 'Delete Anchor',
|
||||
tableprop: 'Table properties',
|
||||
tablecellprop: 'Cell properties',
|
||||
tableinsert: 'Insert table',
|
||||
tabledelete: 'Delete table',
|
||||
tablecolinsertleft: 'Insert column left',
|
||||
tablecolinsertright: 'Insert column right',
|
||||
tablerowinsertabove: 'Insert row above',
|
||||
tablerowinsertbelow: 'Insert row below',
|
||||
tablerowmerge: 'Merge down',
|
||||
tablecolmerge: 'Merge right',
|
||||
tablerowsplit: 'Split row',
|
||||
tablecolsplit: 'Split column',
|
||||
tablecoldelete: 'Delete column',
|
||||
tablerowdelete: 'Delete row',
|
||||
noColor: 'Default',
|
||||
pleaseSelectFile: 'Please select file.',
|
||||
invalidImg: "Please type valid URL.\nAllowed file extension: jpg,gif,bmp,png",
|
||||
invalidMedia: "Please type valid URL.\nAllowed file extension: swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb",
|
||||
invalidWidth: "The width must be number.",
|
||||
invalidHeight: "The height must be number.",
|
||||
invalidBorder: "The border must be number.",
|
||||
invalidUrl: "Please type valid URL.",
|
||||
invalidRows: 'Invalid rows.',
|
||||
invalidCols: 'Invalid columns.',
|
||||
invalidPadding: 'The padding must be number.',
|
||||
invalidSpacing: 'The spacing must be number.',
|
||||
invalidJson: 'Invalid JSON string.',
|
||||
uploadSuccess: 'Upload success.',
|
||||
cutError: 'Currently not supported by your browser, use keyboard shortcut(Ctrl+X) instead.',
|
||||
copyError: 'Currently not supported by your browser, use keyboard shortcut(Ctrl+C) instead.',
|
||||
pasteError: 'Currently not supported by your browser, use keyboard shortcut(Ctrl+V) instead.',
|
||||
ajaxLoading: 'Loading ...',
|
||||
uploadLoading: 'Uploading ...',
|
||||
uploadError: 'Upload Error',
|
||||
'plainpaste.comment': 'Use keyboard shortcut(Ctrl+V) to paste the text into the window.',
|
||||
'wordpaste.comment': 'Use keyboard shortcut(Ctrl+V) to paste the text into the window.',
|
||||
'code.pleaseInput': 'Please input code.',
|
||||
'link.url': 'URL',
|
||||
'link.linkType': 'Target',
|
||||
'link.newWindow': 'New window',
|
||||
'link.selfWindow': 'Same window',
|
||||
'flash.url': 'URL',
|
||||
'flash.width': 'Width',
|
||||
'flash.height': 'Height',
|
||||
'flash.upload': 'Upload',
|
||||
'flash.viewServer': 'Browse',
|
||||
'media.url': 'URL',
|
||||
'media.width': 'Width',
|
||||
'media.height': 'Height',
|
||||
'media.autostart': 'Auto start',
|
||||
'media.upload': 'Upload',
|
||||
'media.viewServer': 'Browse',
|
||||
'image.remoteImage': 'Insert URL',
|
||||
'image.localImage': 'Upload',
|
||||
'image.remoteUrl': 'URL',
|
||||
'image.localUrl': 'File',
|
||||
'image.size': 'Size',
|
||||
'image.width': 'Width',
|
||||
'image.height': 'Height',
|
||||
'image.resetSize': 'Reset dimensions',
|
||||
'image.align': 'Align',
|
||||
'image.defaultAlign': 'Default',
|
||||
'image.leftAlign': 'Left',
|
||||
'image.rightAlign': 'Right',
|
||||
'image.imgTitle': 'Title',
|
||||
'image.upload': 'Browse',
|
||||
'image.viewServer': 'Browse',
|
||||
'multiimage.uploadDesc': 'Allows users to upload <%=uploadLimit%> images, single image size not exceeding <%=sizeLimit%>',
|
||||
'multiimage.startUpload': 'Start upload',
|
||||
'multiimage.clearAll': 'Clear all',
|
||||
'multiimage.insertAll': 'Insert all',
|
||||
'multiimage.queueLimitExceeded': 'Queue limit exceeded.',
|
||||
'multiimage.fileExceedsSizeLimit': 'File exceeds size limit.',
|
||||
'multiimage.zeroByteFile': 'Zero byte file.',
|
||||
'multiimage.invalidFiletype': 'Invalid file type.',
|
||||
'multiimage.unknownError': 'Unknown upload error.',
|
||||
'multiimage.pending': 'Pending ...',
|
||||
'multiimage.uploadError': 'Upload error',
|
||||
'filemanager.emptyFolder': 'Blank',
|
||||
'filemanager.moveup': 'Parent folder',
|
||||
'filemanager.viewType': 'Display: ',
|
||||
'filemanager.viewImage': 'Thumbnails',
|
||||
'filemanager.listImage': 'List',
|
||||
'filemanager.orderType': 'Sorting: ',
|
||||
'filemanager.fileName': 'By name',
|
||||
'filemanager.fileSize': 'By size',
|
||||
'filemanager.fileType': 'By type',
|
||||
'insertfile.url': 'URL',
|
||||
'insertfile.title': 'Title',
|
||||
'insertfile.upload': 'Upload',
|
||||
'insertfile.viewServer': 'Browse',
|
||||
'table.cells': 'Cells',
|
||||
'table.rows': 'Rows',
|
||||
'table.cols': 'Columns',
|
||||
'table.size': 'Dimensions',
|
||||
'table.width': 'Width',
|
||||
'table.height': 'Height',
|
||||
'table.percent': '%',
|
||||
'table.px': 'px',
|
||||
'table.space': 'Space',
|
||||
'table.padding': 'Padding',
|
||||
'table.spacing': 'Spacing',
|
||||
'table.align': 'Align',
|
||||
'table.textAlign': 'Horizontal',
|
||||
'table.verticalAlign': 'Vertical',
|
||||
'table.alignDefault': 'Default',
|
||||
'table.alignLeft': 'Left',
|
||||
'table.alignCenter': 'Center',
|
||||
'table.alignRight': 'Right',
|
||||
'table.alignTop': 'Top',
|
||||
'table.alignMiddle': 'Middle',
|
||||
'table.alignBottom': 'Bottom',
|
||||
'table.alignBaseline': 'Baseline',
|
||||
'table.border': 'Border',
|
||||
'table.borderWidth': 'Width',
|
||||
'table.borderColor': 'Color',
|
||||
'table.backgroundColor': 'Background',
|
||||
'map.address': 'Address: ',
|
||||
'map.search': 'Search',
|
||||
'baidumap.address': 'Address: ',
|
||||
'baidumap.search': 'Search',
|
||||
'baidumap.insertDynamicMap': 'Dynamic Map',
|
||||
'anchor.name': 'Anchor name',
|
||||
'formatblock.formatBlock': {
|
||||
h1: 'Heading 1',
|
||||
h2: 'Heading 2',
|
||||
h3: 'Heading 3',
|
||||
h4: 'Heading 4',
|
||||
p: 'Normal'
|
||||
},
|
||||
'fontname.fontName': {
|
||||
'Arial': 'Arial',
|
||||
'Arial Black': 'Arial Black',
|
||||
'Comic Sans MS': 'Comic Sans MS',
|
||||
'Courier New': 'Courier New',
|
||||
'Garamond': 'Garamond',
|
||||
'Georgia': 'Georgia',
|
||||
'Tahoma': 'Tahoma',
|
||||
'Times New Roman': 'Times New Roman',
|
||||
'Trebuchet MS': 'Trebuchet MS',
|
||||
'Verdana': 'Verdana'
|
||||
},
|
||||
'lineheight.lineHeight': [
|
||||
{'1': 'Line height 1'},
|
||||
{'1.5': 'Line height 1.5'},
|
||||
{'2': 'Line height 2'},
|
||||
{'2.5': 'Line height 2.5'},
|
||||
{'3': 'Line height 3'}
|
||||
],
|
||||
'template.selectTemplate': 'Template',
|
||||
'template.replaceContent': 'Replace current content',
|
||||
'template.fileList': {
|
||||
'1.html': 'Image and Text',
|
||||
'2.html': 'Table',
|
||||
'3.html': 'List'
|
||||
}
|
||||
}, 'en');
|
||||
|
||||
KindEditor.each(KindEditor.options.items, function (i, name) {
|
||||
if (name == 'baidumap') {
|
||||
KindEditor.options.items[i] = 'map';
|
||||
}
|
||||
});
|
||||
KindEditor.options.langType = 'en';
|
246
public/static/lib/kindeditor/lang/ko.js
Normal file
@ -0,0 +1,246 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Composite <ukjinplant@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.lang({
|
||||
source: '소스',
|
||||
preview: '미리보기',
|
||||
undo: '작업취소(Ctrl+Z)',
|
||||
redo: '작업재개(Ctrl+Y)',
|
||||
cut: '잘라내기(Ctrl+X)',
|
||||
copy: '복사(Ctrl+C)',
|
||||
paste: '붙여넣기(Ctrl+V)',
|
||||
plainpaste: '일반 텍스트로 붙여넣기',
|
||||
wordpaste: '워드 문서로 붙여넣기',
|
||||
selectall: '전체 선택',
|
||||
justifyleft: '왼쪽 정렬',
|
||||
justifycenter: '가운데 정렬',
|
||||
justifyright: '오른쪽 정렬',
|
||||
justifyfull: '양쪽 정렬',
|
||||
insertorderedlist: '순서 목록',
|
||||
insertunorderedlist: '비순서 목록',
|
||||
indent: '들여쓰기',
|
||||
outdent: '내어쓰기',
|
||||
subscript: '아랫첨자',
|
||||
superscript: '윗첨자',
|
||||
formatblock: '문단 형식',
|
||||
fontname: '글꼴',
|
||||
fontsize: '글자 크기',
|
||||
forecolor: '글자색',
|
||||
hilitecolor: '강조색',
|
||||
bold: '굵게(Ctrl+B)',
|
||||
italic: '이텔릭(Ctrl+I)',
|
||||
underline: '빝줄(Ctrl+U)',
|
||||
strikethrough: '취소선',
|
||||
removeformat: '형식 제거',
|
||||
image: '이미지 추가',
|
||||
multiimage: '여러 이미지 추가',
|
||||
flash: '플래시 추가',
|
||||
media: '미디어 추가',
|
||||
table: '표',
|
||||
tablecell: '열',
|
||||
hr: '구분선 추가',
|
||||
emoticons: '이모티콘 추가',
|
||||
link: '링크',
|
||||
unlink: '링크 제거',
|
||||
fullscreen: '전체 화면 모드',
|
||||
about: '이 에디터는...',
|
||||
print: '인쇄',
|
||||
filemanager: '파일 관리자',
|
||||
code: '코드 추가',
|
||||
map: '구글 맵 추가',
|
||||
baidumap: '바이두 맵 추가',
|
||||
lineheight: '행 간격',
|
||||
clearhtml: 'HTML 코드 정리',
|
||||
pagebreak: '페이지 구분 추가',
|
||||
quickformat: '빠른 형식',
|
||||
insertfile: '파일 추가',
|
||||
template: '템플릿 추가',
|
||||
anchor: '책갈피',
|
||||
yes: '확인',
|
||||
no: '취소',
|
||||
close: '닫기',
|
||||
editImage: '이미지 속성',
|
||||
deleteImage: '이미지 삭제',
|
||||
editFlash: '플래시 속성',
|
||||
deleteFlash: '플래시 삭제',
|
||||
editMedia: '미디어 속성',
|
||||
deleteMedia: '미디어 삭제',
|
||||
editLink: '링크 속성',
|
||||
deleteLink: '링크 삭제',
|
||||
editAnchor: 'Anchor properties',
|
||||
deleteAnchor: 'Delete Anchor',
|
||||
tableprop: '표 속성',
|
||||
tablecellprop: '열 속성',
|
||||
tableinsert: '표 추가',
|
||||
tabledelete: '표 삭제',
|
||||
tablecolinsertleft: '왼쪽으로 열 추가',
|
||||
tablecolinsertright: '오른쪽으로 열 추가',
|
||||
tablerowinsertabove: '위쪽으로 열 추가',
|
||||
tablerowinsertbelow: '아래쪽으로 열 추가',
|
||||
tablerowmerge: '아래로 병합',
|
||||
tablecolmerge: '오른쪽으로 병합',
|
||||
tablerowsplit: '행 나누기',
|
||||
tablecolsplit: '열 나누기',
|
||||
tablecoldelete: '열 삭제',
|
||||
tablerowdelete: '행 삭제',
|
||||
noColor: '기본색',
|
||||
pleaseSelectFile: '파일 선택',
|
||||
invalidImg: "올바른 주소를 입력하세요.\njpg,gif,bmp,png 형식이 가능합니다.",
|
||||
invalidMedia: "올바른 주소를 입력하세요.\nswf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb 형식이 가능합니다.",
|
||||
invalidWidth: "넓이 값은 숫자여야 합니다.",
|
||||
invalidHeight: "높이 값은 숫자여야 합니다.",
|
||||
invalidBorder: "굵기 값은 숫자여야 합니다.",
|
||||
invalidUrl: "올바른 주소를 입력하세요.",
|
||||
invalidRows: '올바른 행이 아닙니다.',
|
||||
invalidCols: '올바른 열이 아닙니다.',
|
||||
invalidPadding: '안쪽 여백 값은 숫자여야 합니다.',
|
||||
invalidSpacing: '간격 길이 값은 숫자여야 합니다.',
|
||||
invalidJson: '올바른 JSON 형식이 아닙니다.',
|
||||
uploadSuccess: '업로드가 완료되었습니다.',
|
||||
cutError: '브라우저가 잘라내기 기능을 지원하지 않습니다, 단축키로 대신 사용하세요. (Ctrl+X)',
|
||||
copyError: '브라우저가 복사 기능을 지원하지 않습니다, 단축키로 대신 사용하세요. (Ctrl+X)',
|
||||
pasteError: '브라우저가 붙여넣기 기능을 지원하지 않습니다, 단축키로 대신 사용하세요. (Ctrl+X)',
|
||||
ajaxLoading: '불러오는 중 ...',
|
||||
uploadLoading: '업로드 중 ...',
|
||||
uploadError: '업로드 오류',
|
||||
'plainpaste.comment': '단축키(Ctrl+V)를 통하여 여기에 텍스트를 붙여넣으세요.',
|
||||
'wordpaste.comment': '단축키(Ctrl+V)를 통하여 여기에 워드 텍스트를 붙여넣으세요.',
|
||||
'code.pleaseInput': 'Please input code.',
|
||||
'link.url': '주소',
|
||||
'link.linkType': '창',
|
||||
'link.newWindow': '새 창',
|
||||
'link.selfWindow': '현재 창',
|
||||
'flash.url': '주소',
|
||||
'flash.width': '넓이',
|
||||
'flash.height': '높이',
|
||||
'flash.upload': '업로드',
|
||||
'flash.viewServer': '찾아보기',
|
||||
'media.url': '주소',
|
||||
'media.width': '넓이',
|
||||
'media.height': '높이',
|
||||
'media.autostart': '자동 시작',
|
||||
'media.upload': '업로드',
|
||||
'media.viewServer': '찾아보기',
|
||||
'image.remoteImage': '외부 이미지',
|
||||
'image.localImage': '내부 이미지',
|
||||
'image.remoteUrl': '주소',
|
||||
'image.localUrl': '파일',
|
||||
'image.size': '크기',
|
||||
'image.width': '넓이',
|
||||
'image.height': '높이',
|
||||
'image.resetSize': '기본 크기로',
|
||||
'image.align': '정렬',
|
||||
'image.defaultAlign': '기본',
|
||||
'image.leftAlign': '왼쪽',
|
||||
'image.rightAlign': '오른쪽',
|
||||
'image.imgTitle': '제목',
|
||||
'image.upload': '찾아보기',
|
||||
'image.viewServer': '찾아보기',
|
||||
'multiimage.uploadDesc': '최대 이미지 개수: <%=uploadLimit%>개, 개당 이미지 크기: <%=sizeLimit%>',
|
||||
'multiimage.startUpload': '업로드 시작',
|
||||
'multiimage.clearAll': '모두 삭제',
|
||||
'multiimage.insertAll': '모두 삽입',
|
||||
'multiimage.queueLimitExceeded': '업로드 개수가 초과되었습니다.',
|
||||
'multiimage.fileExceedsSizeLimit': '업로드 크기가 초과되었습니다.',
|
||||
'multiimage.zeroByteFile': '파일 크기가 없습니다.',
|
||||
'multiimage.invalidFiletype': '올바른 이미지가 아닙니다.',
|
||||
'multiimage.unknownError': '알 수 없는 업로드 오류가 발생하였습니다.',
|
||||
'multiimage.pending': '처리 중 ...',
|
||||
'multiimage.uploadError': '업로드 오류',
|
||||
'filemanager.emptyFolder': '빈 폴더',
|
||||
'filemanager.moveup': '위로',
|
||||
'filemanager.viewType': '보기 방식: ',
|
||||
'filemanager.viewImage': '미리 보기',
|
||||
'filemanager.listImage': '목록',
|
||||
'filemanager.orderType': '정렬 방식: ',
|
||||
'filemanager.fileName': '이름별',
|
||||
'filemanager.fileSize': '크기별',
|
||||
'filemanager.fileType': '종류별',
|
||||
'insertfile.url': '주소',
|
||||
'insertfile.title': '제목',
|
||||
'insertfile.upload': '업로드',
|
||||
'insertfile.viewServer': '찾아보기',
|
||||
'table.cells': '열',
|
||||
'table.rows': '행',
|
||||
'table.cols': '열',
|
||||
'table.size': '표 크기',
|
||||
'table.width': '넓이',
|
||||
'table.height': '높이',
|
||||
'table.percent': '%',
|
||||
'table.px': 'px',
|
||||
'table.space': '간격',
|
||||
'table.padding': '안쪽여백',
|
||||
'table.spacing': '간격',
|
||||
'table.align': '정렬',
|
||||
'table.textAlign': '수직',
|
||||
'table.verticalAlign': '수평',
|
||||
'table.alignDefault': '기본',
|
||||
'table.alignLeft': '왼쪽',
|
||||
'table.alignCenter': '가운데',
|
||||
'table.alignRight': '오른쪽',
|
||||
'table.alignTop': '위쪽',
|
||||
'table.alignMiddle': '중간',
|
||||
'table.alignBottom': '아래쪽',
|
||||
'table.alignBaseline': '글자기준',
|
||||
'table.border': '테두리',
|
||||
'table.borderWidth': '크기',
|
||||
'table.borderColor': '색상',
|
||||
'table.backgroundColor': '배경',
|
||||
'map.address': '주소: ',
|
||||
'map.search': '검색',
|
||||
'baidumap.address': '주소: ',
|
||||
'baidumap.search': '검색',
|
||||
'baidumap.insertDynamicMap': '동적 지도',
|
||||
'anchor.name': '책갈피명',
|
||||
'formatblock.formatBlock': {
|
||||
h1: '제목 1',
|
||||
h2: '제목 2',
|
||||
h3: '제목 3',
|
||||
h4: '제목 4',
|
||||
p: '본문'
|
||||
},
|
||||
'fontname.fontName': {
|
||||
'Gulim': '굴림',
|
||||
'Dotum': '돋움',
|
||||
'Batang': '바탕',
|
||||
'Gungsuh': '궁서',
|
||||
'Malgun Gothic': '맑은 고딕',
|
||||
'Arial': 'Arial',
|
||||
'Arial Black': 'Arial Black',
|
||||
'Comic Sans MS': 'Comic Sans MS',
|
||||
'Courier New': 'Courier New',
|
||||
'Garamond': 'Garamond',
|
||||
'Georgia': 'Georgia',
|
||||
'Tahoma': 'Tahoma',
|
||||
'Times New Roman': 'Times New Roman',
|
||||
'Trebuchet MS': 'Trebuchet MS',
|
||||
'Verdana': 'Verdana'
|
||||
},
|
||||
'lineheight.lineHeight': [
|
||||
{'1': '행간 1'},
|
||||
{'1.5': '행간 1.5'},
|
||||
{'2': '행간 2'},
|
||||
{'2.5': '행간 2.5'},
|
||||
{'3': '행간 3'}
|
||||
],
|
||||
'template.selectTemplate': '템플릿',
|
||||
'template.replaceContent': '내용 바꾸기',
|
||||
'template.fileList': {
|
||||
'1.html': '이미지와 텍스트',
|
||||
'2.html': '표',
|
||||
'3.html': '목록'
|
||||
}
|
||||
}, 'ko');
|
||||
|
||||
KindEditor.each(KindEditor.options.items, function (i, name) {
|
||||
if (name == 'baidumap') {
|
||||
KindEditor.options.items[i] = 'map';
|
||||
}
|
||||
});
|
||||
KindEditor.options.langType = 'ko';
|
242
public/static/lib/kindeditor/lang/ru.js
Normal file
@ -0,0 +1,242 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
* Translated to Russian by Valery Votintsev (http://codersclub.org/)
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.lang({
|
||||
source: 'Source',
|
||||
preview: 'Preview',
|
||||
undo: 'Отмена(Ctrl+Z)',
|
||||
redo: 'Повтор(Ctrl+Y)',
|
||||
cut: 'Вырезать(Ctrl+X)',
|
||||
copy: 'Копировать(Ctrl+C)',
|
||||
paste: 'Вставить(Ctrl+V)',
|
||||
plainpaste: 'Вставить как простой текст',
|
||||
wordpaste: 'Вставить из Word',
|
||||
selectall: 'Выбрать все',
|
||||
justifyleft: 'Выравнивание влево',
|
||||
justifycenter: 'Выравнивание по центру',
|
||||
justifyright: 'Выравнивание вправо',
|
||||
justifyfull: 'Выравнивание по обеим сторонам',
|
||||
insertorderedlist: 'Нумерованый список',
|
||||
insertunorderedlist: 'Ненумерованый список',
|
||||
indent: 'Добавить отступ',
|
||||
outdent: 'Убрать отступ',
|
||||
subscript: 'Надстрочный',
|
||||
superscript: 'Подстрочный',
|
||||
formatblock: 'Формат параграфа',
|
||||
fontname: 'Шрифт',
|
||||
fontsize: 'Размер',
|
||||
forecolor: 'Цвет текста',
|
||||
hilitecolor: 'Цвет фона',
|
||||
bold: 'Жирный(Ctrl+B)',
|
||||
italic: 'Наклонный(Ctrl+I)',
|
||||
underline: 'Подчёркнутый(Ctrl+U)',
|
||||
strikethrough: 'Перечёркнутый',
|
||||
removeformat: 'Удалить формат',
|
||||
image: 'Изображение',
|
||||
multiimage: 'Мульти-загрузка',
|
||||
flash: 'Flash',
|
||||
media: 'Встроенные данные',
|
||||
table: 'Таблица',
|
||||
tablecell: 'Ячейка',
|
||||
hr: 'Горизонтальный разделитель',
|
||||
emoticons: 'Смайл',
|
||||
link: 'Ссылка',
|
||||
unlink: 'Убрать ссылку',
|
||||
fullscreen: 'На весь экран',
|
||||
about: 'О программе',
|
||||
print: 'Печать',
|
||||
filemanager: 'Файлы',
|
||||
code: 'Код',
|
||||
map: 'Карта Google',
|
||||
baidumap: 'Карта Baidu',
|
||||
lineheight: 'Межстрочный интервал',
|
||||
clearhtml: 'Очистить HTML код',
|
||||
pagebreak: 'Разрыв страницы',
|
||||
quickformat: 'Быстрый формат',
|
||||
insertfile: 'Вставить файл',
|
||||
template: 'Вставить шаблон',
|
||||
anchor: 'Якорь',
|
||||
yes: 'OK',
|
||||
no: 'Отмена',
|
||||
close: 'Закрыть',
|
||||
editImage: 'Свойства изображения',
|
||||
deleteImage: 'Удалить изображение',
|
||||
editFlash: 'Свойства Flash',
|
||||
deleteFlash: 'Удалить Flash',
|
||||
editMedia: 'Свойства Media',
|
||||
deleteMedia: 'Удалить Media',
|
||||
editLink: 'Свойства ссылки',
|
||||
deleteLink: 'Удалить ссылку',
|
||||
editAnchor: 'Anchor properties',
|
||||
deleteAnchor: 'Delete Anchor',
|
||||
tableprop: 'Свойства таблицы',
|
||||
tablecellprop: 'Свойства ячейки',
|
||||
tableinsert: 'Вставить таблицу',
|
||||
tabledelete: 'Удалить таблицу',
|
||||
tablecolinsertleft: 'Добавить столбец слева',
|
||||
tablecolinsertright: 'Добавить столбец справа',
|
||||
tablerowinsertabove: 'Добавить строку выше',
|
||||
tablerowinsertbelow: 'Добавить строку ниже',
|
||||
tablerowmerge: 'Объединить вниз',
|
||||
tablecolmerge: 'Объединить вправо',
|
||||
tablerowsplit: 'Разделить строку',
|
||||
tablecolsplit: 'Разделить столбец',
|
||||
tablecoldelete: 'Удалить столбец',
|
||||
tablerowdelete: 'Удалить строку',
|
||||
noColor: 'По умолчанию',
|
||||
pleaseSelectFile: 'Выберите файл.',
|
||||
invalidImg: "Укажите корректный URL изображения.\nРазрешённые форматы: jpg,gif,bmp,png",
|
||||
invalidMedia: "Укажите корректный тип медиа-объекта.\nРазрешённые типы: swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb",
|
||||
invalidWidth: "Ширина должна быть числом.",
|
||||
invalidHeight: "Высота должна быть числом.",
|
||||
invalidBorder: "Ширина рамки должна быть числом.",
|
||||
invalidUrl: "Укажите корректный URL.",
|
||||
invalidRows: 'Неверные строки.',
|
||||
invalidCols: 'Неверные столбцы.',
|
||||
invalidPadding: 'padding должен быть числом.',
|
||||
invalidSpacing: 'spacing должен быть числом.',
|
||||
invalidJson: 'Неверная JSON строка.',
|
||||
uploadSuccess: 'Загрузка завершена.',
|
||||
cutError: 'Данная опция не поддерживается вашим браузером, воспользуйтесь комбинацией клавиш (Ctrl+X).',
|
||||
copyError: 'Данная опция не поддерживается вашим браузером, воспользуйтесь комбинацией клавиш (Ctrl+C).',
|
||||
pasteError: 'Данная опция не поддерживается вашим браузером, воспользуйтесь комбинацией клавиш (Ctrl+V).',
|
||||
ajaxLoading: 'Загрузка ...',
|
||||
uploadLoading: 'Загрузка ...',
|
||||
uploadError: 'Сбой загрузки',
|
||||
'plainpaste.comment': 'Для вставки скопированного текста воспользуйтесь комбинацией клавиш (Ctrl+V).',
|
||||
'wordpaste.comment': 'Для вставки скопированного текста воспользуйтесь комбинацией клавиш (Ctrl+V).',
|
||||
'code.pleaseInput': 'Введите код.',
|
||||
'link.url': 'URL',
|
||||
'link.linkType': 'Открывать ссылку',
|
||||
'link.newWindow': 'в новом окне',
|
||||
'link.selfWindow': 'в том же окне',
|
||||
'flash.url': 'URL',
|
||||
'flash.width': 'Ширина',
|
||||
'flash.height': 'Высота',
|
||||
'flash.upload': 'Загрузить',
|
||||
'flash.viewServer': 'Выбрать',
|
||||
'media.url': 'URL',
|
||||
'media.width': 'Ширина',
|
||||
'media.height': 'Высота',
|
||||
'media.autostart': 'Автостарт',
|
||||
'media.upload': 'Загрузить',
|
||||
'media.viewServer': 'Выбрать',
|
||||
'image.remoteImage': 'Вставить URL изображения',
|
||||
'image.localImage': 'Загрузить',
|
||||
'image.remoteUrl': 'URL',
|
||||
'image.localUrl': 'Файл',
|
||||
'image.size': 'Размер',
|
||||
'image.width': 'Ширина',
|
||||
'image.height': 'Высота',
|
||||
'image.resetSize': 'Сбросить размеры',
|
||||
'image.align': 'Выравнивание',
|
||||
'image.defaultAlign': 'По умолчанию',
|
||||
'image.leftAlign': 'Влево',
|
||||
'image.rightAlign': 'Вправо',
|
||||
'image.imgTitle': 'Название',
|
||||
'image.upload': 'Загрузить',
|
||||
'image.viewServer': 'Выбрать',
|
||||
'multiimage.uploadDesc': 'Максимальное кол-во изображений: <%=uploadLimit%>, Максимальный размер одного изображения: <%=sizeLimit%>',
|
||||
'multiimage.startUpload': 'Начать загрузку',
|
||||
'multiimage.clearAll': 'Очистить все',
|
||||
'multiimage.insertAll': 'Вставить все',
|
||||
'multiimage.queueLimitExceeded': 'Превышен лимит очереди.',
|
||||
'multiimage.fileExceedsSizeLimit': 'Превышен максимальный размер файла.',
|
||||
'multiimage.zeroByteFile': 'Файл нулевой длины.',
|
||||
'multiimage.invalidFiletype': 'Недопустимый тип файла.',
|
||||
'multiimage.unknownError': 'Непредвиденная ошибка загрузки.',
|
||||
'multiimage.pending': 'Ожидает ...',
|
||||
'multiimage.uploadError': 'Ошибка загрузки',
|
||||
'filemanager.emptyFolder': 'Папка пуста',
|
||||
'filemanager.moveup': 'Наверх',
|
||||
'filemanager.viewType': 'Тип показа: ',
|
||||
'filemanager.viewImage': 'Превьюшки',
|
||||
'filemanager.listImage': 'Список',
|
||||
'filemanager.orderType': 'Сортировка: ',
|
||||
'filemanager.fileName': 'По имени',
|
||||
'filemanager.fileSize': 'По размеру',
|
||||
'filemanager.fileType': 'По типу',
|
||||
'insertfile.url': 'URL',
|
||||
'insertfile.title': 'Название',
|
||||
'insertfile.upload': 'Загрузить',
|
||||
'insertfile.viewServer': 'Выбрать',
|
||||
'table.cells': 'Ячейки',
|
||||
'table.rows': 'Строки',
|
||||
'table.cols': 'Столбцы',
|
||||
'table.size': 'Размеры',
|
||||
'table.width': 'Ширина',
|
||||
'table.height': 'Высота',
|
||||
'table.percent': '%',
|
||||
'table.px': 'px',
|
||||
'table.space': 'Space',
|
||||
'table.padding': 'Padding',
|
||||
'table.spacing': 'Spacing',
|
||||
'table.align': 'Выравнивание',
|
||||
'table.textAlign': 'По горизонтали',
|
||||
'table.verticalAlign': 'По вертикали',
|
||||
'table.alignDefault': 'По умолчанию',
|
||||
'table.alignLeft': 'Влево',
|
||||
'table.alignCenter': 'По центру',
|
||||
'table.alignRight': 'Вправо',
|
||||
'table.alignTop': 'Вверх',
|
||||
'table.alignMiddle': 'Посередине',
|
||||
'table.alignBottom': 'Вниз',
|
||||
'table.alignBaseline': 'По базовой линии',
|
||||
'table.border': 'Рамка',
|
||||
'table.borderWidth': 'Ширина',
|
||||
'table.borderColor': 'Цвет',
|
||||
'table.backgroundColor': 'Цвет фона',
|
||||
'map.address': 'Адрес: ',
|
||||
'map.search': 'Поиск',
|
||||
'baidumap.address': 'Адрес: ',
|
||||
'baidumap.search': 'Поиск',
|
||||
'baidumap.insertDynamicMap': 'Динамическая карта',
|
||||
'anchor.name': 'Имя якоря',
|
||||
'formatblock.formatBlock': {
|
||||
h1: 'Заголовок 1',
|
||||
h2: 'Заголовок 2',
|
||||
h3: 'Заголовок 3',
|
||||
h4: 'Заголовок 4',
|
||||
p: 'Обычный текст'
|
||||
},
|
||||
'fontname.fontName': {
|
||||
'Arial': 'Arial',
|
||||
'Arial Black': 'Arial Black',
|
||||
'Comic Sans MS': 'Comic Sans MS',
|
||||
'Courier New': 'Courier New',
|
||||
'Garamond': 'Garamond',
|
||||
'Georgia': 'Georgia',
|
||||
'Tahoma': 'Tahoma',
|
||||
'Times New Roman': 'Times New Roman',
|
||||
'Trebuchet MS': 'Trebuchet MS',
|
||||
'Verdana': 'Verdana'
|
||||
},
|
||||
'lineheight.lineHeight': [
|
||||
{'1': '1'},
|
||||
{'1.5': '1.5'},
|
||||
{'2': '2'},
|
||||
{'2.5': '2.5'},
|
||||
{'3': '3'}
|
||||
],
|
||||
'template.selectTemplate': 'Шаблон',
|
||||
'template.replaceContent': 'Заменить текущий шаблон',
|
||||
'template.fileList': {
|
||||
'1.html': 'Текст и изображения',
|
||||
'2.html': 'Таблица',
|
||||
'3.html': 'Список'
|
||||
}
|
||||
}, 'en');
|
||||
|
||||
KindEditor.each(KindEditor.options.items, function (i, name) {
|
||||
if (name == 'baidumap') {
|
||||
KindEditor.options.items[i] = 'map';
|
||||
}
|
||||
});
|
||||
KindEditor.options.langType = 'ru';
|
238
public/static/lib/kindeditor/lang/zh-CN.js
Normal file
@ -0,0 +1,238 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.lang({
|
||||
source: 'HTML代码',
|
||||
preview: '预览',
|
||||
undo: '后退(Ctrl+Z)',
|
||||
redo: '前进(Ctrl+Y)',
|
||||
cut: '剪切(Ctrl+X)',
|
||||
copy: '复制(Ctrl+C)',
|
||||
paste: '粘贴(Ctrl+V)',
|
||||
plainpaste: '粘贴为无格式文本',
|
||||
wordpaste: '从Word粘贴',
|
||||
selectall: '全选(Ctrl+A)',
|
||||
justifyleft: '左对齐',
|
||||
justifycenter: '居中',
|
||||
justifyright: '右对齐',
|
||||
justifyfull: '两端对齐',
|
||||
insertorderedlist: '编号',
|
||||
insertunorderedlist: '项目符号',
|
||||
indent: '增加缩进',
|
||||
outdent: '减少缩进',
|
||||
subscript: '下标',
|
||||
superscript: '上标',
|
||||
formatblock: '段落',
|
||||
fontname: '字体',
|
||||
fontsize: '文字大小',
|
||||
forecolor: '文字颜色',
|
||||
hilitecolor: '文字背景',
|
||||
bold: '粗体(Ctrl+B)',
|
||||
italic: '斜体(Ctrl+I)',
|
||||
underline: '下划线(Ctrl+U)',
|
||||
strikethrough: '删除线',
|
||||
removeformat: '删除格式',
|
||||
image: '图片',
|
||||
multiimage: '批量图片上传',
|
||||
flash: 'Flash',
|
||||
media: '视音频',
|
||||
table: '表格',
|
||||
tablecell: '单元格',
|
||||
hr: '插入横线',
|
||||
emoticons: '插入表情',
|
||||
link: '超级链接',
|
||||
unlink: '取消超级链接',
|
||||
fullscreen: '全屏显示',
|
||||
about: '关于',
|
||||
print: '打印(Ctrl+P)',
|
||||
filemanager: '文件空间',
|
||||
code: '插入程序代码',
|
||||
map: 'Google地图',
|
||||
baidumap: '百度地图',
|
||||
lineheight: '行距',
|
||||
clearhtml: '清理HTML代码',
|
||||
pagebreak: '插入分页符',
|
||||
quickformat: '一键排版',
|
||||
insertfile: '插入文件',
|
||||
template: '插入模板',
|
||||
anchor: '锚点',
|
||||
yes: '确定',
|
||||
no: '取消',
|
||||
close: '关闭',
|
||||
editImage: '图片属性',
|
||||
deleteImage: '删除图片',
|
||||
editFlash: 'Flash属性',
|
||||
deleteFlash: '删除Flash',
|
||||
editMedia: '视音频属性',
|
||||
deleteMedia: '删除视音频',
|
||||
editLink: '超级链接属性',
|
||||
deleteLink: '取消超级链接',
|
||||
editAnchor: '锚点属性',
|
||||
deleteAnchor: '删除锚点',
|
||||
tableprop: '表格属性',
|
||||
tablecellprop: '单元格属性',
|
||||
tableinsert: '插入表格',
|
||||
tabledelete: '删除表格',
|
||||
tablecolinsertleft: '左侧插入列',
|
||||
tablecolinsertright: '右侧插入列',
|
||||
tablerowinsertabove: '上方插入行',
|
||||
tablerowinsertbelow: '下方插入行',
|
||||
tablerowmerge: '向下合并单元格',
|
||||
tablecolmerge: '向右合并单元格',
|
||||
tablerowsplit: '拆分行',
|
||||
tablecolsplit: '拆分列',
|
||||
tablecoldelete: '删除列',
|
||||
tablerowdelete: '删除行',
|
||||
noColor: '无颜色',
|
||||
pleaseSelectFile: '请选择文件。',
|
||||
invalidImg: "请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",
|
||||
invalidMedia: "请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",
|
||||
invalidWidth: "宽度必须为数字。",
|
||||
invalidHeight: "高度必须为数字。",
|
||||
invalidBorder: "边框必须为数字。",
|
||||
invalidUrl: "请输入有效的URL地址。",
|
||||
invalidRows: '行数为必选项,只允许输入大于0的数字。',
|
||||
invalidCols: '列数为必选项,只允许输入大于0的数字。',
|
||||
invalidPadding: '边距必须为数字。',
|
||||
invalidSpacing: '间距必须为数字。',
|
||||
invalidJson: '服务器发生故障。',
|
||||
uploadSuccess: '上传成功。',
|
||||
cutError: '您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。',
|
||||
copyError: '您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。',
|
||||
pasteError: '您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。',
|
||||
ajaxLoading: '加载中,请稍候 ...',
|
||||
uploadLoading: '上传中,请稍候 ...',
|
||||
uploadError: '上传错误',
|
||||
'plainpaste.comment': '请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。',
|
||||
'wordpaste.comment': '请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。',
|
||||
'code.pleaseInput': '请输入程序代码。',
|
||||
'link.url': 'URL',
|
||||
'link.linkType': '打开类型',
|
||||
'link.newWindow': '新窗口',
|
||||
'link.selfWindow': '当前窗口',
|
||||
'flash.url': 'URL',
|
||||
'flash.width': '宽度',
|
||||
'flash.height': '高度',
|
||||
'flash.upload': '上传',
|
||||
'flash.viewServer': '文件空间',
|
||||
'media.url': 'URL',
|
||||
'media.width': '宽度',
|
||||
'media.height': '高度',
|
||||
'media.autostart': '自动播放',
|
||||
'media.upload': '上传',
|
||||
'media.viewServer': '文件空间',
|
||||
'image.remoteImage': '网络图片',
|
||||
'image.localImage': '本地上传',
|
||||
'image.remoteUrl': '图片地址',
|
||||
'image.localUrl': '上传文件',
|
||||
'image.size': '图片大小',
|
||||
'image.width': '宽',
|
||||
'image.height': '高',
|
||||
'image.resetSize': '重置大小',
|
||||
'image.align': '对齐方式',
|
||||
'image.defaultAlign': '默认方式',
|
||||
'image.leftAlign': '左对齐',
|
||||
'image.rightAlign': '右对齐',
|
||||
'image.imgTitle': '图片说明',
|
||||
'image.upload': '浏览...',
|
||||
'image.viewServer': '图片空间',
|
||||
'multiimage.uploadDesc': '允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>',
|
||||
'multiimage.startUpload': '开始上传',
|
||||
'multiimage.clearAll': '全部清空',
|
||||
'multiimage.insertAll': '全部插入',
|
||||
'multiimage.queueLimitExceeded': '文件数量超过限制。',
|
||||
'multiimage.fileExceedsSizeLimit': '文件大小超过限制。',
|
||||
'multiimage.zeroByteFile': '无法上传空文件。',
|
||||
'multiimage.invalidFiletype': '文件类型不正确。',
|
||||
'multiimage.unknownError': '发生异常,无法上传。',
|
||||
'multiimage.pending': '等待上传',
|
||||
'multiimage.uploadError': '上传失败',
|
||||
'filemanager.emptyFolder': '空文件夹',
|
||||
'filemanager.moveup': '移到上一级文件夹',
|
||||
'filemanager.viewType': '显示方式:',
|
||||
'filemanager.viewImage': '缩略图',
|
||||
'filemanager.listImage': '详细信息',
|
||||
'filemanager.orderType': '排序方式:',
|
||||
'filemanager.fileName': '名称',
|
||||
'filemanager.fileSize': '大小',
|
||||
'filemanager.fileType': '类型',
|
||||
'insertfile.url': 'URL',
|
||||
'insertfile.title': '文件说明',
|
||||
'insertfile.upload': '上传',
|
||||
'insertfile.viewServer': '文件空间',
|
||||
'table.cells': '单元格数',
|
||||
'table.rows': '行数',
|
||||
'table.cols': '列数',
|
||||
'table.size': '大小',
|
||||
'table.width': '宽度',
|
||||
'table.height': '高度',
|
||||
'table.percent': '%',
|
||||
'table.px': 'px',
|
||||
'table.space': '边距间距',
|
||||
'table.padding': '边距',
|
||||
'table.spacing': '间距',
|
||||
'table.align': '对齐方式',
|
||||
'table.textAlign': '水平对齐',
|
||||
'table.verticalAlign': '垂直对齐',
|
||||
'table.alignDefault': '默认',
|
||||
'table.alignLeft': '左对齐',
|
||||
'table.alignCenter': '居中',
|
||||
'table.alignRight': '右对齐',
|
||||
'table.alignTop': '顶部',
|
||||
'table.alignMiddle': '中部',
|
||||
'table.alignBottom': '底部',
|
||||
'table.alignBaseline': '基线',
|
||||
'table.border': '边框',
|
||||
'table.borderWidth': '边框',
|
||||
'table.borderColor': '颜色',
|
||||
'table.backgroundColor': '背景颜色',
|
||||
'map.address': '地址: ',
|
||||
'map.search': '搜索',
|
||||
'baidumap.address': '地址: ',
|
||||
'baidumap.search': '搜索',
|
||||
'baidumap.insertDynamicMap': '插入动态地图',
|
||||
'anchor.name': '锚点名称',
|
||||
'formatblock.formatBlock': {
|
||||
h1: '标题 1',
|
||||
h2: '标题 2',
|
||||
h3: '标题 3',
|
||||
h4: '标题 4',
|
||||
p: '正 文'
|
||||
},
|
||||
'fontname.fontName': {
|
||||
'SimSun': '宋体',
|
||||
'NSimSun': '新宋体',
|
||||
'FangSong_GB2312': '仿宋_GB2312',
|
||||
'KaiTi_GB2312': '楷体_GB2312',
|
||||
'SimHei': '黑体',
|
||||
'Microsoft YaHei': '微软雅黑',
|
||||
'Arial': 'Arial',
|
||||
'Arial Black': 'Arial Black',
|
||||
'Times New Roman': 'Times New Roman',
|
||||
'Courier New': 'Courier New',
|
||||
'Tahoma': 'Tahoma',
|
||||
'Verdana': 'Verdana'
|
||||
},
|
||||
'lineheight.lineHeight': [
|
||||
{'1': '单倍行距'},
|
||||
{'1.5': '1.5倍行距'},
|
||||
{'2': '2倍行距'},
|
||||
{'2.5': '2.5倍行距'},
|
||||
{'3': '3倍行距'}
|
||||
],
|
||||
'template.selectTemplate': '可选模板',
|
||||
'template.replaceContent': '替换当前内容',
|
||||
'template.fileList': {
|
||||
'1.html': '图片和文字',
|
||||
'2.html': '表格',
|
||||
'3.html': '项目编号'
|
||||
}
|
||||
}, 'zh-CN');
|
||||
|
||||
KindEditor.options.langType = 'zh-CN';
|
243
public/static/lib/kindeditor/lang/zh-TW.js
Normal file
@ -0,0 +1,243 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.lang({
|
||||
source: '原始碼',
|
||||
preview: '預覽',
|
||||
undo: '復原(Ctrl+Z)',
|
||||
redo: '重複(Ctrl+Y)',
|
||||
cut: '剪下(Ctrl+X)',
|
||||
copy: '複製(Ctrl+C)',
|
||||
paste: '貼上(Ctrl+V)',
|
||||
plainpaste: '貼為純文字格式',
|
||||
wordpaste: '自Word貼上',
|
||||
selectall: '全選(Ctrl+A)',
|
||||
justifyleft: '靠左對齊',
|
||||
justifycenter: '置中',
|
||||
justifyright: '靠右對齊',
|
||||
justifyfull: '左右對齊',
|
||||
insertorderedlist: '編號清單',
|
||||
insertunorderedlist: '項目清單',
|
||||
indent: '增加縮排',
|
||||
outdent: '減少縮排',
|
||||
subscript: '下標',
|
||||
superscript: '上標',
|
||||
formatblock: '標題',
|
||||
fontname: '字體',
|
||||
fontsize: '文字大小',
|
||||
forecolor: '文字顏色',
|
||||
hilitecolor: '背景顏色',
|
||||
bold: '粗體(Ctrl+B)',
|
||||
italic: '斜體(Ctrl+I)',
|
||||
underline: '底線(Ctrl+U)',
|
||||
strikethrough: '刪除線',
|
||||
removeformat: '清除格式',
|
||||
image: '影像',
|
||||
multiimage: '批量影像上傳',
|
||||
flash: 'Flash',
|
||||
media: '多媒體',
|
||||
table: '表格',
|
||||
tablecell: '儲存格',
|
||||
hr: '插入水平線',
|
||||
emoticons: '插入表情',
|
||||
link: '超連結',
|
||||
unlink: '移除超連結',
|
||||
fullscreen: '最大化',
|
||||
about: '關於',
|
||||
print: '列印(Ctrl+P)',
|
||||
filemanager: '瀏覽伺服器',
|
||||
code: '插入程式代碼',
|
||||
map: 'Google地圖',
|
||||
baidumap: 'Baidu地圖',
|
||||
lineheight: '行距',
|
||||
clearhtml: '清理HTML代碼',
|
||||
pagebreak: '插入分頁符號',
|
||||
quickformat: '快速排版',
|
||||
insertfile: '插入文件',
|
||||
template: '插入樣板',
|
||||
anchor: '錨點',
|
||||
yes: '確定',
|
||||
no: '取消',
|
||||
close: '關閉',
|
||||
editImage: '影像屬性',
|
||||
deleteImage: '刪除影像',
|
||||
editFlash: 'Flash屬性',
|
||||
deleteFlash: '删除Flash',
|
||||
editMedia: '多媒體屬性',
|
||||
deleteMedia: '删除多媒體',
|
||||
editLink: '超連結屬性',
|
||||
deleteLink: '移除超連結',
|
||||
editAnchor: '锚点属性',
|
||||
deleteAnchor: '删除锚点',
|
||||
tableprop: '表格屬性',
|
||||
tablecellprop: '儲存格屬性',
|
||||
tableinsert: '插入表格',
|
||||
tabledelete: '刪除表格',
|
||||
tablecolinsertleft: '向左插入列',
|
||||
tablecolinsertright: '向右插入列',
|
||||
tablerowinsertabove: '向上插入欄',
|
||||
tablerowinsertbelow: '下方插入欄',
|
||||
tablerowmerge: '向下合併單元格',
|
||||
tablecolmerge: '向右合併單元格',
|
||||
tablerowsplit: '分割欄',
|
||||
tablecolsplit: '分割列',
|
||||
tablecoldelete: '删除列',
|
||||
tablerowdelete: '删除欄',
|
||||
noColor: '自動',
|
||||
pleaseSelectFile: '請選擇文件。',
|
||||
invalidImg: "請輸入有效的URL。\n只允許jpg,gif,bmp,png格式。",
|
||||
invalidMedia: "請輸入有效的URL。\n只允許swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",
|
||||
invalidWidth: "寬度必須是數字。",
|
||||
invalidHeight: "高度必須是數字。",
|
||||
invalidBorder: "邊框必須是數字。",
|
||||
invalidUrl: "請輸入有效的URL。",
|
||||
invalidRows: '欄數是必須輸入項目,只允許輸入大於0的數字。',
|
||||
invalidCols: '列數是必須輸入項目,只允許輸入大於0的數字。',
|
||||
invalidPadding: '內距必須是數字。',
|
||||
invalidSpacing: '間距必須是數字。',
|
||||
invalidJson: '伺服器發生故障。',
|
||||
uploadSuccess: '上傳成功。',
|
||||
cutError: '您的瀏覽器安全設置不允許使用剪下操作,請使用快捷鍵(Ctrl+X)完成。',
|
||||
copyError: '您的瀏覽器安全設置不允許使用剪下操作,請使用快捷鍵(Ctrl+C)完成。',
|
||||
pasteError: '您的瀏覽器安全設置不允許使用剪下操作,請使用快捷鍵(Ctrl+V)完成。',
|
||||
ajaxLoading: '加載中,請稍候 ...',
|
||||
uploadLoading: '上傳中,請稍候 ...',
|
||||
uploadError: '上傳錯誤',
|
||||
'plainpaste.comment': '請使用快捷鍵(Ctrl+V)把內容貼到下方區域裡。',
|
||||
'wordpaste.comment': '請使用快捷鍵(Ctrl+V)把內容貼到下方區域裡。',
|
||||
'code.pleaseInput': 'Please input code.',
|
||||
'link.url': 'URL',
|
||||
'link.linkType': '打開類型',
|
||||
'link.newWindow': '新窗口',
|
||||
'link.selfWindow': '本頁窗口',
|
||||
'flash.url': 'URL',
|
||||
'flash.width': '寬度',
|
||||
'flash.height': '高度',
|
||||
'flash.upload': '上傳',
|
||||
'flash.viewServer': '瀏覽',
|
||||
'media.url': 'URL',
|
||||
'media.width': '寬度',
|
||||
'media.height': '高度',
|
||||
'media.autostart': '自動播放',
|
||||
'media.upload': '上傳',
|
||||
'media.viewServer': '瀏覽',
|
||||
'image.remoteImage': '網絡影像',
|
||||
'image.localImage': '上傳影像',
|
||||
'image.remoteUrl': '影像URL',
|
||||
'image.localUrl': '影像URL',
|
||||
'image.size': '影像大小',
|
||||
'image.width': '寬度',
|
||||
'image.height': '高度',
|
||||
'image.resetSize': '原始大小',
|
||||
'image.align': '對齊方式',
|
||||
'image.defaultAlign': '未設定',
|
||||
'image.leftAlign': '向左對齊',
|
||||
'image.rightAlign': '向右對齊',
|
||||
'image.imgTitle': '影像說明',
|
||||
'image.upload': '瀏覽...',
|
||||
'image.viewServer': '瀏覽...',
|
||||
'multiimage.uploadDesc': 'Allows users to upload <%=uploadLimit%> images, single image size not exceeding <%=sizeLimit%>',
|
||||
'multiimage.startUpload': 'Start upload',
|
||||
'multiimage.clearAll': 'Clear all',
|
||||
'multiimage.insertAll': 'Insert all',
|
||||
'multiimage.queueLimitExceeded': 'Queue limit exceeded.',
|
||||
'multiimage.fileExceedsSizeLimit': 'File exceeds size limit.',
|
||||
'multiimage.zeroByteFile': 'Zero byte file.',
|
||||
'multiimage.invalidFiletype': 'Invalid file type.',
|
||||
'multiimage.unknownError': 'Unknown upload error.',
|
||||
'multiimage.pending': 'Pending ...',
|
||||
'multiimage.uploadError': 'Upload error',
|
||||
'filemanager.emptyFolder': '空文件夾',
|
||||
'filemanager.moveup': '至上一級文件夾',
|
||||
'filemanager.viewType': '顯示方式:',
|
||||
'filemanager.viewImage': '縮略圖',
|
||||
'filemanager.listImage': '詳細信息',
|
||||
'filemanager.orderType': '排序方式:',
|
||||
'filemanager.fileName': '名稱',
|
||||
'filemanager.fileSize': '大小',
|
||||
'filemanager.fileType': '類型',
|
||||
'insertfile.url': 'URL',
|
||||
'insertfile.title': '文件說明',
|
||||
'insertfile.upload': '上傳',
|
||||
'insertfile.viewServer': '瀏覽',
|
||||
'table.cells': '儲存格數',
|
||||
'table.rows': '欄數',
|
||||
'table.cols': '列數',
|
||||
'table.size': '表格大小',
|
||||
'table.width': '寬度',
|
||||
'table.height': '高度',
|
||||
'table.percent': '%',
|
||||
'table.px': 'px',
|
||||
'table.space': '內距間距',
|
||||
'table.padding': '內距',
|
||||
'table.spacing': '間距',
|
||||
'table.align': '對齊方式',
|
||||
'table.textAlign': '水平對齊',
|
||||
'table.verticalAlign': '垂直對齊',
|
||||
'table.alignDefault': '未設定',
|
||||
'table.alignLeft': '向左對齊',
|
||||
'table.alignCenter': '置中',
|
||||
'table.alignRight': '向右對齊',
|
||||
'table.alignTop': '靠上',
|
||||
'table.alignMiddle': '置中',
|
||||
'table.alignBottom': '靠下',
|
||||
'table.alignBaseline': '基線',
|
||||
'table.border': '表格邊框',
|
||||
'table.borderWidth': '邊框',
|
||||
'table.borderColor': '顏色',
|
||||
'table.backgroundColor': '背景顏色',
|
||||
'map.address': '住所: ',
|
||||
'map.search': '尋找',
|
||||
'baidumap.address': '住所: ',
|
||||
'baidumap.search': '尋找',
|
||||
'baidumap.insertDynamicMap': '插入動態地圖',
|
||||
'anchor.name': '錨點名稱',
|
||||
'formatblock.formatBlock': {
|
||||
h1: '標題 1',
|
||||
h2: '標題 2',
|
||||
h3: '標題 3',
|
||||
h4: '標題 4',
|
||||
p: '一般'
|
||||
},
|
||||
'fontname.fontName': {
|
||||
'MingLiU': '細明體',
|
||||
'PMingLiU': '新細明體',
|
||||
'DFKai-SB': '標楷體',
|
||||
'SimSun': '宋體',
|
||||
'NSimSun': '新宋體',
|
||||
'FangSong': '仿宋體',
|
||||
'Arial': 'Arial',
|
||||
'Arial Black': 'Arial Black',
|
||||
'Times New Roman': 'Times New Roman',
|
||||
'Courier New': 'Courier New',
|
||||
'Tahoma': 'Tahoma',
|
||||
'Verdana': 'Verdana'
|
||||
},
|
||||
'lineheight.lineHeight': [
|
||||
{'1': '单倍行距'},
|
||||
{'1.5': '1.5倍行距'},
|
||||
{'2': '2倍行距'},
|
||||
{'2.5': '2.5倍行距'},
|
||||
{'3': '3倍行距'}
|
||||
],
|
||||
'template.selectTemplate': '可選樣板',
|
||||
'template.replaceContent': '取代當前內容',
|
||||
'template.fileList': {
|
||||
'1.html': '影像和文字',
|
||||
'2.html': '表格',
|
||||
'3.html': '项目清單'
|
||||
}
|
||||
}, 'zh-TW');
|
||||
|
||||
KindEditor.each(KindEditor.options.items, function (i, name) {
|
||||
if (name == 'baidumap') {
|
||||
KindEditor.options.items[i] = 'map';
|
||||
}
|
||||
});
|
||||
KindEditor.options.langType = 'zh-TW';
|
502
public/static/lib/kindeditor/license.txt
Normal file
@ -0,0 +1,502 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
46
public/static/lib/kindeditor/plugins/anchor/anchor.js
Normal file
@ -0,0 +1,46 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.plugin('anchor', function (K) {
|
||||
var self = this, name = 'anchor', lang = self.lang(name + '.');
|
||||
self.plugin.anchor = {
|
||||
edit: function () {
|
||||
var html = ['<div style="padding:20px;">',
|
||||
'<div class="ke-dialog-row">',
|
||||
'<label for="keName">' + lang.name + '</label>',
|
||||
'<input class="ke-input-text" type="text" id="keName" name="name" value="" style="width:100px;" />',
|
||||
'</div>',
|
||||
'</div>'].join('');
|
||||
var dialog = self.createDialog({
|
||||
name: name,
|
||||
width: 300,
|
||||
title: self.lang(name),
|
||||
body: html,
|
||||
yesBtn: {
|
||||
name: self.lang('yes'),
|
||||
click: function (e) {
|
||||
self.insertHtml('<a name="' + nameBox.val() + '">').hideDialog().focus();
|
||||
}
|
||||
}
|
||||
});
|
||||
var div = dialog.div,
|
||||
nameBox = K('input[name="name"]', div);
|
||||
var img = self.plugin.getSelectedAnchor();
|
||||
if (img) {
|
||||
nameBox.val(unescape(img.attr('data-ke-name')));
|
||||
}
|
||||
nameBox[0].focus();
|
||||
nameBox[0].select();
|
||||
},
|
||||
'delete': function () {
|
||||
self.plugin.getSelectedAnchor().remove();
|
||||
}
|
||||
};
|
||||
self.clickToolbar(name, self.plugin.anchor.edit);
|
||||
});
|
@ -0,0 +1,54 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.plugin('autoheight', function (K) {
|
||||
var self = this;
|
||||
|
||||
if (!self.autoHeightMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
var minHeight;
|
||||
|
||||
function hideScroll() {
|
||||
var edit = self.edit;
|
||||
var body = edit.doc.body;
|
||||
edit.iframe[0].scroll = 'no';
|
||||
body.style.overflowY = 'hidden';
|
||||
}
|
||||
|
||||
function resetHeight() {
|
||||
var edit = self.edit;
|
||||
var body = edit.doc.body;
|
||||
edit.iframe.height(minHeight);
|
||||
self.resize(null, Math.max((K.IE ? body.scrollHeight : body.offsetHeight) + 76, minHeight));
|
||||
}
|
||||
|
||||
function init() {
|
||||
minHeight = K.removeUnit(self.height);
|
||||
|
||||
self.edit.afterChange(resetHeight);
|
||||
hideScroll();
|
||||
resetHeight();
|
||||
}
|
||||
|
||||
if (self.isCreated) {
|
||||
init();
|
||||
} else {
|
||||
self.afterCreate(init);
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* 如何实现真正的自动高度?
|
||||
* 修改编辑器高度之后,再次获取body内容高度时,最小值只会是当前iframe的设置高度,这样就导致高度只增不减。
|
||||
* 所以每次获取body内容高度之前,先将iframe的高度重置为最小高度,这样就能获取body的实际高度。
|
||||
* 由此就实现了真正的自动高度
|
||||
* 测试:chrome、firefox、IE9、IE8
|
||||
* */
|
95
public/static/lib/kindeditor/plugins/baidumap/baidumap.js
Normal file
@ -0,0 +1,95 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
// Baidu Maps: http://dev.baidu.com/wiki/map/index.php?title=%E9%A6%96%E9%A1%B5
|
||||
|
||||
KindEditor.plugin('baidumap', function (K) {
|
||||
var self = this, name = 'baidumap', lang = self.lang(name + '.');
|
||||
var mapWidth = K.undef(self.mapWidth, 558);
|
||||
var mapHeight = K.undef(self.mapHeight, 360);
|
||||
self.clickToolbar(name, function () {
|
||||
var html = ['<div style="padding:10px 20px;">',
|
||||
'<div class="ke-header">',
|
||||
// left start
|
||||
'<div class="ke-left">',
|
||||
lang.address + ' <input id="kindeditor_plugin_map_address" name="address" class="ke-input-text" value="" style="width:200px;" /> ',
|
||||
'<span class="ke-button-common ke-button-outer">',
|
||||
'<input type="button" name="searchBtn" class="ke-button-common ke-button" value="' + lang.search + '" />',
|
||||
'</span>',
|
||||
'</div>',
|
||||
// right start
|
||||
'<div class="ke-right">',
|
||||
'<input type="checkbox" id="keInsertDynamicMap" name="insertDynamicMap" value="1" /> <label for="keInsertDynamicMap">' + lang.insertDynamicMap + '</label>',
|
||||
'</div>',
|
||||
'<div class="ke-clearfix"></div>',
|
||||
'</div>',
|
||||
'<div class="ke-map" style="width:' + mapWidth + 'px;height:' + mapHeight + 'px;"></div>',
|
||||
'</div>'].join('');
|
||||
var dialog = self.createDialog({
|
||||
name: name,
|
||||
width: mapWidth + 42,
|
||||
title: self.lang(name),
|
||||
body: html,
|
||||
yesBtn: {
|
||||
name: self.lang('yes'),
|
||||
click: function (e) {
|
||||
var map = win.map;
|
||||
var centerObj = map.getCenter();
|
||||
var center = centerObj.lng + ',' + centerObj.lat;
|
||||
var zoom = map.getZoom();
|
||||
var url = [checkbox[0].checked ? self.pluginsPath + 'baidumap/index.html' : 'http://api.map.baidu.com/staticimage',
|
||||
'?center=' + encodeURIComponent(center),
|
||||
'&zoom=' + encodeURIComponent(zoom),
|
||||
'&width=' + mapWidth,
|
||||
'&height=' + mapHeight,
|
||||
'&markers=' + encodeURIComponent(center),
|
||||
'&markerStyles=' + encodeURIComponent('l,A')].join('');
|
||||
if (checkbox[0].checked) {
|
||||
self.insertHtml('<iframe src="' + url + '" frameborder="0" style="width:' + (mapWidth + 2) + 'px;height:' + (mapHeight + 2) + 'px;"></iframe>');
|
||||
} else {
|
||||
self.exec('insertimage', url);
|
||||
}
|
||||
self.hideDialog().focus();
|
||||
}
|
||||
},
|
||||
beforeRemove: function () {
|
||||
searchBtn.remove();
|
||||
if (doc) {
|
||||
doc.write('');
|
||||
}
|
||||
iframe.remove();
|
||||
}
|
||||
});
|
||||
var div = dialog.div,
|
||||
addressBox = K('[name="address"]', div),
|
||||
searchBtn = K('[name="searchBtn"]', div),
|
||||
checkbox = K('[name="insertDynamicMap"]', dialog.div),
|
||||
win, doc;
|
||||
var iframe = K('<iframe class="ke-textarea" frameborder="0" src="' + self.pluginsPath + 'baidumap/map.html" style="width:' + mapWidth + 'px;height:' + mapHeight + 'px;"></iframe>');
|
||||
|
||||
function ready() {
|
||||
win = iframe[0].contentWindow;
|
||||
doc = K.iframeDoc(iframe);
|
||||
}
|
||||
|
||||
iframe.bind('load', function () {
|
||||
iframe.unbind('load');
|
||||
if (K.IE) {
|
||||
ready();
|
||||
} else {
|
||||
setTimeout(ready, 0);
|
||||
}
|
||||
});
|
||||
K('.ke-map', div).replaceWith(iframe);
|
||||
// search map
|
||||
searchBtn.click(function () {
|
||||
win.search(addressBox.val());
|
||||
});
|
||||
});
|
||||
});
|
102
public/static/lib/kindeditor/plugins/baidumap/index.html
Normal file
@ -0,0 +1,102 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="keywords" content="百度地图,百度地图API,百度地图自定义工具,百度地图所见即所得工具"/>
|
||||
<meta name="description" content="百度地图API自定义地图,帮助用户在可视化操作下生成百度地图"/>
|
||||
<title>百度地图API自定义地图</title>
|
||||
<!--引用百度地图API-->
|
||||
<style type="text/css">
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.iw_poi_title {
|
||||
color: #CC5522;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
padding-right: 13px;
|
||||
white-space: nowrap
|
||||
}
|
||||
|
||||
.iw_poi_content {
|
||||
font: 12px arial, sans-serif;
|
||||
overflow: visible;
|
||||
padding-top: 4px;
|
||||
white-space: -moz-pre-wrap;
|
||||
word-wrap: break-word
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.1&services=true"></script>
|
||||
</head>
|
||||
|
||||
<body onload="initMap();">
|
||||
<!--百度地图容器-->
|
||||
<div style="width:697px;height:550px;border:#ccc solid 1px;" id="dituContent"></div>
|
||||
</body>
|
||||
<script type="text/javascript">
|
||||
function getParam(name) {
|
||||
return location.href.match(new RegExp('[?&]' + name + '=([^?&]+)', 'i')) ? decodeURIComponent(RegExp.$1) : '';
|
||||
}
|
||||
|
||||
var centerParam = getParam('center');
|
||||
var zoomParam = getParam('zoom');
|
||||
var widthParam = getParam('width');
|
||||
var heightParam = getParam('height');
|
||||
var markersParam = getParam('markers');
|
||||
var markerStylesParam = getParam('markerStyles');
|
||||
|
||||
//创建和初始化地图函数:
|
||||
function initMap() {
|
||||
// [FF]切换模式后报错
|
||||
if (!window.BMap) {
|
||||
return;
|
||||
}
|
||||
var dituContent = document.getElementById('dituContent');
|
||||
dituContent.style.width = widthParam + 'px';
|
||||
dituContent.style.height = heightParam + 'px';
|
||||
|
||||
createMap();//创建地图
|
||||
setMapEvent();//设置地图事件
|
||||
addMapControl();//向地图添加控件
|
||||
|
||||
// 创建标注
|
||||
var markersArr = markersParam.split(',');
|
||||
var point = new BMap.Point(markersArr[0], markersArr[1]);
|
||||
var marker = new BMap.Marker(point);
|
||||
map.addOverlay(marker); // 将标注添加到地图中
|
||||
}
|
||||
|
||||
//创建地图函数:
|
||||
function createMap() {
|
||||
var map = new BMap.Map("dituContent");//在百度地图容器中创建一个地图
|
||||
var centerArr = centerParam.split(',');
|
||||
var point = new BMap.Point(centerArr[0], centerArr[1]);//定义一个中心点坐标
|
||||
map.centerAndZoom(point, zoomParam);//设定地图的中心点和坐标并将地图显示在地图容器中
|
||||
window.map = map;//将map变量存储在全局
|
||||
}
|
||||
|
||||
//地图事件设置函数:
|
||||
function setMapEvent() {
|
||||
map.enableDragging();//启用地图拖拽事件,默认启用(可不写)
|
||||
map.enableScrollWheelZoom();//启用地图滚轮放大缩小
|
||||
map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
|
||||
map.enableKeyboard();//启用键盘上下左右键移动地图
|
||||
}
|
||||
|
||||
//地图控件添加函数:
|
||||
function addMapControl() {
|
||||
//向地图中添加缩放控件
|
||||
var ctrl_nav = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE});
|
||||
map.addControl(ctrl_nav);
|
||||
//向地图中添加缩略图控件
|
||||
var ctrl_ove = new BMap.OverviewMapControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1});
|
||||
map.addControl(ctrl_ove);
|
||||
//向地图中添加比例尺控件
|
||||
var ctrl_sca = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
|
||||
map.addControl(ctrl_sca);
|
||||
}
|
||||
</script>
|
||||
</html>
|
53
public/static/lib/kindeditor/plugins/baidumap/map.html
Normal file
@ -0,0 +1,53 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Baidu Maps</title>
|
||||
<style>
|
||||
html {
|
||||
height: 100%
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #FFF
|
||||
}
|
||||
</style>
|
||||
<script charset="utf-8" src="http://api.map.baidu.com/api?v=1.3"></script>
|
||||
<script>
|
||||
var map, geocoder;
|
||||
|
||||
function initialize() {
|
||||
map = new BMap.Map('map_canvas');
|
||||
var point = new BMap.Point(121.473704, 31.230393);
|
||||
map.centerAndZoom(point, 11);
|
||||
map.addControl(new BMap.NavigationControl());
|
||||
map.enableScrollWheelZoom();
|
||||
|
||||
var gc = new BMap.Geocoder();
|
||||
gc.getLocation(point, function (rs) {
|
||||
var addComp = rs.addressComponents;
|
||||
var address = [addComp.city].join('');
|
||||
parent.document.getElementById("kindeditor_plugin_map_address").value = address;
|
||||
});
|
||||
}
|
||||
|
||||
function search(address) {
|
||||
if (!map) return;
|
||||
var local = new BMap.LocalSearch(map, {
|
||||
renderOptions: {
|
||||
map: map,
|
||||
autoViewport: true,
|
||||
selectFirstResult: false
|
||||
}
|
||||
});
|
||||
local.search(address);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="initialize();">
|
||||
<div id="map_canvas" style="width:100%; height:100%"></div>
|
||||
</body>
|
||||
</html>
|
29
public/static/lib/kindeditor/plugins/clearhtml/clearhtml.js
Normal file
@ -0,0 +1,29 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.plugin('clearhtml', function (K) {
|
||||
var self = this, name = 'clearhtml';
|
||||
self.clickToolbar(name, function () {
|
||||
self.focus();
|
||||
var html = self.html();
|
||||
html = html.replace(/(<script[^>]*>)([\s\S]*?)(<\/script>)/ig, '');
|
||||
html = html.replace(/(<style[^>]*>)([\s\S]*?)(<\/style>)/ig, '');
|
||||
html = K.formatHtml(html, {
|
||||
a: ['href', 'target'],
|
||||
embed: ['src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess'],
|
||||
img: ['src', 'width', 'height', 'border', 'alt', 'title', '.width', '.height'],
|
||||
table: ['border'],
|
||||
'td,th': ['rowspan', 'colspan'],
|
||||
'div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6': []
|
||||
});
|
||||
self.html(html);
|
||||
self.cmd.selection(true);
|
||||
self.addBookmark();
|
||||
});
|
||||
});
|
62
public/static/lib/kindeditor/plugins/code/code.js
Normal file
@ -0,0 +1,62 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
// google code prettify: http://google-code-prettify.googlecode.com/
|
||||
// http://google-code-prettify.googlecode.com/
|
||||
|
||||
KindEditor.plugin('code', function (K) {
|
||||
var self = this, name = 'code';
|
||||
self.clickToolbar(name, function () {
|
||||
var lang = self.lang(name + '.'),
|
||||
html = ['<div style="padding:10px 20px;">',
|
||||
'<div class="ke-dialog-row">',
|
||||
'<select class="ke-code-type">',
|
||||
'<option value="js">JavaScript</option>',
|
||||
'<option value="html">HTML</option>',
|
||||
'<option value="css">CSS</option>',
|
||||
'<option value="php">PHP</option>',
|
||||
'<option value="pl">Perl</option>',
|
||||
'<option value="py">Python</option>',
|
||||
'<option value="rb">Ruby</option>',
|
||||
'<option value="java">Java</option>',
|
||||
'<option value="vb">ASP/VB</option>',
|
||||
'<option value="cpp">C/C++</option>',
|
||||
'<option value="cs">C#</option>',
|
||||
'<option value="xml">XML</option>',
|
||||
'<option value="bsh">Shell</option>',
|
||||
'<option value="">Other</option>',
|
||||
'</select>',
|
||||
'</div>',
|
||||
'<textarea class="ke-textarea" style="width:408px;height:260px;"></textarea>',
|
||||
'</div>'].join(''),
|
||||
dialog = self.createDialog({
|
||||
name: name,
|
||||
width: 450,
|
||||
title: self.lang(name),
|
||||
body: html,
|
||||
yesBtn: {
|
||||
name: self.lang('yes'),
|
||||
click: function (e) {
|
||||
var type = K('.ke-code-type', dialog.div).val(),
|
||||
code = textarea.val(),
|
||||
cls = type === '' ? '' : ' lang-' + type,
|
||||
html = '<pre class="prettyprint' + cls + '">\n' + K.escape(code) + '</pre> ';
|
||||
if (K.trim(code) === '') {
|
||||
alert(lang.pleaseInput);
|
||||
textarea[0].focus();
|
||||
return;
|
||||
}
|
||||
self.insertHtml(html).hideDialog().focus();
|
||||
}
|
||||
}
|
||||
}),
|
||||
textarea = K('textarea', dialog.div);
|
||||
textarea[0].focus();
|
||||
});
|
||||
});
|
121
public/static/lib/kindeditor/plugins/code/prettify.css
Normal file
@ -0,0 +1,121 @@
|
||||
.pln {
|
||||
color: #000
|
||||
}
|
||||
|
||||
@media screen {
|
||||
.str {
|
||||
color: #080
|
||||
}
|
||||
|
||||
.kwd {
|
||||
color: #008
|
||||
}
|
||||
|
||||
.com {
|
||||
color: #800
|
||||
}
|
||||
|
||||
.typ {
|
||||
color: #606
|
||||
}
|
||||
|
||||
.lit {
|
||||
color: #066
|
||||
}
|
||||
|
||||
.pun, .opn, .clo {
|
||||
color: #660
|
||||
}
|
||||
|
||||
.tag {
|
||||
color: #008
|
||||
}
|
||||
|
||||
.atn {
|
||||
color: #606
|
||||
}
|
||||
|
||||
.atv {
|
||||
color: #080
|
||||
}
|
||||
|
||||
.dec, .var {
|
||||
color: #606
|
||||
}
|
||||
|
||||
.fun {
|
||||
color: red
|
||||
}
|
||||
}
|
||||
|
||||
@media print, projection {
|
||||
.str {
|
||||
color: #060
|
||||
}
|
||||
|
||||
.kwd {
|
||||
color: #006;
|
||||
font-weight: bold
|
||||
}
|
||||
|
||||
.com {
|
||||
color: #600;
|
||||
font-style: italic
|
||||
}
|
||||
|
||||
.typ {
|
||||
color: #404;
|
||||
font-weight: bold
|
||||
}
|
||||
|
||||
.lit {
|
||||
color: #044
|
||||
}
|
||||
|
||||
.pun, .opn, .clo {
|
||||
color: #440
|
||||
}
|
||||
|
||||
.tag {
|
||||
color: #006;
|
||||
font-weight: bold
|
||||
}
|
||||
|
||||
.atn {
|
||||
color: #404
|
||||
}
|
||||
|
||||
.atv {
|
||||
color: #060
|
||||
}
|
||||
}
|
||||
|
||||
pre.prettyprint {
|
||||
padding: 2px;
|
||||
border: 1px solid #888
|
||||
}
|
||||
|
||||
ol.linenums {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0
|
||||
}
|
||||
|
||||
li.L0, li.L1, li.L2, li.L3, li.L5, li.L6, li.L7, li.L8 {
|
||||
list-style-type: none
|
||||
}
|
||||
|
||||
li.L1, li.L3, li.L5, li.L7, li.L9 {
|
||||
background: #eee
|
||||
}
|
||||
|
||||
pre.prettyprint {
|
||||
border: 0;
|
||||
border-left: 3px solid rgb(204, 204, 204);
|
||||
margin-left: 2em;
|
||||
padding: 0.5em;
|
||||
font-size: 110%;
|
||||
display: block;
|
||||
font-family: "Consolas", "Monaco", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
|
||||
margin: 1em 0px;
|
||||
white-space: pre;
|
||||
}
|
28
public/static/lib/kindeditor/plugins/code/prettify.js
Normal file
@ -0,0 +1,28 @@
|
||||
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
|
||||
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
|
||||
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
|
||||
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
|
||||
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
|
||||
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
|
||||
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
|
||||
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
|
||||
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
|
||||
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
|
||||
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
|
||||
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
|
||||
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
|
||||
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
|
||||
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
|
||||
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
|
||||
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||||
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||||
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||||
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
|
||||
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||||
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||||
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||||
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
|
||||
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
|
||||
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
|
||||
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
|
||||
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
|
137
public/static/lib/kindeditor/plugins/emoticons/emoticons.js
Normal file
@ -0,0 +1,137 @@
|
||||
/*******************************************************************************
|
||||
* KindEditor - WYSIWYG HTML Editor for Internet
|
||||
* Copyright (C) 2006-2011 kindsoft.net
|
||||
*
|
||||
* @author Roddy <luolonghao@gmail.com>
|
||||
* @site http://www.kindsoft.net/
|
||||
* @licence http://www.kindsoft.net/license.php
|
||||
*******************************************************************************/
|
||||
|
||||
KindEditor.plugin('emoticons', function (K) {
|
||||
var self = this, name = 'emoticons',
|
||||
path = (self.emoticonsPath || self.pluginsPath + 'emoticons/images/'),
|
||||
allowPreview = self.allowPreviewEmoticons === undefined ? true : self.allowPreviewEmoticons,
|
||||
currentPageNum = 1;
|
||||
self.clickToolbar(name, function () {
|
||||
var rows = 5, cols = 9, total = 135, startNum = 0,
|
||||
cells = rows * cols, pages = Math.ceil(total / cells),
|
||||
colsHalf = Math.floor(cols / 2),
|
||||
wrapperDiv = K('<div class="ke-plugin-emoticons"></div>'),
|
||||
elements = [],
|
||||
menu = self.createMenu({
|
||||
name: name,
|
||||
beforeRemove: function () {
|
||||
removeEvent();
|
||||
}
|
||||
});
|
||||
menu.div.append(wrapperDiv);
|
||||
var previewDiv, previewImg;
|
||||
if (allowPreview) {
|
||||
previewDiv = K('<div class="ke-preview"></div>').css('right', 0);
|
||||
previewImg = K('<img class="ke-preview-img" src="' + path + startNum + '.gif" />');
|
||||
wrapperDiv.append(previewDiv);
|
||||
previewDiv.append(previewImg);
|
||||
}
|
||||
|
||||
function bindCellEvent(cell, j, num) {
|
||||
if (previewDiv) {
|
||||
cell.mouseover(function () {
|
||||
if (j > colsHalf) {
|
||||
previewDiv.css('left', 0);
|
||||
previewDiv.css('right', '');
|
||||
} else {
|
||||
previewDiv.css('left', '');
|
||||
previewDiv.css('right', 0);
|
||||
}
|
||||
previewImg.attr('src', path + num + '.gif');
|
||||
K(this).addClass('ke-on');
|
||||
});
|
||||
} else {
|
||||
cell.mouseover(function () {
|
||||
K(this).addClass('ke-on');
|
||||
});
|
||||
}
|
||||
cell.mouseout(function () {
|
||||
K(this).removeClass('ke-on');
|
||||
});
|
||||
cell.click(function (e) {
|
||||
self.insertHtml('<img src="' + path + num + '.gif" border="0" alt="" />').hideMenu().focus();
|
||||
e.stop();
|
||||
});
|
||||
}
|
||||
|
||||
function createEmoticonsTable(pageNum, parentDiv) {
|
||||
var table = document.createElement('table');
|
||||
parentDiv.append(table);
|
||||
if (previewDiv) {
|
||||
K(table).mouseover(function () {
|
||||
previewDiv.show('block');
|
||||
});
|
||||
K(table).mouseout(function () {
|
||||
previewDiv.hide();
|
||||
});
|
||||
elements.push(K(table));
|
||||
}
|
||||
table.className = 'ke-table';
|
||||
table.cellPadding = 0;
|
||||
table.cellSpacing = 0;
|
||||
table.border = 0;
|
||||
var num = (pageNum - 1) * cells + startNum;
|
||||
for (var i = 0; i < rows; i++) {
|
||||
var row = table.insertRow(i);
|
||||
for (var j = 0; j < cols; j++) {
|
||||
var cell = K(row.insertCell(j));
|
||||
cell.addClass('ke-cell');
|
||||
bindCellEvent(cell, j, num);
|
||||
var span = K('<span class="ke-img"></span>')
|
||||
.css('background-position', '-' + (24 * num) + 'px 0px')
|
||||
.css('background-image', 'url(' + path + 'static.gif)');
|
||||
cell.append(span);
|
||||
elements.push(cell);
|
||||
num++;
|
||||
}
|
||||
}
|
||||
return table;
|
||||
}
|
||||
|
||||
var table = createEmoticonsTable(currentPageNum, wrapperDiv);
|
||||
|
||||
function removeEvent() {
|
||||
K.each(elements, function () {
|
||||
this.unbind();
|
||||
});
|
||||
}
|
||||
|
||||
var pageDiv;
|
||||
|
||||
function bindPageEvent(el, pageNum) {
|
||||
el.click(function (e) {
|
||||
removeEvent();
|
||||
table.parentNode.removeChild(table);
|
||||
pageDiv.remove();
|
||||
table = createEmoticonsTable(pageNum, wrapperDiv);
|
||||
createPageTable(pageNum);
|
||||
currentPageNum = pageNum;
|
||||
e.stop();
|
||||
});
|
||||
}
|
||||
|
||||
function createPageTable(currentPageNum) {
|
||||
pageDiv = K('<div class="ke-page"></div>');
|
||||
wrapperDiv.append(pageDiv);
|
||||
for (var pageNum = 1; pageNum <= pages; pageNum++) {
|
||||
if (currentPageNum !== pageNum) {
|
||||
var a = K('<a href="javascript:;">[' + pageNum + ']</a>');
|
||||
bindPageEvent(a, pageNum);
|
||||
pageDiv.append(a);
|
||||
elements.push(a);
|
||||
} else {
|
||||
pageDiv.append(K('@[' + pageNum + ']'));
|
||||
}
|
||||
pageDiv.append(K('@ '));
|
||||
}
|
||||
}
|
||||
|
||||
createPageTable(currentPageNum);
|
||||
});
|
||||
});
|
BIN
public/static/lib/kindeditor/plugins/emoticons/images/0.gif
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/1.gif
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/10.gif
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/100.gif
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/101.gif
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/102.gif
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/103.gif
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/104.gif
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/105.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/106.gif
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/107.gif
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/108.gif
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
public/static/lib/kindeditor/plugins/emoticons/images/109.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |