redmine module

parent 83351537
...@@ -7,6 +7,7 @@ use yii\filters\AccessControl; ...@@ -7,6 +7,7 @@ use yii\filters\AccessControl;
use yii\helpers\ArrayHelper; use yii\helpers\ArrayHelper;
use yii\web\Controller; use yii\web\Controller;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
use League\HTMLToMarkdown\HtmlConverter;
use common\models\Settings; use common\models\Settings;
use common\modules\support\models\redmine\Issue; use common\modules\support\models\redmine\Issue;
...@@ -74,13 +75,35 @@ class SupportController extends Controller ...@@ -74,13 +75,35 @@ class SupportController extends Controller
public function actionCreate() public function actionCreate()
{ {
$this->view->registerJsFile('/plugins/ckeditor/ckeditor.js', ['position' => yii\web\View::POS_END ]);
$model = new Issue(); $model = new Issue();
if ($model->load(Yii::$app->request->post()) && $model->save()) { $client = $this->getClient();
return $this->redirect(['view', 'id' => $model->id]);
} else { $user = $client->user->getCurrentUser();
if ($model->load(Yii::$app->request->post()) && $model->validate())
{
$converter = new HtmlConverter();
$client->issue->create([
'subject' => $model->subject,
'description' => $converter->convert($model->description),
'project_id' => $model->project_id,
'priority_id' => $model->priority_id,
'status_id' => $model->status_id,
'tracker_id' => $model->tracker_id,
'author_id' => $user['user']['id']
]);
return $this->redirect(['/support']);
}
else
{
return $this->render('create', [ return $this->render('create', [
'model' => $model, 'model' => $model,
'user' => $user
]); ]);
} }
} }
......
...@@ -4,66 +4,22 @@ namespace common\modules\support\models\redmine; ...@@ -4,66 +4,22 @@ namespace common\modules\support\models\redmine;
use Yii; use Yii;
/** class Issue extends yii\base\Model
* This is the model class for table "issues".
*
* @property integer $id
* @property integer $tracker_id
* @property integer $project_id
* @property string $subject
* @property string $description
* @property string $due_date
* @property integer $category_id
* @property integer $status_id
* @property integer $assigned_to_id
* @property integer $priority_id
* @property integer $fixed_version_id
* @property integer $author_id
* @property integer $lock_version
* @property string $created_on
* @property string $updated_on
* @property string $start_date
* @property integer $done_ratio
* @property double $estimated_hours
* @property integer $parent_id
* @property integer $root_id
* @property integer $lft
* @property integer $rgt
* @property integer $is_private
* @property string $closed_on
* @property integer $assigned_to_manager_id
* @property integer $assigned_to_customer_id
* @property double $price_for_customer
* @property double $max_price_for_developer
* @property double $price_developer
* @property string $type_price
* @property integer $paid
*/
class Issue extends \common\components\ActiveRecordModel
{ {
/** public $subject;
* @inheritdoc public $project_id;
*/ public $priority_id = self::PRIORITY_FIRE;
public function name() public $description;
{ public $author_id;
return 'Задача Redmine'; public $tracker_id = self::TRACKER_NONE;
} public $status_id = self::STATUS_NEW;
/** const PRIORITY_SIMPLE = 2;
* @inheritdoc const PRIORITY_FIRE = 3;
*/
public static function tableName()
{
return 'issues';
}
/** const TRACKER_NONE = 14; // Не определено
* @return \yii\db\Connection the database connection used by this AR class.
*/ const STATUS_NEW = 7;
public static function getDb()
{
return Yii::$app->get('dbSupport');
}
/** /**
* @inheritdoc * @inheritdoc
...@@ -71,12 +27,10 @@ class Issue extends \common\components\ActiveRecordModel ...@@ -71,12 +27,10 @@ class Issue extends \common\components\ActiveRecordModel
public function rules() public function rules()
{ {
return [ return [
[['tracker_id', 'project_id', 'status_id', 'priority_id', 'author_id'], 'required'], [['tracker_id', 'project_id', 'status_id', 'priority_id', 'description'], 'required'],
[['tracker_id', 'project_id', 'category_id', 'status_id', 'assigned_to_id', 'priority_id', 'fixed_version_id', 'author_id', 'lock_version', 'done_ratio', 'parent_id', 'root_id', 'lft', 'rgt', 'is_private', 'assigned_to_manager_id', 'assigned_to_customer_id', 'paid'], 'integer'], [['tracker_id', 'project_id', 'status_id', 'priority_id'], 'integer'],
[['description'], 'string'], [['description'], 'string'],
[['due_date', 'created_on', 'updated_on', 'start_date', 'closed_on'], 'safe'], [['subject'], 'string', 'max' => 255],
[['estimated_hours', 'price_for_customer', 'max_price_for_developer', 'price_developer'], 'number'],
[['subject', 'type_price'], 'string', 'max' => 255],
]; ];
} }
...@@ -87,45 +41,14 @@ class Issue extends \common\components\ActiveRecordModel ...@@ -87,45 +41,14 @@ class Issue extends \common\components\ActiveRecordModel
{ {
return [ return [
'id' => 'ID', 'id' => 'ID',
'project_id' => 'Проект',
'subject' => 'Заголовок задачи',
'tracker_id' => 'Tracker ID', 'tracker_id' => 'Tracker ID',
'project_id' => 'Project ID', 'description' => 'Текст задачи',
'subject' => 'Subject', 'priority_id' => 'Важность',
'description' => 'Description', 'status_id' => 'Статус',
'due_date' => 'Due Date',
'category_id' => 'Category ID',
'status_id' => 'Status ID',
'assigned_to_id' => 'Assigned To ID',
'priority_id' => 'Priority ID',
'fixed_version_id' => 'Fixed Version ID',
'author_id' => 'Author ID',
'lock_version' => 'Lock Version',
'created_on' => 'Created On',
'updated_on' => 'Updated On',
'start_date' => 'Start Date',
'done_ratio' => 'Done Ratio',
'estimated_hours' => 'Estimated Hours',
'parent_id' => 'Parent ID',
'root_id' => 'Root ID',
'lft' => 'Lft',
'rgt' => 'Rgt',
'is_private' => 'Is Private',
'closed_on' => 'Closed On',
'assigned_to_manager_id' => 'Assigned To Manager ID',
'assigned_to_customer_id' => 'Assigned To Customer ID',
'price_for_customer' => 'Price For Customer',
'max_price_for_developer' => 'Max Price For Developer',
'price_developer' => 'Price Developer',
'type_price' => 'Type Price',
'paid' => 'Paid',
]; ];
} }
/**
* @inheritdoc
* @return IssueQuery the active query used by this AR class.
*/
public static function find()
{
return new IssueQuery(get_called_class());
}
} }
\ No newline at end of file
<?php
namespace common\modules\support\models\redmine;
use Yii;
use common\models\Settings;
/**
* This is the ActiveQuery class for [[Issue]].
*
* @see Issue
*/
class IssueQuery extends \yii\db\ActiveQuery
{
public $orderBy = ['created_on' => SORT_DESC];
public function search($s)
{
if($s && trim($s) != '')
{
return $this->andWhere(['like', 'subject', $s]);
}
return $this;
}
public function me()
{
return $this->andWhere(['author_id' => Yii::$app->support->identity->support_id]);
}
public function work()
{
$status = Settings::getValue('support-status-work');
return $this->andWhere(['status_id' => $status]);
}
public function rating()
{
$status = Settings::getValue('support-status-new');
return $this->andWhere(['status_id' => $status]);
}
public function test()
{
$status = Settings::getValue('support-status-test');
return $this->andWhere(['status_id' => $status]);
}
public function approve()
{
$status = Settings::getValue('support-status-approve');
return $this->andWhere(['status_id' => $status]);
}
public function accepted()
{
$status = Settings::getValue('support-status-accepted');
return $this->andWhere(['status_id' => $status]);
}
/**
* @inheritdoc
* @return Issue[]|array
*/
public function all($db = null)
{
return parent::all($db);
}
/**
* @inheritdoc
* @return Issue|array|null
*/
public function one($db = null)
{
return parent::one($db);
}
}
...@@ -4,9 +4,9 @@ namespace common\modules\support\models\redmine; ...@@ -4,9 +4,9 @@ namespace common\modules\support\models\redmine;
use common\models\Settings; use common\models\Settings;
class IssueHelper class RedmineHelper
{ {
public static function sort($issues = null) public static function sortIsuues($issues = null)
{ {
if($issues) if($issues)
{ {
...@@ -50,6 +50,31 @@ class IssueHelper ...@@ -50,6 +50,31 @@ class IssueHelper
return $settings; return $settings;
} }
return null; return $issues;
} }
public static function sortMemberships($memberships = null)
{
if($memberships)
{
$output = [];
foreach ($memberships as $membership)
{
if(isset($membership['roles']))
{
foreach ($membership['roles'] as $role)
{
if($role['id'] == 5)
{
$output[$membership['project']['id']] = $membership['project']['name'];
}
}
}
}
return $output;
}
return $memberships;
}
} }
\ No newline at end of file
<?php
namespace common\modules\support\models\redmine;
use Yii;
/**
* This is the model class for table "users".
*
* @property integer $id
* @property string $login
* @property string $hashed_password
* @property string $firstname
* @property string $lastname
* @property integer $admin
* @property integer $status
* @property string $last_login_on
* @property string $language
* @property integer $auth_source_id
* @property string $created_on
* @property string $updated_on
* @property string $type
* @property string $identity_url
* @property string $mail_notification
* @property string $salt
* @property integer $must_change_passwd
* @property string $passwd_changed_on
* @property integer $show_report
* @property string $requisite
*/
class User extends \common\components\ActiveRecordModel
{
const TYPE_USER = 'User';
const TYPE_GROUP = 'Group';
const TYPE_GROUP_NON_MEMBER = 'GroupNonMember';
const TYPE_GROUP_ANONYMOUS = 'GroupAnonymous';
const TYPE_ANONYMOUS_USER = 'AnonymousUser';
public $specialName;
/**
* @inheritdoc
*/
public function name()
{
return 'Пользователи Redmine';
}
/**
* @inheritdoc
*/
public static function tableName()
{
return 'users';
}
/**
* @return \yii\db\Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii::$app->get('dbSupport');
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['admin', 'status', 'auth_source_id', 'must_change_passwd', 'show_report'], 'integer'],
[['last_login_on', 'created_on', 'updated_on', 'passwd_changed_on', 'specialName'], 'safe'],
[['requisite'], 'string'],
[['login', 'lastname', 'type', 'identity_url', 'mail_notification'], 'string', 'max' => 255],
[['hashed_password'], 'string', 'max' => 40],
[['firstname'], 'string', 'max' => 30],
[['language'], 'string', 'max' => 5],
[['salt'], 'string', 'max' => 64],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'login' => 'Логин',
'hashed_password' => 'Пароль',
'firstname' => 'Имя',
'lastname' => 'Фамилия',
'admin' => 'Admin',
'status' => 'Статус',
'last_login_on' => 'Последняя авторизация',
'language' => 'Язык',
'auth_source_id' => 'Auth Source ID',
'created_on' => 'Created On',
'updated_on' => 'Updated On',
'type' => 'Тип',
'identity_url' => 'Identity Url',
'mail_notification' => 'Mail Notification',
'salt' => 'Salt',
'must_change_passwd' => 'Must Change Passwd',
'passwd_changed_on' => 'Passwd Changed On',
'show_report' => 'Show Report',
'requisite' => 'Requisite',
];
}
}
<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;
use common\modules\support\models\redmine\Issue;
use common\modules\support\models\redmine\RedmineHelper;
?>
<div class="container_white"> <div class="container_white">
<div class="container"> <div class="container">
...@@ -13,52 +23,50 @@ ...@@ -13,52 +23,50 @@
</div> </div>
</div> </div>
<div class="row"> <?php $form = ActiveForm::begin(); ?>
<div class="col-sm-12"> <div class="row">
<p class="label_p"><strong>Заголовок задачи</strong></p>
<input type="text" class="form-control" placeholder="Дизайн оформления витринных окон для ресторана Subway">
</div>
<div class="col-md-3 col-xs-6 col-sm-12"> <div class="col-sm-12">
<?=$form->field($model, 'subject', ['template' => "<p class='label_p'><strong>{label}</strong></p>\n{input}\n{hint}\n{error}"])->textInput(['maxlength' => 255, 'placeholder' => 'Дизайн оформления витринных окон для ресторана Subway'])?>
</div>
<p class="label_p"><strong>Тип задачи</strong></p> <div class="col-md-3 col-xs-6 col-sm-12">
<select class="form-control"> <?php $projects = RedmineHelper::sortMemberships($user['user']['memberships']) ?>
<option>Выберите тип задачи</option> <?=$form->field($model, 'project_id', ['template' => "<p class='label_p'><strong>{label}</strong></p>\n{input}\n{hint}\n{error}"])->dropDownList($projects, (count($projects)>1?['prompt' => 'Выберите проект']:[]))?>
<option>2</option> </div>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="col-md-3 col-xs-6 col-sm-12"> <div class="col-md-3 col-xs-6 col-sm-12">
<p class="label_p">Важность</p> <?=$form->field($model, 'priority_id', ['template' => "<p class='label_p'><strong>{label}</strong></p>\n<div class='important_box important_button_text'>
<div class="important_box important_button_text"> {input}
<p class="important_button_text_1">Важная</p> <p class='important_button_text_1'>Важная</p>
<p class="important_button_text_2">Обычная</p> <p class='important_button_text_2'>Обычная</p>
<div class="important_button"></div> <div class='important_button'></div>
</div>\n{hint}\n{error}"])->hiddenInput(['data-simple' => Issue::PRIORITY_SIMPLE, 'data-fire' => Issue::PRIORITY_FIRE])?>
</div> </div>
</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<p class="label_p"><strong>Текст задачи</strong></p> <?=$form->field($model, 'description', ['template' => "<p class='label_p'><strong>{label}</strong></p>\n{input}\n{hint}\n{error}"])->textArea(['id' => 'ckeditor'])?>
<div class="text_box_form">
<div class="text_box_form_top"><img src="/images/text_box_img.jpg" width="100%" alt=""></div>
<textarea>Повторный контакт консолидирует стратегический маркетинг, не считаясь с затратами. Лидерство в продажах нейтрализует институциональный инструмент маркетинга, невзирая на действия конкурентов. Интересно отметить, что взаимодействие корпорации и клиента недостижимо. Рекламный макет трансформирует рыночный рекламный клаттер, используя опыт предыдущих кампаний.</textarea>
<button class="gray_button">Прикрепить файл<i class="glyphicon glyphicon-paperclip"></i></button> <button class="gray_button">Прикрепить файл<i class="glyphicon glyphicon-paperclip"></i></button>
<br> <br>
<button class="btn btn-success-2">Создать задачу</button>
<?= Html::submitButton('Создать задачу', ['class' => 'btn btn-success-2']) ?>
</div> </div>
</div> </div>
</div>
<script type="text/javascript">
$(function() {
CKEDITOR.replace( 'ckeditor' );
});
</script>
<?php ActiveForm::end(); ?>
<br> <br>
......
...@@ -4,7 +4,7 @@ use yii\helpers\Html; ...@@ -4,7 +4,7 @@ use yii\helpers\Html;
use yii\grid\GridView; use yii\grid\GridView;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
use common\modules\support\models\redmine\IssueHelper; use common\modules\support\models\redmine\RedmineHelper;
?> ?>
...@@ -64,7 +64,7 @@ use common\modules\support\models\redmine\IssueHelper; ...@@ -64,7 +64,7 @@ use common\modules\support\models\redmine\IssueHelper;
<td class="no_pad"> <td class="no_pad">
<?php <?php
if($issues = IssueHelper::sort($models['issues'])) if($issues = RedmineHelper::sortIsuues($models['issues']))
{ {
foreach ($issues as $issue) foreach ($issues as $issue)
{ {
......
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
"xj/yii2-tagit-widget": "*", "xj/yii2-tagit-widget": "*",
"bower-asset/jquery-cookie": "*", "bower-asset/jquery-cookie": "*",
"2amigos/yii2-transliterator-helper": "*", "2amigos/yii2-transliterator-helper": "*",
"kbsali/redmine-api" : "~1.0" "kbsali/redmine-api" : "~1.0",
"league/html-to-markdown" : "*",
"netcarver/textile" : "3.5.*"
}, },
"require-dev": { "require-dev": {
"yiisoft/yii2-codeception": "*", "yiisoft/yii2-codeception": "*",
......
...@@ -2,10 +2,17 @@ $(document).ready(function() { ...@@ -2,10 +2,17 @@ $(document).ready(function() {
$(".important_button").click(function () { $(".important_button").click(function () {
$(this).toggleClass("important_button_active"); $(this).toggleClass("important_button_active");
});
$(".important_button").click(function () {
$(".important_button_text").toggleClass("important_button_text_active"); $(".important_button_text").toggleClass("important_button_text_active");
var $input = $(this).closest('.important_box').find('input');
if($input.val() == $input.data('simple'))
{
$input.val($input.data('fire'));
}
else
{
$input.val($input.data('simple'));
}
}); });
$(window).scroll(function(){ $(window).scroll(function(){
......
This diff is collapsed.
...@@ -2,7 +2,7 @@ Software License Agreement ...@@ -2,7 +2,7 @@ Software License Agreement
========================== ==========================
CKEditor - The text editor for Internet - http://ckeditor.com CKEditor - The text editor for Internet - http://ckeditor.com
Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
Licensed under the terms of any of the following licenses at your Licensed under the terms of any of the following licenses at your
choice: choice:
...@@ -35,6 +35,26 @@ CKSource engineers and consists of CKSource-owned intellectual ...@@ -35,6 +35,26 @@ CKSource engineers and consists of CKSource-owned intellectual
property. In some specific instances, CKEditor will incorporate work property. In some specific instances, CKEditor will incorporate work
done by developers outside of CKSource with their express permission. done by developers outside of CKSource with their express permission.
The following libraries are included in CKEditor under the MIT license (see Appendix D):
* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2016, CKSource - Frederico Knabben.
* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca.
* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others.
Parts of code taken from the following libraries are included in CKEditor under the MIT license (see Appendix D):
* jQuery (inspired the domReady function, ckeditor_base.js) - Copyright (c) 2011 John Resig, http://jquery.com/
The following libraries are included in CKEditor under the SIL Open Font License, Version 1.1 (see Appendix E):
* Font Awesome (included in the toolbar configurator) - Copyright (C) 2012 by Dave Gandy.
The following libraries are included in CKEditor under the BSD-3 License (see Appendix F):
* highlight.js (included in the `codesnippet` plugin) - Copyright (c) 2006, Ivan Sagalaev.
* YUI Library (included in the `uicolor` plugin) - Copyright (c) 2009, Yahoo! Inc.
Trademarks Trademarks
---------- ----------
...@@ -47,6 +67,7 @@ marks of their respective holders. ...@@ -47,6 +67,7 @@ marks of their respective holders.
Appendix A: The GPL License Appendix A: The GPL License
--------------------------- ---------------------------
```
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 2, June 1991 Version 2, June 1991
...@@ -327,11 +348,12 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE ...@@ -327,11 +348,12 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
```
Appendix B: The LGPL License Appendix B: The LGPL License
---------------------------- ----------------------------
```
GNU LESSER GENERAL PUBLIC LICENSE GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999 Version 2.1, February 1999
...@@ -790,11 +812,12 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH ...@@ -790,11 +812,12 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES. DAMAGES.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
```
Appendix C: The MPL License Appendix C: The MPL License
--------------------------- ---------------------------
```
MOZILLA PUBLIC LICENSE MOZILLA PUBLIC LICENSE
Version 1.1 Version 1.1
...@@ -1262,3 +1285,136 @@ EXHIBIT A -Mozilla Public License. ...@@ -1262,3 +1285,136 @@ EXHIBIT A -Mozilla Public License.
the notices in the Source Code files of the Original Code. You should the notices in the Source Code files of the Original Code. You should
use the text of this Exhibit A rather than the text found in the use the text of this Exhibit A rather than the text found in the
Original Code Source Code for Your Modifications.] Original Code Source Code for Your Modifications.]
```
Appendix D: The MIT License
---------------------------
```
The MIT License (MIT)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
```
Appendix E: The SIL Open Font License Version 1.1
---------------------------------------------
```
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
```
Appendix F: The BSD-3 License
-----------------------------
```
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
CKEditor 4 CKEditor 4
========== ==========
Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
http://ckeditor.com - See LICENSE.md for license information. http://ckeditor.com - See LICENSE.md for license information.
CKEditor is a text editor to be used inside web pages. It's not a replacement CKEditor is a text editor to be used inside web pages. It's not a replacement
......
/* /*
Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
*/ */
(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= (function(a){if("undefined"==typeof a)throw Error("jQuery should be loaded before CKEditor jQuery adapter.");if("undefined"==typeof CKEDITOR)throw Error("CKEditor should be loaded before CKEditor jQuery adapter.");CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},
a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g)){var m=d;d=g;g=m}var k=[];d=d||{};this.each(function(){var b=a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,l=new a.Deferred;k.push(l.promise());if(c&&!f)g&&g.apply(c,[this]),l.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),l.resolve()):setTimeout(arguments.callee,100)},0)},
!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock",!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",
return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, [e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit();return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",
100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);l.resolve()}else setTimeout(arguments.callee,100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,k).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}});CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var m=
return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); this,k=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});k.push(f.promise());return!0}return g.call(b,d)});if(k.length){var b=new a.Deferred;a.when.apply(this,k).done(function(){b.resolveWith(m)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}}))})(window.jQuery);
\ No newline at end of file \ No newline at end of file
 /**
/** * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license
* For licensing, see LICENSE.html or http://ckeditor.com/license
*/ */
/** /**
* This file was added automatically by CKEditor builder. * This file was added automatically by CKEditor builder.
* You may re-use it at any time at http://ckeditor.com/builder to build CKEditor again. * You may re-use it at any time to build CKEditor again.
* *
* NOTE: * If you would like to build CKEditor online again
* (for example to upgrade), visit one the following links:
*
* (1) http://ckeditor.com/builder
* Visit online builder to build CKEditor from scratch.
*
* (2) http://ckeditor.com/builder/ba0d86b4a03f476b450cdf7d3057be62
* Visit online builder to build CKEditor, starting with the same setup as before.
*
* (3) http://ckeditor.com/builder/download/ba0d86b4a03f476b450cdf7d3057be62
* Straight download link to the latest version of CKEditor (Optimized) with the same setup as before.
*
* NOTE:
* This file is not used by CKEditor, you may remove it. * This file is not used by CKEditor, you may remove it.
* Changing this file will not change your CKEditor configuration. * Changing this file will not change your CKEditor configuration.
*/ */
...@@ -17,122 +28,132 @@ var CKBUILDER_CONFIG = { ...@@ -17,122 +28,132 @@ var CKBUILDER_CONFIG = {
skin: 'moono', skin: 'moono',
preset: 'standard', preset: 'standard',
ignore: [ ignore: [
'.bender',
'bender.js',
'bender-err.log',
'bender-out.log',
'dev', 'dev',
'.gitignore', '.DS_Store',
'.editorconfig',
'.gitattributes', '.gitattributes',
'.gitignore',
'gruntfile.js',
'.idea',
'.jscsrc',
'.jshintignore',
'.jshintrc',
'less',
'.mailmap',
'node_modules',
'package.json',
'README.md', 'README.md',
'.mailmap' 'tests'
], ],
plugins : { plugins : {
'about' : 1,
'a11yhelp' : 1, 'a11yhelp' : 1,
'about' : 1,
'basicstyles' : 1, 'basicstyles' : 1,
'blockquote' : 1, 'blockquote' : 1,
'clipboard' : 1, 'clipboard' : 1,
'contextmenu' : 1, 'contextmenu' : 1,
'resize' : 1,
'toolbar' : 1,
'elementspath' : 1, 'elementspath' : 1,
'enterkey' : 1, 'enterkey' : 1,
'entities' : 1, 'entities' : 1,
'filebrowser' : 1, 'filebrowser' : 1,
'floatingspace' : 1, 'floatingspace' : 1,
'format' : 1, 'format' : 1,
'htmlwriter' : 1,
'horizontalrule' : 1, 'horizontalrule' : 1,
'wysiwygarea' : 1, 'htmlwriter' : 1,
'image' : 1, 'image' : 1,
'indent' : 1, 'indentlist' : 1,
'link' : 1, 'link' : 1,
'list' : 1, 'list' : 1,
'magicline' : 1, 'magicline' : 1,
'maximize' : 1, 'maximize' : 1,
'pastetext' : 1,
'pastefromword' : 1, 'pastefromword' : 1,
'pastetext' : 1,
'removeformat' : 1, 'removeformat' : 1,
'resize' : 1,
'scayt' : 1,
'showborders' : 1,
'sourcearea' : 1, 'sourcearea' : 1,
'specialchar' : 1, 'specialchar' : 1,
'scayt' : 1,
'stylescombo' : 1, 'stylescombo' : 1,
'tab' : 1, 'tab' : 1,
'table' : 1, 'table' : 1,
'tabletools' : 1, 'tabletools' : 1,
'toolbar' : 1,
'undo' : 1, 'undo' : 1,
'wsc' : 1, 'wsc' : 1,
'dialog' : 1, 'wysiwygarea' : 1
'dialogui' : 1,
'menu' : 1,
'floatpanel' : 1,
'panel' : 1,
'button' : 1,
'popup' : 1,
'richcombo' : 1,
'listblock' : 1,
'fakeobjects' : 1,
'menubutton' : 1
}, },
languages : { languages : {
'af' : 1, 'af' : 1,
'ar' : 1, 'ar' : 1,
'eu' : 1, 'bg' : 1,
'bn' : 1, 'bn' : 1,
'bs' : 1, 'bs' : 1,
'bg' : 1,
'ca' : 1, 'ca' : 1,
'zh-cn' : 1,
'zh' : 1,
'hr' : 1,
'cs' : 1, 'cs' : 1,
'cy' : 1,
'da' : 1, 'da' : 1,
'nl' : 1, 'de' : 1,
'de-ch' : 1,
'el' : 1,
'en' : 1, 'en' : 1,
'en-au' : 1, 'en-au' : 1,
'en-ca' : 1, 'en-ca' : 1,
'en-gb' : 1, 'en-gb' : 1,
'eo' : 1, 'eo' : 1,
'es' : 1,
'et' : 1, 'et' : 1,
'fo' : 1, 'eu' : 1,
'fa' : 1,
'fi' : 1, 'fi' : 1,
'fo' : 1,
'fr' : 1, 'fr' : 1,
'fr-ca' : 1, 'fr-ca' : 1,
'gl' : 1, 'gl' : 1,
'ka' : 1,
'de' : 1,
'el' : 1,
'gu' : 1, 'gu' : 1,
'he' : 1, 'he' : 1,
'hi' : 1, 'hi' : 1,
'hr' : 1,
'hu' : 1, 'hu' : 1,
'id' : 1,
'is' : 1, 'is' : 1,
'it' : 1, 'it' : 1,
'ja' : 1, 'ja' : 1,
'ka' : 1,
'km' : 1, 'km' : 1,
'ko' : 1, 'ko' : 1,
'ku' : 1, 'ku' : 1,
'lv' : 1,
'lt' : 1, 'lt' : 1,
'lv' : 1,
'mk' : 1, 'mk' : 1,
'ms' : 1,
'mn' : 1, 'mn' : 1,
'no' : 1, 'ms' : 1,
'nb' : 1, 'nb' : 1,
'fa' : 1, 'nl' : 1,
'no' : 1,
'pl' : 1, 'pl' : 1,
'pt-br' : 1,
'pt' : 1, 'pt' : 1,
'pt-br' : 1,
'ro' : 1, 'ro' : 1,
'ru' : 1, 'ru' : 1,
'sr' : 1, 'si' : 1,
'sr-latn' : 1,
'sk' : 1, 'sk' : 1,
'sl' : 1, 'sl' : 1,
'es' : 1, 'sq' : 1,
'sr' : 1,
'sr-latn' : 1,
'sv' : 1, 'sv' : 1,
'th' : 1, 'th' : 1,
'tr' : 1, 'tr' : 1,
'tt' : 1,
'ug' : 1, 'ug' : 1,
'uk' : 1, 'uk' : 1,
'vi' : 1, 'vi' : 1,
'cy' : 1, 'zh' : 1,
'zh-cn' : 1
} }
}; };
\ No newline at end of file
This diff is collapsed.
/** /**
* @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.html or http://ckeditor.com/license * For licensing, see LICENSE.md or http://ckeditor.com/license
*/ */
CKEDITOR.editorConfig = function( config ) { CKEDITOR.editorConfig = function( config ) {
// Define changes to default configuration here. // Define changes to default configuration here.
// For the complete reference: // For complete reference see:
// http://docs.ckeditor.com/#!/api/CKEDITOR.config // http://docs.ckeditor.com/#!/api/CKEDITOR.config
// The toolbar groups arrangement, optimized for two toolbar rows. // The toolbar groups arrangement, optimized for two toolbar rows.
config.toolbarGroups = [ config.toolbarGroups = [
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, { name: 'clipboard', groups: [ 'undo', 'clipboard' ] },
{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, { name: 'editing', groups: [ 'find', 'selection', 'spellchecker', 'editing' ] },
{ name: 'links' }, { name: 'links', groups: [ 'links' ] },
{ name: 'insert' }, { name: 'forms', groups: [ 'forms' ] },
{ name: 'forms' }, { name: 'document', groups: [ 'mode', 'document', 'doctools' ] },
{ name: 'tools' }, { name: 'others', groups: [ 'others' ] },
{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] },
{ name: 'others' },
'/',
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align' ] }, { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi', 'paragraph' ] },
{ name: 'styles' }, { name: 'styles', groups: [ 'styles' ] },
{ name: 'colors' }, { name: 'insert', groups: [ 'insert' ] },
{ name: 'about' } { name: 'colors', groups: [ 'colors' ] },
{ name: 'about', groups: [ 'about' ] },
{ name: 'tools', groups: [ 'tools' ] }
]; ];
// Remove some buttons, provided by the standard plugins, which we don't config.removeButtons = 'Subscript,Superscript,PasteText,PasteFromWord,Scayt,Link,Unlink,Anchor,Table,HorizontalRule,SpecialChar,About,Styles,Blockquote,Source';
// need to have in the Standard(s) toolbar.
config.removeButtons = 'Underline,Subscript,Superscript'; // Set the most common block elements.
config.format_tags = 'p;h1;h2;h3;pre';
// Simplify the dialog windows.
config.removeDialogTabs = 'image:advanced;link:advanced';
}; };
/* /*
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
*/ */
body body
...@@ -21,7 +21,7 @@ body ...@@ -21,7 +21,7 @@ body
.cke_editable .cke_editable
{ {
font-size: 13px; font-size: 13px;
line-height: 1.6em; line-height: 1.6;
} }
blockquote blockquote
...@@ -64,7 +64,7 @@ ol,ul,dl ...@@ -64,7 +64,7 @@ ol,ul,dl
h1,h2,h3,h4,h5,h6 h1,h2,h3,h4,h5,h6
{ {
font-weight: normal; font-weight: normal;
line-height: 1.2em; line-height: 1.2;
} }
hr hr
...@@ -73,27 +73,60 @@ hr ...@@ -73,27 +73,60 @@ hr
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
} }
img.right { img.right
border: 1px solid #ccc; {
float: right; border: 1px solid #ccc;
margin-left: 15px; float: right;
padding: 5px; margin-left: 15px;
} padding: 5px;
img.left {
border: 1px solid #ccc;
float: left;
margin-right: 15px;
padding: 5px;
} }
img:hover { img.left
opacity: .9; {
filter: alpha(opacity = 90); border: 1px solid #ccc;
float: left;
margin-right: 15px;
padding: 5px;
} }
pre pre
{ {
white-space: pre-wrap; /* CSS 2.1 */ white-space: pre-wrap; /* CSS 2.1 */
word-wrap: break-word; /* IE7 */ word-wrap: break-word; /* IE7 */
-moz-tab-size: 4;
tab-size: 4;
}
.marker
{
background-color: Yellow;
}
span[lang]
{
font-style: italic;
}
figure
{
text-align: center;
border: solid 1px #ccc;
border-radius: 2px;
background: rgba(0,0,0,0.05);
padding: 10px;
margin: 10px 20px;
display: inline-block;
}
figure > figcaption
{
text-align: center;
display: block; /* For IE8 */
}
a > img {
padding: 1px;
margin: 1px;
border: none;
outline: 1px solid #0782C1;
} }
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* /*
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
*/ */
CKEDITOR.dialog.add("a11yHelp",function(j){var l=j.lang.a11yhelp,m=CKEDITOR.tools.getNextId(),d={8:"BACKSPACE",9:"TAB",13:"ENTER",16:"SHIFT",17:"CTRL",18:"ALT",19:"PAUSE",20:"CAPSLOCK",27:"ESCAPE",33:"PAGE UP",34:"PAGE DOWN",35:"END",36:"HOME",37:"LEFT ARROW",38:"UP ARROW",39:"RIGHT ARROW",40:"DOWN ARROW",45:"INSERT",46:"DELETE",91:"LEFT WINDOW KEY",92:"RIGHT WINDOW KEY",93:"SELECT KEY",96:"NUMPAD 0",97:"NUMPAD 1",98:"NUMPAD 2",99:"NUMPAD 3",100:"NUMPAD 4",101:"NUMPAD 5",102:"NUMPAD 6",103:"NUMPAD 7", CKEDITOR.dialog.add("a11yHelp",function(l){var a=l.lang.a11yhelp,n=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a["delete"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8,
104:"NUMPAD 8",105:"NUMPAD 9",106:"MULTIPLY",107:"ADD",109:"SUBTRACT",110:"DECIMAL POINT",111:"DIVIDE",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NUM LOCK",145:"SCROLL LOCK",186:"SEMI-COLON",187:"EQUAL SIGN",188:"COMMA",189:"DASH",190:"PERIOD",191:"FORWARD SLASH",192:"GRAVE ACCENT",219:"OPEN BRACKET",220:"BACK SLASH",221:"CLOSE BRAKET",222:"SINGLE QUOTE"};d[CKEDITOR.ALT]="ALT";d[CKEDITOR.SHIFT]="SHIFT";d[CKEDITOR.CTRL]="CTRL"; 105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT,
var e=[CKEDITOR.ALT,CKEDITOR.SHIFT,CKEDITOR.CTRL],n=/\$\{(.*?)\}/g,q=function(){var o=j.keystrokeHandler.keystrokes,f={},b;for(b in o)f[o[b]]=b;return function(b,g){var a;if(f[g]){a=f[g];for(var h,i,k=[],c=0;c<e.length;c++)i=e[c],h=a/e[c],1<h&&2>=h&&(a-=i,k.push(d[i]));k.push(d[a]||String.fromCharCode(a));a=k.join("+")}else a=b;return a}}();return{title:l.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;", CKEDITOR.CTRL],p=/\$\{(.*?)\}/g,t=function(){var a=l.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,k,m=[],d=0;d<f.length;d++)k=f[d],h=b/f[d],1<h&&2>=h&&(b-=k,m.push(e[k]));m.push(e[b]||String.fromCharCode(b));b=m.join("+")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:l.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()},
focus:function(){this.getElement().focus()},html:function(){for(var d='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+m+'_arialbl" tabIndex="-1">%1</div><span id="'+m+'_arialbl" class="cke_voice_label">'+l.contents+" </span>",f=[],b=l.legend,j=b.length,g=0;g<j;g++){for(var a=b[g],h=[],i=a.items,k=i.length,c=0;c<k;c++){var e=i[c],p=e.legend.replace(n,q);p.match(n)||h.push("<dt>%1</dt><dd>%2</dd>".replace("%1",e.name).replace("%2",p))}f.push("<h1>%1</h1><dl>%2</dl>".replace("%1", html:function(){for(var e='\x3cdiv class\x3d"cke_accessibility_legend" role\x3d"document" aria-labelledby\x3d"'+n+'_arialbl" tabIndex\x3d"-1"\x3e%1\x3c/div\x3e\x3cspan id\x3d"'+n+'_arialbl" class\x3d"cke_voice_label"\x3e'+a.contents+" \x3c/span\x3e",g=[],c=a.legend,l=c.length,f=0;f<l;f++){for(var b=c[f],h=[],k=b.items,m=k.length,d=0;d<m;d++){var q=k[d],r=q.legend.replace(p,t);r.match(p)||h.push("\x3cdt\x3e%1\x3c/dt\x3e\x3cdd\x3e%2\x3c/dd\x3e".replace("%1",q.name).replace("%2",r))}g.push("\x3ch1\x3e%1\x3c/h1\x3e\x3cdl\x3e%2\x3c/dl\x3e".replace("%1",
a.name).replace("%2",h.join("")))}return d.replace("%1",f.join(""))}()+'<style type="text/css">.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,.cke_browser_ie6 .cke_accessibility_legend{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}</style>'}]}], b.name).replace("%2",h.join("")))}return e.replace("%1",g.join(""))}()+'\x3cstyle type\x3d"text/css"\x3e.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}\x3c/style\x3e'}]}],
buttons:[CKEDITOR.dialog.cancelButton]}}); buttons:[CKEDITOR.dialog.cancelButton]}});
\ No newline at end of file
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
cs.js Found: 30 Missing: 0 cs.js Found: 30 Missing: 0
cy.js Found: 30 Missing: 0 cy.js Found: 30 Missing: 0
......
/* /*
Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or http://ckeditor.com/license For licensing, see LICENSE.md or http://ckeditor.com/license
*/ */
CKEDITOR.plugins.setLang("a11yhelp","af",{title:"Toeganglikheid instruksies",contents:"Hulp inhoud. Druk ESC om toe te maak.",legend:[{name:"Algemeen",items:[{name:"Bewerker balk",legend:"Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT-TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig."},{name:"Bewerker dialoog",legend:"In 'n dialoog, druk TAB vir die volgende dialoog veld, SHIFT + TAB vir die vorige dialoog veld, ENTER om te bevestig enESC om die dialoog af te breek. Vir 'n dialoog met meer as een leisie, druk ALT + F10 om die leisielys te wys. Beweeg dan met TAB of Regter pyl na die volgende leise of SHIFT + TAB of Linker pyl na die voorige leisie. Druk SPACE of ENTER om na die leisie bladsy toe te gaan."}, CKEDITOR.plugins.setLang("a11yhelp","af",{title:"Toeganglikheid instruksies",contents:"Hulp inhoud. Druk ESC om toe te maak.",legend:[{name:"Algemeen",items:[{name:"Bewerker balk",legend:"Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig."},{name:"Bewerker dialoog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
{name:"Bewerkerinhoudmenu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Bewerkerinhoudmenu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pouse",capslock:"Hoofletterslot",escape:"Ontsnap",pageUp:"Blaaiop",pageDown:"Blaaiaf",end:"Einde",home:"Tuis",leftArrow:"Linkspyl",upArrow:"Oppyl",rightArrow:"Regterpyl",downArrow:"Afpyl",insert:"Toevoeg","delete":"Verwyder",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Nommerblok 0",numpad1:"Nommerblok 1", {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pouse",capslock:"Hoofletterslot",escape:"Ontsnap",pageUp:"Blaaiop",pageDown:"Blaaiaf",end:"Einde",home:"Tuis",leftArrow:"Linkspyl",upArrow:"Oppyl",rightArrow:"Regterpyl",downArrow:"Afpyl",insert:"Toevoeg","delete":"Verwyder",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Nommerblok 0",numpad1:"Nommerblok 1",
numpad2:"Nommerblok 2",numpad3:"Nommerblok 3",numpad4:"Nommerblok 4",numpad5:"Nommerblok 5",numpad6:"Nommerblok 6",numpad7:"Nommerblok 7",numpad8:"Nommerblok 8",numpad9:"Nommerblok 9",multiply:"Maal",add:"Plus",subtract:"Minus",decimalPoint:"Desimaalepunt",divide:"Gedeeldeur",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nommervergrendel",scrollLock:"Rolvergrendel",semiColon:"Kommapunt",equalSign:"Isgelykaan",comma:"Komma",dash:"Koppelteken", numpad2:"Nommerblok 2",numpad3:"Nommerblok 3",numpad4:"Nommerblok 4",numpad5:"Nommerblok 5",numpad6:"Nommerblok 6",numpad7:"Nommerblok 7",numpad8:"Nommerblok 8",numpad9:"Nommerblok 9",multiply:"Maal",add:"Plus",subtract:"Minus",decimalPoint:"Desimaalepunt",divide:"Gedeeldeur",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nommervergrendel",scrollLock:"Rolvergrendel",semiColon:"Kommapunt",equalSign:"Isgelykaan",comma:"Komma",dash:"Koppelteken",
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment