From 5133d85b99b6609285d1a3142611fa11d30ad9f1 Mon Sep 17 00:00:00 2001 From: "alton.crossley" Date: Thu, 23 Apr 2015 14:35:15 -0600 Subject: [PATCH 001/102] adding windows batch file for console --- console.bat | 1 + 1 file changed, 1 insertion(+) create mode 100644 console.bat diff --git a/console.bat b/console.bat new file mode 100644 index 00000000..391a2617 --- /dev/null +++ b/console.bat @@ -0,0 +1 @@ +@php console %* \ No newline at end of file From 21bf1045872f6636420bed6b2dcd70a9ed5be7a5 Mon Sep 17 00:00:00 2001 From: corpsee Date: Sat, 25 Apr 2015 09:54:08 +0600 Subject: [PATCH 002/102] Separated strings for 'archived'/'archived_menu' --- PHPCI/Languages/lang.da.php | 1 + PHPCI/Languages/lang.de.php | 1 + PHPCI/Languages/lang.el.php | 1 + PHPCI/Languages/lang.en.php | 1 + PHPCI/Languages/lang.es.php | 1 + PHPCI/Languages/lang.fr.php | 1 + PHPCI/Languages/lang.it.php | 3 ++- PHPCI/Languages/lang.nl.php | 1 + PHPCI/Languages/lang.pl.php | 1 + PHPCI/Languages/lang.ru.php | 3 ++- PHPCI/Languages/lang.uk.php | 3 ++- PHPCI/View/layout.phtml | 2 +- 12 files changed, 15 insertions(+), 4 deletions(-) diff --git a/PHPCI/Languages/lang.da.php b/PHPCI/Languages/lang.da.php index 20e403e1..72959d12 100644 --- a/PHPCI/Languages/lang.da.php +++ b/PHPCI/Languages/lang.da.php @@ -114,6 +114,7 @@ i din foretrukne hosting-platform.', 'default_branch' => 'Default branch navn', 'allow_public_status' => 'Tillad offentlig status-side og -billede for dette projekt?', 'archived' => 'Archived', + 'archived_menu' => 'Archived', 'save_project' => 'Gem Projekt', 'error_mercurial' => 'Mercurial repository-URL skal starte med http:// eller https://', diff --git a/PHPCI/Languages/lang.de.php b/PHPCI/Languages/lang.de.php index 8a08e37d..bfc7ae2d 100644 --- a/PHPCI/Languages/lang.de.php +++ b/PHPCI/Languages/lang.de.php @@ -115,6 +115,7 @@ generiert. Um es zu verwenden, fügen Sie einfach den folgenden Public Key im Ab 'default_branch' => 'Name des Standardbranches', 'allow_public_status' => 'Öffentliche Statusseite und -bild für dieses Projekt einschalten?', 'archived' => 'Archived', + 'archived_menu' => 'Archived', 'save_project' => 'Projekt speichern', 'error_mercurial' => 'Mercurial Repository-URL muss mit http://, oder https:// beginnen', diff --git a/PHPCI/Languages/lang.el.php b/PHPCI/Languages/lang.el.php index cb7d169f..2d988ca0 100644 --- a/PHPCI/Languages/lang.el.php +++ b/PHPCI/Languages/lang.el.php @@ -115,6 +115,7 @@ PHPCI', 'default_branch' => 'Προκαθορισμένο όνομα διακλάδωσης', 'allow_public_status' => 'Ενεργοποίηση της σελίδας δημόσιας κατάστασης και την εικόνα για το έργο αυτό;', 'archived' => 'Archived', + 'archived_menu' => 'Archived', 'save_project' => 'Αποθήκευση έργου', 'error_mercurial' => 'Ο σύνδεσμος URL του ευμετάβλητου αποθετηρίου πρέπει να ξεκινάει με http:// ή https://', diff --git a/PHPCI/Languages/lang.en.php b/PHPCI/Languages/lang.en.php index d6c48754..b0a0660e 100644 --- a/PHPCI/Languages/lang.en.php +++ b/PHPCI/Languages/lang.en.php @@ -116,6 +116,7 @@ PHPCI', 'default_branch' => 'Default branch name', 'allow_public_status' => 'Enable public status page and image for this project?', 'archived' => 'Archived', + 'archived_menu' => 'Archived', 'save_project' => 'Save Project', 'error_mercurial' => 'Mercurial repository URL must be start with http:// or https://', diff --git a/PHPCI/Languages/lang.es.php b/PHPCI/Languages/lang.es.php index 95a6eb73..1b7b33f7 100644 --- a/PHPCI/Languages/lang.es.php +++ b/PHPCI/Languages/lang.es.php @@ -115,6 +115,7 @@ PHPCI', 'default_branch' => 'Nombre de la rama por defecto', 'allow_public_status' => '¿Activar página pública con el estado del proyecto?', 'archived' => 'Archivado', + 'archived_menu' => 'Archivado', 'save_project' => 'Guardar Proyecto', 'error_mercurial' => 'La URL del repositorio de Mercurial debe comenzar con http:// or https://', diff --git a/PHPCI/Languages/lang.fr.php b/PHPCI/Languages/lang.fr.php index f1ad7129..dd3e6256 100644 --- a/PHPCI/Languages/lang.fr.php +++ b/PHPCI/Languages/lang.fr.php @@ -115,6 +115,7 @@ PHPCI', 'default_branch' => 'Nom de la branche par défaut', 'allow_public_status' => 'Activer la page de statut publique et l\'image pour ce projet ?', 'archived' => 'Archived', + 'archived_menu' => 'Archived', 'save_project' => 'Enregistrer le projet', 'error_mercurial' => 'Les URLs de dépôt Mercurial doivent commencer par http:// ou https://', diff --git a/PHPCI/Languages/lang.it.php b/PHPCI/Languages/lang.it.php index ff326d14..2c7bbea3 100644 --- a/PHPCI/Languages/lang.it.php +++ b/PHPCI/Languages/lang.it.php @@ -113,8 +113,9 @@ PHPCI', (se non puoi aggiungere il file phpci.yml nel repository di questo progetto)', 'default_branch' => 'Nome del branch di default', 'allow_public_status' => 'Vuoi rendere pubblica la pagina dello stato e l\'immagine per questo progetto?', - 'save_project' => 'Salva il Progetto', 'archived' => 'Archived', + 'archived_menu' => 'Archived', + 'save_project' => 'Salva il Progetto', 'error_mercurial' => 'L\'URL del repository Mercurial URL deve iniziare con http:// o https://', 'error_remote' => 'L\'URL del repository deve iniziare con git://, http:// o https://', diff --git a/PHPCI/Languages/lang.nl.php b/PHPCI/Languages/lang.nl.php index e0638aaf..1f46eb71 100644 --- a/PHPCI/Languages/lang.nl.php +++ b/PHPCI/Languages/lang.nl.php @@ -115,6 +115,7 @@ van je gekozen source code hosting platform', 'default_branch' => 'Standaard branch naam', 'allow_public_status' => 'Publieke statuspagina en afbeelding beschikbaar maken voor dit project?', 'archived' => 'Archived', + 'archived_menu' => 'Archived', 'save_project' => 'Project opslaan', 'error_mercurial' => 'Mercurial repository URL dient te starten met http:// of https://', diff --git a/PHPCI/Languages/lang.pl.php b/PHPCI/Languages/lang.pl.php index d6f95ad6..7e35056c 100644 --- a/PHPCI/Languages/lang.pl.php +++ b/PHPCI/Languages/lang.pl.php @@ -116,6 +116,7 @@ od wybranego kodu źródłowego platformy hostingowej.', 'default_branch' => 'Domyślna nazwa gałęzi', 'allow_public_status' => 'Włączyć status publiczny dla tego projektu?', 'archived' => 'W archiwum', + 'archived_menu' => 'W archiwum', 'save_project' => 'Zachowaj Projekt', 'error_mercurial' => 'URL repozytorium Mercurialnego powinno zaczynać się od http:// and https://', diff --git a/PHPCI/Languages/lang.ru.php b/PHPCI/Languages/lang.ru.php index aa0f40fb..68f52e16 100644 --- a/PHPCI/Languages/lang.ru.php +++ b/PHPCI/Languages/lang.ru.php @@ -113,7 +113,8 @@ PHPCI', (если вы не добавили файл phpci.yml в репозиторий вашего проекта)', 'default_branch' => 'Ветка по умолчанию', 'allow_public_status' => 'Разрешить публичный статус и изображение (статуса) для проекта', - 'archived' => 'Запакован', + 'archived' => 'Архивный', + 'archived_menu' => 'Архив', 'save_project' => 'Сохранить проект', 'error_mercurial' => 'URL репозитория Mercurial должен начинаться с http:// или https://', diff --git a/PHPCI/Languages/lang.uk.php b/PHPCI/Languages/lang.uk.php index a3ca1b37..7071f059 100644 --- a/PHPCI/Languages/lang.uk.php +++ b/PHPCI/Languages/lang.uk.php @@ -113,7 +113,8 @@ PHPCI', (якщо ви не додали файл phpci.yml до репозиторію вашого проекту)', 'default_branch' => 'Назва гілки за замовчуванням', 'allow_public_status' => 'Увімкнути публічну сторінку статусу та зображення для цього проекта?', - 'archived' => 'Archived', + 'archived' => 'Архівний', + 'archived_menu' => 'Архів', 'save_project' => 'Зберегти проект', 'error_mercurial' => 'URL репозиторію Mercurial повинен починатись із http:// або https://', diff --git a/PHPCI/View/layout.phtml b/PHPCI/View/layout.phtml index 82eabfe5..ca462475 100644 --- a/PHPCI/View/layout.phtml +++ b/PHPCI/View/layout.phtml @@ -240,7 +240,7 @@
  • - +
  • From 1c864cebedc6ae5850930caf531bc5202bd2db82 Mon Sep 17 00:00:00 2001 From: corpsee Date: Sat, 23 May 2015 15:40:49 +0600 Subject: [PATCH 003/102] Fixed TapParser parse fail with valid data + added tests --- PHPCI/Plugin/Util/TapParser.php | 13 ++++---- Tests/PHPCI/Plugin/Util/TapParserTest.php | 36 +++++++++++++++++++++++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/PHPCI/Plugin/Util/TapParser.php b/PHPCI/Plugin/Util/TapParser.php index 18772a6a..132c5cce 100644 --- a/PHPCI/Plugin/Util/TapParser.php +++ b/PHPCI/Plugin/Util/TapParser.php @@ -13,9 +13,10 @@ use Symfony\Component\Yaml\Yaml; class TapParser { const TEST_COUNTS_PATTERN = '/^\d+\.\.(\d+)/'; - const TEST_LINE_PATTERN = '/^(ok|not ok)(?:\s+\d+)?(?:\s+\-)?\s*(.*?)(?:\s*#\s*(skip|todo)\s*(.*))?\s*$/i'; - const TEST_YAML_START = '/^(\s*)---/'; - const TEST_DIAGNOSTIC = '/^#/'; + const TEST_LINE_PATTERN = '/^(ok|not ok)(?:\s+\d+)?(?:\s+\-)?\s*(.*?)(?:\s*#\s*(skip|todo)\s*(.*))?\s*$/i'; + const TEST_YAML_START = '/^(\s*)---/'; + const TEST_DIAGNOSTIC = '/^#/'; + const TEST_COVERAGE = '/^Generating/'; /** * @var string @@ -81,7 +82,7 @@ class TapParser $line = $this->nextLine(); } - if (count($this->results) !== $this->testCount) { + if (false !== $this->testCount && count($this->results) !== $this->testCount) { throw new Exception(Lang::get('tap_error')); } @@ -126,13 +127,15 @@ class TapParser /** Parse a single line. * * @param string $line + * + * @throws Exception */ protected function parseLine($line) { if (preg_match(self::TEST_COUNTS_PATTERN, $line, $matches)) { $this->testCount = intval($matches[1]); - } elseif (preg_match(self::TEST_DIAGNOSTIC, $line)) { + } elseif (preg_match(self::TEST_DIAGNOSTIC, $line) || preg_match(self::TEST_COVERAGE, $line) || !$line) { return; } elseif (preg_match(self::TEST_LINE_PATTERN, $line, $matches)) { diff --git a/Tests/PHPCI/Plugin/Util/TapParserTest.php b/Tests/PHPCI/Plugin/Util/TapParserTest.php index 732a44a6..8d31d7c9 100644 --- a/Tests/PHPCI/Plugin/Util/TapParserTest.php +++ b/Tests/PHPCI/Plugin/Util/TapParserTest.php @@ -23,6 +23,28 @@ ok 1 - SomeTest::testAnother not ok 1..2 Trailing garbage ! +TAP; + $parser = new TapParser($content); + $result = $parser->parse(); + + $this->assertEquals(array( + array('pass' => true, 'severity' => 'success', 'message' => 'SomeTest::testAnother'), + array('pass' => false, 'severity' => 'fail', 'message' => ''), + ), $result); + + $this->assertEquals(1, $parser->getTotalFailures()); + } + + public function testSimple2() + { + $content = <<parse(); @@ -48,6 +70,20 @@ TAP; $parser->parse(); } + public function testTapCoverage() + { + $content = <<parse(); + + $this->assertEquals(array(), $result); + } + /** * @expectedException \Exception * @expectedExceptionMessageRegExp /Duplicated TAP/ From c20ee0533bb1ba61573b04a442762b41ac046e11 Mon Sep 17 00:00:00 2001 From: corpsee Date: Sun, 24 May 2015 12:39:27 +0600 Subject: [PATCH 004/102] Fixed TapParser::parseLine Cyclomatic Complexity --- PHPCI/Plugin/Util/TapParser.php | 112 +++++++++++++++++++++++++------- 1 file changed, 88 insertions(+), 24 deletions(-) diff --git a/PHPCI/Plugin/Util/TapParser.php b/PHPCI/Plugin/Util/TapParser.php index 132c5cce..25d3a2a5 100644 --- a/PHPCI/Plugin/Util/TapParser.php +++ b/PHPCI/Plugin/Util/TapParser.php @@ -124,6 +124,79 @@ class TapParser return false; } + /** + * @param string $line + * + * @return boolean + */ + protected function testCountLine($line) + { + if (preg_match(self::TEST_COUNTS_PATTERN, $line, $matches)) { + $this->testCount = intval($matches[1]); + + return true; + } + + return false; + } + + /** + * @param string $line + * + * @return boolean + */ + protected function testLine($line) + { + if (preg_match(self::TEST_LINE_PATTERN, $line, $matches)) { + $this->results[] = $this->processTestLine( + $matches[1], + isset($matches[2]) ? $matches[2] : '', + isset($matches[3]) ? $matches[3] : null, + isset($matches[4]) ? $matches[4] : null + ); + + return true; + } + + return false; + } + + /** + * @param string $line + * + * @return boolean + */ + protected function yamlLine($line) + { + if (preg_match(self::TEST_YAML_START, $line, $matches)) { + $diagnostic = $this->processYamlBlock($matches[1]); + $test = array_pop($this->results); + if (isset($test['message'], $diagnostic['message'])) { + $test['message'] .= PHP_EOL . $diagnostic['message']; + unset($diagnostic['message']); + } + $this->results[] = array_replace($test, $diagnostic); + + return true; + } + + return false; + } + + /** + * @param string $line + * + * @return boolean + */ + protected function garbageLine($line) + { + if (preg_match(self::TEST_DIAGNOSTIC, $line) || preg_match(self::TEST_COVERAGE, $line) || !$line) { + return true; + } + + return false; + } + /** Parse a single line. * * @param string $line @@ -132,32 +205,23 @@ class TapParser */ protected function parseLine($line) { - if (preg_match(self::TEST_COUNTS_PATTERN, $line, $matches)) { - $this->testCount = intval($matches[1]); - - } elseif (preg_match(self::TEST_DIAGNOSTIC, $line) || preg_match(self::TEST_COVERAGE, $line) || !$line) { + if ($this->garbageLine($line)) { return; - - } elseif (preg_match(self::TEST_LINE_PATTERN, $line, $matches)) { - $this->results[] = $this->processTestLine( - $matches[1], - isset($matches[2]) ? $matches[2] : '', - isset($matches[3]) ? $matches[3] : null, - isset($matches[4]) ? $matches[4] : null - ); - - } elseif (preg_match(self::TEST_YAML_START, $line, $matches)) { - $diagnostic = $this->processYamlBlock($matches[1]); - $test = array_pop($this->results); - if (isset($test['message'], $diagnostic['message'])) { - $test['message'] .= PHP_EOL . $diagnostic['message']; - unset($diagnostic['message']); - } - $this->results[] = array_replace($test, $diagnostic); - - } else { - throw new Exception(sprintf('Incorrect TAP data, line %d: %s', $this->lineNumber, $line)); } + + if ($this->testCountLine($line)) { + return; + } + + if ($this->testLine($line)) { + return; + } + + if ($this->yamlLine($line)) { + return; + } + + throw new Exception(sprintf('Incorrect TAP data, line %d: %s', $this->lineNumber, $line)); } /** From 3f02e63c92bd99fe7990a6f9b2aa23f1b978d19b Mon Sep 17 00:00:00 2001 From: corpsee Date: Sun, 24 May 2015 12:43:43 +0600 Subject: [PATCH 005/102] Fixed TapParser::parseLine Cyclomatic Complexity --- PHPCI/Plugin/Util/TapParser.php | 36 ++++----------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/PHPCI/Plugin/Util/TapParser.php b/PHPCI/Plugin/Util/TapParser.php index 25d3a2a5..451b73f0 100644 --- a/PHPCI/Plugin/Util/TapParser.php +++ b/PHPCI/Plugin/Util/TapParser.php @@ -124,22 +124,6 @@ class TapParser return false; } - /** - * @param string $line - * - * @return boolean - */ - protected function testCountLine($line) - { - if (preg_match(self::TEST_COUNTS_PATTERN, $line, $matches)) { - $this->testCount = intval($matches[1]); - - return true; - } - - return false; - } - /** * @param string $line * @@ -183,20 +167,6 @@ class TapParser return false; } - /** - * @param string $line - * - * @return boolean - */ - protected function garbageLine($line) - { - if (preg_match(self::TEST_DIAGNOSTIC, $line) || preg_match(self::TEST_COVERAGE, $line) || !$line) { - return true; - } - - return false; - } - /** Parse a single line. * * @param string $line @@ -205,11 +175,13 @@ class TapParser */ protected function parseLine($line) { - if ($this->garbageLine($line)) { + if (preg_match(self::TEST_DIAGNOSTIC, $line) || preg_match(self::TEST_COVERAGE, $line) || !$line) { return; } - if ($this->testCountLine($line)) { + if (preg_match(self::TEST_COUNTS_PATTERN, $line, $matches)) { + $this->testCount = intval($matches[1]); + return; } From 853107027b64d260225b678cde45124b0ac0c544 Mon Sep 17 00:00:00 2001 From: corpsee Date: Sun, 24 May 2015 14:20:51 +0600 Subject: [PATCH 006/102] Fixed GithubBuild::getDiffLineNumber method for correct phpcpd work --- PHPCI/Model/Build/GithubBuild.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PHPCI/Model/Build/GithubBuild.php b/PHPCI/Model/Build/GithubBuild.php index d6b2b7b9..81510ae0 100644 --- a/PHPCI/Model/Build/GithubBuild.php +++ b/PHPCI/Model/Build/GithubBuild.php @@ -201,6 +201,8 @@ class GithubBuild extends RemoteGitBuild */ protected function getDiffLineNumber(Builder $builder, $file, $line) { + $line = (integer)$line; + $builder->logExecOutput(false); $prNumber = $this->getExtra('pull_request_number'); From 2672908225679aeefb3cba8a1ba353c12e9face7 Mon Sep 17 00:00:00 2001 From: mulleto Date: Fri, 29 May 2015 08:26:47 +0200 Subject: [PATCH 007/102] Make check for Pdepend output dir more robust. Before this fix, the pdepend module would check for "is_writable", which returns false even when the directory does not exist. I suggest to a) attempt to crete the dir if it does not exist, and b) make the error message more explanatory in case the dir cannot be created or is not accessible. --- PHPCI/Plugin/Pdepend.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/PHPCI/Plugin/Pdepend.php b/PHPCI/Plugin/Pdepend.php index 73b669c1..faef406d 100644 --- a/PHPCI/Plugin/Pdepend.php +++ b/PHPCI/Plugin/Pdepend.php @@ -73,8 +73,11 @@ class Pdepend implements \PHPCI\Plugin */ public function execute() { + if (!file_exists($this->location)) { + mkdir($this->location); + } if (!is_writable($this->location)) { - throw new \Exception(sprintf('The location %s is not writable.', $this->location)); + throw new \Exception(sprintf('The location %s is not writable or does not exist.', $this->location)); } $pdepend = $this->phpci->findBinary('pdepend'); From 9efd8e06dc23bda7102058e4a1f29bb72f8335ab Mon Sep 17 00:00:00 2001 From: Joe Huss Date: Thu, 25 Jun 2015 07:48:26 -0400 Subject: [PATCH 008/102] Contribution Type: improvement / new feature Primary Area: plugins Description of change: Implemented using the same changes mentioned here: https://www.phptesting.org/forums/topic/5-mysql-plugin-setup/ Allows you to specify a hostname for your mysql connection. Not my original code just patching it into the current source and made a branchs/push for it. (i.e. Created a new plugin named ToolX, used library X to implement, see link) --- PHPCI/Plugin/Mysql.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PHPCI/Plugin/Mysql.php b/PHPCI/Plugin/Mysql.php index 5c36a09f..fdb521ef 100644 --- a/PHPCI/Plugin/Mysql.php +++ b/PHPCI/Plugin/Mysql.php @@ -166,10 +166,11 @@ class Mysql implements \PHPCI\Plugin $args = array( ':import_file' => escapeshellarg($import_file), ':decomp_cmd' => $decomp_cmd, + ':host' => escapeshellarg($this->host), ':user' => escapeshellarg($this->user), ':pass' => escapeshellarg($this->pass), ':database' => ($database === null)? '': escapeshellarg($database), ); - return strtr('cat :import_file :decomp_cmd | mysql -u:user -p:pass :database', $args); + return strtr('cat :import_file :decomp_cmd | mysql -h:host -u:user -p:pass :database', $args); } } From d2c512d94b32a230234a8e829f307a45933d3f5d Mon Sep 17 00:00:00 2001 From: Mark Robinson Date: Thu, 25 Jun 2015 15:21:23 +0100 Subject: [PATCH 009/102] Corrected a number of minor spelling errors. Originally observed that "successful" was misspelled "succesfull" on the build view page. While correcting that, a number of other spelling errors were also corrected. --- PHPCI/Controller/WebhookController.php | 2 +- PHPCI/Helper/AnsiConverter.php | 6 +++--- PHPCI/Helper/LoginIsDisabled.php | 2 +- PHPCI/Languages/lang.da.php | 2 +- PHPCI/Languages/lang.de.php | 2 +- PHPCI/Languages/lang.el.php | 2 +- PHPCI/Languages/lang.en.php | 2 +- PHPCI/Languages/lang.it.php | 2 +- PHPCI/Languages/lang.nl.php | 2 +- PHPCI/Languages/lang.pl.php | 2 +- PHPCI/Languages/lang.ru.php | 2 +- PHPCI/Languages/lang.uk.php | 2 +- PHPCI/Plugin/Email.php | 2 +- PHPCI/Plugin/PhpCpd.php | 2 +- PHPCI/Plugin/PhpMessDetector.php | 4 ++-- PHPCI/Plugin/Util/TapParser.php | 4 ++-- PHPCI/ProcessControl/PosixProcessControl.php | 2 +- Tests/PHPCI/Command/CreateBuildCommandTest.php | 2 +- Tests/PHPCI/Command/InstallCommandTest.php | 4 ++-- Tests/PHPCI/Plugin/EmailTest.php | 4 ++-- Tests/PHPCI/Plugin/Util/FilesPluginInformationTest.php | 2 +- bootstrap.php | 2 +- 22 files changed, 28 insertions(+), 28 deletions(-) diff --git a/PHPCI/Controller/WebhookController.php b/PHPCI/Controller/WebhookController.php index 45a775ad..5848e961 100644 --- a/PHPCI/Controller/WebhookController.php +++ b/PHPCI/Controller/WebhookController.php @@ -170,7 +170,7 @@ class WebhookController extends \b8\Controller protected function githubCommitRequest(Project $project, array $payload) { // Github sends a payload when you close a pull request with a - // non-existant commit. We don't want this. + // non-existent commit. We don't want this. if (array_key_exists('after', $payload) && $payload['after'] === '0000000000000000000000000000000000000000') { return array('status' => 'ignored'); } diff --git a/PHPCI/Helper/AnsiConverter.php b/PHPCI/Helper/AnsiConverter.php index a5e42269..7df6663c 100644 --- a/PHPCI/Helper/AnsiConverter.php +++ b/PHPCI/Helper/AnsiConverter.php @@ -21,7 +21,7 @@ final class AnsiConverter static private $converter = null; /** - * Initialize the singletion. + * Initialize the singleton. * * @return AnsiToHtmlConverter */ @@ -35,7 +35,7 @@ final class AnsiConverter } /** - * Convert a text containing ANSI colr sequences into HTML code. + * Convert a text containing ANSI color sequences into HTML code. * * @param string $text The text to convert * @@ -47,7 +47,7 @@ final class AnsiConverter } /** - * Do not instanciate this class. + * Do not instantiate this class. */ private function __construct() { diff --git a/PHPCI/Helper/LoginIsDisabled.php b/PHPCI/Helper/LoginIsDisabled.php index 437b95cd..ec23858c 100644 --- a/PHPCI/Helper/LoginIsDisabled.php +++ b/PHPCI/Helper/LoginIsDisabled.php @@ -12,7 +12,7 @@ namespace PHPCI\Helper; use b8\Config; /** -* Login Is Disabled Helper - Checks if login is disalbed in the view +* Login Is Disabled Helper - Checks if login is disabled in the view * @author Stephen Ball * @package PHPCI * @subpackage Web diff --git a/PHPCI/Languages/lang.da.php b/PHPCI/Languages/lang.da.php index 20e403e1..c5001b52 100644 --- a/PHPCI/Languages/lang.da.php +++ b/PHPCI/Languages/lang.da.php @@ -203,7 +203,7 @@ Services sektionen under dit Bitbucket-repository.', 'build_finished' => 'Build Afsluttet', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.de.php b/PHPCI/Languages/lang.de.php index f866a4de..3539d6d1 100644 --- a/PHPCI/Languages/lang.de.php +++ b/PHPCI/Languages/lang.de.php @@ -210,7 +210,7 @@ generiert. Um es zu verwenden, fügen Sie einfach den folgenden Public Key im Ab 'build_finished' => 'Build abgeschlossen', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.el.php b/PHPCI/Languages/lang.el.php index cb7d169f..5021ec16 100644 --- a/PHPCI/Languages/lang.el.php +++ b/PHPCI/Languages/lang.el.php @@ -204,7 +204,7 @@ Services του Bitbucket αποθετηρίου σας.', 'build_finished' => 'Η κατασκευή ολοκληρώθηκε', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.en.php b/PHPCI/Languages/lang.en.php index 9729d746..223db7e2 100644 --- a/PHPCI/Languages/lang.en.php +++ b/PHPCI/Languages/lang.en.php @@ -213,7 +213,7 @@ PHPCI', 'build_finished' => 'Build Finished', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.it.php b/PHPCI/Languages/lang.it.php index ff326d14..e268172b 100644 --- a/PHPCI/Languages/lang.it.php +++ b/PHPCI/Languages/lang.it.php @@ -206,7 +206,7 @@ PHPCI', 'build_finished' => 'Build Terminata', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.nl.php b/PHPCI/Languages/lang.nl.php index e0638aaf..a39ec4d7 100644 --- a/PHPCI/Languages/lang.nl.php +++ b/PHPCI/Languages/lang.nl.php @@ -204,7 +204,7 @@ Services sectie van je Bitbucket repository toegevoegd worden.', 'build_finished' => 'Build beëindigd', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.pl.php b/PHPCI/Languages/lang.pl.php index d6f95ad6..baec665d 100644 --- a/PHPCI/Languages/lang.pl.php +++ b/PHPCI/Languages/lang.pl.php @@ -207,7 +207,7 @@ Services repozytoria Bitbucket.', 'build_finished' => 'Budowanie Zakończone', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.ru.php b/PHPCI/Languages/lang.ru.php index aa0f40fb..aaf4cddf 100644 --- a/PHPCI/Languages/lang.ru.php +++ b/PHPCI/Languages/lang.ru.php @@ -202,7 +202,7 @@ PHPCI', 'build_finished' => 'Сборка окончена', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Languages/lang.uk.php b/PHPCI/Languages/lang.uk.php index a3ca1b37..5efd226e 100644 --- a/PHPCI/Languages/lang.uk.php +++ b/PHPCI/Languages/lang.uk.php @@ -204,7 +204,7 @@ PHPCI', 'build_finished' => 'Збірка завершена', 'test_message' => 'Message', 'test_no_message' => 'No message', - 'test_success' => 'Succesfull: %d', + 'test_success' => 'Successful: %d', 'test_fail' => 'Failures: %d', 'test_skipped' => 'Skipped: %d', 'test_error' => 'Errors: %d', diff --git a/PHPCI/Plugin/Email.php b/PHPCI/Plugin/Email.php index c2638860..8faa5bb7 100644 --- a/PHPCI/Plugin/Email.php +++ b/PHPCI/Plugin/Email.php @@ -134,7 +134,7 @@ class Email implements \PHPCI\Plugin * Send an email to a list of specified subjects. * * @param array $toAddresses - * List of destinatary of message. + * List of destination addresses for message. * @param string $subject * Mail subject * @param string $body diff --git a/PHPCI/Plugin/PhpCpd.php b/PHPCI/Plugin/PhpCpd.php index 6433308f..953c3ea7 100644 --- a/PHPCI/Plugin/PhpCpd.php +++ b/PHPCI/Plugin/PhpCpd.php @@ -28,7 +28,7 @@ class PhpCpd implements \PHPCI\Plugin /** * @var string, based on the assumption the root may not hold the code to be - * tested, exteds the base path + * tested, extends the base path */ protected $path; diff --git a/PHPCI/Plugin/PhpMessDetector.php b/PHPCI/Plugin/PhpMessDetector.php index b02f5f09..4d075fda 100644 --- a/PHPCI/Plugin/PhpMessDetector.php +++ b/PHPCI/Plugin/PhpMessDetector.php @@ -38,7 +38,7 @@ class PhpMessDetector implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin /** * @var string, based on the assumption the root may not hold the code to be - * tested, exteds the base path only if the provided path is relative. Absolute + * tested, extends the base path only if the provided path is relative. Absolute * paths are used verbatim */ protected $path; @@ -50,7 +50,7 @@ class PhpMessDetector implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin /** * Array of PHPMD rules. Can be one of the builtins (codesize, unusedcode, naming, design, controversial) - * or a filenname (detected by checking for a / in it), either absolute or relative to the project root. + * or a filename (detected by checking for a / in it), either absolute or relative to the project root. * @var array */ protected $rules; diff --git a/PHPCI/Plugin/Util/TapParser.php b/PHPCI/Plugin/Util/TapParser.php index 18772a6a..8d3ec382 100644 --- a/PHPCI/Plugin/Util/TapParser.php +++ b/PHPCI/Plugin/Util/TapParser.php @@ -73,7 +73,7 @@ class TapParser $line = $this->nextLine(); if ($line === $header) { - throw new Exception("Duplicated TAP log, please check the configration."); + throw new Exception("Duplicated TAP log, please check the configuration."); } while ($line !== false && ($this->testCount === false || count($this->results) < $this->testCount)) { @@ -96,7 +96,7 @@ class TapParser */ protected function findTapLog() { - // Look for the beggning of the TAP output + // Look for the beginning of the TAP output do { $header = $this->nextLine(); } while ($header !== false && substr($header, 0, 12) !== 'TAP version '); diff --git a/PHPCI/ProcessControl/PosixProcessControl.php b/PHPCI/ProcessControl/PosixProcessControl.php index 710ba9f1..bac55ee2 100644 --- a/PHPCI/ProcessControl/PosixProcessControl.php +++ b/PHPCI/ProcessControl/PosixProcessControl.php @@ -31,7 +31,7 @@ class PosixProcessControl implements ProcessControlInterface * Sends a TERMINATE or KILL signal to the process using posix_kill. * * @param int $pid - * @param bool $forcefully Whetehr to send TERMINATE (false) or KILL (true). + * @param bool $forcefully Whether to send TERMINATE (false) or KILL (true). */ public function kill($pid, $forcefully = false) { diff --git a/Tests/PHPCI/Command/CreateBuildCommandTest.php b/Tests/PHPCI/Command/CreateBuildCommandTest.php index 59395de5..e82ae517 100644 --- a/Tests/PHPCI/Command/CreateBuildCommandTest.php +++ b/Tests/PHPCI/Command/CreateBuildCommandTest.php @@ -78,7 +78,7 @@ class CreateBuildCommandTest extends \PHPUnit_Framework_TestCase /** * @expectedException \InvalidArgumentException */ - public function testExecuteWithUnknowProjectId() + public function testExecuteWithUnknownProjectId() { $commandTester = $this->getCommandTester(); $commandTester->execute(array('projectId' => 2)); diff --git a/Tests/PHPCI/Command/InstallCommandTest.php b/Tests/PHPCI/Command/InstallCommandTest.php index 73b83462..040a4803 100644 --- a/Tests/PHPCI/Command/InstallCommandTest.php +++ b/Tests/PHPCI/Command/InstallCommandTest.php @@ -175,7 +175,7 @@ class InstallCommandTest extends \PHPUnit_Framework_TestCase $this->assertEquals('testedvalue', $this->config['b8']['database']['name']); } - public function testDatabaseUserameConfig() + public function testDatabaseUserConfig() { $dialog = $this->getDialogHelperMock(); @@ -243,7 +243,7 @@ class InstallCommandTest extends \PHPUnit_Framework_TestCase $this->assertEquals('test@phpci.com', $this->admin['mail']); } - public function testAdminUserameConfig() + public function testAdminNameConfig() { $dialog = $this->getDialogHelperMock(); diff --git a/Tests/PHPCI/Plugin/EmailTest.php b/Tests/PHPCI/Plugin/EmailTest.php index bb039ca4..0787d41d 100644 --- a/Tests/PHPCI/Plugin/EmailTest.php +++ b/Tests/PHPCI/Plugin/EmailTest.php @@ -236,11 +236,11 @@ class EmailTest extends \PHPUnit_Framework_TestCase /** * @covers PHPUnit::execute */ - public function testExecute_UniqueRecipientsWithCommiter() + public function testExecute_UniqueRecipientsWithCommitter() { $this->loadEmailPluginWithOptions( array( - 'commiter' => true, + 'committer' => true, 'addresses' => array('test-receiver@example.com', 'committer@test.com') ) ); diff --git a/Tests/PHPCI/Plugin/Util/FilesPluginInformationTest.php b/Tests/PHPCI/Plugin/Util/FilesPluginInformationTest.php index 1b674e9c..4af2d7a6 100644 --- a/Tests/PHPCI/Plugin/Util/FilesPluginInformationTest.php +++ b/Tests/PHPCI/Plugin/Util/FilesPluginInformationTest.php @@ -15,7 +15,7 @@ use PHPCI\Plugin\Util\FilesPluginInformation; class FilesPluginInformationTest extends \PHPUnit_Framework_TestCase { - public function testGetInstalledPlugins_returnsObjectes() + public function testGetInstalledPlugins_returnsObjects() { $pluginDirPath = realpath(__DIR__ . "/../../../../PHPCI/Plugin/"); $test = FilesPluginInformation::newFromDir($pluginDirPath); diff --git a/bootstrap.php b/bootstrap.php index 18d91d07..ca30f940 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -62,7 +62,7 @@ if (file_exists($configFile)) { /** * Allow to modify PHPCI configuration without modify versioned code. - * Dameons should be killed to apply changes in the file. + * Daemons should be killed to apply changes in the file. * * @ticket 781 */ From 8a3d7605d5846e92732e2fe3948db14985d447e2 Mon Sep 17 00:00:00 2001 From: DELORME Jonathan Date: Tue, 30 Jun 2015 11:43:25 +0200 Subject: [PATCH 010/102] Fixed a css issue with Block8 logo In Chrome (Android L), when you focus an input, the Block8 logo overrides the view. See : http://s10.postimg.org/d5ffp7dwp/2015_06_30_07_57_03.png --- PHPCI/View/Session.phtml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/PHPCI/View/Session.phtml b/PHPCI/View/Session.phtml index 9975d697..c28d9bfc 100644 --- a/PHPCI/View/Session.phtml +++ b/PHPCI/View/Session.phtml @@ -67,6 +67,14 @@ bottom: 50px; right: 50px; } + + @media(max-width:767px) { + #logo { + position: inherit; + margin: 0 auto; + margin-top: 50px; + } + } #logo:hover { background-image: url('https://www.block8.co.uk/assets/images/b8-phpci-logo.png'); From f55b336900af5dda7ab50a73416f099624ff5cc6 Mon Sep 17 00:00:00 2001 From: Mehmet Ali Ergut Date: Tue, 12 May 2015 00:29:45 +0300 Subject: [PATCH 011/102] Fixes default value for PHP Cs Fixer ( #833 ) --- PHPCI/Plugin/PhpCsFixer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PHPCI/Plugin/PhpCsFixer.php b/PHPCI/Plugin/PhpCsFixer.php index e07db718..7a173e64 100644 --- a/PHPCI/Plugin/PhpCsFixer.php +++ b/PHPCI/Plugin/PhpCsFixer.php @@ -32,10 +32,10 @@ class PhpCsFixer implements \PHPCI\Plugin protected $build; protected $workingDir = ''; - protected $level = ' --level=all'; + protected $level = ' --level=psr2'; protected $verbose = ''; protected $diff = ''; - protected $levels = array('psr0', 'psr1', 'psr2', 'all'); + protected $levels = array('psr0', 'psr1', 'psr2', 'symfony'); /** * Standard Constructor From 9ee27bad3713565e83e010e496067d58fca3a9ee Mon Sep 17 00:00:00 2001 From: Stephen Ball Date: Sun, 4 Oct 2015 17:38:03 +0100 Subject: [PATCH 012/102] Adding support to check for .phpci.yml so the file can be 'hidden' as with other CI systems such as Travis, StyleCI and Codeclimate --- PHPCI/Model/Build.php | 5 +++++ PHPCI/Plugin/TechnicalDebt.php | 1 + 2 files changed, 6 insertions(+) diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php index a0019438..3e3ab3e2 100644 --- a/PHPCI/Model/Build.php +++ b/PHPCI/Model/Build.php @@ -104,6 +104,11 @@ class Build extends BuildBase $build_config = file_get_contents($buildPath . '/phpci.yml'); } + // Try .phpci.yml + if (empty($build_config) && is_file($buildPath . '/.phpci.yml')) { + $build_config = file_get_contents($buildPath . '/.phpci.yml'); + } + // Try getting the project build config from the database: if (empty($build_config)) { $build_config = $this->getProject()->getBuildConfig(); diff --git a/PHPCI/Plugin/TechnicalDebt.php b/PHPCI/Plugin/TechnicalDebt.php index 163c94c6..91f75d93 100755 --- a/PHPCI/Plugin/TechnicalDebt.php +++ b/PHPCI/Plugin/TechnicalDebt.php @@ -151,6 +151,7 @@ class TechnicalDebt implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin $ignores = $this->ignore; $ignores[] = 'phpci.yml'; + $ignores[] = '.phpci.yml'; foreach ($iterator as $file) { $filePath = $file->getRealPath(); From 647c0eb09cf62c3a7dfb9e300ba1d3efa466ef55 Mon Sep 17 00:00:00 2001 From: Stephen Ball Date: Mon, 5 Oct 2015 10:17:04 +0100 Subject: [PATCH 013/102] Update Build.php Changed the order the files are loaded in --- PHPCI/Model/Build.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php index 3e3ab3e2..3243f9fa 100644 --- a/PHPCI/Model/Build.php +++ b/PHPCI/Model/Build.php @@ -99,14 +99,14 @@ class Build extends BuildBase { $build_config = null; - // Try phpci.yml first: - if (is_file($buildPath . '/phpci.yml')) { - $build_config = file_get_contents($buildPath . '/phpci.yml'); + // Try .phpci.yml + if (is_file($buildPath . '/.phpci.yml')) { + $build_config = file_get_contents($buildPath . '/.phpci.yml'); } - // Try .phpci.yml - if (empty($build_config) && is_file($buildPath . '/.phpci.yml')) { - $build_config = file_get_contents($buildPath . '/.phpci.yml'); + // Try phpci.yml first: + if (empty($build_config) && is_file($buildPath . '/phpci.yml')) { + $build_config = file_get_contents($buildPath . '/phpci.yml'); } // Try getting the project build config from the database: From 90b4de453e1ef0b0911b0116310c236299a4138e Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Mon, 5 Oct 2015 15:25:45 +0100 Subject: [PATCH 014/102] Moving to new .phpci.yml filename --- phpci.yml => .phpci.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename phpci.yml => .phpci.yml (100%) diff --git a/phpci.yml b/.phpci.yml similarity index 100% rename from phpci.yml rename to .phpci.yml From 668ee6761759f98efd230af03da8ec5f941db6e3 Mon Sep 17 00:00:00 2001 From: Adam Cooper Date: Tue, 6 Oct 2015 10:53:23 +0100 Subject: [PATCH 015/102] Incorrect docblock The "optionally" is not true, the config file is now required. --- PHPCI/Plugin/Codeception.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PHPCI/Plugin/Codeception.php b/PHPCI/Plugin/Codeception.php index 6d020210..79f05cdf 100644 --- a/PHPCI/Plugin/Codeception.php +++ b/PHPCI/Plugin/Codeception.php @@ -99,7 +99,7 @@ class Codeception implements \PHPCI\Plugin, \PHPCI\ZeroConfigPlugin } /** - * Runs Codeception tests, optionally using specified config file(s). + * Runs Codeception tests */ public function execute() { From 7e2fee95045c17597a7d07687664b400a8d45f6d Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Tue, 6 Oct 2015 11:38:09 +0100 Subject: [PATCH 016/102] Verify that jobs actually come from PHPCI --- PHPCI/Service/BuildService.php | 1 + PHPCI/Worker/BuildWorker.php | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php index 117b94e7..7db8d474 100644 --- a/PHPCI/Service/BuildService.php +++ b/PHPCI/Service/BuildService.php @@ -152,6 +152,7 @@ class BuildService if (!empty($settings['host']) && !empty($settings['queue'])) { $jobData = array( + 'type' => 'phpci.build', 'build_id' => $build->getId(), ); diff --git a/PHPCI/Worker/BuildWorker.php b/PHPCI/Worker/BuildWorker.php index cc070a76..33bccd9e 100644 --- a/PHPCI/Worker/BuildWorker.php +++ b/PHPCI/Worker/BuildWorker.php @@ -82,6 +82,7 @@ class BuildWorker { $pheanstalk = new Pheanstalk($this->host); $pheanstalk->watch($this->queue); + $pheanstalk->ignore('default'); $buildStore = Factory::getStore('Build'); $jobs = 0; @@ -99,6 +100,19 @@ class BuildWorker // Get the job data and run the job: $jobData = json_decode($job->getData(), true); + + if (empty($jobData) || !is_array($jobData)) { + // Probably not from PHPCI. + $pheanstalk->release($job); + continue; + } + + if (!array_key_exists('type', $jobData) || $jobData['type'] !== 'phpci.build') { + // Probably not from PHPCI. + $pheanstalk->release($job); + continue; + } + $this->logger->addInfo('Received build #'.$jobData['build_id'].' from Beanstalkd'); // If the job comes with config data, reset our config and database connections From de6eb62367203490efde74bd6beebb1a0f14f707 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Tue, 6 Oct 2015 12:00:58 +0100 Subject: [PATCH 017/102] Deployer plugin --- PHPCI/Plugin/Deployer.php | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 PHPCI/Plugin/Deployer.php diff --git a/PHPCI/Plugin/Deployer.php b/PHPCI/Plugin/Deployer.php new file mode 100644 index 00000000..62f51d0d --- /dev/null +++ b/PHPCI/Plugin/Deployer.php @@ -0,0 +1,66 @@ + +* @package PHPCI +* @subpackage Plugins +*/ +class Deployer implements \PHPCI\Plugin +{ + protected $webhookUrl; + protected $reason; + + /** + * Set up the plugin, configure options, etc. + * @param Builder $phpci + * @param Build $build + * @param array $options + */ + public function __construct(Builder $phpci, Build $build, array $options = array()) + { + $this->phpci = $phpci; + $this->build = $build; + $this->reason = 'PHPCI Build #%BUILD%'; + + if (isset($options['webhook_url'])) { + $this->webhookUrl = $options['webhook_url']; + } + + if (isset($options['reason'])) { + $this->reason = $options['reason']; + } + } + + /** + * Copies files from the root of the build directory into the target folder + */ + public function execute() + { + if (empty($this->webhookUrl)) { + $this->phpci->logFailure('You must specify a webhook URL.'); + return false; + } + + $http = new HttpClient(); + + $response = $http->post($this->webhookUrl, array( + 'reason' => $this->phpci->interpolate($this->reason), + )); + + return $response['success']; + } +} From 06e323596015f8a54edffcf64406715dbcf9f486 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Tue, 6 Oct 2015 14:16:48 +0100 Subject: [PATCH 018/102] Add "source" and "url" parameters to Deployer plugin. --- PHPCI/Plugin/Deployer.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PHPCI/Plugin/Deployer.php b/PHPCI/Plugin/Deployer.php index 62f51d0d..bda55ff0 100644 --- a/PHPCI/Plugin/Deployer.php +++ b/PHPCI/Plugin/Deployer.php @@ -59,6 +59,8 @@ class Deployer implements \PHPCI\Plugin $response = $http->post($this->webhookUrl, array( 'reason' => $this->phpci->interpolate($this->reason), + 'source' => 'PHPCI', + 'url' => $this->phpci->interpolate('%BUILD_URI%'), )); return $response['success']; From 801a4f7309b75424396dc2971cc21ff7f6451a5e Mon Sep 17 00:00:00 2001 From: Stephen Ball Date: Tue, 6 Oct 2015 17:28:44 +0100 Subject: [PATCH 019/102] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 759f715d..a284c193 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ We have a chat room for discussing PHPCI, you can access it here: [![Gitter](htt * Multiple PHP-version tests. *(In progress)* * Multiple testing workers. *(In progress)* * Install PEAR or PECL extensions. -* Deployments. +* [Deployments](http://phpdeployment.org) ## Getting Started: We've got documentation on our website on [installing PHPCI](https://www.phptesting.org/install-phpci) and [adding support for PHPCI to your projects](https://www.phptesting.org/wiki/Adding-PHPCI-Support-to-Your-Projects). From 857990b7761a2e257894f4e00568e9e28b177bf4 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Tue, 6 Oct 2015 19:10:11 +0100 Subject: [PATCH 020/102] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index a284c193..b30439e5 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,6 @@ We have a chat room for discussing PHPCI, you can access it here: [![Gitter](htt ##What it doesn't do (yet): * Virtualised testing. *(In progress)* * Multiple PHP-version tests. *(In progress)* -* Multiple testing workers. *(In progress)* * Install PEAR or PECL extensions. * [Deployments](http://phpdeployment.org) From 6f0945fb97fc2e35df7c0fc70ab13230521fa0e5 Mon Sep 17 00:00:00 2001 From: Stephen Ball Date: Wed, 7 Oct 2015 15:06:07 +0100 Subject: [PATCH 021/102] Added the commit message to the BuildInterpolator so it can be used as the default reason passed to deployer --- PHPCI/Helper/BuildInterpolator.php | 3 +++ PHPCI/Plugin/Deployer.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/PHPCI/Helper/BuildInterpolator.php b/PHPCI/Helper/BuildInterpolator.php index fbadbc30..1e7222bb 100644 --- a/PHPCI/Helper/BuildInterpolator.php +++ b/PHPCI/Helper/BuildInterpolator.php @@ -38,6 +38,7 @@ class BuildInterpolator $this->interpolation_vars['%COMMIT%'] = $build->getCommitId(); $this->interpolation_vars['%SHORT_COMMIT%'] = substr($build->getCommitId(), 0, 7); $this->interpolation_vars['%COMMIT_EMAIL%'] = $build->getCommitterEmail(); + $this->interpolation_vars['%COMMIT_MESSAGE%'] = $build->getCommitMessage(); $this->interpolation_vars['%COMMIT_URI%'] = $build->getCommitLink(); $this->interpolation_vars['%BRANCH%'] = $build->getBranch(); $this->interpolation_vars['%BRANCH_URI%'] = $build->getBranchLink(); @@ -49,6 +50,7 @@ class BuildInterpolator $this->interpolation_vars['%BUILD_URI%'] = $phpCiUrl . "build/view/" . $build->getId(); $this->interpolation_vars['%PHPCI_COMMIT%'] = $this->interpolation_vars['%COMMIT%']; $this->interpolation_vars['%PHPCI_SHORT_COMMIT%'] = $this->interpolation_vars['%SHORT_COMMIT%']; + $this->interpolation_vars['%PHPCI_COMMIT_MESSAGE%'] = $this->interpolation_vars['%COMMIT_MESSAGE%']; $this->interpolation_vars['%PHPCI_COMMIT_EMAIL%'] = $this->interpolation_vars['%COMMIT_EMAIL%']; $this->interpolation_vars['%PHPCI_COMMIT_URI%'] = $this->interpolation_vars['%COMMIT_URI%']; $this->interpolation_vars['%PHPCI_PROJECT%'] = $this->interpolation_vars['%PROJECT%']; @@ -61,6 +63,7 @@ class BuildInterpolator putenv('PHPCI=1'); putenv('PHPCI_COMMIT=' . $this->interpolation_vars['%COMMIT%']); putenv('PHPCI_SHORT_COMMIT=' . $this->interpolation_vars['%SHORT_COMMIT%']); + putenv('PHPCI_COMMIT_MESSAGE=' . $this->interpolation_vars['%COMMIT_MESSAGE%']); putenv('PHPCI_COMMIT_EMAIL=' . $this->interpolation_vars['%COMMIT_EMAIL%']); putenv('PHPCI_COMMIT_URI=' . $this->interpolation_vars['%COMMIT_URI%']); putenv('PHPCI_PROJECT=' . $this->interpolation_vars['%PROJECT%']); diff --git a/PHPCI/Plugin/Deployer.php b/PHPCI/Plugin/Deployer.php index bda55ff0..2db839e3 100644 --- a/PHPCI/Plugin/Deployer.php +++ b/PHPCI/Plugin/Deployer.php @@ -34,7 +34,7 @@ class Deployer implements \PHPCI\Plugin { $this->phpci = $phpci; $this->build = $build; - $this->reason = 'PHPCI Build #%BUILD%'; + $this->reason = 'PHPCI Build #%BUILD% - %COMMIT_MESSAGE%'; if (isset($options['webhook_url'])) { $this->webhookUrl = $options['webhook_url']; From 2380d2e472c4bf6317cdca4e8c57a6abc7690c01 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 09:49:16 +0100 Subject: [PATCH 022/102] Build worker should delete jobs in its queue that are not recognised. --- PHPCI/Worker/BuildWorker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PHPCI/Worker/BuildWorker.php b/PHPCI/Worker/BuildWorker.php index 33bccd9e..e08fdd84 100644 --- a/PHPCI/Worker/BuildWorker.php +++ b/PHPCI/Worker/BuildWorker.php @@ -109,7 +109,7 @@ class BuildWorker if (!array_key_exists('type', $jobData) || $jobData['type'] !== 'phpci.build') { // Probably not from PHPCI. - $pheanstalk->release($job); + $pheanstalk->delete($job); continue; } From e186874eba25b50f6e645eb33e00ea280a9a5aa2 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 16:29:29 +0100 Subject: [PATCH 023/102] Removing the ability to install 'plugins' via the web interface. --- PHPCI/Controller/PluginController.php | 144 ----------------- PHPCI/View/Plugin/index.phtml | 212 ++++---------------------- 2 files changed, 32 insertions(+), 324 deletions(-) diff --git a/PHPCI/Controller/PluginController.php b/PHPCI/Controller/PluginController.php index cefcdbb5..64cb1463 100644 --- a/PHPCI/Controller/PluginController.php +++ b/PHPCI/Controller/PluginController.php @@ -23,24 +23,6 @@ use PHPCI\Plugin\Util\PluginInformationCollection; */ class PluginController extends \PHPCI\Controller { - protected $required = array( - 'php', - 'ext-pdo', - 'ext-pdo_mysql', - 'block8/b8framework', - 'ircmaxell/password-compat', - 'swiftmailer/swiftmailer', - 'symfony/yaml', - 'symfony/console', - 'psr/log', - 'monolog/monolog', - 'pimple/pimple', - 'robmorgan/phinx', - ); - - protected $canInstall; - protected $composerPath; - /** * List all enabled plugins, installed and recommend packages. * @return string @@ -49,12 +31,8 @@ class PluginController extends \PHPCI\Controller { $this->requireAdmin(); - $this->view->canWrite = is_writable(APPLICATION_PATH . 'composer.json'); - $this->view->required = $this->required; - $json = $this->getComposerJson(); $this->view->installedPackages = $json['require']; - $this->view->suggestedPackages = $json['suggest']; $pluginInfo = new PluginInformationCollection(); $pluginInfo->add(FilesPluginInformation::newFromDir( @@ -71,49 +49,6 @@ class PluginController extends \PHPCI\Controller return $this->view->render(); } - /** - * Remove a given package. - */ - public function remove() - { - $this->requireAdmin(); - - $package = $this->getParam('package', null); - $json = $this->getComposerJson(); - - $response = new b8\Http\Response\RedirectResponse(); - - if (!in_array($package, $this->required)) { - unset($json['require'][$package]); - $this->setComposerJson($json); - - $response->setHeader('Location', PHPCI_URL . 'plugin?r=' . $package); - return $response; - } - - $response->setHeader('Location', PHPCI_URL); - return $response; - } - - /** - * Install a given package. - */ - public function install() - { - $this->requireAdmin(); - - $package = $this->getParam('package', null); - $version = $this->getParam('version', '*'); - - $json = $this->getComposerJson(); - $json['require'][$package] = $version; - $this->setComposerJson($json); - - $response = new b8\Http\Response\RedirectResponse(); - $response->setHeader('Location', PHPCI_URL . 'plugin?w=' . $package); - return $response; - } - /** * Get the json-decoded contents of the composer.json file. * @return mixed @@ -123,83 +58,4 @@ class PluginController extends \PHPCI\Controller $json = file_get_contents(APPLICATION_PATH . 'composer.json'); return json_decode($json, true); } - - /** - * Convert array to json and save composer.json - * - * @param $array - */ - protected function setComposerJson($array) - { - if (defined('JSON_PRETTY_PRINT')) { - $json = json_encode($array, JSON_PRETTY_PRINT); - } else { - $json = json_encode($array); - } - - file_put_contents(APPLICATION_PATH . 'composer.json', $json); - } - - /** - * Find a system binary. - * @param $binary - * @return null|string - */ - protected function findBinary($binary) - { - if (is_string($binary)) { - $binary = array($binary); - } - - foreach ($binary as $bin) { - // Check project root directory: - if (is_file(APPLICATION_PATH . $bin)) { - return APPLICATION_PATH . $bin; - } - - // Check Composer bin dir: - if (is_file(APPLICATION_PATH . 'vendor/bin/' . $bin)) { - return APPLICATION_PATH . 'vendor/bin/' . $bin; - } - - // Use "which" - $which = trim(shell_exec('which ' . $bin)); - - if (!empty($which)) { - return $which; - } - } - - return null; - } - - /** - * Perform a search on packagist.org. - */ - public function packagistSearch() - { - $searchQuery = $this->getParam('q', ''); - $http = new \b8\HttpClient(); - $http->setHeaders(array('User-Agent: PHPCI/1.0 (+https://www.phptesting.org)')); - $res = $http->get('https://packagist.org/search.json', array('q' => $searchQuery)); - - $response = new b8\Http\Response\JsonResponse(); - $response->setContent($res['body']); - return $response; - } - - /** - * Look up available versions of a given package on packagist.org - */ - public function packagistVersions() - { - $name = $this->getParam('p', ''); - $http = new \b8\HttpClient(); - $http->setHeaders(array('User-Agent: PHPCI/1.0 (+https://www.phptesting.org)')); - $res = $http->get('https://packagist.org/packages/'.$name.'.json'); - - $response = new b8\Http\Response\JsonResponse(); - $response->setContent($res['body']); - return $response; - } } diff --git a/PHPCI/View/Plugin/index.phtml b/PHPCI/View/Plugin/index.phtml index b595a4df..5c186012 100644 --- a/PHPCI/View/Plugin/index.phtml +++ b/PHPCI/View/Plugin/index.phtml @@ -1,45 +1,40 @@ - -

    - - -

    - - - -

    - - -
    -
    -

    -
    - - - - - - - - - - - - - - - - - - -
    name; ?>class; ?>source; ?>
    +
    +

    Adding requirements to the PHPCI composer.json file is no longer recommended as a method of installing your required testing tools.
    + For this reason, we have removed the ability for PHPCI to modify the composer.json file for you. + We recommend that you install testing tools using your project's own composer.json file, by adding them to the "require-dev" section of the file.

    - -
    -
    +
    +
    +
    +

    +
    + + + + + + + + + + + + + + + + + + +
    name; ?>class; ?>source; ?>
    +
    +
    + +

    @@ -58,44 +53,6 @@ - - - - - - - - - -
    - -
    - -
    -
    -
    -

    -
    - - - - - - - - - - - $version): ?> - - - - - @@ -105,108 +62,3 @@ -
    -
    -

    -
    - -
    -
    - - - - -
    - -
    - - - -
    - - - - - - - - - - -
    -
    -
    - -
    - - - - From 74d313862c8ddda141a9f6a9d09771bec2c6be24 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 16:33:01 +0100 Subject: [PATCH 024/102] Adding project groups --- PHPCI/Application.php | 20 ++- PHPCI/Controller/GroupController.php | 104 +++++++++++ PHPCI/Controller/HomeController.php | 43 +++-- PHPCI/Controller/ProjectController.php | 16 ++ .../20151008140800_add_project_groups.php | 29 +++ PHPCI/Model/Base/ProjectBase.php | 112 +++++++++++- PHPCI/Model/Base/ProjectGroupBase.php | 168 ++++++++++++++++++ PHPCI/Model/ProjectGroup.php | 18 ++ PHPCI/Service/ProjectService.php | 4 + PHPCI/Store/Base/ProjectGroupStoreBase.php | 46 +++++ PHPCI/Store/Base/ProjectStoreBase.php | 49 ++--- PHPCI/Store/ProjectGroupStore.php | 18 ++ PHPCI/View/Group/edit.phtml | 9 + PHPCI/View/Group/index.phtml | 41 +++++ PHPCI/View/Home/index.phtml | 12 +- PHPCI/View/Project/view.phtml | 10 +- PHPCI/View/SummaryTable.phtml | 4 +- PHPCI/View/layout.phtml | 64 ++++--- 18 files changed, 695 insertions(+), 72 deletions(-) create mode 100644 PHPCI/Controller/GroupController.php create mode 100644 PHPCI/Migrations/20151008140800_add_project_groups.php create mode 100644 PHPCI/Model/Base/ProjectGroupBase.php create mode 100644 PHPCI/Model/ProjectGroup.php create mode 100644 PHPCI/Store/Base/ProjectGroupStoreBase.php create mode 100644 PHPCI/Store/ProjectGroupStore.php create mode 100644 PHPCI/View/Group/edit.phtml create mode 100644 PHPCI/View/Group/index.phtml diff --git a/PHPCI/Application.php b/PHPCI/Application.php index 8dcdf76d..f2d40e0d 100644 --- a/PHPCI/Application.php +++ b/PHPCI/Application.php @@ -135,15 +135,17 @@ class Application extends b8\Application */ protected function setLayoutVariables(View &$layout) { - /** @var \PHPCI\Store\ProjectStore $projectStore */ - $projectStore = b8\Store\Factory::getStore('Project'); - $layout->projects = $projectStore->getWhere( - array('archived' => (int)isset($_GET['archived'])), - 50, - 0, - array(), - array('title' => 'ASC') - ); + $groups = array(); + $groupList = b8\Store\Factory::getStore('ProjectGroup')->getWhere(array(), 100, 0, array(), array('title' => 'ASC')); + + foreach ($groupList['items'] as $group) { + $thisGroup = array('title' => $group->getTitle()); + $projects = b8\Store\Factory::getStore('Project')->getByGroupId($group->getId()); + $thisGroup['projects'] = $projects['items']; + $groups[] = $thisGroup; + } + + $layout->groups = $groups; } /** diff --git a/PHPCI/Controller/GroupController.php b/PHPCI/Controller/GroupController.php new file mode 100644 index 00000000..970a240c --- /dev/null +++ b/PHPCI/Controller/GroupController.php @@ -0,0 +1,104 @@ + + * @package PHPCI + * @subpackage Web + */ +class GroupController extends Controller +{ + /** + * @var \PHPCI\Store\ProjectGroupStore + */ + protected $groupStore; + + public function init() + { + $this->groupStore = b8\Store\Factory::getStore('ProjectGroup'); + } + + public function index() + { + $this->requireAdmin(); + + $groups = array(); + $groupList = $this->groupStore->getWhere(array(), 100, 0, array(), array('title' => 'ASC')); + + foreach ($groupList['items'] as $group) { + $thisGroup = array( + 'title' => $group->getTitle(), + 'id' => $group->getId(), + ); + $projects = b8\Store\Factory::getStore('Project')->getByGroupId($group->getId()); + $thisGroup['projects'] = $projects['items']; + $groups[] = $thisGroup; + } + + $this->view->groups = $groups; + } + + public function edit($id = null) + { + $this->requireAdmin(); + + if (!is_null($id)) { + $group = $this->groupStore->getById($id); + } else { + $group = new ProjectGroup(); + } + + if ($this->request->getMethod() == 'POST') { + $group->setTitle($this->getParam('title')); + $this->groupStore->save($group); + + $response = new b8\Http\Response\RedirectResponse(); + $response->setHeader('Location', PHPCI_URL.'group'); + return $response; + } + + $form = new Form(); + $form->setMethod('POST'); + $form->setAction(PHPCI_URL . 'group/edit' . (!is_null($id) ? '/' . $id : '')); + + $title = new Form\Element\Text('title'); + $title->setContainerClass('form-group'); + $title->setClass('form-control'); + $title->setLabel('Group Title'); + $title->setValue($group->getTitle()); + + $submit = new Form\Element\Submit(); + $submit->setValue('Save Group'); + + $form->addField($title); + $form->addField($submit); + + $this->view->form = $form; + } + + public function delete($id) + { + $this->requireAdmin(); + $group = $this->groupStore->getById($id); + + $this->groupStore->delete($group); + $response = new b8\Http\Response\RedirectResponse(); + $response->setHeader('Location', PHPCI_URL.'group'); + return $response; + } +} diff --git a/PHPCI/Controller/HomeController.php b/PHPCI/Controller/HomeController.php index d0e5a14b..e6c27e14 100644 --- a/PHPCI/Controller/HomeController.php +++ b/PHPCI/Controller/HomeController.php @@ -23,15 +23,20 @@ use PHPCI\Model\Build; class HomeController extends \PHPCI\Controller { /** - * @var \b8\Store\BuildStore + * @var \PHPCI\Store\BuildStore */ protected $buildStore; /** - * @var \b8\Store\ProjectStore + * @var \PHPCI\Store\ProjectStore */ protected $projectStore; + /** + * @var \PHPCI\Store\ProjectGroupStore + */ + protected $groupStore; + /** * Initialise the controller, set up stores and services. */ @@ -39,6 +44,7 @@ class HomeController extends \PHPCI\Controller { $this->buildStore = b8\Store\Factory::getStore('Build'); $this->projectStore = b8\Store\Factory::getStore('Project'); + $this->groupStore = b8\Store\Factory::getStore('ProjectGroup'); } /** @@ -47,15 +53,6 @@ class HomeController extends \PHPCI\Controller public function index() { $this->layout->title = Lang::get('dashboard'); - - $projects = $this->projectStore->getWhere( - array('archived' => (int)isset($_GET['archived'])), - 50, - 0, - array(), - array('title' => 'ASC') - ); - $builds = $this->buildStore->getLatestBuilds(null, 10); foreach ($builds as &$build) { @@ -63,8 +60,7 @@ class HomeController extends \PHPCI\Controller } $this->view->builds = $builds; - $this->view->projects = $projects['items']; - $this->view->summary = $this->getSummaryHtml($projects); + $this->view->groups = $this->getGroupInfo(); return $this->view->render(); } @@ -102,7 +98,7 @@ class HomeController extends \PHPCI\Controller $failures = array(); $counts = array(); - foreach ($projects['items'] as $project) { + foreach ($projects as $project) { $summaryBuilds[$project->getId()] = $this->buildStore->getLatestBuilds($project->getId()); $count = $this->buildStore->getWhere( @@ -122,7 +118,7 @@ class HomeController extends \PHPCI\Controller } $summaryView = new b8\View('SummaryTable'); - $summaryView->projects = $projects['items']; + $summaryView->projects = $projects; $summaryView->builds = $summaryBuilds; $summaryView->successful = $successes; $summaryView->failed = $failures; @@ -147,4 +143,21 @@ class HomeController extends \PHPCI\Controller return $view->render(); } + + protected function getGroupInfo() + { + $rtn = array(); + $groups = $this->groupStore->getWhere(array(), 100, 0, array(), array('title' => 'ASC')); + + foreach ($groups['items'] as $group) { + $thisGroup = array('title' => $group->getTitle()); + $projects = $this->projectStore->getByGroupId($group->getId()); + $thisGroup['projects'] = $projects['items']; + $thisGroup['summary'] = $this->getSummaryHtml($thisGroup['projects']); + $rtn[] = $thisGroup; + } + + return $rtn; + } + } diff --git a/PHPCI/Controller/ProjectController.php b/PHPCI/Controller/ProjectController.php index 3a55f49b..be5dee19 100644 --- a/PHPCI/Controller/ProjectController.php +++ b/PHPCI/Controller/ProjectController.php @@ -220,6 +220,7 @@ class ProjectController extends PHPCI\Controller 'build_config' => $this->getParam('build_config', null), 'allow_public_status' => $this->getParam('allow_public_status', 0), 'branch' => $this->getParam('branch', null), + 'group' => $this->getParam('group_id', null), ); $project = $this->projectService->createProject($title, $type, $reference, $options); @@ -284,6 +285,7 @@ class ProjectController extends PHPCI\Controller 'allow_public_status' => $this->getParam('allow_public_status', 0), 'archived' => $this->getParam('archived', 0), 'branch' => $this->getParam('branch', null), + 'group' => $this->getParam('group_id', null), ); $project = $this->projectService->updateProject($project, $title, $type, $reference, $options); @@ -352,6 +354,20 @@ class ProjectController extends PHPCI\Controller $field->setClass('form-control')->setContainerClass('form-group')->setValue('master'); $form->addField($field); + $field = Form\Element\Select::create('group_id', 'Project Group', true); + $field->setClass('form-control')->setContainerClass('form-group')->setValue(1); + + $groups = array(); + $groupStore = b8\Store\Factory::getStore('ProjectGroup'); + $groupList = $groupStore->getWhere(array(), 100, 0, array(), array('title' => 'ASC')); + + foreach ($groupList['items'] as $group) { + $groups[$group->getId()] = $group->getTitle(); + } + + $field->setOptions($groups); + $form->addField($field); + $field = Form\Element\Checkbox::create('allow_public_status', Lang::get('allow_public_status'), false); $field->setContainerClass('form-group'); $field->setCheckedValue(1); diff --git a/PHPCI/Migrations/20151008140800_add_project_groups.php b/PHPCI/Migrations/20151008140800_add_project_groups.php new file mode 100644 index 00000000..f6035014 --- /dev/null +++ b/PHPCI/Migrations/20151008140800_add_project_groups.php @@ -0,0 +1,29 @@ +table('project_group'); + $table->addColumn('title', 'string', array('limit' => 100, 'null' => false)); + $table->save(); + + $group = new \PHPCI\Model\ProjectGroup(); + $group->setTitle('Projects'); + + /** @var \PHPCI\Model\ProjectGroup $group */ + $group = \b8\Store\Factory::getStore('ProjectGroup')->save($group); + + $table = $this->table('project'); + $table->addColumn('group_id', 'integer', array( + 'signed' => true, + 'null' => false, + 'default' => $group->getId(), + )); + + $table->addForeignKey('group_id', 'project_group', 'id', array('delete'=> 'RESTRICT', 'update' => 'CASCADE')); + $table->save(); + } +} diff --git a/PHPCI/Model/Base/ProjectBase.php b/PHPCI/Model/Base/ProjectBase.php index 0ea77b78..0dc0c0eb 100644 --- a/PHPCI/Model/Base/ProjectBase.php +++ b/PHPCI/Model/Base/ProjectBase.php @@ -45,6 +45,7 @@ class ProjectBase extends Model 'ssh_public_key' => null, 'allow_public_status' => null, 'archived' => null, + 'group_id' => null, ); /** @@ -64,8 +65,10 @@ class ProjectBase extends Model 'ssh_public_key' => 'getSshPublicKey', 'allow_public_status' => 'getAllowPublicStatus', 'archived' => 'getArchived', + 'group_id' => 'getGroupId', // Foreign key getters: + 'Group' => 'getGroup', ); /** @@ -85,8 +88,10 @@ class ProjectBase extends Model 'ssh_public_key' => 'setSshPublicKey', 'allow_public_status' => 'setAllowPublicStatus', 'archived' => 'setArchived', + 'group_id' => 'setGroupId', // Foreign key setters: + 'Group' => 'setGroup', ); /** @@ -153,10 +158,14 @@ class ProjectBase extends Model ), 'archived' => array( 'type' => 'tinyint', - 'length' => 4, - 'nullable' => true, + 'length' => 1, 'default' => null, ), + 'group_id' => array( + 'type' => 'int', + 'length' => 11, + 'default' => 1, + ), ); /** @@ -165,12 +174,20 @@ class ProjectBase extends Model public $indexes = array( 'PRIMARY' => array('unique' => true, 'columns' => 'id'), 'idx_project_title' => array('columns' => 'title'), + 'group_id' => array('columns' => 'group_id'), ); /** * @var array */ public $foreignKeys = array( + 'project_ibfk_1' => array( + 'local_col' => 'group_id', + 'update' => 'CASCADE', + 'delete' => '', + 'table' => 'project_group', + 'col' => 'id' + ), ); /** @@ -317,6 +334,18 @@ class ProjectBase extends Model return $rtn; } + /** + * Get the value of GroupId / group_id. + * + * @return int + */ + public function getGroupId() + { + $rtn = $this->data['group_id']; + + return $rtn; + } + /** * Set the value of Id / id. * @@ -530,10 +559,12 @@ class ProjectBase extends Model /** * Set the value of Archived / archived. * + * Must not be null. * @param $value int */ public function setArchived($value) { + $this->_validateNotNull('Archived', $value); $this->_validateInt('Archived', $value); if ($this->data['archived'] === $value) { @@ -545,6 +576,83 @@ class ProjectBase extends Model $this->_setModified('archived'); } + /** + * Set the value of GroupId / group_id. + * + * Must not be null. + * @param $value int + */ + public function setGroupId($value) + { + $this->_validateNotNull('GroupId', $value); + $this->_validateInt('GroupId', $value); + + if ($this->data['group_id'] === $value) { + return; + } + + $this->data['group_id'] = $value; + + $this->_setModified('group_id'); + } + + /** + * Get the ProjectGroup model for this Project by Id. + * + * @uses \PHPCI\Store\ProjectGroupStore::getById() + * @uses \PHPCI\Model\ProjectGroup + * @return \PHPCI\Model\ProjectGroup + */ + public function getGroup() + { + $key = $this->getGroupId(); + + if (empty($key)) { + return null; + } + + $cacheKey = 'Cache.ProjectGroup.' . $key; + $rtn = $this->cache->get($cacheKey, null); + + if (empty($rtn)) { + $rtn = Factory::getStore('ProjectGroup', 'PHPCI')->getById($key); + $this->cache->set($cacheKey, $rtn); + } + + return $rtn; + } + + /** + * Set Group - Accepts an ID, an array representing a ProjectGroup or a ProjectGroup model. + * + * @param $value mixed + */ + public function setGroup($value) + { + // Is this an instance of ProjectGroup? + if ($value instanceof \PHPCI\Model\ProjectGroup) { + return $this->setGroupObject($value); + } + + // Is this an array representing a ProjectGroup item? + if (is_array($value) && !empty($value['id'])) { + return $this->setGroupId($value['id']); + } + + // Is this a scalar value representing the ID of this foreign key? + return $this->setGroupId($value); + } + + /** + * Set Group - Accepts a ProjectGroup model. + * + * @param $value \PHPCI\Model\ProjectGroup + */ + public function setGroupObject(\PHPCI\Model\ProjectGroup $value) + { + return $this->setGroupId($value->getId()); + } + /** * Get Build models by ProjectId for this Project. * diff --git a/PHPCI/Model/Base/ProjectGroupBase.php b/PHPCI/Model/Base/ProjectGroupBase.php new file mode 100644 index 00000000..3b5eed69 --- /dev/null +++ b/PHPCI/Model/Base/ProjectGroupBase.php @@ -0,0 +1,168 @@ + null, + 'title' => null, + ); + + /** + * @var array + */ + protected $getters = array( + // Direct property getters: + 'id' => 'getId', + 'title' => 'getTitle', + + // Foreign key getters: + ); + + /** + * @var array + */ + protected $setters = array( + // Direct property setters: + 'id' => 'setId', + 'title' => 'setTitle', + + // Foreign key setters: + ); + + /** + * @var array + */ + public $columns = array( + 'id' => array( + 'type' => 'int', + 'length' => 11, + 'primary_key' => true, + 'auto_increment' => true, + 'default' => null, + ), + 'title' => array( + 'type' => 'varchar', + 'length' => 100, + 'default' => null, + ), + ); + + /** + * @var array + */ + public $indexes = array( + 'PRIMARY' => array('unique' => true, 'columns' => 'id'), + ); + + /** + * @var array + */ + public $foreignKeys = array( + ); + + /** + * Get the value of Id / id. + * + * @return int + */ + public function getId() + { + $rtn = $this->data['id']; + + return $rtn; + } + + /** + * Get the value of Title / title. + * + * @return string + */ + public function getTitle() + { + $rtn = $this->data['title']; + + return $rtn; + } + + /** + * Set the value of Id / id. + * + * Must not be null. + * @param $value int + */ + public function setId($value) + { + $this->_validateNotNull('Id', $value); + $this->_validateInt('Id', $value); + + if ($this->data['id'] === $value) { + return; + } + + $this->data['id'] = $value; + + $this->_setModified('id'); + } + + /** + * Set the value of Title / title. + * + * Must not be null. + * @param $value string + */ + public function setTitle($value) + { + $this->_validateNotNull('Title', $value); + $this->_validateString('Title', $value); + + if ($this->data['title'] === $value) { + return; + } + + $this->data['title'] = $value; + + $this->_setModified('title'); + } + + /** + * Get Project models by GroupId for this ProjectGroup. + * + * @uses \PHPCI\Store\ProjectStore::getByGroupId() + * @uses \PHPCI\Model\Project + * @return \PHPCI\Model\Project[] + */ + public function getGroupProjects() + { + return Factory::getStore('Project', 'PHPCI')->getByGroupId($this->getId()); + } +} diff --git a/PHPCI/Model/ProjectGroup.php b/PHPCI/Model/ProjectGroup.php new file mode 100644 index 00000000..f85e6339 --- /dev/null +++ b/PHPCI/Model/ProjectGroup.php @@ -0,0 +1,18 @@ +setBranch($options['branch']); } + if (array_key_exists('group', $options)) { + $project->setGroup($options['group']); + } + // Allow certain project types to set access information: $this->processAccessInformation($project); diff --git a/PHPCI/Store/Base/ProjectGroupStoreBase.php b/PHPCI/Store/Base/ProjectGroupStoreBase.php new file mode 100644 index 00000000..5b2730ea --- /dev/null +++ b/PHPCI/Store/Base/ProjectGroupStoreBase.php @@ -0,0 +1,46 @@ +getById($value, $useConnection); + } + + public function getById($value, $useConnection = 'read') + { + if (is_null($value)) { + throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.'); + } + + $query = 'SELECT * FROM `project_group` WHERE `id` = :id LIMIT 1'; + $stmt = Database::getConnection($useConnection)->prepare($query); + $stmt->bindValue(':id', $value); + + if ($stmt->execute()) { + if ($data = $stmt->fetch(\PDO::FETCH_ASSOC)) { + return new ProjectGroup($data); + } + } + + return null; + } +} diff --git a/PHPCI/Store/Base/ProjectStoreBase.php b/PHPCI/Store/Base/ProjectStoreBase.php index 562afba2..c764238d 100644 --- a/PHPCI/Store/Base/ProjectStoreBase.php +++ b/PHPCI/Store/Base/ProjectStoreBase.php @@ -20,24 +20,11 @@ class ProjectStoreBase extends Store protected $modelName = '\PHPCI\Model\Project'; protected $primaryKey = 'id'; - /** - * Returns a Project model by primary key. - * @param mixed $value - * @param string $useConnection - * @return \@appNamespace\Model\Project|null - */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } - /** - * Returns a Project model by Id. - * @param mixed $value - * @param string $useConnection - * @throws HttpException - * @return \@appNamespace\Model\Project|null - */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -57,14 +44,6 @@ class ProjectStoreBase extends Store return null; } - /** - * Returns an array of Project models by Title. - * @param mixed $value - * @param int $limit - * @param string $useConnection - * @throws HttpException - * @return array - */ public function getByTitle($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { @@ -92,4 +71,32 @@ class ProjectStoreBase extends Store return array('items' => array(), 'count' => 0); } } + + public function getByGroupId($value, $limit = 1000, $useConnection = 'read') + { + if (is_null($value)) { + throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.'); + } + + + $query = 'SELECT * FROM `project` WHERE `group_id` = :group_id LIMIT :limit'; + $stmt = Database::getConnection($useConnection)->prepare($query); + $stmt->bindValue(':group_id', $value); + $stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT); + + if ($stmt->execute()) { + $res = $stmt->fetchAll(\PDO::FETCH_ASSOC); + + $map = function ($item) { + return new Project($item); + }; + $rtn = array_map($map, $res); + + $count = count($rtn); + + return array('items' => $rtn, 'count' => $count); + } else { + return array('items' => array(), 'count' => 0); + } + } } diff --git a/PHPCI/Store/ProjectGroupStore.php b/PHPCI/Store/ProjectGroupStore.php new file mode 100644 index 00000000..fa254e3e --- /dev/null +++ b/PHPCI/Store/ProjectGroupStore.php @@ -0,0 +1,18 @@ + +
    +

    Add / Edit Group

    +
    + +
    + +
    +
    \ No newline at end of file diff --git a/PHPCI/View/Group/index.phtml b/PHPCI/View/Group/index.phtml new file mode 100644 index 00000000..e07c9af1 --- /dev/null +++ b/PHPCI/View/Group/index.phtml @@ -0,0 +1,41 @@ + + + +
    +
    +

    Project Groups

    +
    + + + + + + + + + + + + + + + + + + +
    TitleProjects
    + + Edit + + + + + Delete + + +
    +
    \ No newline at end of file diff --git a/PHPCI/View/Home/index.phtml b/PHPCI/View/Home/index.phtml index 251bb9ee..6bce4be8 100644 --- a/PHPCI/View/Home/index.phtml +++ b/PHPCI/View/Home/index.phtml @@ -2,7 +2,17 @@
    - + +
    +
    +

    +
    + +
    + +
    +
    +
    diff --git a/PHPCI/View/Project/view.phtml b/PHPCI/View/Project/view.phtml index ee21abe9..e66daa27 100644 --- a/PHPCI/View/Project/view.phtml +++ b/PHPCI/View/Project/view.phtml @@ -5,8 +5,16 @@
    + + + + + + + +
    - + diff --git a/PHPCI/View/SummaryTable.phtml b/PHPCI/View/SummaryTable.phtml index 9ddaabb0..5e2192b4 100644 --- a/PHPCI/View/SummaryTable.phtml +++ b/PHPCI/View/SummaryTable.phtml @@ -83,7 +83,7 @@ foreach($projects as $project): ?> 10) { + if (count($projects) > 5) { $containerClass = 'small-box-minimal'; } else { $containerClass = 'small-box-full'; @@ -92,7 +92,7 @@ foreach($projects as $project):
    - 10): ?> + 5): ?>

    diff --git a/PHPCI/View/layout.phtml b/PHPCI/View/layout.phtml index 82eabfe5..cbd98161 100644 --- a/PHPCI/View/layout.phtml +++ b/PHPCI/View/layout.phtml @@ -159,6 +159,12 @@ +
  • + + Project Groups + +
  • +
  • @@ -180,41 +186,57 @@
  • - +
  • - - getTitle(); ?> + + + + */ ?>
  • - + + + From 31165a6bfaefff05fa591851ff458d082e3c4c39 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 16:52:19 +0100 Subject: [PATCH 025/102] General model / store cleanup --- PHPCI/Model/Base/BuildBase.php | 2 +- PHPCI/Model/Base/BuildMetaBase.php | 2 +- PHPCI/Model/Base/UserBase.php | 2 ++ PHPCI/Store/Base/BuildMetaStoreBase.php | 29 -------------------- PHPCI/Store/Base/BuildStoreBase.php | 29 -------------------- PHPCI/Store/Base/UserStoreBase.php | 35 +++---------------------- 6 files changed, 8 insertions(+), 91 deletions(-) diff --git a/PHPCI/Model/Base/BuildBase.php b/PHPCI/Model/Base/BuildBase.php index 119290e2..728efc37 100644 --- a/PHPCI/Model/Base/BuildBase.php +++ b/PHPCI/Model/Base/BuildBase.php @@ -118,7 +118,7 @@ class BuildBase extends Model 'default' => null, ), 'log' => array( - 'type' => 'text', + 'type' => 'mediumtext', 'nullable' => true, 'default' => null, ), diff --git a/PHPCI/Model/Base/BuildMetaBase.php b/PHPCI/Model/Base/BuildMetaBase.php index 0ac8fa93..dc018819 100644 --- a/PHPCI/Model/Base/BuildMetaBase.php +++ b/PHPCI/Model/Base/BuildMetaBase.php @@ -99,7 +99,7 @@ class BuildMetaBase extends Model 'default' => null, ), 'meta_value' => array( - 'type' => 'text', + 'type' => 'mediumtext', 'default' => null, ), ); diff --git a/PHPCI/Model/Base/UserBase.php b/PHPCI/Model/Base/UserBase.php index e9be15a0..fe71baf8 100644 --- a/PHPCI/Model/Base/UserBase.php +++ b/PHPCI/Model/Base/UserBase.php @@ -106,6 +106,8 @@ class UserBase extends Model public $indexes = array( 'PRIMARY' => array('unique' => true, 'columns' => 'id'), 'idx_email' => array('unique' => true, 'columns' => 'email'), + 'email' => array('unique' => true, 'columns' => 'email'), + 'name' => array('unique' => true, 'columns' => 'name'), ); /** diff --git a/PHPCI/Store/Base/BuildMetaStoreBase.php b/PHPCI/Store/Base/BuildMetaStoreBase.php index 7a3d4159..6c4cfc15 100644 --- a/PHPCI/Store/Base/BuildMetaStoreBase.php +++ b/PHPCI/Store/Base/BuildMetaStoreBase.php @@ -20,24 +20,11 @@ class BuildMetaStoreBase extends Store protected $modelName = '\PHPCI\Model\BuildMeta'; protected $primaryKey = 'id'; - /** - * Returns a BuildMeta model by primary key. - * @param mixed $value - * @param string $useConnection - * @return \@appNamespace\Model\BuildMeta|null - */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } - /** - * Returns a BuildMeta model by Id. - * @param mixed $value - * @param string $useConnection - * @throws HttpException - * @return \@appNamespace\Model\BuildMeta|null - */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -57,14 +44,6 @@ class BuildMetaStoreBase extends Store return null; } - /** - * Returns an array of BuildMeta models by ProjectId. - * @param mixed $value - * @param int $limit - * @param string $useConnection - * @throws HttpException - * @return array - */ public function getByProjectId($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { @@ -93,14 +72,6 @@ class BuildMetaStoreBase extends Store } } - /** - * Returns an array of BuildMeta models by BuildId. - * @param mixed $value - * @param int $limit - * @param string $useConnection - * @throws HttpException - * @return array - */ public function getByBuildId($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { diff --git a/PHPCI/Store/Base/BuildStoreBase.php b/PHPCI/Store/Base/BuildStoreBase.php index 0560d72b..89d3a82f 100644 --- a/PHPCI/Store/Base/BuildStoreBase.php +++ b/PHPCI/Store/Base/BuildStoreBase.php @@ -20,24 +20,11 @@ class BuildStoreBase extends Store protected $modelName = '\PHPCI\Model\Build'; protected $primaryKey = 'id'; - /** - * Returns a Build model by primary key. - * @param mixed $value - * @param string $useConnection - * @return \@appNamespace\Model\Build|null - */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } - /** - * Returns a Build model by Id. - * @param mixed $value - * @param string $useConnection - * @throws HttpException - * @return \@appNamespace\Model\Build|null - */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -57,14 +44,6 @@ class BuildStoreBase extends Store return null; } - /** - * Returns an array of Build models by ProjectId. - * @param mixed $value - * @param int $limit - * @param string $useConnection - * @throws HttpException - * @return array - */ public function getByProjectId($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { @@ -93,14 +72,6 @@ class BuildStoreBase extends Store } } - /** - * Returns an array of Build models by Status. - * @param mixed $value - * @param int $limit - * @param string $useConnection - * @throws HttpException - * @return array - */ public function getByStatus($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { diff --git a/PHPCI/Store/Base/UserStoreBase.php b/PHPCI/Store/Base/UserStoreBase.php index f2893ac5..90d60cb4 100644 --- a/PHPCI/Store/Base/UserStoreBase.php +++ b/PHPCI/Store/Base/UserStoreBase.php @@ -20,24 +20,11 @@ class UserStoreBase extends Store protected $modelName = '\PHPCI\Model\User'; protected $primaryKey = 'id'; - /** - * Returns a User model by primary key. - * @param mixed $value - * @param string $useConnection - * @return \@appNamespace\Model\User|null - */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } - /** - * Returns a User model by Id. - * @param mixed $value - * @param string $useConnection - * @throws HttpException - * @return \@appNamespace\Model\User|null - */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -57,13 +44,6 @@ class UserStoreBase extends Store return null; } - /** - * Returns a User model by Email. - * @param string $value - * @param string $useConnection - * @throws HttpException - * @return \@appNamespace\Model\User|null - */ public function getByEmail($value, $useConnection = 'read') { if (is_null($value)) { @@ -82,23 +62,16 @@ class UserStoreBase extends Store return null; } - - /** - * Returns a User model by Email. - * @param string $value - * @param string $useConnection - * @throws HttpException - * @return \@appNamespace\Model\User|null - */ - public function getByLoginOrEmail($value, $useConnection = 'read') + + public function getByName($value, $useConnection = 'read') { if (is_null($value)) { throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.'); } - $query = 'SELECT * FROM `user` WHERE `name` = :value OR `email` = :value LIMIT 1'; + $query = 'SELECT * FROM `user` WHERE `name` = :name LIMIT 1'; $stmt = Database::getConnection($useConnection)->prepare($query); - $stmt->bindValue(':value', $value); + $stmt->bindValue(':name', $value); if ($stmt->execute()) { if ($data = $stmt->fetch(\PDO::FETCH_ASSOC)) { From 7ad1d317cdb368e460fc0e95e9f9dc8798ddf3fe Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 16:52:44 +0100 Subject: [PATCH 026/102] Updating builds to try database config first, and fall back to file config. --- PHPCI/Model/Build.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php index f8d2e378..be7f4a8a 100644 --- a/PHPCI/Model/Build.php +++ b/PHPCI/Model/Build.php @@ -99,6 +99,11 @@ class Build extends BuildBase { $build_config = null; + // Try getting the project build config from the database: + if (empty($build_config)) { + $build_config = $this->getProject()->getBuildConfig(); + } + // Try .phpci.yml if (is_file($buildPath . '/.phpci.yml')) { $build_config = file_get_contents($buildPath . '/.phpci.yml'); @@ -109,11 +114,6 @@ class Build extends BuildBase $build_config = file_get_contents($buildPath . '/phpci.yml'); } - // Try getting the project build config from the database: - if (empty($build_config)) { - $build_config = $this->getProject()->getBuildConfig(); - } - // Fall back to zero config plugins: if (empty($build_config)) { $build_config = $this->getZeroConfigPlugins($builder); From a7473eb2508dadd36bed8b13e1ce7be4d839aad3 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 16:53:39 +0100 Subject: [PATCH 027/102] Updating deps. --- composer.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/composer.lock b/composer.lock index 34626b27..0fc6a092 100644 --- a/composer.lock +++ b/composer.lock @@ -1097,16 +1097,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "2.2.3", + "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ef1ca6835468857944d5c3b48fa503d5554cff2f" + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef1ca6835468857944d5c3b48fa503d5554cff2f", - "reference": "ef1ca6835468857944d5c3b48fa503d5554cff2f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", "shasum": "" }, "require": { @@ -1155,7 +1155,7 @@ "testing", "xunit" ], - "time": "2015-09-14 06:51:16" + "time": "2015-10-06 15:47:00" }, { "name": "phpunit/php-file-iterator", @@ -1337,16 +1337,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.10", + "version": "4.8.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "463163747474815c5ccd4ae12b5b355ec12158e8" + "reference": "bdd199472410fd7e32751f9c814c7e06f2c21bd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/463163747474815c5ccd4ae12b5b355ec12158e8", - "reference": "463163747474815c5ccd4ae12b5b355ec12158e8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bdd199472410fd7e32751f9c814c7e06f2c21bd5", + "reference": "bdd199472410fd7e32751f9c814c7e06f2c21bd5", "shasum": "" }, "require": { @@ -1405,7 +1405,7 @@ "testing", "xunit" ], - "time": "2015-10-01 09:14:30" + "time": "2015-10-07 10:39:46" }, { "name": "phpunit/phpunit-mock-objects", From e871df80c26b9e211845db0c97085b2b151dbd42 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 16:54:01 +0100 Subject: [PATCH 028/102] Adding the ability to run branch-specific stages --- PHPCI/Plugin/Util/Executor.php | 53 +++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/PHPCI/Plugin/Util/Executor.php b/PHPCI/Plugin/Util/Executor.php index 3ca244af..b085ac87 100644 --- a/PHPCI/Plugin/Util/Executor.php +++ b/PHPCI/Plugin/Util/Executor.php @@ -50,12 +50,57 @@ class Executor public function executePlugins(&$config, $stage) { $success = true; - // Ignore any stages for which we don't have plugins set: - if (!array_key_exists($stage, $config) || !is_array($config[$stage])) { - return $success; + + /** @var \PHPCI\Model\Build $build */ + $build = $this->pluginFactory->getResourceFor('PHPCI\Model\Build'); + $branch = $build->getBranch(); + $pluginsToExecute = array(); + + // If we have global plugins to execute for this stage, add them to the list to be executed: + if (array_key_exists($stage, $config) && is_array($config[$stage])) { + $pluginsToExecute[] = $config[$stage]; } - foreach ($config[$stage] as $plugin => $options) { + // If we have branch-specific plugins to execute, add them to the list to be executed: + if (isset($config['branch-' . $branch][$stage]) && is_array($config['branch-' . $branch][$stage])) { + $branchConfig = $config['branch-' . $branch]; + $runOption = isset($branchConfig['run-option']) ? $branchConfig['run-option'] : 'after'; + $plugins = $config['branch-' . $branch][$stage]; + + switch ($runOption) { + case 'replace': + $pluginsToExecute = array(); + $pluginsToExecute[] = $plugins; + break; + + case 'before': + array_unshift($pluginsToExecute, $plugins); + break; + + case 'after': + array_push($pluginsToExecute, $plugins); + break; + + default: + array_push($pluginsToExecute, $plugins); + break; + } + } + + foreach ($pluginsToExecute as $pluginSet) { + if (!$this->doExecutePlugins($pluginSet, $stage)) { + $success = false; + } + } + + return $success; + } + + protected function doExecutePlugins(&$plugins, $stage) + { + $success = true; + + foreach ($plugins as $plugin => $options) { $this->logger->log(Lang::get('running_plugin', $plugin)); $this->setPluginStatus($stage, $plugin, Build::STATUS_RUNNING); From 4e0325e8876aa93070678887ada5900bb62e7196 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 17:30:34 +0100 Subject: [PATCH 029/102] Missing build bugfix. --- PHPCI/Worker/BuildWorker.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PHPCI/Worker/BuildWorker.php b/PHPCI/Worker/BuildWorker.php index e08fdd84..a6fcc536 100644 --- a/PHPCI/Worker/BuildWorker.php +++ b/PHPCI/Worker/BuildWorker.php @@ -124,9 +124,9 @@ class BuildWorker Database::reset($config); } - $build = BuildFactory::getBuildById($jobData['build_id']); - - if (empty($build)) { + try { + $build = BuildFactory::getBuildById($jobData['build_id']); + } catch (\Exception $ex) { $this->logger->addWarning('Build #' . $jobData['build_id'] . ' does not exist in the database.'); $pheanstalk->delete($job); } From ada9e332044fd1cbb2c14fdeffc4ce58e80b60c5 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 20:15:20 +0100 Subject: [PATCH 030/102] Restoring to login by email. --- PHPCI/Controller/SessionController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PHPCI/Controller/SessionController.php b/PHPCI/Controller/SessionController.php index 2995c514..b68d61f7 100644 --- a/PHPCI/Controller/SessionController.php +++ b/PHPCI/Controller/SessionController.php @@ -49,7 +49,7 @@ class SessionController extends \PHPCI\Controller } else { unset($_SESSION['login_token']); - $user = $this->userStore->getByLoginOrEmail($this->getParam('email')); + $user = $this->userStore->getByEmail($this->getParam('email')); if ($user && password_verify($this->getParam('password', ''), $user->getHash())) { session_regenerate_id(true); @@ -68,7 +68,7 @@ class SessionController extends \PHPCI\Controller $form->setAction(PHPCI_URL.'session/login'); $email = new b8\Form\Element\Email('email'); - $email->setLabel(Lang::get('login')); + $email->setLabel(Lang::get('email_address')); $email->setRequired(true); $email->setContainerClass('form-group'); $email->setClass('form-control'); From 370eebd227d90dd16a07d3091ff69c2c5722b775 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 20:20:42 +0100 Subject: [PATCH 031/102] Fixing PHPCS error in HomeController --- PHPCI/Controller/HomeController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/PHPCI/Controller/HomeController.php b/PHPCI/Controller/HomeController.php index e6c27e14..1b0c60aa 100644 --- a/PHPCI/Controller/HomeController.php +++ b/PHPCI/Controller/HomeController.php @@ -159,5 +159,4 @@ class HomeController extends \PHPCI\Controller return $rtn; } - } From 2f859be369338aa2612699a1ddfc994efbd7168a Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 20:22:43 +0100 Subject: [PATCH 032/102] PHPCS Fix --- PHPCI/Application.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PHPCI/Application.php b/PHPCI/Application.php index f2d40e0d..a6eb646c 100644 --- a/PHPCI/Application.php +++ b/PHPCI/Application.php @@ -136,7 +136,8 @@ class Application extends b8\Application protected function setLayoutVariables(View &$layout) { $groups = array(); - $groupList = b8\Store\Factory::getStore('ProjectGroup')->getWhere(array(), 100, 0, array(), array('title' => 'ASC')); + $groupStore = b8\Store\Factory::getStore('ProjectGroup'); + $groupList = $groupStore->getWhere(array(), 100, 0, array(), array('title' => 'ASC')); foreach ($groupList['items'] as $group) { $thisGroup = array('title' => $group->getTitle()); From af90b94a3cbe2a7c78b062b4b123c02287a52e0c Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 20:24:32 +0100 Subject: [PATCH 033/102] PHPMD Fixes --- PHPCI/Controller/GroupController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PHPCI/Controller/GroupController.php b/PHPCI/Controller/GroupController.php index 970a240c..c19b0923 100644 --- a/PHPCI/Controller/GroupController.php +++ b/PHPCI/Controller/GroupController.php @@ -53,11 +53,11 @@ class GroupController extends Controller $this->view->groups = $groups; } - public function edit($id = null) + public function edit($groupId = null) { $this->requireAdmin(); - if (!is_null($id)) { + if (!is_null($groupId)) { $group = $this->groupStore->getById($id); } else { $group = new ProjectGroup(); @@ -74,7 +74,7 @@ class GroupController extends Controller $form = new Form(); $form->setMethod('POST'); - $form->setAction(PHPCI_URL . 'group/edit' . (!is_null($id) ? '/' . $id : '')); + $form->setAction(PHPCI_URL . 'group/edit' . (!is_null($groupId) ? '/' . $groupId : '')); $title = new Form\Element\Text('title'); $title->setContainerClass('form-group'); @@ -91,10 +91,10 @@ class GroupController extends Controller $this->view->form = $form; } - public function delete($id) + public function delete($groupId) { $this->requireAdmin(); - $group = $this->groupStore->getById($id); + $group = $this->groupStore->getById($groupId); $this->groupStore->delete($group); $response = new b8\Http\Response\RedirectResponse(); From 4375c524a9baf781392330dd86d2bc7d5f33d8bc Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 8 Oct 2015 20:27:40 +0100 Subject: [PATCH 034/102] PHPMD Fix --- PHPCI/Controller/GroupController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PHPCI/Controller/GroupController.php b/PHPCI/Controller/GroupController.php index c19b0923..cc4b4c51 100644 --- a/PHPCI/Controller/GroupController.php +++ b/PHPCI/Controller/GroupController.php @@ -58,7 +58,7 @@ class GroupController extends Controller $this->requireAdmin(); if (!is_null($groupId)) { - $group = $this->groupStore->getById($id); + $group = $this->groupStore->getById($groupId); } else { $group = new ProjectGroup(); } From 68249d2f5dbb803223e365985a7abe476053e3e5 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 09:16:05 +0100 Subject: [PATCH 035/102] Cleanup of new executor changes. --- PHPCI/Plugin/Util/Executor.php | 90 +++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 29 deletions(-) diff --git a/PHPCI/Plugin/Util/Executor.php b/PHPCI/Plugin/Util/Executor.php index b085ac87..bdd06b7e 100644 --- a/PHPCI/Plugin/Util/Executor.php +++ b/PHPCI/Plugin/Util/Executor.php @@ -50,10 +50,6 @@ class Executor public function executePlugins(&$config, $stage) { $success = true; - - /** @var \PHPCI\Model\Build $build */ - $build = $this->pluginFactory->getResourceFor('PHPCI\Model\Build'); - $branch = $build->getBranch(); $pluginsToExecute = array(); // If we have global plugins to execute for this stage, add them to the list to be executed: @@ -61,31 +57,7 @@ class Executor $pluginsToExecute[] = $config[$stage]; } - // If we have branch-specific plugins to execute, add them to the list to be executed: - if (isset($config['branch-' . $branch][$stage]) && is_array($config['branch-' . $branch][$stage])) { - $branchConfig = $config['branch-' . $branch]; - $runOption = isset($branchConfig['run-option']) ? $branchConfig['run-option'] : 'after'; - $plugins = $config['branch-' . $branch][$stage]; - - switch ($runOption) { - case 'replace': - $pluginsToExecute = array(); - $pluginsToExecute[] = $plugins; - break; - - case 'before': - array_unshift($pluginsToExecute, $plugins); - break; - - case 'after': - array_push($pluginsToExecute, $plugins); - break; - - default: - array_push($pluginsToExecute, $plugins); - break; - } - } + $pluginsToExecute = $this->getBranchSpecificPlugins($config, $stage, $pluginsToExecute); foreach ($pluginsToExecute as $pluginSet) { if (!$this->doExecutePlugins($pluginSet, $stage)) { @@ -96,6 +68,66 @@ class Executor return $success; } + /** + * Check the config for any plugins specific to the branch we're currently building. + * @param $config + * @param $stage + * @param $pluginsToExecute + * @return array + */ + protected function getBranchSpecificPlugins(&$config, $stage, $pluginsToExecute) + { + /** @var \PHPCI\Model\Build $build */ + $build = $this->pluginFactory->getResourceFor('PHPCI\Model\Build'); + $branch = $build->getBranch(); + + // If we don't have any branch-specific plugins: + if (!isset($config['branch-' . $branch][$stage]) || !is_array($config['branch-' . $branch][$stage])) { + return $pluginsToExecute; + } + + // If we have branch-specific plugins to execute, add them to the list to be executed: + $branchConfig = $config['branch-' . $branch]; + $plugins = $branchConfig[$stage]; + + $runOption = 'after'; + + if (!empty($branchConfig['run-option'])) { + $runOption = $branchConfig['run-option']; + } + + switch ($runOption) { + // Replace standard plugin set for this stage with just the branch-specific ones: + case 'replace': + $pluginsToExecute = array(); + $pluginsToExecute[] = $plugins; + break; + + // Run branch-specific plugins before standard plugins: + case 'before': + array_unshift($pluginsToExecute, $plugins); + break; + + // Run branch-specific plugins after standard plugins: + case 'after': + array_push($pluginsToExecute, $plugins); + break; + + default: + array_push($pluginsToExecute, $plugins); + break; + } + + return $pluginsToExecute; + } + + /** + * Execute the list of plugins found for a given testing stage. + * @param $plugins + * @param $stage + * @return bool + * @throws \Exception + */ protected function doExecutePlugins(&$plugins, $stage) { $success = true; From a0083580561acff7082df37f2222d54e2492c8cd Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 09:27:45 +0100 Subject: [PATCH 036/102] Cleaning up BuildWorker #1 --- PHPCI/Worker/BuildWorker.php | 71 ++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/PHPCI/Worker/BuildWorker.php b/PHPCI/Worker/BuildWorker.php index a6fcc536..37d2bc20 100644 --- a/PHPCI/Worker/BuildWorker.php +++ b/PHPCI/Worker/BuildWorker.php @@ -6,6 +6,7 @@ use b8\Config; use b8\Database; use b8\Store\Factory; use Monolog\Logger; +use Pheanstalk\Job; use Pheanstalk\Pheanstalk; use PHPCI\Builder; use PHPCI\BuildFactory; @@ -49,6 +50,16 @@ class BuildWorker */ protected $queue; + /** + * @var \Pheanstalk\Pheanstalk + */ + protected $pheanstalk; + + /** + * @var int + */ + protected $totalJobs = 0; + /** * @param $host * @param $queue @@ -57,6 +68,7 @@ class BuildWorker { $this->host = $host; $this->queue = $queue; + $this->pheanstalk = new Pheanstalk($this->host); } /** @@ -80,36 +92,20 @@ class BuildWorker */ public function startWorker() { - $pheanstalk = new Pheanstalk($this->host); - $pheanstalk->watch($this->queue); - $pheanstalk->ignore('default'); + $this->pheanstalk->watch($this->queue); + $this->pheanstalk->ignore('default'); $buildStore = Factory::getStore('Build'); - $jobs = 0; - while ($this->run) { // Get a job from the queue: - $job = $pheanstalk->reserve(); + $job = $this->pheanstalk->reserve(); - // Make sure we don't run more than maxJobs jobs on this worker: - $jobs++; - - if ($this->maxJobs != -1 && $this->maxJobs <= $jobs) { - $this->run = false; - } + $this->checkJobLimit(); // Get the job data and run the job: $jobData = json_decode($job->getData(), true); - if (empty($jobData) || !is_array($jobData)) { - // Probably not from PHPCI. - $pheanstalk->release($job); - continue; - } - - if (!array_key_exists('type', $jobData) || $jobData['type'] !== 'phpci.build') { - // Probably not from PHPCI. - $pheanstalk->delete($job); + if (!$this->verifyJob($job, $jobData)) { continue; } @@ -128,7 +124,7 @@ class BuildWorker $build = BuildFactory::getBuildById($jobData['build_id']); } catch (\Exception $ex) { $this->logger->addWarning('Build #' . $jobData['build_id'] . ' does not exist in the database.'); - $pheanstalk->delete($job); + $this->pheanstalk->delete($job); } try { @@ -147,7 +143,7 @@ class BuildWorker // If we've caught a PDO Exception, it is probably not the fault of the build, but of a failed // connection or similar. Release the job and kill the worker. $this->run = false; - $pheanstalk->release($job); + $this->pheanstalk->release($job); } catch (\Exception $ex) { $build->setStatus(Build::STATUS_FAILED); $build->setFinished(new \DateTime()); @@ -163,7 +159,7 @@ class BuildWorker } // Delete the job when we're done: - $pheanstalk->delete($job); + $this->pheanstalk->delete($job); } } @@ -174,4 +170,31 @@ class BuildWorker { $this->run = false; } + + protected function checkJobLimit() + { + // Make sure we don't run more than maxJobs jobs on this worker: + $this->totalJobs++; + + if ($this->maxJobs != -1 && $this->maxJobs <= $this->totalJobs) { + $this->stopWorker(); + } + } + + protected function verifyJob(Job $job, $jobData) + { + if (empty($jobData) || !is_array($jobData)) { + // Probably not from PHPCI. + $this->pheanstalk->release($job); + return false; + } + + if (!array_key_exists('type', $jobData) || $jobData['type'] !== 'phpci.build') { + // Probably not from PHPCI. + $this->pheanstalk->delete($job); + return false; + } + + return true; + } } From e61ce203a34cebaa83f946f61e454bcd3b9661be Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 09:38:55 +0100 Subject: [PATCH 037/102] Docblocks --- PHPCI/Controller/GroupController.php | 16 ++++++++++++++++ PHPCI/Controller/HomeController.php | 4 ++++ PHPCI/Store/Base/BuildMetaStoreBase.php | 15 +++++++++++++++ PHPCI/Store/Base/BuildStoreBase.php | 15 +++++++++++++++ PHPCI/Store/Base/ProjectGroupStoreBase.php | 7 +++++++ PHPCI/Store/Base/ProjectStoreBase.php | 15 +++++++++++++++ PHPCI/Store/Base/UserStoreBase.php | 15 +++++++++++++++ PHPCI/Worker/BuildWorker.php | 12 +++++++++++- 8 files changed, 98 insertions(+), 1 deletion(-) diff --git a/PHPCI/Controller/GroupController.php b/PHPCI/Controller/GroupController.php index cc4b4c51..898f9e41 100644 --- a/PHPCI/Controller/GroupController.php +++ b/PHPCI/Controller/GroupController.php @@ -28,11 +28,17 @@ class GroupController extends Controller */ protected $groupStore; + /** + * Set up this controller. + */ public function init() { $this->groupStore = b8\Store\Factory::getStore('ProjectGroup'); } + /** + * List project groups. + */ public function index() { $this->requireAdmin(); @@ -53,6 +59,11 @@ class GroupController extends Controller $this->view->groups = $groups; } + /** + * Add or edit a project group. + * @param null $groupId + * @return void|b8\Http\Response\RedirectResponse + */ public function edit($groupId = null) { $this->requireAdmin(); @@ -91,6 +102,11 @@ class GroupController extends Controller $this->view->form = $form; } + /** + * Delete a project group. + * @param $groupId + * @return b8\Http\Response\RedirectResponse + */ public function delete($groupId) { $this->requireAdmin(); diff --git a/PHPCI/Controller/HomeController.php b/PHPCI/Controller/HomeController.php index 1b0c60aa..4241d324 100644 --- a/PHPCI/Controller/HomeController.php +++ b/PHPCI/Controller/HomeController.php @@ -144,6 +144,10 @@ class HomeController extends \PHPCI\Controller return $view->render(); } + /** + * Get a summary of the project groups we have, and what projects they have in them. + * @return array + */ protected function getGroupInfo() { $rtn = array(); diff --git a/PHPCI/Store/Base/BuildMetaStoreBase.php b/PHPCI/Store/Base/BuildMetaStoreBase.php index 6c4cfc15..52665d79 100644 --- a/PHPCI/Store/Base/BuildMetaStoreBase.php +++ b/PHPCI/Store/Base/BuildMetaStoreBase.php @@ -20,11 +20,18 @@ class BuildMetaStoreBase extends Store protected $modelName = '\PHPCI\Model\BuildMeta'; protected $primaryKey = 'id'; + /** + * Get a BuildMeta by primary key (Id) + */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } + /** + * Get a single BuildMeta by Id. + * @return null|BuildMeta + */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -44,6 +51,10 @@ class BuildMetaStoreBase extends Store return null; } + /** + * Get multiple BuildMeta by ProjectId. + * @return array + */ public function getByProjectId($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { @@ -72,6 +83,10 @@ class BuildMetaStoreBase extends Store } } + /** + * Get multiple BuildMeta by BuildId. + * @return array + */ public function getByBuildId($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { diff --git a/PHPCI/Store/Base/BuildStoreBase.php b/PHPCI/Store/Base/BuildStoreBase.php index 89d3a82f..b8b49cb7 100644 --- a/PHPCI/Store/Base/BuildStoreBase.php +++ b/PHPCI/Store/Base/BuildStoreBase.php @@ -20,11 +20,18 @@ class BuildStoreBase extends Store protected $modelName = '\PHPCI\Model\Build'; protected $primaryKey = 'id'; + /** + * Get a Build by primary key (Id) + */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } + /** + * Get a single Build by Id. + * @return null|Build + */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -44,6 +51,10 @@ class BuildStoreBase extends Store return null; } + /** + * Get multiple Build by ProjectId. + * @return array + */ public function getByProjectId($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { @@ -72,6 +83,10 @@ class BuildStoreBase extends Store } } + /** + * Get multiple Build by Status. + * @return array + */ public function getByStatus($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { diff --git a/PHPCI/Store/Base/ProjectGroupStoreBase.php b/PHPCI/Store/Base/ProjectGroupStoreBase.php index 5b2730ea..c7cd8772 100644 --- a/PHPCI/Store/Base/ProjectGroupStoreBase.php +++ b/PHPCI/Store/Base/ProjectGroupStoreBase.php @@ -20,11 +20,18 @@ class ProjectGroupStoreBase extends Store protected $modelName = '\PHPCI\Model\ProjectGroup'; protected $primaryKey = 'id'; + /** + * Get a ProjectGroup by primary key (Id) + */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } + /** + * Get a single ProjectGroup by Id. + * @return null|ProjectGroup + */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { diff --git a/PHPCI/Store/Base/ProjectStoreBase.php b/PHPCI/Store/Base/ProjectStoreBase.php index c764238d..1e2bf65b 100644 --- a/PHPCI/Store/Base/ProjectStoreBase.php +++ b/PHPCI/Store/Base/ProjectStoreBase.php @@ -20,11 +20,18 @@ class ProjectStoreBase extends Store protected $modelName = '\PHPCI\Model\Project'; protected $primaryKey = 'id'; + /** + * Get a Project by primary key (Id) + */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } + /** + * Get a single Project by Id. + * @return null|Project + */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -44,6 +51,10 @@ class ProjectStoreBase extends Store return null; } + /** + * Get multiple Project by Title. + * @return array + */ public function getByTitle($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { @@ -72,6 +83,10 @@ class ProjectStoreBase extends Store } } + /** + * Get multiple Project by GroupId. + * @return array + */ public function getByGroupId($value, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { diff --git a/PHPCI/Store/Base/UserStoreBase.php b/PHPCI/Store/Base/UserStoreBase.php index 90d60cb4..c1c6cdf7 100644 --- a/PHPCI/Store/Base/UserStoreBase.php +++ b/PHPCI/Store/Base/UserStoreBase.php @@ -20,11 +20,18 @@ class UserStoreBase extends Store protected $modelName = '\PHPCI\Model\User'; protected $primaryKey = 'id'; + /** + * Get a User by primary key (Id) + */ public function getByPrimaryKey($value, $useConnection = 'read') { return $this->getById($value, $useConnection); } + /** + * Get a single User by Id. + * @return null|User + */ public function getById($value, $useConnection = 'read') { if (is_null($value)) { @@ -44,6 +51,10 @@ class UserStoreBase extends Store return null; } + /** + * Get a single User by Email. + * @return null|User + */ public function getByEmail($value, $useConnection = 'read') { if (is_null($value)) { @@ -63,6 +74,10 @@ class UserStoreBase extends Store return null; } + /** + * Get a single User by Name. + * @return null|User + */ public function getByName($value, $useConnection = 'read') { if (is_null($value)) { diff --git a/PHPCI/Worker/BuildWorker.php b/PHPCI/Worker/BuildWorker.php index 37d2bc20..92ee4ced 100644 --- a/PHPCI/Worker/BuildWorker.php +++ b/PHPCI/Worker/BuildWorker.php @@ -171,6 +171,10 @@ class BuildWorker $this->run = false; } + /** + * Checks if this worker has done the amount of jobs it is allowed to do, and if so tells it to stop + * after this job completes. + */ protected function checkJobLimit() { // Make sure we don't run more than maxJobs jobs on this worker: @@ -181,11 +185,17 @@ class BuildWorker } } + /** + * Checks that the job received is actually from PHPCI, and has a valid type. + * @param Job $job + * @param $jobData + * @return bool + */ protected function verifyJob(Job $job, $jobData) { if (empty($jobData) || !is_array($jobData)) { // Probably not from PHPCI. - $this->pheanstalk->release($job); + $this->pheanstalk->delete($job); return false; } From 07b92fecf3f6d45781dd938675e55d6d36127be5 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 10:14:54 +0100 Subject: [PATCH 038/102] Fixing tests --- PHPCI/BuildFactory.php | 2 ++ PHPCI/Model/Build.php | 26 ++++++++++++++++++++++++++ composer.lock | 10 +++++----- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/PHPCI/BuildFactory.php b/PHPCI/BuildFactory.php index 1dbc4017..91e618a8 100644 --- a/PHPCI/BuildFactory.php +++ b/PHPCI/BuildFactory.php @@ -66,6 +66,8 @@ class BuildFactory case 'svn': $type = 'SubversionBuild'; break; + default: + return $build; } $class = '\\PHPCI\\Model\\Build\\' . $type; diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php index be7f4a8a..9374b763 100644 --- a/PHPCI/Model/Build.php +++ b/PHPCI/Model/Build.php @@ -30,6 +30,11 @@ class Build extends BuildBase public $currentBuildPath = null; + /** + * @var \PHPCI\Model\Project $project + */ + protected $project; + /** * Get link to commit from another source (i.e. Github) */ @@ -249,4 +254,25 @@ class Build extends BuildBase exec(sprintf(IS_WIN ? 'rmdir /S /Q "%s"' : 'rm -Rf "%s"', $buildPath)); } + + /** + * @param Project $value + */ + public function setProjectObject(\PHPCI\Model\Project $value) + { + $this->project = $value; + return parent::setProjectObject($value); + } + + /** + * Get the Project model for this Build by Id. + */ + public function getProject() + { + if (empty($this->project)) { + $this->project = parent::getProject(); + } + + return $this->project; + } } diff --git a/composer.lock b/composer.lock index 0fc6a092..b399ce10 100644 --- a/composer.lock +++ b/composer.lock @@ -1781,16 +1781,16 @@ }, { "name": "sebastian/global-state", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" + "reference": "23af31f402993cfd94e99cbc4b782e9a78eb0e97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23af31f402993cfd94e99cbc4b782e9a78eb0e97", + "reference": "23af31f402993cfd94e99cbc4b782e9a78eb0e97", "shasum": "" }, "require": { @@ -1828,7 +1828,7 @@ "keywords": [ "global state" ], - "time": "2014-10-06 09:23:50" + "time": "2015-06-21 15:11:22" }, { "name": "sebastian/recursion-context", From f747371c6ddf1d4326cdfb7260b08037fd9aef4e Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 10:29:21 +0100 Subject: [PATCH 039/102] Fixing tests #2 --- PHPCI/Model/Build.php | 13 ++++--------- Tests/PHPCI/Service/BuildServiceTest.php | 6 +++++- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php index 9374b763..2f2b64cc 100644 --- a/PHPCI/Model/Build.php +++ b/PHPCI/Model/Build.php @@ -30,11 +30,6 @@ class Build extends BuildBase public $currentBuildPath = null; - /** - * @var \PHPCI\Model\Project $project - */ - protected $project; - /** * Get link to commit from another source (i.e. Github) */ @@ -260,7 +255,7 @@ class Build extends BuildBase */ public function setProjectObject(\PHPCI\Model\Project $value) { - $this->project = $value; + $this->data['project'] = $value; return parent::setProjectObject($value); } @@ -269,10 +264,10 @@ class Build extends BuildBase */ public function getProject() { - if (empty($this->project)) { - $this->project = parent::getProject(); + if (empty($this->data['project'])) { + $this->data['project'] = parent::getProject(); } - return $this->project; + return $this->data['project']; } } diff --git a/Tests/PHPCI/Service/BuildServiceTest.php b/Tests/PHPCI/Service/BuildServiceTest.php index 985f3088..4a396334 100644 --- a/Tests/PHPCI/Service/BuildServiceTest.php +++ b/Tests/PHPCI/Service/BuildServiceTest.php @@ -101,9 +101,13 @@ class BuildServiceTest extends \PHPUnit_Framework_TestCase */ public function testExecute_CreateDuplicateBuild() { + $project = new Project(); + $project->setType('hg'); + $project->setId(101); + $build = new Build(); $build->setId(1); - $build->setProjectId(101); + $build->setProject($project); $build->setCommitId('abcde'); $build->setStatus(Build::STATUS_FAILED); $build->setLog('Test'); From fbc3da59dd6a09e99b7247a1d323fba7b62f9e71 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 10:37:50 +0100 Subject: [PATCH 040/102] Fix --- PHPCI/Model/Build.php | 21 --------------------- PHPCI/Service/BuildService.php | 20 ++++++++++++++------ Tests/PHPCI/Service/BuildServiceTest.php | 6 +----- 3 files changed, 15 insertions(+), 32 deletions(-) diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php index 2f2b64cc..be7f4a8a 100644 --- a/PHPCI/Model/Build.php +++ b/PHPCI/Model/Build.php @@ -249,25 +249,4 @@ class Build extends BuildBase exec(sprintf(IS_WIN ? 'rmdir /S /Q "%s"' : 'rm -Rf "%s"', $buildPath)); } - - /** - * @param Project $value - */ - public function setProjectObject(\PHPCI\Model\Project $value) - { - $this->data['project'] = $value; - return parent::setProjectObject($value); - } - - /** - * Get the Project model for this Build by Id. - */ - public function getProject() - { - if (empty($this->data['project'])) { - $this->data['project'] = parent::getProject(); - } - - return $this->data['project']; - } } diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php index 7db8d474..dca0fc0d 100644 --- a/PHPCI/Service/BuildService.php +++ b/PHPCI/Service/BuildService.php @@ -87,9 +87,13 @@ class BuildService $build = $this->buildStore->save($build); - $build = BuildFactory::getBuild($build); - $build->sendStatusPostback(); - $this->addBuildToQueue($build); + $buildId = $build->getId(); + + if (!empty($buildId)) { + $build = BuildFactory::getBuild($build); + $build->sendStatusPostback(); + $this->addBuildToQueue($build); + } return $build; } @@ -116,9 +120,13 @@ class BuildService $build = $this->buildStore->save($build); - $build = BuildFactory::getBuild($build); - $build->sendStatusPostback(); - $this->addBuildToQueue($build); + $buildId = $build->getId(); + + if (!empty($buildId)) { + $build = BuildFactory::getBuild($build); + $build->sendStatusPostback(); + $this->addBuildToQueue($build); + } return $build; } diff --git a/Tests/PHPCI/Service/BuildServiceTest.php b/Tests/PHPCI/Service/BuildServiceTest.php index 4a396334..3c96b131 100644 --- a/Tests/PHPCI/Service/BuildServiceTest.php +++ b/Tests/PHPCI/Service/BuildServiceTest.php @@ -101,13 +101,9 @@ class BuildServiceTest extends \PHPUnit_Framework_TestCase */ public function testExecute_CreateDuplicateBuild() { - $project = new Project(); - $project->setType('hg'); - $project->setId(101); - $build = new Build(); $build->setId(1); - $build->setProject($project); + $build->setProject(101); $build->setCommitId('abcde'); $build->setStatus(Build::STATUS_FAILED); $build->setLog('Test'); From 725ce70ae9a7b66c3f116e3ca8dde9f998f1bc8f Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 10:58:18 +0100 Subject: [PATCH 041/102] Fixing ordering on projects for @REBELinBLUE --- PHPCI/Store/ProjectStore.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/PHPCI/Store/ProjectStore.php b/PHPCI/Store/ProjectStore.php index 5f58fcc8..ea46d82b 100644 --- a/PHPCI/Store/ProjectStore.php +++ b/PHPCI/Store/ProjectStore.php @@ -66,6 +66,41 @@ class ProjectStore extends ProjectStoreBase $count = count($rtn); + return array('items' => $rtn, 'count' => $count); + } else { + return array('items' => array(), 'count' => 0); + } + } + + /** + * Get multiple Project by GroupId. + * @param int $value + * @param int $limit + * @param string $useConnection + * @return array + * @throws \Exception + */ + public function getByGroupId($value, $limit = 1000, $useConnection = 'read') + { + if (is_null($value)) { + throw new \Exception('Value passed to ' . __FUNCTION__ . ' cannot be null.'); + } + + $query = 'SELECT * FROM `project` WHERE `group_id` = :group_id ORDER BY title LIMIT :limit'; + $stmt = Database::getConnection($useConnection)->prepare($query); + $stmt->bindValue(':group_id', $value); + $stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT); + + if ($stmt->execute()) { + $res = $stmt->fetchAll(\PDO::FETCH_ASSOC); + + $map = function ($item) { + return new Project($item); + }; + $rtn = array_map($map, $res); + + $count = count($rtn); + return array('items' => $rtn, 'count' => $count); } else { return array('items' => array(), 'count' => 0); From 97216b0f4138c664ee2bfd93e335458bcdc9f332 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Fri, 9 Oct 2015 11:10:14 +0100 Subject: [PATCH 042/102] Fixing login stuff --- ...0151009100610_remove_unique_name_index.php | 40 +++++++++++++++++++ PHPCI/View/User/index.phtml | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 PHPCI/Migrations/20151009100610_remove_unique_name_index.php diff --git a/PHPCI/Migrations/20151009100610_remove_unique_name_index.php b/PHPCI/Migrations/20151009100610_remove_unique_name_index.php new file mode 100644 index 00000000..283dfbc0 --- /dev/null +++ b/PHPCI/Migrations/20151009100610_remove_unique_name_index.php @@ -0,0 +1,40 @@ +table('user'); + + if ($user->hasIndex('name', array('unique' => true))) { + $user->removeIndex('name', array('unique' => true)); + $user->save(); + } + + $user->addIndex('name', array('unique' => false)); + $user->save(); + } +} diff --git a/PHPCI/View/User/index.phtml b/PHPCI/View/User/index.phtml index 15208667..061be90f 100644 --- a/PHPCI/View/User/index.phtml +++ b/PHPCI/View/User/index.phtml @@ -40,7 +40,7 @@ User()->getIsAdmin()): ?> -
    +
    "},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){var b=a.iframeNumber+"_"+b._.currentTabId, +c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"text",label:a.LocalizationLabel.ChangeTo.text+":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px","default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo.instance= +this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().hide()}},{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src= +a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){p=this},onHide:function(){this.clear()},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%","50%","50%"], +children:[{type:"button",id:"ChangeTo",label:a.LocalizationButton.ChangeTo.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeTo.instance=this},onClick:c},{type:"button",id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=this},onClick:c},{type:"button",id:"AddWord", +label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:c},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.FinishChecking.instance=this},onClick:c}]},{type:"vbox",id:"rightCol_col__right", +widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this},onClick:c},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreAllWords.instance= +this},onClick:c},{type:"button",id:"option",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):b.openDialog("options")}}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().hide()}, +onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src=a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'WebSpellChecker.net'}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox", +id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):b.openDialog("options")}},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text, +title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"GrammTab",label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"
    "},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;", +children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},{type:"html",id:"html_text",html:"
    ", +onShow:function(){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox",children:[{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)}, +onClick:c},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;", +widths:["70%","30%"],onShow:function(){this.getElement().hide()},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right", +width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"
    "},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId, +c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: -10px auto; overflow: hidden;",children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo",label:"Change to:",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(){a.textNode.Thesaurus=this},onHide:function(){this.reset()}}, +{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]},{type:"hbox",children:[{type:"select",id:"categories",label:"Categories:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.categories=this},onHide:function(){this.clear()},onChange:function(){a.buildOptionSynonyms(this.getValue())}}, +{type:"select",id:"synonyms",label:"Synonyms:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.synonyms=this;a.textNode.Thesaurus.setValue(this.getValue())},onHide:function(){this.clear()},onChange:function(){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'WebSpellChecker.net', +setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 121px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().hide()},children:[{type:"hbox", +id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'WebSpellChecker.net',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking", +label:"Finish Checking",title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]}]}});CKEDITOR.dialog.add("options",function(){var b=null,c={},d={},f=null,g=null;e.cookie.get("udn");e.cookie.get("osp");var h=function(){g=this.getElement().getAttribute("title-cmd");var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp", +a);e.cookie.set("udnCmd",g?g:"ignore");"delete"!=g&&(a="",""!==j.getValue()&&(a=j.getValue()),e.cookie.set("udn",a));e.postMessage.send({id:"options_dic_send"})},i=function(){f.getElement().setHtml(a.LocalizationComing.error);f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red", +html:"
    ",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%","48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words", +labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox", +id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]= +!this.getValue()?0:1}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){j=this;this.setValue(a.userDictionaryName?a.userDictionaryName:(e.cookie.get("udn"),this.getValue()))},onShow:function(){j=this;this.setValue(!e.cookie.get("udn")?this.getValue():e.cookie.get("udn"));this.setLabel(a.LocalizationComing.DictionaryName)}, +onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Create)},onClick:h},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Restore)},onClick:h}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Rename)},onClick:h},{type:"button",id:"delete",label:"Remove",title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id)},onShow:function(){this.getElement().setText(a.LocalizationComing.Remove)},onClick:h}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"
    "+a.LocalizationComing.OptionsTextIntro+"
    ",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}],buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[]; +a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udn",j.getValue());e.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){b=this;e.postMessage.init(i);c.IgnoreAllCapsWords=b.getContentElement("OptionsTab","IgnoreAllCapsWords");c.IgnoreWordsNumbers=b.getContentElement("OptionsTab","IgnoreWordsNumbers");c.IgnoreMixedCaseWords= +b.getContentElement("OptionsTab","IgnoreMixedCaseWords");c.IgnoreDomainNames=b.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){var b=e.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];!parseInt(d.IgnoreAllCapsWords,10)?c.IgnoreAllCapsWords.setValue("",!1):c.IgnoreAllCapsWords.setValue("checked",!1);!parseInt(d.IgnoreWordsNumbers,10)?c.IgnoreWordsNumbers.setValue("",!1):c.IgnoreWordsNumbers.setValue("checked", +!1);!parseInt(d.IgnoreMixedCaseWords,10)?c.IgnoreMixedCaseWords.setValue("",!1):c.IgnoreMixedCaseWords.setValue("checked",!1);!parseInt(d.IgnoreDomainNames,10)?c.IgnoreDomainNames.setValue("",!1):c.IgnoreDomainNames.setValue("checked",!1);d.IgnoreAllCapsWords=!c.IgnoreAllCapsWords.getValue()?0:1;d.IgnoreWordsNumbers=!c.IgnoreWordsNumbers.getValue()?0:1;d.IgnoreMixedCaseWords=!c.IgnoreMixedCaseWords.getValue()?0:1;d.IgnoreDomainNames=!c.IgnoreDomainNames.getValue()?0:1;c.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML= +a.LocalizationComing.IgnoreAllCapsWords;c.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;c.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;c.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames}}});CKEDITOR.dialog.on("resize",function(b){var b=b.data,c=b.dialog,d=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);"checkspell"==c._.name&&(a.bnr?d&& +d.setSize("height",b.height-310):d&&d.setSize("height",b.height-220))});CKEDITOR.on("dialogDefinition",function(b){var c=b.data.definition;a.onLoadOverlay=new q({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("show",function(){});c.dialog.on("cancel",function(){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame());a.div_overlay.setDisable();return!1},this,null,-1)})})(); \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/plugins/wsc/dialogs/wsc_ie.js b/public/assets/plugins/ckeditor/plugins/wsc/dialogs/wsc_ie.js new file mode 100644 index 00000000..6b39b006 --- /dev/null +++ b/public/assets/plugins/ckeditor/plugins/wsc/dialogs/wsc_ie.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang|| +f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display", +"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='', +l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='

    '+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"

    ");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display", +"none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", +{attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}}); +CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))}); \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/dialog.css b/public/assets/plugins/ckeditor/skins/moono/dialog.css new file mode 100644 index 00000000..29bbaf9f --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/dialog_ie.css b/public/assets/plugins/ckeditor/skins/moono/dialog_ie.css new file mode 100644 index 00000000..153b05cb --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/dialog_ie7.css b/public/assets/plugins/ckeditor/skins/moono/dialog_ie7.css new file mode 100644 index 00000000..459e72b8 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/dialog_ie8.css b/public/assets/plugins/ckeditor/skins/moono/dialog_ie8.css new file mode 100644 index 00000000..74e9fa88 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/dialog_iequirks.css b/public/assets/plugins/ckeditor/skins/moono/dialog_iequirks.css new file mode 100644 index 00000000..1c8e0558 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/dialog_opera.css b/public/assets/plugins/ckeditor/skins/moono/dialog_opera.css new file mode 100644 index 00000000..742ce731 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/dialog_opera.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/editor.css b/public/assets/plugins/ckeditor/skins/moono/editor.css new file mode 100644 index 00000000..2df84822 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/editor_gecko.css b/public/assets/plugins/ckeditor/skins/moono/editor_gecko.css new file mode 100644 index 00000000..ecb7990a --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/editor_ie.css b/public/assets/plugins/ckeditor/skins/moono/editor_ie.css new file mode 100644 index 00000000..332d7795 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/editor_ie7.css b/public/assets/plugins/ckeditor/skins/moono/editor_ie7.css new file mode 100644 index 00000000..9bfeaa78 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/editor_ie8.css b/public/assets/plugins/ckeditor/skins/moono/editor_ie8.css new file mode 100644 index 00000000..955ec8d2 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/editor_iequirks.css b/public/assets/plugins/ckeditor/skins/moono/editor_iequirks.css new file mode 100644 index 00000000..009d08c5 --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/public/assets/plugins/ckeditor/skins/moono/icons.png b/public/assets/plugins/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..c71008d700ecd88b3777e9e546b1c0e1e7c50b57 GIT binary patch literal 10030 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 A`2YX_ literal 0 HcmV?d00001 diff --git a/public/assets/plugins/ckeditor/skins/moono/images/close.png b/public/assets/plugins/ckeditor/skins/moono/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..04b9c97dde8273f8518060c82104b38b51832fa0 GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ=q4dV~EA+rIQW2r5r_$|IbhBX1!iK_4XmB4ZGuZyxX>Mli(%E z3$HvlGJ~HaFWITo!p#_bl)s>kG4~ILn4ZiInf3+cyI*T<`W(k~_vmY;nOSN7-tT?5 z_kMlG#)t>?(@N_U7A5H`{SZHU%5|y8mTLiCjxG~YC1*%7ESS=i8mXXUVBBMvkk)Zx zV?z+v(jd;QQM_K73j+!*M=?Jx=(qL zyV9$j>$uN4a_JV!q7Nf$g=w9`d^C7^PGA=~P!uT~qnS$!bq$4+Rn zRm$m#aRaT?oBmm{=FQhCd#|NJzRQD|8O+Vit9IW#m0|Mh$eHi2ze*L#9F{1SQ8HHc z4Zg9BH*Meg5Uo|W-`4Hlx9=LmhWqbRZRG0Hp8YoQowzL1@kK9x5mTUu>hHgCQ-VsW z92RMKolEYT^XF2b3{bDqtLv}7DjKgo{7|9&u;Yx#t3aOM*WBA}k1bpkwU1Xgef{_8 zQ_+pAttB$Yjb{4TF*LmYZ6CdM+Pt%A&Pql~pVU2tB$E3i4jY^)wB33;_hapR#yj&8 z_k69LfBWq=h6*9Umc$MPj)YE+L~jQEM2UT~&p(fMdGbAP`{}*^yE`_mUcEY>LGD~J zSC6>3_=>RA3QDRDyr(~v8;?`jEllcfxgCxj?;QX|b^2DN4hVt@qz0ADq;^f4F ZRK5J7^x5xhq=1STJYD@<);T3K0RTH-Q&a!| literal 0 HcmV?d00001 diff --git a/public/assets/plugins/ckeditor/skins/moono/images/hidpi/close.png b/public/assets/plugins/ckeditor/skins/moono/images/hidpi/close.png new file mode 100644 index 0000000000000000000000000000000000000000..8abca8e9726db1db199a0872d24b08842ec8ea62 GIT binary patch literal 1792 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 literal 0 HcmV?d00001 diff --git a/public/assets/plugins/ckeditor/skins/moono/images/lock.png b/public/assets/plugins/ckeditor/skins/moono/images/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..c127f9ebe788baaf9c69bea6d1c7653d990cbe3c GIT binary patch literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<3~>y#}JFtwUamcJ$4Xi+b?OIx5#CqXV9F5Wxj{CWzI9}I~1#a zxe)M?q2wX2-yR1Qm6(Yl9w#m)DsJBWEpFlsaiv2;q%iS9F@!!9`;&sdy-?D_h?Q(q*;!@Xr zV*c4mE2&-y9=7-yFU!6waO`^Yu%KeH%1PY`s-8vGGJN?_6BIZECcgK-;k1vV>B05e zw{L%aRyS9L^8l;C?_&!@*Ij?jI3e|BVW3Dk!?h@eu0=aeZ+auK;QH%@t6uNgR=ody zy3tGqgSmdn?`v`p(oynm@B2FvhaW#y*4NkH6rr=P%R;Vy@CgHpZ{!H zwJLSq^XbxxyXWj>$o)R8an-!;6a1mJ`I1|7zP)n_4XvrE3Ak>WC{a{WQnD>V=iDWe zr8?eoifiiXfN&PEETh{4m<&t;ucLK6UWP&V5D literal 0 HcmV?d00001 diff --git a/public/assets/plugins/ckeditor/skins/moono/images/refresh.png b/public/assets/plugins/ckeditor/skins/moono/images/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a061c50de209f0b3749537a6a20fba2b93c8e3 GIT binary patch literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(=iY?K- z+T>WE_|9u#iQ?6_3VMH-)0Rt%@4C1)k0tvrvkZ&loF;Dff{VURL7EFQFE4q&cfzy3 zyEe~Io3gXOO#IyOrv>Y-ye^HC6Fg|Zv+1TzaBy%32gBbw`SYJU7IB2K9;mpPF-z@b z$*deR?~M^h40Ve#ULHzQ+dU=I$FK<`iUaz4iRSe5FrS zX0ui2pHGeyQ)*)MIVU^YWeHafbN;PubEBf8ldGzJy9yaFtrFZ>9zj|)JT`TzH=g*%O7yY+w z-(Ff@AAkDkr|k!{%YV;oZf0J4HS0ekf9TZNv!&0SJC|W1b>a2bfKZ;pKdSTd{lmk; z>ViX$F{O!#iPf>ltl`$5UteQoE)C=@^Vp&fY6xhvdmBH3f7!H z?LF(PT3d%eTcX+IlQ#lI7-N`O939qQSLSivdwp`e%afTMHdV$tqPW~jOU|4`{&{%O;vd(ZWIzOti+-G(*I=klM5?CjN2 zER5>v>iwZxU+&T?luK3-Pe-~bU zDYGi;PTuyNd-opon#6Mcvw^R0=-*hEFr%4grhoqY`F)7i)T0)Cd($@m%wK)=ms@B* z!@BkBIhzr!AdYO6I#mR{Use1WE>9gP2NC6cwc)I$z JtaD0e0su#cn~(qi literal 0 HcmV?d00001 diff --git a/public/assets/plugins/ckeditor/skins/moono/readme.md b/public/assets/plugins/ckeditor/skins/moono/readme.md new file mode 100644 index 00000000..0fa4c1ac --- /dev/null +++ b/public/assets/plugins/ckeditor/skins/moono/readme.md @@ -0,0 +1,51 @@ +"Moono" Skin +==================== + +This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor +[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by +the CKEditor team. "Moono" is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. +It comes with the following features: + +- Chameleon feature with brightness, +- high-contrast compatibility, +- graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **icons/**: contains all skin defined icons, +- **images/**: contains a fill general used images, +- **dev/**: contains SVG source of the skin icons. + +License +------- + +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. diff --git a/public/assets/plugins/ckeditor/styles.js b/public/assets/plugins/ckeditor/styles.js new file mode 100644 index 00000000..b58e0bda --- /dev/null +++ b/public/assets/plugins/ckeditor/styles.js @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin, which shows a combo +// in the editor toolbar, containing all styles. Other plugins instead, like +// the div plugin, use a subset of the styles on their feature. +// +// If you don't have plugins that depend on this file, you can simply ignore it. +// Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. + +CKEDITOR.stylesSet.add( 'default', [ + /* Block Styles */ + + // These styles are already available in the "Format" combo ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline Styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles combo, removing them from the toolbar. + // (This requires the "stylescombo" plugin) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object Styles */ + + { + name: 'Styled image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } +]); + diff --git a/public/assets/css/colorpicker/bootstrap-colorpicker.css b/public/assets/plugins/colorpicker/bootstrap-colorpicker.css old mode 100755 new mode 100644 similarity index 89% rename from public/assets/css/colorpicker/bootstrap-colorpicker.css rename to public/assets/plugins/colorpicker/bootstrap-colorpicker.css index 8252394f..ba4365e2 --- a/public/assets/css/colorpicker/bootstrap-colorpicker.css +++ b/public/assets/plugins/colorpicker/bootstrap-colorpicker.css @@ -13,7 +13,7 @@ width: 100px; height: 100px; cursor: crosshair; - background-image: url("../../img/bootstrap-colorpicker/saturation.png"); + background-image: url("img/saturation.png"); } .colorpicker-saturation i { @@ -64,12 +64,12 @@ } .colorpicker-hue { - background-image: url("../../img/bootstrap-colorpicker/hue.png"); + background-image: url("img/hue.png"); } .colorpicker-alpha { display: none; - background-image: url("../../img/bootstrap-colorpicker/alpha.png"); + background-image: url("img/alpha.png"); } .colorpicker { @@ -135,7 +135,7 @@ height: 10px; margin-top: 5px; clear: both; - background-image: url("../../img/bootstrap-colorpicker/alpha.png"); + background-image: url("img/alpha.png"); background-position: 0 100%; } @@ -194,11 +194,11 @@ } .colorpicker.colorpicker-horizontal .colorpicker-hue { - background-image: url("../../img/bootstrap-colorpicker/hue-horizontal.png"); + background-image: url("img/hue-horizontal.png"); } .colorpicker.colorpicker-horizontal .colorpicker-alpha { - background-image: url("../../img/bootstrap-colorpicker/alpha-horizontal.png"); + background-image: url("img/alpha-horizontal.png"); } .colorpicker.colorpicker-hidden { diff --git a/public/assets/js/plugins/colorpicker/bootstrap-colorpicker.js b/public/assets/plugins/colorpicker/bootstrap-colorpicker.js old mode 100755 new mode 100644 similarity index 100% rename from public/assets/js/plugins/colorpicker/bootstrap-colorpicker.js rename to public/assets/plugins/colorpicker/bootstrap-colorpicker.js diff --git a/public/assets/plugins/colorpicker/bootstrap-colorpicker.min.css b/public/assets/plugins/colorpicker/bootstrap-colorpicker.min.css new file mode 100644 index 00000000..16a2d1a0 --- /dev/null +++ b/public/assets/plugins/colorpicker/bootstrap-colorpicker.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Colorpicker + * http://mjolnic.github.io/bootstrap-colorpicker/ + * + * Originally written by (c) 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + */.colorpicker-saturation{float:left;width:100px;height:100px;cursor:crosshair;background-image:url("img/saturation.png")}.colorpicker-saturation i{position:absolute;top:0;left:0;display:block;width:5px;height:5px;margin:-4px 0 0 -4px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-saturation i b{display:block;width:5px;height:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-hue,.colorpicker-alpha{float:left;width:15px;height:100px;margin-bottom:4px;margin-left:4px;cursor:row-resize}.colorpicker-hue i,.colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:100%;height:1px;margin-top:-1px;background:#000;border-top:1px solid #fff}.colorpicker-hue{background-image:url("img/hue.png")}.colorpicker-alpha{display:none;background-image:url("img/alpha.png")}.colorpicker{top:0;left:0;z-index:2500;min-width:130px;padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1}.colorpicker:before,.colorpicker:after{display:table;line-height:0;content:""}.colorpicker:after{clear:both}.colorpicker:before{position:absolute;top:-7px;left:6px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.colorpicker:after{position:absolute;top:-6px;left:7px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url("img/alpha.png");background-position:0 100%}.colorpicker-color div{height:10px}.colorpicker-element .input-group-addon i{display:block;width:16px;height:16px;cursor:pointer}.colorpicker.colorpicker-inline{position:relative;display:inline-block;float:none}.colorpicker.colorpicker-horizontal{width:110px;height:auto;min-width:110px}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-color{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-hue,.colorpicker.colorpicker-horizontal .colorpicker-alpha{float:left;width:100px;height:15px;margin-bottom:4px;margin-left:0;cursor:col-resize}.colorpicker.colorpicker-horizontal .colorpicker-hue i,.colorpicker.colorpicker-horizontal .colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:1px;height:15px;margin-top:0;background:#fff;border:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url("img/hue-horizontal.png")}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url("img/alpha-horizontal.png")}.colorpicker.colorpicker-hidden{display:none}.colorpicker.colorpicker-visible{display:block}.colorpicker-inline.colorpicker-visible{display:inline-block} \ No newline at end of file diff --git a/public/assets/js/plugins/colorpicker/bootstrap-colorpicker.min.js b/public/assets/plugins/colorpicker/bootstrap-colorpicker.min.js old mode 100755 new mode 100644 similarity index 100% rename from public/assets/js/plugins/colorpicker/bootstrap-colorpicker.min.js rename to public/assets/plugins/colorpicker/bootstrap-colorpicker.min.js diff --git a/public/assets/plugins/colorpicker/img/alpha-horizontal.png b/public/assets/plugins/colorpicker/img/alpha-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a65c08b0ed34d969cb0e93165a2e8b0ef9dbd7 GIT binary patch literal 3635 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 FV1h0U4od(4 literal 0 HcmV?d00001 diff --git a/public/assets/plugins/colorpicker/img/alpha.png b/public/assets/plugins/colorpicker/img/alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..38043f1c85f20fe8ce37ad380bebe2d42d14fb29 GIT binary patch literal 3271 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 literal 0 HcmV?d00001 diff --git a/public/assets/plugins/colorpicker/img/hue.png b/public/assets/plugins/colorpicker/img/hue.png new file mode 100644 index 0000000000000000000000000000000000000000..d89560e999f86c349ddc78c298b0328293f13e1e GIT binary patch literal 2972 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 >YjDHRkjMe3FzWUPlrRR$Vj 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 literal 0 HcmV?d00001 diff --git a/public/assets/plugins/datatables/dataTables.bootstrap.css b/public/assets/plugins/datatables/dataTables.bootstrap.css new file mode 100644 index 00000000..2ccacaff --- /dev/null +++ b/public/assets/plugins/datatables/dataTables.bootstrap.css @@ -0,0 +1,372 @@ +div.dataTables_length label { + font-weight: normal; + text-align: left; + white-space: nowrap; +} + +div.dataTables_length select { + width: 75px; + display: inline-block; +} + +div.dataTables_filter { + text-align: right; +} + +div.dataTables_filter label { + font-weight: normal; + white-space: nowrap; + text-align: left; +} + +div.dataTables_filter input { + margin-left: 0.5em; + display: inline-block; + width: auto; +} + +div.dataTables_info { + padding-top: 8px; + white-space: nowrap; +} + +div.dataTables_paginate { + margin: 0; + white-space: nowrap; + text-align: right; +} + +div.dataTables_paginate ul.pagination { + margin: 2px 0; + white-space: nowrap; +} + +@media screen and (max-width: 767px) { + div.dataTables_wrapper > div.row > div, + div.dataTables_length, + div.dataTables_filter, + div.dataTables_info, + div.dataTables_paginate { + text-align: center; + } + + div.DTTT { + margin-bottom: 0.5em; + } +} + + +table.dataTable td, +table.dataTable th { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + + +table.dataTable { + clear: both; + margin-top: 6px !important; + margin-bottom: 6px !important; + max-width: none !important; +} + +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting_asc_disabled, +table.dataTable thead .sorting_desc_disabled { + cursor: pointer; + position: relative; +} + +table.dataTable thead .sorting:after, +table.dataTable thead .sorting_asc:after, +table.dataTable thead .sorting_desc:after { + position: absolute; + top: 8px; + right: 8px; + display: block; + font-family: 'Glyphicons Halflings'; + opacity: 0.5; +} +table.dataTable thead .sorting:after { + opacity: 0.2; + content: "\e150"; /* sort */ +} +table.dataTable thead .sorting_asc:after { + content: "\e155"; /* sort-by-attributes */ +} +table.dataTable thead .sorting_desc:after { + content: "\e156"; /* sort-by-attributes-alt */ +} +div.dataTables_scrollBody table.dataTable thead .sorting:after, +div.dataTables_scrollBody table.dataTable thead .sorting_asc:after, +div.dataTables_scrollBody table.dataTable thead .sorting_desc:after { + display: none; +} + +table.dataTable thead .sorting_asc_disabled:after, +table.dataTable thead .sorting_desc_disabled:after { + color: #eee; +} + +table.dataTable thead > tr > th { + padding-right: 30px; +} + +table.dataTable th:active { + outline: none; +} + + +/* Condensed */ +table.dataTable.table-condensed thead > tr > th { + padding-right: 20px; +} + +table.dataTable.table-condensed thead .sorting:after, +table.dataTable.table-condensed thead .sorting_asc:after, +table.dataTable.table-condensed thead .sorting_desc:after { + top: 6px; + right: 6px; +} + +/* Scrolling */ +div.dataTables_scrollHead table { + margin-bottom: 0 !important; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +div.dataTables_scrollHead table thead tr:last-child th:first-child, +div.dataTables_scrollHead table thead tr:last-child td:first-child { + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} + +div.dataTables_scrollBody table { + border-top: none; + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +div.dataTables_scrollBody tbody tr:first-child th, +div.dataTables_scrollBody tbody tr:first-child td { + border-top: none; +} + +div.dataTables_scrollFoot table { + margin-top: 0 !important; + border-top: none; +} + +/* Frustratingly the border-collapse:collapse used by Bootstrap makes the column + width calculations when using scrolling impossible to align columns. We have + to use separate + */ +table.table-bordered.dataTable { + border-collapse: separate !important; +} +table.table-bordered thead th, +table.table-bordered thead td { + border-left-width: 0; + border-top-width: 0; +} +table.table-bordered tbody th, +table.table-bordered tbody td { + border-left-width: 0; + border-bottom-width: 0; +} +table.table-bordered tfoot th, +table.table-bordered tfoot td { + border-left-width: 0; + border-bottom-width: 0; +} +table.table-bordered th:last-child, +table.table-bordered td:last-child { + border-right-width: 0; +} +div.dataTables_scrollHead table.table-bordered { + border-bottom-width: 0; +} + + + + +/* + * TableTools styles + */ +.table.dataTable tbody tr.active td, +.table.dataTable tbody tr.active th { + background-color: #08C; + color: white; +} + +.table.dataTable tbody tr.active:hover td, +.table.dataTable tbody tr.active:hover th { + background-color: #0075b0 !important; +} + +.table.dataTable tbody tr.active th > a, +.table.dataTable tbody tr.active td > a { + color: white; +} + +.table-striped.dataTable tbody tr.active:nth-child(odd) td, +.table-striped.dataTable tbody tr.active:nth-child(odd) th { + background-color: #017ebc; +} + +table.DTTT_selectable tbody tr { + cursor: pointer; +} + +div.DTTT .btn:hover { + text-decoration: none !important; +} + +ul.DTTT_dropdown.dropdown-menu { + z-index: 2003; +} + +ul.DTTT_dropdown.dropdown-menu a { + color: #333 !important; /* needed only when demo_page.css is included */ +} + +ul.DTTT_dropdown.dropdown-menu li { + position: relative; +} + +ul.DTTT_dropdown.dropdown-menu li:hover a { + background-color: #0088cc; + color: white !important; +} + +div.DTTT_collection_background { + z-index: 2002; +} + +/* TableTools information display */ +div.DTTT_print_info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + height: 150px; + margin-left: -200px; + margin-top: -75px; + text-align: center; + color: #333; + padding: 10px 30px; + opacity: 0.95; + + background-color: white; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); +} + +div.DTTT_print_info h6 { + font-weight: normal; + font-size: 28px; + line-height: 28px; + margin: 1em; +} + +div.DTTT_print_info p { + font-size: 14px; + line-height: 20px; +} + +div.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 60px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + padding-bottom: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0))); + background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); + background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); + background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); + background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); + background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); +} + + + +/* + * FixedColumns styles + */ +div.DTFC_LeftHeadWrapper table, +div.DTFC_LeftFootWrapper table, +div.DTFC_RightHeadWrapper table, +div.DTFC_RightFootWrapper table, +table.DTFC_Cloned tr.even { + background-color: white; + margin-bottom: 0; +} + +div.DTFC_RightHeadWrapper table , +div.DTFC_LeftHeadWrapper table { + border-bottom: none !important; + margin-bottom: 0 !important; + border-top-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} + +div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child, +div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child, +div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child, +div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child { + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} + +div.DTFC_RightBodyWrapper table, +div.DTFC_LeftBodyWrapper table { + border-top: none; + margin: 0 !important; +} + +div.DTFC_RightBodyWrapper tbody tr:first-child th, +div.DTFC_RightBodyWrapper tbody tr:first-child td, +div.DTFC_LeftBodyWrapper tbody tr:first-child th, +div.DTFC_LeftBodyWrapper tbody tr:first-child td { + border-top: none; +} + +div.DTFC_RightFootWrapper table, +div.DTFC_LeftFootWrapper table { + border-top: none; + margin-top: 0 !important; +} + + +div.DTFC_LeftBodyWrapper table.dataTable thead .sorting:after, +div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_asc:after, +div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_desc:after, +div.DTFC_RightBodyWrapper table.dataTable thead .sorting:after, +div.DTFC_RightBodyWrapper table.dataTable thead .sorting_asc:after, +div.DTFC_RightBodyWrapper table.dataTable thead .sorting_desc:after { + display: none; +} + + +/* + * FixedHeader styles + */ +div.FixedHeader_Cloned table { + margin: 0 !important +} + diff --git a/public/assets/plugins/datatables/dataTables.bootstrap.js b/public/assets/plugins/datatables/dataTables.bootstrap.js new file mode 100644 index 00000000..dcc561fc --- /dev/null +++ b/public/assets/plugins/datatables/dataTables.bootstrap.js @@ -0,0 +1,206 @@ +/*! DataTables Bootstrap 3 integration + * ©2011-2014 SpryMedia Ltd - datatables.net/license + */ + +/** + * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and + * DataTables 1.10 or newer. + * + * This file sets the defaults and adds options to DataTables to style its + * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap + * for further information. + */ +(function(window, document, undefined){ + +var factory = function( $, DataTable ) { +"use strict"; + + +/* Set the defaults for DataTables initialisation */ +$.extend( true, DataTable.defaults, { + dom: + "<'row'<'col-sm-6'l><'col-sm-6'f>>" + + "<'row'<'col-sm-12'tr>>" + + "<'row'<'col-sm-5'i><'col-sm-7'p>>", + renderer: 'bootstrap' +} ); + + +/* Default class modification */ +$.extend( DataTable.ext.classes, { + sWrapper: "dataTables_wrapper form-inline dt-bootstrap", + sFilterInput: "form-control input-sm", + sLengthSelect: "form-control input-sm" +} ); + + +/* Bootstrap paging button renderer */ +DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { + var api = new DataTable.Api( settings ); + var classes = settings.oClasses; + var lang = settings.oLanguage.oPaginate; + var btnDisplay, btnClass, counter=0; + + var attach = function( container, buttons ) { + var i, ien, node, button; + var clickHandler = function ( e ) { + e.preventDefault(); + if ( !$(e.currentTarget).hasClass('disabled') ) { + api.page( e.data.action ).draw( false ); + } + }; + + for ( i=0, ien=buttons.length ; i 0 ? + '' : ' disabled'); + break; + + case 'previous': + btnDisplay = lang.sPrevious; + btnClass = button + (page > 0 ? + '' : ' disabled'); + break; + + case 'next': + btnDisplay = lang.sNext; + btnClass = button + (page < pages-1 ? + '' : ' disabled'); + break; + + case 'last': + btnDisplay = lang.sLast; + btnClass = button + (page < pages-1 ? + '' : ' disabled'); + break; + + default: + btnDisplay = button + 1; + btnClass = page === button ? + 'active' : ''; + break; + } + + if ( btnDisplay ) { + node = $('
  • ', { + 'class': classes.sPageButton+' '+btnClass, + 'id': idx === 0 && typeof button === 'string' ? + settings.sTableId +'_'+ button : + null + } ) + .append( $('', { + 'href': '#', + 'aria-controls': settings.sTableId, + 'data-dt-idx': counter, + 'tabindex': settings.iTabIndex + } ) + .html( btnDisplay ) + ) + .appendTo( container ); + + settings.oApi._fnBindAction( + node, {action: button}, clickHandler + ); + + counter++; + } + } + } + }; + + // IE9 throws an 'unknown error' if document.activeElement is used + // inside an iframe or frame. + var activeEl; + + try { + // Because this approach is destroying and recreating the paging + // elements, focus is lost on the select button which is bad for + // accessibility. So we want to restore focus once the draw has + // completed + activeEl = $(document.activeElement).data('dt-idx'); + } + catch (e) {} + + attach( + $(host).empty().html('
      ').children('ul'), + buttons + ); + + if ( activeEl ) { + $(host).find( '[data-dt-idx='+activeEl+']' ).focus(); + } +}; + + +/* + * TableTools Bootstrap compatibility + * Required TableTools 2.1+ + */ +if ( DataTable.TableTools ) { + // Set the classes that TableTools uses to something suitable for Bootstrap + $.extend( true, DataTable.TableTools.classes, { + "container": "DTTT btn-group", + "buttons": { + "normal": "btn btn-default", + "disabled": "disabled" + }, + "collection": { + "container": "DTTT_dropdown dropdown-menu", + "buttons": { + "normal": "", + "disabled": "disabled" + } + }, + "print": { + "info": "DTTT_print_info" + }, + "select": { + "row": "active" + } + } ); + + // Have the collection use a bootstrap compatible drop down + $.extend( true, DataTable.TableTools.DEFAULTS.oTags, { + "collection": { + "container": "ul", + "button": "li", + "liner": "a" + } + } ); +} + +}; // /factory + + +// Define as an AMD module if possible +if ( typeof define === 'function' && define.amd ) { + define( ['jquery', 'datatables'], factory ); +} +else if ( typeof exports === 'object' ) { + // Node/CommonJS + factory( require('jquery'), require('datatables') ); +} +else if ( jQuery ) { + // Otherwise simply initialise as normal, stopping multiple evaluation + factory( jQuery, jQuery.fn.dataTable ); +} + + +})(window, document); + diff --git a/public/assets/plugins/datatables/dataTables.bootstrap.min.js b/public/assets/plugins/datatables/dataTables.bootstrap.min.js new file mode 100644 index 00000000..85f7d062 --- /dev/null +++ b/public/assets/plugins/datatables/dataTables.bootstrap.min.js @@ -0,0 +1,8 @@ +/*! + DataTables Bootstrap 3 integration + ©2011-2014 SpryMedia Ltd - datatables.net/license +*/ +(function(l,q){var e=function(b,c){b.extend(!0,c.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(c.ext.classes,{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm"});c.ext.renderer.pageButton.bootstrap=function(g,e,r,s,i,m){var t=new c.Api(g),u=g.oClasses,j=g.oLanguage.oPaginate,d,f,n=0,p=function(c,e){var k,h,o,a,l=function(a){a.preventDefault(); +b(a.currentTarget).hasClass("disabled")||t.page(a.data.action).draw(!1)};k=0;for(h=e.length;k",{"class":u.sPageButton+" "+ +f,id:0===r&&"string"===typeof a?g.sTableId+"_"+a:null}).append(b("",{href:"#","aria-controls":g.sTableId,"data-dt-idx":n,tabindex:g.iTabIndex}).html(d)).appendTo(c),g.oApi._fnBindAction(o,{action:a},l),n++)}},h;try{h=b(q.activeElement).data("dt-idx")}catch(l){}p(b(e).empty().html('
        ').children("ul"),s);h&&b(e).find("[data-dt-idx="+h+"]").focus()};c.TableTools&&(b.extend(!0,c.TableTools.classes,{container:"DTTT btn-group",buttons:{normal:"btn btn-default",disabled:"disabled"}, +collection:{container:"DTTT_dropdown dropdown-menu",buttons:{normal:"",disabled:"disabled"}},print:{info:"DTTT_print_info"},select:{row:"active"}}),b.extend(!0,c.TableTools.DEFAULTS.oTags,{collection:{container:"ul",button:"li",liner:"a"}}))};"function"===typeof define&&define.amd?define(["jquery","datatables"],e):"object"===typeof exports?e(require("jquery"),require("datatables")):jQuery&&e(jQuery,jQuery.fn.dataTable)})(window,document); diff --git a/public/assets/plugins/datatables/extensions/AutoFill/Readme.txt b/public/assets/plugins/datatables/extensions/AutoFill/Readme.txt new file mode 100644 index 00000000..017d1d0d --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/Readme.txt @@ -0,0 +1,38 @@ +# AutoFill + +AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in information over the selected cells and incrementing numbers as needed. Key features include: + +* Click and drag cell content insertion +* Automatic incrementing of numeric information +* Enable and disable on any column +* Detailed callback functions for customisation +* Support for both DataTables and browser window scrolling + + +# Installation + +To use AutoFill, first download DataTables ( http://datatables.net/download ) and place the unzipped AutoFill package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. + + +# Basic usage + +AutoFill is initialised using the `$.fn.dataTable.AutoFill` constructor. For example: + +```js +$(document).ready( function () { + var table = $('#example').dataTable(); + new $.fn.dataTable.AutoFill( table ); +} ); +``` + + +# Documentation / support + +* Documentation: http://datatables.net/extensions/autofill/ +* DataTables support forums: http://datatables.net/forums + + +# GitHub + +If you fancy getting involved with the development of AutoFill and help make it better, please refer to its GitHub repo: https://github.com/DataTables/AutoFill + diff --git a/public/assets/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.css b/public/assets/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.css new file mode 100644 index 00000000..cab59b3a --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.css @@ -0,0 +1,24 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * AutoFill styles + */ + +div.AutoFill_filler { + display: none; + position: absolute; + height: 14px; + width: 14px; + background: url(../images/filler.png) no-repeat center center; + z-index: 1002; +} + +div.AutoFill_border { + display: none; + position: absolute; + background-color: #0063dc; + z-index: 1001; + + box-shadow: 0px 0px 5px #76b4ff; + -moz-box-shadow: 0px 0px 5px #76b4ff; + -webkit-box-shadow: 0px 0px 5px #76b4ff; +} + diff --git a/public/assets/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.min.css b/public/assets/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.min.css new file mode 100644 index 00000000..b485f216 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/css/dataTables.autoFill.min.css @@ -0,0 +1 @@ +div.AutoFill_filler{display:none;position:absolute;height:14px;width:14px;background:url(../images/filler.png) no-repeat center center;z-index:1002}div.AutoFill_border{display:none;position:absolute;background-color:#0063dc;z-index:1001;box-shadow:0px 0px 5px #76b4ff;-moz-box-shadow:0px 0px 5px #76b4ff;-webkit-box-shadow:0px 0px 5px #76b4ff} diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/columns.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/columns.html new file mode 100644 index 00000000..d891b139 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/columns.html @@ -0,0 +1,644 @@ + + + + + + + + AutoFill example - Column options + + + + + + + + + + + + + + +
        +
        +

        AutoFill example Column options

        + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this + example:

        $(document).ready(function() { + var table = $('#example').dataTable(); + + new $.fn.dataTable.AutoFill( table, { + "columnDefs": [ + { enable: false, targets: [-1, -2] }, + { increment: false, targets: 3 } + ] + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this + example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the + table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/complete-callback.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/complete-callback.html new file mode 100644 index 00000000..2076d4f2 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/complete-callback.html @@ -0,0 +1,652 @@ + + + + + + + + AutoFill example - Complete callback + + + + + + + + + + + + + + +
        +
        +

        AutoFill example Complete callback

        + +
        +

        AutoFill provides a number of customisable callback functions so you can tailor it's actions to + exactly what you need. This example shows the use of the complete callback function which + is executed at the end of an auto-fill drag, providing information about the cells that were + altered.

        + +

        For a complete description of the complete callback, please refer to the AutoFill documentation.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this + example:

        $(document).ready(function() { + var table = $('#example').dataTable(); + + new $.fn.dataTable.AutoFill( table, { + complete: function ( altered ) { + var last = altered[ altered.length-1 ]; + alert( + altered.length+' cells were altered in this auto-fill. The '+ + 'value of the last cell altered was: '+last.oldValue+' and is '+ + 'now '+last.newValue + ); + } + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this + example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the + table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/fill-both.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/fill-both.html new file mode 100644 index 00000000..f65076e1 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/fill-both.html @@ -0,0 +1,641 @@ + + + + + + + + AutoFill example - Horizontal and vertical fill + + + + + + + + + + + + + + +
        +
        +

        AutoFill example Horizontal and vertical fill

        + +
        +

        By default AutoFill will allow the fill to operate only on a single column at a time (i.e. + vertically). However, it has the ability to provide the fill either horizontally, over both axis or + limited to just one axis depending on the direction of the drag. This option is provided by the + mode sanitisation option.

        + +

        In this case it is set to both (i.e. both horizontal and vertical axis) to provide the + filler along a row, rather than a column.

        + +

        For the full range of options and syntax for mode please refer to the AutoFill documentation.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this + example:

        $(document).ready(function() { + var table = $('#example').DataTable(); + + new $.fn.dataTable.AutoFill( table, { + mode: 'both' + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this + example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the + table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/fill-horizontal.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/fill-horizontal.html new file mode 100644 index 00000000..13cadac9 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/fill-horizontal.html @@ -0,0 +1,641 @@ + + + + + + + + AutoFill example - Horizontal fill + + + + + + + + + + + + + + +
        +
        +

        AutoFill example Horizontal fill

        + +
        +

        By default AutoFill will allow the fill to operate only on a single column at a time (i.e. + vertically). However, it has the ability to provide the fill either horizontally, over both axis or + limited to just one axis depending on the direction of the drag. This option is provided by the + mode sanitisation option.

        + +

        In this case it is set to x (i.e. horizontal axis) to provide the filler along a row, + rather than a column.

        + +

        For the full range of options and syntax for mode please refer to the AutoFill documentation.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this + example:

        $(document).ready(function() { + var table = $('#example').DataTable(); + + new $.fn.dataTable.AutoFill( table, { + mode: 'x' + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this + example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the + table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/index.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/index.html new file mode 100644 index 00000000..9cade86c --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/index.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + AutoFill examples - AutoFill examples + + + +
        +
        +

        AutoFill example AutoFill examples

        + +
        +

        AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in + information over the selected cells and incrementing numbers as needed.

        + +

        Thanks to Phoniax AS for their sponsorship of this plug-in for + DataTables.

        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/scrolling.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/scrolling.html new file mode 100644 index 00000000..66871ec7 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/scrolling.html @@ -0,0 +1,638 @@ + + + + + + + + AutoFill example - Scrolling DataTable + + + + + + + + + + + + + + +
        +
        +

        AutoFill example Scrolling DataTable

        + +
        +

        When dragging an AutoFill handle, the table (if DataTables scrolling is enabled) or the window will + be automatically scrolled, as you approach the edge of the scrolling component. The example below shows + the effect with DataTables scrolling (and also window if needed).

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this + example:

        $(document).ready(function() { + var table = $('#example').dataTable( { + scrollY: 200, + scrollCollapse: false, + paginate: false + } ); + + new $.fn.dataTable.AutoFill( table ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this + example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the + table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/simple.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/simple.html new file mode 100644 index 00000000..ea3db498 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/simple.html @@ -0,0 +1,631 @@ + + + + + + + + AutoFill example - Basic initialisation + + + + + + + + + + + + + + +
        +
        +

        AutoFill example Basic initialisation

        + +
        +

        AutoFill gives an Excel like option to a DataTable to click and drag over multiple cells, filling in + information over the selected cells and incrementing numbers as needed.

        + +

        AutoFill is initialised using the $.fn.dataTable.AutoFill function as shown in the + example below. It requires one parameter, the DataTable instance that AutoFill is to operate on, and + optionally a second configuration parameter, which is shown in the other AutoFill examples.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this + example:

        $(document).ready(function() { + var table = $('#example').DataTable(); + new $.fn.dataTable.AutoFill( table ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this + example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the + table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/examples/step-callback.html b/public/assets/plugins/datatables/extensions/AutoFill/examples/step-callback.html new file mode 100644 index 00000000..c1255aaa --- /dev/null +++ b/public/assets/plugins/datatables/extensions/AutoFill/examples/step-callback.html @@ -0,0 +1,660 @@ + + + + + + + + AutoFill example - Step callback + + + + + + + + + + + + + + +
        +
        +

        AutoFill example Step callback

        + +
        +

        By default, AutoFill will increment cells that contain numbers by a single digit for each cell that + is iterated over (try the Age column below for example). This behaviour can be disabled + completely using the increment column option, but it can also be modified to suit your + requirements through use of the step column callback function.

        + +

        The step callback is executed for each cell in the auto-fill set and gives complete + control over how data is incremented. The example below shows the step function being used on the + Salary column to increment by 100, rather than 1 for each cell.

        + +

        For a complete description of the step callback, please refer to the AutoFill documentation.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this + example:

        $(document).ready(function() { + var table = $('#example').dataTable(); + + new $.fn.dataTable.AutoFill( table, { + columnDefs: [ { + targets: -1, + step: function ( cell, read, last, i, x, y ) { + var val = parseInt( (last || read).replace(/[$,]/g, ''), 10 ); + val += (x<0 || y<0 ? -100 : 100); // - if going back up, + if going down + + // Format for the currency column + return '$'+val.toString().replace( /\B(?=(\d{3})+(?!\d))/g, ',' ); + } + } ] + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this + example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the + table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/AutoFill/images/filler.png b/public/assets/plugins/datatables/extensions/AutoFill/images/filler.png new file mode 100644 index 0000000000000000000000000000000000000000..f2af65d8c38a5b752894dffc224021da92b182c2 GIT binary patch literal 1040 zcmaJ=&ui0A9M66@w!&Z+!70ikJBe%ZlKu{>-PSCwvdq#I>|w&vYiQvJ*5b8_Ub{?#`r0{k+Lq*2zHAYueQ6G zuVR9|Dt172AqG@UH|-#9;#F13*&fks9p&USOBFcNG^F?pgo&gOn--L~AjnEm7NL?z zMw6*X9Lg!7&6TmfW+9ujxyCU!-jy4yg5}W6GIGszWGF7SK(l1Y?CvGfRj(P&hdK>+K$ z<(~eLG5Kqz6arhHFQ57{oj=S>GJC1~', { + 'class': 'AutoFill_filler' + } ) + .appendTo( 'body' ); + this.dom.filler = filler[0]; + + // Get the height / width of the click element + this.s.filler.height = filler.height(); + this.s.filler.width = filler.width(); + filler[0].style.display = "none"; + + /* Border display - one div for each side. We can't just use a single + * one with a border, as we want the events to effectively pass through + * the transparent bit of the box + */ + var border; + var appender = document.body; + if ( that.s.dt.oScroll.sY !== "" ) { + that.s.dt.nTable.parentNode.style.position = "relative"; + appender = that.s.dt.nTable.parentNode; + } + + border = $('
        ', { + "class": "AutoFill_border" + } ); + this.dom.borderTop = border.clone().appendTo( appender )[0]; + this.dom.borderRight = border.clone().appendTo( appender )[0]; + this.dom.borderBottom = border.clone().appendTo( appender )[0]; + this.dom.borderLeft = border.clone().appendTo( appender )[0]; + + /* Events */ + filler.on( 'mousedown.DTAF', function (e) { + this.onselectstart = function() { return false; }; + that._fnFillerDragStart.call( that, e ); + return false; + } ); + + $('tbody', this.dom.table).on( + 'mouseover.DTAF mouseout.DTAF', + '>tr>td, >tr>th', + function (e) { + that._fnFillerDisplay.call( that, e ); + } + ); + + $(this.dom.table).on( 'destroy.dt.DTAF', function () { + filler.off( 'mousedown.DTAF' ).remove(); + $('tbody', this.dom.table).off( 'mouseover.DTAF mouseout.DTAF' ); + } ); + }, + + + _initColumns: function ( ) + { + var that = this; + var i, ien; + var dt = this.s.dt; + var config = this.s.init; + + for ( i=0, ien=dt.aoColumns.length ; i offsetEnd.left) { + x1 = offsetEnd.left - border; + x2 = offsetStart.left + $(nStart).outerWidth(); + width = offsetStart.left + $(nStart).outerWidth() - offsetEnd.left + (2*border); + } + + if ( this.s.dt.oScroll.sY !== "" ) + { + /* The border elements are inside the DT scroller - so position relative to that */ + var + offsetScroll = $(this.s.dt.nTable.parentNode).offset(), + scrollTop = $(this.s.dt.nTable.parentNode).scrollTop(), + scrollLeft = $(this.s.dt.nTable.parentNode).scrollLeft(); + + x1 -= offsetScroll.left - scrollLeft; + x2 -= offsetScroll.left - scrollLeft; + y1 -= offsetScroll.top - scrollTop; + y2 -= offsetScroll.top - scrollTop; + } + + /* Top */ + oStyle = this.dom.borderTop.style; + oStyle.top = y1+"px"; + oStyle.left = x1+"px"; + oStyle.height = this.s.border.width+"px"; + oStyle.width = width+"px"; + + /* Bottom */ + oStyle = this.dom.borderBottom.style; + oStyle.top = y2+"px"; + oStyle.left = x1+"px"; + oStyle.height = this.s.border.width+"px"; + oStyle.width = width+"px"; + + /* Left */ + oStyle = this.dom.borderLeft.style; + oStyle.top = y1+"px"; + oStyle.left = x1+"px"; + oStyle.height = height+"px"; + oStyle.width = this.s.border.width+"px"; + + /* Right */ + oStyle = this.dom.borderRight.style; + oStyle.top = y1+"px"; + oStyle.left = x2+"px"; + oStyle.height = height+"px"; + oStyle.width = this.s.border.width+"px"; + }, + + + /** + * Mouse down event handler for starting a drag + * @method _fnFillerDragStart + * @param {Object} e Event object + * @returns void + */ + "_fnFillerDragStart": function (e) + { + var that = this; + var startingTd = this.dom.currentTarget; + + this.s.drag.dragging = true; + + that.dom.borderTop.style.display = "block"; + that.dom.borderRight.style.display = "block"; + that.dom.borderBottom.style.display = "block"; + that.dom.borderLeft.style.display = "block"; + + var coords = this._fnTargetCoords( startingTd ); + this.s.drag.startX = coords.x; + this.s.drag.startY = coords.y; + + this.s.drag.startTd = startingTd; + this.s.drag.endTd = startingTd; + + this._fnUpdateBorder( startingTd, startingTd ); + + $(document).bind('mousemove.AutoFill', function (e) { + that._fnFillerDragMove.call( that, e ); + } ); + + $(document).bind('mouseup.AutoFill', function (e) { + that._fnFillerFinish.call( that, e ); + } ); + + /* Scrolling information cache */ + this.s.screen.y = e.pageY; + this.s.screen.height = $(window).height(); + this.s.screen.scrollTop = $(document).scrollTop(); + + if ( this.s.dt.oScroll.sY !== "" ) + { + this.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top; + this.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height(); + } + + /* Scrolling handler - we set an interval (which is cancelled on mouse up) which will fire + * regularly and see if we need to do any scrolling + */ + this.s.screen.interval = setInterval( function () { + var iScrollTop = $(document).scrollTop(); + var iScrollDelta = iScrollTop - that.s.screen.scrollTop; + that.s.screen.y += iScrollDelta; + + if ( that.s.screen.height - that.s.screen.y + iScrollTop < 50 ) + { + $('html, body').animate( { + "scrollTop": iScrollTop + 50 + }, 240, 'linear' ); + } + else if ( that.s.screen.y - iScrollTop < 50 ) + { + $('html, body').animate( { + "scrollTop": iScrollTop - 50 + }, 240, 'linear' ); + } + + if ( that.s.dt.oScroll.sY !== "" ) + { + if ( that.s.screen.y > that.s.scroller.bottom - 50 ) + { + $(that.s.dt.nTable.parentNode).animate( { + "scrollTop": $(that.s.dt.nTable.parentNode).scrollTop() + 50 + }, 240, 'linear' ); + } + else if ( that.s.screen.y < that.s.scroller.top + 50 ) + { + $(that.s.dt.nTable.parentNode).animate( { + "scrollTop": $(that.s.dt.nTable.parentNode).scrollTop() - 50 + }, 240, 'linear' ); + } + } + }, 250 ); + }, + + + /** + * Mouse move event handler for during a move. See if we want to update the display based on the + * new cursor position + * @method _fnFillerDragMove + * @param {Object} e Event object + * @returns void + */ + "_fnFillerDragMove": function (e) + { + if ( e.target && e.target.nodeName.toUpperCase() == "TD" && + e.target != this.s.drag.endTd ) + { + var coords = this._fnTargetCoords( e.target ); + + if ( this.c.mode == "y" && coords.x != this.s.drag.startX ) + { + e.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0]; + } + if ( this.c.mode == "x" && coords.y != this.s.drag.startY ) + { + e.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0]; + } + + if ( this.c.mode == "either") + { + if(coords.x != this.s.drag.startX ) + { + e.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0]; + } + else if ( coords.y != this.s.drag.startY ) { + e.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0]; + } + } + + // update coords + if ( this.c.mode !== "both" ) { + coords = this._fnTargetCoords( e.target ); + } + + var drag = this.s.drag; + drag.endTd = e.target; + + if ( coords.y >= this.s.drag.startY ) { + this._fnUpdateBorder( drag.startTd, drag.endTd ); + } + else { + this._fnUpdateBorder( drag.endTd, drag.startTd ); + } + this._fnFillerPosition( e.target ); + } + + /* Update the screen information so we can perform scrolling */ + this.s.screen.y = e.pageY; + this.s.screen.scrollTop = $(document).scrollTop(); + + if ( this.s.dt.oScroll.sY !== "" ) + { + this.s.scroller.scrollTop = $(this.s.dt.nTable.parentNode).scrollTop(); + this.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top; + this.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height(); + } + }, + + + /** + * Mouse release handler - end the drag and take action to update the cells with the needed values + * @method _fnFillerFinish + * @param {Object} e Event object + * @returns void + */ + "_fnFillerFinish": function (e) + { + var that = this, i, iLen, j; + + $(document).unbind('mousemove.AutoFill mouseup.AutoFill'); + + this.dom.borderTop.style.display = "none"; + this.dom.borderRight.style.display = "none"; + this.dom.borderBottom.style.display = "none"; + this.dom.borderLeft.style.display = "none"; + + this.s.drag.dragging = false; + + clearInterval( this.s.screen.interval ); + + var cells = []; + var table = this.dom.table; + var coordsStart = this._fnTargetCoords( this.s.drag.startTd ); + var coordsEnd = this._fnTargetCoords( this.s.drag.endTd ); + var columnIndex = function ( visIdx ) { + return that.s.dt.oApi._fnVisibleToColumnIndex( that.s.dt, visIdx ); + }; + + // xxx - urgh - there must be a way of reducing this... + if ( coordsStart.y <= coordsEnd.y ) { + for ( i=coordsStart.y ; i<=coordsEnd.y ; i++ ) { + if ( coordsStart.x <= coordsEnd.x ) { + for ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) { + cells.push( { + node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], + x: j - coordsStart.x, + y: i - coordsStart.y, + colIdx: columnIndex( j ) + } ); + } + } + else { + for ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) { + cells.push( { + node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], + x: j - coordsStart.x, + y: i - coordsStart.y, + colIdx: columnIndex( j ) + } ); + } + } + } + } + else { + for ( i=coordsStart.y ; i>=coordsEnd.y ; i-- ) { + if ( coordsStart.x <= coordsEnd.x ) { + for ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) { + cells.push( { + node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], + x: j - coordsStart.x, + y: i - coordsStart.y, + colIdx: columnIndex( j ) + } ); + } + } + else { + for ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) { + cells.push( { + node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], + x: coordsStart.x - j, + y: coordsStart.y - i, + colIdx: columnIndex( j ) + } ); + } + } + } + } + + // An auto-fill requires 2 or more cells + if ( cells.length <= 1 ) { + return; + } + + var edited = []; + var previous; + + for ( i=0, iLen=cells.length ; i",{"class":"AutoFill_filler"}).appendTo("body");this.dom.filler=e[0];this.s.filler.height=e.height();this.s.filler.width=e.width();e[0].style.display= +"none";var g,f=j.body;""!==a.s.dt.oScroll.sY&&(a.s.dt.nTable.parentNode.style.position="relative",f=a.s.dt.nTable.parentNode);g=c("
        ",{"class":"AutoFill_border"});this.dom.borderTop=g.clone().appendTo(f)[0];this.dom.borderRight=g.clone().appendTo(f)[0];this.dom.borderBottom=g.clone().appendTo(f)[0];this.dom.borderLeft=g.clone().appendTo(f)[0];e.on("mousedown.DTAF",function(b){this.onselectstart=function(){return false};a._fnFillerDragStart.call(a,b);return false});c("tbody",this.dom.table).on("mouseover.DTAF mouseout.DTAF", +">tr>td, >tr>th",function(b){a._fnFillerDisplay.call(a,b)});c(this.dom.table).on("destroy.dt.DTAF",function(){e.off("mousedown.DTAF").remove();c("tbody",this.dom.table).off("mouseover.DTAF mouseout.DTAF")})},_initColumns:function(){var d=this,b,a,e=this.s.dt,g=this.s.init;b=0;for(a=e.aoColumns.length;bg.left&&(f=g.left-a,i=e.left+c(d).outerWidth(),j=e.left+c(d).outerWidth()-g.left+2*a);""!==this.s.dt.oScroll.sY&&(a=c(this.s.dt.nTable.parentNode).offset(),e=c(this.s.dt.nTable.parentNode).scrollTop(), +g=c(this.s.dt.nTable.parentNode).scrollLeft(),f-=a.left-g,i-=a.left-g,n-=a.top-e,h-=a.top-e);a=this.dom.borderTop.style;a.top=n+"px";a.left=f+"px";a.height=this.s.border.width+"px";a.width=j+"px";a=this.dom.borderBottom.style;a.top=h+"px";a.left=f+"px";a.height=this.s.border.width+"px";a.width=j+"px";a=this.dom.borderLeft.style;a.top=n+"px";a.left=f+"px";a.height=k+"px";a.width=this.s.border.width+"px";a=this.dom.borderRight.style;a.top=n+"px";a.left=i+"px";a.height=k+"px";a.width=this.s.border.width+ +"px"},_fnFillerDragStart:function(d){var b=this,a=this.dom.currentTarget;this.s.drag.dragging=!0;b.dom.borderTop.style.display="block";b.dom.borderRight.style.display="block";b.dom.borderBottom.style.display="block";b.dom.borderLeft.style.display="block";var e=this._fnTargetCoords(a);this.s.drag.startX=e.x;this.s.drag.startY=e.y;this.s.drag.startTd=a;this.s.drag.endTd=a;this._fnUpdateBorder(a,a);c(j).bind("mousemove.AutoFill",function(a){b._fnFillerDragMove.call(b,a)});c(j).bind("mouseup.AutoFill", +function(a){b._fnFillerFinish.call(b,a)});this.s.screen.y=d.pageY;this.s.screen.height=c(o).height();this.s.screen.scrollTop=c(j).scrollTop();""!==this.s.dt.oScroll.sY&&(this.s.scroller.top=c(this.s.dt.nTable.parentNode).offset().top,this.s.scroller.bottom=this.s.scroller.top+c(this.s.dt.nTable.parentNode).height());this.s.screen.interval=setInterval(function(){var a=c(j).scrollTop();b.s.screen.y=b.s.screen.y+(a-b.s.screen.scrollTop);b.s.screen.height-b.s.screen.y+a<50?c("html, body").animate({scrollTop:a+ +50},240,"linear"):b.s.screen.y-a<50&&c("html, body").animate({scrollTop:a-50},240,"linear");b.s.dt.oScroll.sY!==""&&(b.s.screen.y>b.s.scroller.bottom-50?c(b.s.dt.nTable.parentNode).animate({scrollTop:c(b.s.dt.nTable.parentNode).scrollTop()+50},240,"linear"):b.s.screen.ytr:eq("+b.y+")>td:eq("+this.s.drag.startX+")",this.dom.table)[0]);"x"==this.c.mode&&b.y!=this.s.drag.startY&&(d.target=c("tbody>tr:eq("+this.s.drag.startY+")>td:eq("+b.x+")",this.dom.table)[0]);"either"==this.c.mode&&(b.x!=this.s.drag.startX?d.target=c("tbody>tr:eq("+this.s.drag.startY+")>td:eq("+b.x+")",this.dom.table)[0]:b.y!=this.s.drag.startY&&(d.target=c("tbody>tr:eq("+b.y+")>td:eq("+this.s.drag.startX+ +")",this.dom.table)[0]));"both"!==this.c.mode&&(b=this._fnTargetCoords(d.target));var a=this.s.drag;a.endTd=d.target;b.y>=this.s.drag.startY?this._fnUpdateBorder(a.startTd,a.endTd):this._fnUpdateBorder(a.endTd,a.startTd);this._fnFillerPosition(d.target)}this.s.screen.y=d.pageY;this.s.screen.scrollTop=c(j).scrollTop();""!==this.s.dt.oScroll.sY&&(this.s.scroller.scrollTop=c(this.s.dt.nTable.parentNode).scrollTop(),this.s.scroller.top=c(this.s.dt.nTable.parentNode).offset().top,this.s.scroller.bottom= +this.s.scroller.top+c(this.s.dt.nTable.parentNode).height())},_fnFillerFinish:function(){var d=this,b,a;c(j).unbind("mousemove.AutoFill mouseup.AutoFill");this.dom.borderTop.style.display="none";this.dom.borderRight.style.display="none";this.dom.borderBottom.style.display="none";this.dom.borderLeft.style.display="none";this.s.drag.dragging=!1;clearInterval(this.s.screen.interval);var e=[],g=this.dom.table,f=this._fnTargetCoords(this.s.drag.startTd),i=this._fnTargetCoords(this.s.drag.endTd),h=function(a){return d.s.dt.oApi._fnVisibleToColumnIndex(d.s.dt, +a)};if(f.y<=i.y)for(b=f.y;b<=i.y;b++)if(f.x<=i.x)for(a=f.x;a<=i.x;a++)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(a=f.x;a>=i.x;a--)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(b=f.y;b>=i.y;b--)if(f.x<=i.x)for(a=f.x;a<=i.x;a++)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(a=f.x;a>=i.x;a--)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:f.x-a,y:f.y- +b,colIdx:h(a)});if(!(1>=e.length)){var g=[],m;b=0;for(a=e.length;bg||0>f?-1:1)):a===m?b:a}}};return h};"function"===typeof define&&define.amd? +define(["jquery","datatables"],l):"object"===typeof exports?l(require("jquery"),require("datatables")):jQuery&&!jQuery.fn.dataTable.AutoFill&&l(jQuery,jQuery.fn.dataTable)})(window,document); diff --git a/public/assets/plugins/datatables/extensions/ColReorder/License.txt b/public/assets/plugins/datatables/extensions/ColReorder/License.txt new file mode 100644 index 00000000..9ade2f1b --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/License.txt @@ -0,0 +1,20 @@ +Copyright (c) 2010-2015 SpryMedia Limited +http://datatables.net + +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. diff --git a/public/assets/plugins/datatables/extensions/ColReorder/Readme.md b/public/assets/plugins/datatables/extensions/ColReorder/Readme.md new file mode 100644 index 00000000..217dd60e --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/Readme.md @@ -0,0 +1,39 @@ +# ColReorder + +ColReorder adds the ability for the end user to click and drag column headers to reorder a table as they see fit, to DataTables. Key features include: + +* Very easy integration with DataTables +* Tight integration with all other DataTables plug-ins +* The ability to exclude the first (or more) column from being movable +* Predefine a column order +* Save staving integration with DataTables + + +# Installation + +To use ColReorder, first download DataTables ( http://datatables.net/download ) and place the unzipped ColReorder package into a `extensions` directory in the DataTables package. This will allow the pages in the examples to operate correctly. To see the examples running, open the `examples` directory in your web-browser. + + +# Basic usage + +ColReorder is initialised using the `$.fn.dataTable.ColReorder` constructor. For example: + +```js +$(document).ready( function () { + $('#example').DataTable(); + + new $.fn.dataTable.ColReorder( table ); +} ); +``` + + +# Documentation / support + +* Documentation: http://datatables.net/extensions/colreorder/ +* DataTables support forums: http://datatables.net/forums + + +# GitHub + +If you fancy getting involved with the development of ColReorder and help make it better, please refer to its GitHub repo: https://github.com/DataTables/ColReorder + diff --git a/public/assets/plugins/datatables/extensions/ColReorder/css/dataTables.colReorder.css b/public/assets/plugins/datatables/extensions/ColReorder/css/dataTables.colReorder.css new file mode 100644 index 00000000..bdd6aa0b --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/css/dataTables.colReorder.css @@ -0,0 +1,14 @@ +/* + * Namespace DTCR - "DataTables ColReorder" plug-in + */ + +table.DTCR_clonedTable { + background-color: rgba(255, 255, 255, 0.7); + z-index: 202; +} + +div.DTCR_pointer { + width: 1px; + background-color: #0259C4; + z-index: 201; +} \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/css/dataTables.colReorder.min.css b/public/assets/plugins/datatables/extensions/ColReorder/css/dataTables.colReorder.min.css new file mode 100644 index 00000000..77b230e0 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/css/dataTables.colReorder.min.css @@ -0,0 +1 @@ +table.DTCR_clonedTable{background-color:rgba(255,255,255,0.7);z-index:202}div.DTCR_pointer{width:1px;background-color:#0259C4;z-index:201} diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/alt_insert.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/alt_insert.html new file mode 100644 index 00000000..16bedcfe --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/alt_insert.html @@ -0,0 +1,637 @@ + + + + + + + + ColReorder example - Alternative insert styling + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Alternative insert styling

        + +
        +

        Using CSS it is easy to modify the insert bar to suit your web-site. This example shows how an arrow can be used to show the insert point rather than the + straight bar used in the other examples by simply adding an extra CSS rule to include the image.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + $('#example').DataTable( { + dom: 'Rlfrtip' + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        div.DTCR_pointer { + margin-top: -15px; + margin-left: -9px; + width: 18px; + background: url('../images/insert.png') no-repeat top left; +} +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/col_filter.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/col_filter.html new file mode 100644 index 00000000..355ff2b5 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/col_filter.html @@ -0,0 +1,656 @@ + + + + + + + + ColReorder example - Individual column filtering + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Individual column filtering

        + +
        +

        This example of how to use ColReorder shows how it can with with DataTables' ability to do individual column filtering. The basic example is exactly the same as + the DataTables column filtering example, but with ColReorder also added to the table (through the R option for domDT).

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + // Setup - add a text input to each footer cell + $('#example tfoot th').each( function () { + var title = $('#example thead th').eq( $(this).index() ).text(); + $(this).html( '<input type="text" placeholder="Search '+title+'" />' ); + } ); + + // DataTable + var table = $('#example').DataTable( { + dom: 'Rlfrtip' + } ); + + // Apply the filter + $("#example tfoot input").on( 'keyup change', function () { + table + .column( $(this).parent().index()+':visible' ) + .search( this.value ) + .draw(); + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/colvis.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/colvis.html new file mode 100644 index 00000000..54c79c2a --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/colvis.html @@ -0,0 +1,635 @@ + + + + + + + + ColReorder example - ColVis integration + + + + + + + + + + + + + + + + +
        +
        +

        ColReorder example ColVis integration

        + +
        +

        ColReorder interfaces with the ColVis extension for DataTables by updating the order of the list of columns + whenever a reorder is done. This is shown in the example below, where one column has been initially hidden to add extra emphasis to ColVis.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + var table = $('#example').DataTable( { + dom: 'RC<"clear">lfrtip', + columnDefs: [ + { visible: false, targets: 1 } + ] + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/fixedcolumns.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/fixedcolumns.html new file mode 100644 index 00000000..0599ba48 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/fixedcolumns.html @@ -0,0 +1,831 @@ + + + + + + + + ColReorder example - FixedColumns integration + + + + + + + + + + + + + + + + +
        +
        +

        ColReorder example FixedColumns integration

        + +
        +

        While ColReorder works with the built-in scrolling options in DataTables (scrollYDT and scrollXDT) and also the FixedColumns + extension.

        + +

        ColReorder provides the fixedColumnsLeft and fixedColumnsRight options which allows you disallow reordering of the fixed columns + (which is required).

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        First nameLast namePositionOfficeAgeStart dateSalaryExtn.E-mail
        TigerNixonSystem ArchitectEdinburgh612011/04/25$320,8005421t.nixon@datatables.net
        GarrettWintersAccountantTokyo632011/07/25$170,7508422g.winters@datatables.net
        AshtonCoxJunior Technical AuthorSan Francisco662009/01/12$86,0001562a.cox@datatables.net
        CedricKellySenior Javascript DeveloperEdinburgh222012/03/29$433,0606224c.kelly@datatables.net
        AiriSatouAccountantTokyo332008/11/28$162,7005407a.satou@datatables.net
        BrielleWilliamsonIntegration SpecialistNew York612012/12/02$372,0004804b.williamson@datatables.net
        HerrodChandlerSales AssistantSan Francisco592012/08/06$137,5009608h.chandler@datatables.net
        RhonaDavidsonIntegration SpecialistTokyo552010/10/14$327,9006200r.davidson@datatables.net
        ColleenHurstJavascript DeveloperSan Francisco392009/09/15$205,5002360c.hurst@datatables.net
        SonyaFrostSoftware EngineerEdinburgh232008/12/13$103,6001667s.frost@datatables.net
        JenaGainesOffice ManagerLondon302008/12/19$90,5603814j.gaines@datatables.net
        QuinnFlynnSupport LeadEdinburgh222013/03/03$342,0009497q.flynn@datatables.net
        ChardeMarshallRegional DirectorSan Francisco362008/10/16$470,6006741c.marshall@datatables.net
        HaleyKennedySenior Marketing DesignerLondon432012/12/18$313,5003597h.kennedy@datatables.net
        TatyanaFitzpatrickRegional DirectorLondon192010/03/17$385,7501965t.fitzpatrick@datatables.net
        MichaelSilvaMarketing DesignerLondon662012/11/27$198,5001581m.silva@datatables.net
        PaulByrdChief Financial Officer (CFO)New York642010/06/09$725,0003059p.byrd@datatables.net
        GloriaLittleSystems AdministratorNew York592009/04/10$237,5001721g.little@datatables.net
        BradleyGreerSoftware EngineerLondon412012/10/13$132,0002558b.greer@datatables.net
        DaiRiosPersonnel LeadEdinburgh352012/09/26$217,5002290d.rios@datatables.net
        JenetteCaldwellDevelopment LeadNew York302011/09/03$345,0001937j.caldwell@datatables.net
        YuriBerryChief Marketing Officer (CMO)New York402009/06/25$675,0006154y.berry@datatables.net
        CaesarVancePre-Sales SupportNew York212011/12/12$106,4508330c.vance@datatables.net
        DorisWilderSales AssistantSidney232010/09/20$85,6003023d.wilder@datatables.net
        AngelicaRamosChief Executive Officer (CEO)London472009/10/09$1,200,0005797a.ramos@datatables.net
        GavinJoyceDeveloperEdinburgh422010/12/22$92,5758822g.joyce@datatables.net
        JenniferChangRegional DirectorSingapore282010/11/14$357,6509239j.chang@datatables.net
        BrendenWagnerSoftware EngineerSan Francisco282011/06/07$206,8501314b.wagner@datatables.net
        FionaGreenChief Operating Officer (COO)San Francisco482010/03/11$850,0002947f.green@datatables.net
        ShouItouRegional MarketingTokyo202011/08/14$163,0008899s.itou@datatables.net
        MichelleHouseIntegration SpecialistSidney372011/06/02$95,4002769m.house@datatables.net
        SukiBurksDeveloperLondon532009/10/22$114,5006832s.burks@datatables.net
        PrescottBartlettTechnical AuthorLondon272011/05/07$145,0003606p.bartlett@datatables.net
        GavinCortezTeam LeaderSan Francisco222008/10/26$235,5002860g.cortez@datatables.net
        MartenaMccrayPost-Sales supportEdinburgh462011/03/09$324,0508240m.mccray@datatables.net
        UnityButlerMarketing DesignerSan Francisco472009/12/09$85,6755384u.butler@datatables.net
        HowardHatfieldOffice ManagerSan Francisco512008/12/16$164,5007031h.hatfield@datatables.net
        HopeFuentesSecretarySan Francisco412010/02/12$109,8506318h.fuentes@datatables.net
        VivianHarrellFinancial ControllerSan Francisco622009/02/14$452,5009422v.harrell@datatables.net
        TimothyMooneyOffice ManagerLondon372008/12/11$136,2007580t.mooney@datatables.net
        JacksonBradshawDirectorNew York652008/09/26$645,7501042j.bradshaw@datatables.net
        OliviaLiangSupport EngineerSingapore642011/02/03$234,5002120o.liang@datatables.net
        BrunoNashSoftware EngineerLondon382011/05/03$163,5006222b.nash@datatables.net
        SakuraYamamotoSupport EngineerTokyo372009/08/19$139,5759383s.yamamoto@datatables.net
        ThorWaltonDeveloperNew York612013/08/11$98,5408327t.walton@datatables.net
        FinnCamachoSupport EngineerSan Francisco472009/07/07$87,5002927f.camacho@datatables.net
        SergeBaldwinData CoordinatorSingapore642012/04/09$138,5758352s.baldwin@datatables.net
        ZenaidaFrankSoftware EngineerNew York632010/01/04$125,2507439z.frank@datatables.net
        ZoritaSerranoSoftware EngineerSan Francisco562012/06/01$115,0004389z.serrano@datatables.net
        JenniferAcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,6503431j.acosta@datatables.net
        CaraStevensSales AssistantNew York462011/12/06$145,6003990c.stevens@datatables.net
        HermioneButlerRegional DirectorLondon472011/03/21$356,2501016h.butler@datatables.net
        LaelGreerSystems AdministratorLondon212009/02/27$103,5006733l.greer@datatables.net
        JonasAlexanderDeveloperSan Francisco302010/07/14$86,5008196j.alexander@datatables.net
        ShadDeckerRegional DirectorEdinburgh512008/11/13$183,0006373s.decker@datatables.net
        MichaelBruceJavascript DeveloperSingapore292011/06/27$183,0005384m.bruce@datatables.net
        DonnaSniderCustomer SupportNew York272011/01/25$112,0004226d.snider@datatables.net
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + window.table = $('#example').DataTable( { + dom: 'Rlfrtip', + scrollX: true, + scrollCollapse: true, + columnDefs: [ + { orderable: false, targets: 0 }, + { orderable: false, targets: -1 } + ], + ordering: [[ 1, 'asc' ]], + colReorder: { + fixedColumnsLeft: 1, + fixedColumnsRight: 1 + } + } ); + + window.fc = new $.fn.dataTable.FixedColumns( table, { + leftColumns: 1, + rightColumns: 1 + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/fixedheader.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/fixedheader.html new file mode 100644 index 00000000..40f05468 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/fixedheader.html @@ -0,0 +1,635 @@ + + + + + + + + ColReorder example - FixedHeader integration + + + + + + + + + + + + + + + + +
        +
        +

        ColReorder example FixedHeader integration

        + +
        +

        FixedHeader is a particularly useful plug-in for DataTables, allowing a table header to float at the top of a scrolling window. ColReorder works well with + FixedHeader, allowing you to reorder columns even using the floating header, as shown in the example below.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + var table = $('#example').dataTable( { + dom: 'Rlfrtip' + } ); + + new $.fn.dataTable.fixedHeader( table ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/index.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/index.html new file mode 100644 index 00000000..65018ab6 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/index.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + ColReorder examples - ColReorder examples + + + +
        +
        +

        ColReorder example ColReorder examples

        + +
        +

        ColReorder adds the ability for the end user to click and drag column headers to reorder a table as they see fit, to DataTables. Key features include:

        + +
          +
        • Very easy integration with DataTables
        • +
        • Tight integration with all other DataTables plug-ins
        • +
        • The ability to exclude the first (or more) column from being movable
        • +
        • Predefine a column order
        • +
        • Save staving integration with DataTables
        • +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/jqueryui.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/jqueryui.html new file mode 100644 index 00000000..8eedf912 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/jqueryui.html @@ -0,0 +1,635 @@ + + + + + + + + ColReorder example - jQuery UI styling + + + + + + + + + + + + + + + + +
        +
        +

        ColReorder example jQuery UI styling

        + +
        +

        This example shows how the jQuery UI ThemeRoller option in DataTables can be used with ColReorder.

        + +

        The important thing to note here is that it is easier to use new $.fn.dataTable.ColReorder() to add ColReorder to the table rather than domDT as the jQuery UI integration + uses a complex expression for domDT.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + var table = $('#example').dataTable(); + + new $.fn.dataTable.ColReorder( table ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/new_init.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/new_init.html new file mode 100644 index 00000000..01ab2aac --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/new_init.html @@ -0,0 +1,626 @@ + + + + + + + + ColReorder example - Initialisation using `new` + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Initialisation using `new`

        + +
        +

        As well as providing the option to be initialised through the R option of domDT, ColReorder can also be added to a DataTable using direct initialisation - new + $.fn.dataTable.ColReorder(); as shown in this example.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + var table = $('#example').DataTable(); + + new $.fn.dataTable.ColReorder( table ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/predefined.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/predefined.html new file mode 100644 index 00000000..3cbb1663 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/predefined.html @@ -0,0 +1,636 @@ + + + + + + + + ColReorder example - Predefined column ordering + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Predefined column ordering

        + +
        +

        ColReorder provides the ability to specify a column ordering which is not that of the HTML (which typically you will want) through the parameter + colReorder.order. This is an array of integers with the column ordering you want.

        + +

        For full information about the ColReorder options, please refer to the ColReorder options + documentation.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + $('#example').dataTable( { + dom: 'Rlfrtip', + colReorder: { + order: [ 4, 3, 2, 1, 0, 5 ] + } + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/realtime.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/realtime.html new file mode 100644 index 00000000..c759409a --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/realtime.html @@ -0,0 +1,637 @@ + + + + + + + + ColReorder example - Realtime updating + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Realtime updating

        + +
        +

        While the ColReorder insertion point indicator can be styled, another option to show the end user what the column will look like when the table has been + reordered is to actually do the reordering while the mouse is still dragging the column header. This is shown in this example and is controlled by the + realtime parameter.

        + +

        For full information about the ColReorder options, please refer to the ColReorder options + documentation.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + $('#example').dataTable( { + dom: 'Rlfrtip', + colReorder: { + realtime: true + } + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/reset.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/reset.html new file mode 100644 index 00000000..b2e1fc08 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/reset.html @@ -0,0 +1,649 @@ + + + + + + + + ColReorder example - Reset ordering API + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Reset ordering API

        + +
        +

        One useful control option to present the end user when using ColReorder is the ability to reset the column ordering to that which was found in the HTML. This + can be done by calling the reset API function. While ColReorder does not provide a visual element for this itself (in order to provide maximum + flexibility) it is easy to hook to an event handler, as shown in this example.

        + +

        For full information about the ColReorder API, please refer to the ColReorder API documentation.

        +

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + var table = $('#example').DataTable( { + dom: 'Rlfrtip', + colReorder: { + order: [ 4, 3, 2, 1, 0 ] + } + } ); + + $('#reset').click( function (e) { + e.preventDefault(); + + table.colReorder.reset(); + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/scrolling.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/scrolling.html new file mode 100644 index 00000000..860e6655 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/scrolling.html @@ -0,0 +1,632 @@ + + + + + + + + ColReorder example - Scrolling table + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Scrolling table

        + +
        +

        This is a simple example to show ColReorder working with DataTables scrolling (scrollYDT and scrollXDT).

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + $('#example').dataTable( { + dom: 'Rlfrtip', + scrollY: '200px', + paging: false + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/server_side.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/server_side.html new file mode 100644 index 00000000..f682b7ab --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/server_side.html @@ -0,0 +1,192 @@ + + + + + + + + ColReorder example - Server-side processing + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Server-side processing

        + +
        +

        Server-side processing can be exceptionally useful in DataTables when dealing with massive data sets, and ColReorder works with this as would be expected.

        + +

        It is recommend that you use object based data with server-side processing and ColReorder, as this provides easily understandable mapping between the the + columns and the data relation on the server, otherwise you need to work out array indexes on each call!

        +
        + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeExtn.Start dateSalary
        NamePositionOfficeExtn.Start dateSalary
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + $('#example').dataTable( { + dom: 'Rlfrtip', + processing: true, + serverSide: true, + ajax: "../../../examples/server_side/scripts/objects.php", + columns: [ + { data: "first_name" }, + { data: "last_name" }, + { data: "position" }, + { data: "office" }, + { data: "start_date" }, + { data: "salary" } + ] + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/simple.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/simple.html new file mode 100644 index 00000000..92cffee7 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/simple.html @@ -0,0 +1,630 @@ + + + + + + + + ColReorder example - Basic initialisation + + + + + + + + + + + + + + +
        +
        +

        ColReorder example Basic initialisation

        + +
        +

        This example shows the basic use case of the ColReorder plug-in. With ColReorder enabled for a table, the user has the ability to click and drag any table + header cell, and drop it where they wish the column to be inserted. The insert point is shown visually, and the column reordering is done as soon as the mouse + button is released.

        + +

        ColReorder is added to a DataTable through the R character that it adds to DataTables feature plug-ins. This means that you simply add the + character R to the domDT parameter for your table to add ColReorder - as shown in the example below.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + $('#example').DataTable( { + dom: 'Rlfrtip' + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/examples/state_save.html b/public/assets/plugins/datatables/extensions/ColReorder/examples/state_save.html new file mode 100644 index 00000000..6e4e2e9e --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/examples/state_save.html @@ -0,0 +1,631 @@ + + + + + + + + ColReorder example - State saving + + + + + + + + + + + + + + +
        +
        +

        ColReorder example State saving

        + +
        +

        A useful interaction pattern to use in DataTables is state saving, so when the end user reloads or revisits a page its previous state is retained. ColReorder + works seamlessly with state saving in DataTables (stateSaveDT), remembering and restoring the column positions, as well as everything else such as sorting + and filtering.

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NamePositionOfficeAgeStart dateSalary
        NamePositionOfficeAgeStart dateSalary
        Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
        Garrett WintersAccountantTokyo632011/07/25$170,750
        Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
        Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
        Airi SatouAccountantTokyo332008/11/28$162,700
        Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
        Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
        Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
        Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
        Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
        Jena GainesOffice ManagerLondon302008/12/19$90,560
        Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
        Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
        Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
        Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
        Michael SilvaMarketing DesignerLondon662012/11/27$198,500
        Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
        Gloria LittleSystems AdministratorNew York592009/04/10$237,500
        Bradley GreerSoftware EngineerLondon412012/10/13$132,000
        Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
        Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
        Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
        Caesar VancePre-Sales SupportNew York212011/12/12$106,450
        Doris WilderSales AssistantSidney232010/09/20$85,600
        Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
        Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
        Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
        Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
        Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
        Shou ItouRegional MarketingTokyo202011/08/14$163,000
        Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
        Suki BurksDeveloperLondon532009/10/22$114,500
        Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
        Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
        Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
        Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
        Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
        Hope FuentesSecretarySan Francisco412010/02/12$109,850
        Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
        Timothy MooneyOffice ManagerLondon372008/12/11$136,200
        Jackson BradshawDirectorNew York652008/09/26$645,750
        Olivia LiangSupport EngineerSingapore642011/02/03$234,500
        Bruno NashSoftware EngineerLondon382011/05/03$163,500
        Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
        Thor WaltonDeveloperNew York612013/08/11$98,540
        Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
        Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
        Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
        Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
        Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
        Cara StevensSales AssistantNew York462011/12/06$145,600
        Hermione ButlerRegional DirectorLondon472011/03/21$356,250
        Lael GreerSystems AdministratorLondon212009/02/27$103,500
        Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
        Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
        Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
        Donna SniderCustomer SupportNew York272011/01/25$112,000
        + +
          +
        • Javascript
        • +
        • HTML
        • +
        • CSS
        • +
        • Ajax
        • +
        • Server-side script
        • +
        + +
        +
        +

        The Javascript shown below is used to initialise the table shown in this example:

        $(document).ready(function() { + $('#example').dataTable( { + dom: 'Rlfrtip', + stateSave: true + } ); +} ); + +

        In addition to the above code, the following Javascript library files are loaded for use in this example:

        + + +
        + +
        +

        The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

        +
        + +
        +
        +

        This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The + additional CSS used is shown below:

        +
        + +

        The following CSS library files are loaded for use in this example to provide the styling of the table:

        + + +
        + +
        +

        This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is + loaded.

        +
        + +
        +

        The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side + processing scripts can be written in any language, using the protocol described in the DataTables + documentation.

        +
        +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/ColReorder/images/insert.png b/public/assets/plugins/datatables/extensions/ColReorder/images/insert.png new file mode 100644 index 0000000000000000000000000000000000000000..15d5522da64f4f036c5a717dbb320799884fa12b GIT binary patch literal 1885 zcmaJ?Yfuwc6ke)>fRTqUjALP&*xC`v?j}Y`Bs^n)nFNqTMNwhdEF?m*%Vv>?mPoZ# zs@74ainfY%Y-t(Plw!alqNXAbBPu#pi$zL{3SvNQVEafum8T(P?s-2qUyS)Q#a8v?Rj@fQTpqiDJ1p4QAmv8l9M9YiQzt z8kLx{LMVsjWE`&6BotA&q9{p;73E^#Do#`+7-0}G0$Q9#L4!6=rxzK-oR_*HX6@dF zIN(bNoh#=2Z7NNk0>%*(4hng2CU&fu`OnL+{@Qv%LK0nAJ;L{PBCL0mV5CH=C)i*l*A|vcd}CQ%gxXLOs9De@MJ3-+U->UezzfZ4b zJDpe>ABVV|6;VdEdGHKsX=!PJ>v9@Kn~W|t@WyrzRlm8j!&R9aK9bS8z6zK&X|cdk z*(77liTIq=RO}i#|HFm0nxSBe(bFG(ia4%38}6-pu1!C&>BfqCSbhBfpBoJzRUTSQ zm7Qg(Nfq@x`UWc=xE=VBUxg8Ic-%RIosS7P;!Uh9cDzt5GOklknin#ycXYRrU4CE| zd$TWUO6kcl3|5c!4{xbs?flrRU`H?4s1pw-wweTIpA2y=pZP_xi=8j5CVdaeo;kCx z(tk-bKt*14vAi{ASD-a&`MJw2@Sf6A?*)_G)f?Y;4X0-gR}b0!GK#VKi3=ZE_Ghqe zC3i1&{&9O_i06@;3l>z%ShA*B2V6BZ$R?+2OUa%she~$r`LN_r*{;%n2WMT;A?0bC z`G z$-ze_iKgC|tjs8iGDTVw(z83-tuF}mA!xKU7Y;POO_fxlS=Wuy<;@5X<$ zW1h_i22Tfo(RY9K>y%8tG;C|wxZ=bgbB+n;_JiJU%?zB{DVbgO&K;l0($f4)EPvm- zlN+v;S_1+DEnC0R!389oRr~E*Q?J+FnOR@k)fi;I|7kZj<@(pq>4t}An{4){BaxAZ zH%?gQRj|6J@`?R=a0O2#7_@L5=9|4}Mg4|&WxZ+J_C6!DEOJHrsga0gds4A--}I0z z0(Ir4@~w0iFvTagY;*62was1uOG}S><-aM}(OOpiY_D=(P^td<#@N~37i`nIC&zj2 z-9OcH-N+i&oP*rA;o^%IAVsoIPshsTvIhr)6zGqqehOLDU-LWl=f%4@inL4pE0-{K*64}5NYR>RpukMimF|MslT0q9QPlIW+biD--V00;u>>pd3$=G z{Kl$ZDq^cRN%8jvq^Ez>n1dg9+UCz6?K>R94Vrd)F*dL}C`am-a4hC=-mPt|!i%1t zRh%7suNYZ#gZ)K~K71uGOct$wqWyvtM1FoR?S1=~=?;@Hx$tqLv>m;F{CSiA v3v1c-1AQT_MP7}WOBDevGdhR%UqvP!KOI{pd-r?y4=-^^lH^2e<_CWP6QK!R literal 0 HcmV?d00001 diff --git a/public/assets/plugins/datatables/extensions/ColReorder/js/dataTables.colReorder.js b/public/assets/plugins/datatables/extensions/ColReorder/js/dataTables.colReorder.js new file mode 100644 index 00000000..c3b2f1e2 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/ColReorder/js/dataTables.colReorder.js @@ -0,0 +1,1372 @@ +/*! ColReorder 1.1.3 + * ©2010-2014 SpryMedia Ltd - datatables.net/license + */ + +/** + * @summary ColReorder + * @description Provide the ability to reorder columns in a DataTable + * @version 1.1.3 + * @file dataTables.colReorder.js + * @author SpryMedia Ltd (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * @copyright Copyright 2010-2014 SpryMedia Ltd. + * + * This source file is free software, available under the following license: + * MIT license - http://datatables.net/license/mit + * + * This source file 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 license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +(function(window, document, undefined) { + + +/** + * Switch the key value pairing of an index array to be value key (i.e. the old value is now the + * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ]. + * @method fnInvertKeyValues + * @param array aIn Array to switch around + * @returns array + */ +function fnInvertKeyValues( aIn ) +{ + var aRet=[]; + for ( var i=0, iLen=aIn.length ; i= iCols ) + { + this.oApi._fnLog( oSettings, 1, "ColReorder 'from' index is out of bounds: "+iFrom ); + return; + } + + if ( iTo < 0 || iTo >= iCols ) + { + this.oApi._fnLog( oSettings, 1, "ColReorder 'to' index is out of bounds: "+iTo ); + return; + } + + /* + * Calculate the new column array index, so we have a mapping between the old and new + */ + var aiMapping = []; + for ( i=0, iLen=iCols ; i this.s.fixed-1 && i < iLen - this.s.fixedRight ) + { + this._fnMouseListener( i, this.s.dt.aoColumns[i].nTh ); + } + + /* Mark the original column order for later reference */ + this.s.dt.aoColumns[i]._ColReorder_iOrigCol = i; + } + + /* State saving */ + this.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) { + that._fnStateSave.call( that, oData ); + }, "ColReorder_State" ); + + /* An initial column order has been specified */ + var aiOrder = null; + if ( this.s.init.aiOrder ) + { + aiOrder = this.s.init.aiOrder.slice(); + } + + /* State loading, overrides the column order given */ + if ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' && + this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length ) + { + aiOrder = this.s.dt.oLoadedState.ColReorder; + } + + /* If we have an order to apply - do so */ + if ( aiOrder ) + { + /* We might be called during or after the DataTables initialisation. If before, then we need + * to wait until the draw is done, if after, then do what we need to do right away + */ + if ( !that.s.dt._bInitComplete ) + { + var bDone = false; + this.s.dt.aoDrawCallback.push( { + "fn": function () { + if ( !that.s.dt._bInitComplete && !bDone ) + { + bDone = true; + var resort = fnInvertKeyValues( aiOrder ); + that._fnOrderColumns.call( that, resort ); + } + }, + "sName": "ColReorder_Pre" + } ); + } + else + { + var resort = fnInvertKeyValues( aiOrder ); + that._fnOrderColumns.call( that, resort ); + } + } + else { + this._fnSetColumnIndexes(); + } + }, + + + /** + * Set the column order from an array + * @method _fnOrderColumns + * @param array a An array of integers which dictate the column order that should be applied + * @returns void + * @private + */ + "_fnOrderColumns": function ( a ) + { + if ( a.length != this.s.dt.aoColumns.length ) + { + this.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, "ColReorder - array reorder does not "+ + "match known number of columns. Skipping." ); + return; + } + + for ( var i=0, iLen=a.length ; i
        ') + .addClass( 'DTCR_pointer' ) + .css( { + position: 'absolute', + top: scrolling ? + $('div.dataTables_scroll', this.s.dt.nTableWrapper).offset().top : + $(this.s.dt.nTable).offset().top, + height : scrolling ? + $('div.dataTables_scroll', this.s.dt.nTableWrapper).height() : + $(this.s.dt.nTable).height() + } ) + .appendTo( 'body' ); + }, + + /** + * Clean up ColReorder memory references and event handlers + * @method _fnDestroy + * @returns void + * @private + */ + "_fnDestroy": function () + { + var i, iLen; + + for ( i=0, iLen=this.s.dt.aoDrawCallback.length ; ib||b>=n)this.oApi._fnLog(a,1,"ColReorder 'from' index is out of bounds: "+b);else if(0>e||e>=n)this.oApi._fnLog(a,1,"ColReorder 'to' index is out of bounds: "+e);else{f=[];c=0;for(g=n;cthis.s.fixed-1&&eMath.pow(Math.pow(a.pageX-this.s.mouse.startX,2)+Math.pow(a.pageY-this.s.mouse.startY,2),0.5))return;this._fnCreateDragNode()}this.dom.drag.css({left:a.pageX-this.s.mouse.offsetX,top:a.pageY-this.s.mouse.offsetY});for(var b=!1,e=this.s.mouse.toIndex,d=1,c=this.s.aoTargets.length;d
        ").addClass("DTCR_pointer").css({position:"absolute",top:a?d("div.dataTables_scroll",this.s.dt.nTableWrapper).offset().top:d(this.s.dt.nTable).offset().top,height:a?d("div.dataTables_scroll",this.s.dt.nTableWrapper).height(): +d(this.s.dt.nTable).height()}).appendTo("body")},_fnDestroy:function(){var a,b;a=0;for(b=this.s.dt.aoDrawCallback.length;a
  • ')[0], +g=c.childNodes[0],f=c.childNodes[1];this.dom.grid.dt.parentNode.insertBefore(c,this.dom.grid.dt);c.appendChild(this.dom.grid.dt);this.dom.grid.wrapper=c;0b.clientWidth&&(c.x=!0);a.offsetHeight>b.clientHeight&&(c.y=!0);return c},_fnDraw:function(a){this._fnGridLayout();this._fnCloneLeft(a);this._fnCloneRight(a);null!==this.s.fnDrawCallback&&this.s.fnDrawCallback.call(this,this.dom.clone.left,this.dom.clone.right);d(this).trigger("draw.dtfc",{leftClone:this.dom.clone.left,rightClone:this.dom.clone.right})},_fnCloneRight:function(a){if(!(0>= +this.s.iRightColumns)){var b,c=[];for(b=this.s.iTableColumns-this.s.iRightColumns;b=this.s.iLeftColumns)){var b,c=[];for(b=0;bthead",a.header);k.empty();e=0;for(h=n.length;ethead",a.header)[0]);e=0;for(h=n.length;etbody>tr",f.dom.body).css("height","auto");null!==a.body&&(a.body.parentNode.removeChild(a.body),a.body=null);a.body=d(this.dom.body).clone(!0)[0];a.body.className+=" DTFC_Cloned";a.body.style.paddingBottom=l.oScroll.iBarWidth+"px";a.body.style.marginBottom=2*l.oScroll.iBarWidth+"px";null!==a.body.getAttribute("id")&&a.body.removeAttribute("id");d(">thead>tr",a.body).empty();d(">tfoot", +a.body).remove();var p=d("tbody",a.body)[0];d(p).empty();if(0thead>tr",a.body)[0];for(o=0;otbody>tr",f.dom.body).each(function(a){var b=this.cloneNode(false);b.removeAttribute("id");a=f.s.dt.aoData[f.s.dt.oFeatures.bServerSide===false?f.s.dt.aiDisplay[f.s.dt._iDisplayStart+ +a]:a].anCells||d(this).children("td, th");for(o=0;o0){m=d(a[j]).clone(true,true)[0];b.appendChild(m)}}p.appendChild(b)})}else d(">tbody>tr",f.dom.body).each(function(){m=this.cloneNode(true);m.className=m.className+" DTFC_NoData";d("td",m).html("");p.appendChild(m)});a.body.style.width="100%";a.body.style.margin="0";a.body.style.padding="0";l.oScroller!==t&&(h=l.oScroller.dom.force,b.forcer?b.forcer.style.height=h.style.height:(b.forcer=h.cloneNode(!0),b.liner.appendChild(b.forcer))); +b.liner.appendChild(a.body);this._fnEqualiseHeights("tbody",f.dom.body,a.body);if(null!==l.nTFoot){if(g){null!==a.footer&&a.footer.parentNode.removeChild(a.footer);a.footer=d(this.dom.footer).clone(!0,!0)[0];a.footer.className+=" DTFC_Cloned";a.footer.style.width="100%";b.foot.appendChild(a.footer);n=this._fnCopyLayout(l.aoFooter,c);b=d(">tfoot",a.footer);b.empty();e=0;for(h=n.length;etfoot",a.footer)[0]);e=0;for(h=n.length;ethead",a.header)[0]);d(b).each(function(a){j=c[a];this.style.width=f.s.aiInnerWidths[j]+"px"});null!==f.s.dt.nTFoot&&(b=l.oApi._fnGetUniqueThs(l,d(">tfoot",a.footer)[0]),d(b).each(function(a){j=c[a];this.style.width=f.s.aiInnerWidths[j]+"px"}))},_fnGetTrNodes:function(a){for(var b= +[],c=0,d=a.childNodes.length;c"+a+">tr:eq(0)",b).children(":first");a.outerHeight();a.height();for(var e=this._fnGetTrNodes(e),b=this._fnGetTrNodes(c),h=[],c=0,a=b.length;cg?f:g,"semiauto"==this.s.sHeightMatch&& +(e[c]._DTTC_iHeight=g),h.push(g);c=0;for(a=b.length;c + + + + + + + FixedHeader example - Header and footer fixed + + + + + + + + + + + + + + +
    +
    +

    FixedHeader example Header and footer fixed

    + +
    +

    FixedHeader provides the ability to fix in place the header, footer, left and right columns of the + table. These are controlled by the options:

    + +
      +
    • top - default true
    • +
    • bottom - default false
    • +
    • left - default false
    • +
    • right - default false
    • +
    + +

    This example shows the header and footer of the table fixed by enabling the bottom + option.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + var table = $('#example').DataTable(); + + new $.fn.dataTable.FixedHeader( table, { + bottom: true + } ); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/FixedHeader/examples/index.html b/public/assets/plugins/datatables/extensions/FixedHeader/examples/index.html new file mode 100644 index 00000000..2198d78c --- /dev/null +++ b/public/assets/plugins/datatables/extensions/FixedHeader/examples/index.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + FixedHeader examples - FixedHeader examples + + + +
    +
    +

    FixedHeader example FixedHeader examples

    + +
    +

    At times it can be useful to ensure that column titles will remain always visible on a table, even + when a user scrolls down a table. The FixedHeader plug-in for DataTables will float the thead element above the table at all times to help address this issue. + The column titles also remain click-able to perform sorting. Key features include:

    + +
      +
    • Fix the header to the top of the window
    • +
    • Ability to fix the footer and left / right columns as well
    • +
    • z-Index ordering options
    • +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/FixedHeader/examples/simple.html b/public/assets/plugins/datatables/extensions/FixedHeader/examples/simple.html new file mode 100644 index 00000000..1ad6efa7 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/FixedHeader/examples/simple.html @@ -0,0 +1,637 @@ + + + + + + + + FixedHeader example - Basic initialisation + + + + + + + + + + + + + + +
    +
    +

    FixedHeader example Basic initialisation

    + +
    +

    When displaying large amounts of data in a table, it can often be useful for the end user to have + the column titles (the thead element as a whole in fact) + always visible. This is particularly true if using DataTables with pagination disabled, or the display + length is set to a high value.

    + +

    The FixedHeader extension for DataTables will ensure that your column titles will scroll with the + page, showing at the top of the table at all times. Try the demo shown below - you might want to try + resizing the window for full effect! Note also that the column titles remain clickable to perform + sorting on the table.

    + +

    FixedHeader is initialised using the constructor new $.fn.dataTable.FixedHeader(); - + shown below.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + var table = $('#example').DataTable(); + + new $.fn.dataTable.FixedHeader( table ); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/FixedHeader/examples/top_left_right.html b/public/assets/plugins/datatables/extensions/FixedHeader/examples/top_left_right.html new file mode 100644 index 00000000..f15faeb5 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/FixedHeader/examples/top_left_right.html @@ -0,0 +1,236 @@ + + + + + + + + FixedHeader example - Header, left and right all fixed + + + + + + + + + + + + + + +
    +
    +

    FixedHeader example Header, left and right all fixed

    + +
    +

    FixedHeader provides the ability to fix in place the header, footer, left and right columns of the + table. These are controlled by the options:

    + +
      +
    • top - default true
    • +
    • bottom - default false
    • +
    • left - default false
    • +
    • right - default false
    • +
    + +

    This example shows top, left and right enabled with index columns on the left and right.

    + +

    Note that in such a situation as this, the FixedColumns extension might be more useful, + particularly if you want to use the scrolling options built into DataTables.

    +
    + +
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + var table = $('#example').DataTable( { + "order": [ 1, 'asc' ], + "ajax": "../../../examples/ajax/data/objects.txt", + "columns": [ + { title: '', data: null, defaultContent: "" }, + { title: 'Name', data: "name" }, + { title: 'Position', data: "position" }, + { title: 'Office', data: "office" }, + { title: 'Extn.', data: "extn" }, + { title: 'Start date', data: "start_date" }, + { title: 'Salary', data: "salary" }, + { title: '', data: null, defaultContent: "" } + ], + initComplete: function () { + new $.fn.dataTable.FixedHeader( table, { + left: true, + right: true + } ); + } + } ); + + table.on( 'order.dt search.dt', function () { + table.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) { + cell.innerHTML = i+1; + } ); + + table.column(-1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) { + cell.innerHTML = i+1; + } ); + } ).draw(); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    div.dataTables_wrapper { + width: 150%; + } + + div.FixedHeader_Cloned.fixedLeft tbody td { + border-right: 1px solid black; + } + + div.FixedHeader_Cloned.fixedRight tbody td { + border-left: 1px solid black; + } +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/FixedHeader/examples/two_tables.html b/public/assets/plugins/datatables/extensions/FixedHeader/examples/two_tables.html new file mode 100644 index 00000000..1fbb3dfc --- /dev/null +++ b/public/assets/plugins/datatables/extensions/FixedHeader/examples/two_tables.html @@ -0,0 +1,354 @@ + + + + + + + + FixedHeader example - Multiple tables + + + + + + + + + + + + + + +
    +
    +

    FixedHeader example Multiple tables

    + +
    +

    The following example shows two DataTables enhanced tables both with FixedHeader enabled on them. + This is done simply by initialising FixedHeader on each table. This example also shows the footer being + fixed in place for the two tables.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeSalary
    NamePositionOfficeAgeSalary
    Tiger NixonSystem ArchitectEdinburgh61$320,800
    Cedric KellySenior Javascript DeveloperEdinburgh22$433,060
    Sonya FrostSoftware EngineerEdinburgh23$103,600
    Quinn FlynnSupport LeadEdinburgh22$342,000
    Dai RiosPersonnel LeadEdinburgh35$217,500
    Gavin JoyceDeveloperEdinburgh42$92,575
    Martena MccrayPost-Sales supportEdinburgh46$324,050
    Jennifer AcostaJunior Javascript DeveloperEdinburgh43$75,650
    Shad DeckerRegional DirectorEdinburgh51$183,000
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeSalary
    NamePositionOfficeAgeSalary
    Jena GainesOffice ManagerLondon30$90,560
    Haley KennedySenior Marketing DesignerLondon43$313,500
    Tatyana FitzpatrickRegional DirectorLondon19$385,750
    Michael SilvaMarketing DesignerLondon66$198,500
    Bradley GreerSoftware EngineerLondon41$132,000
    Angelica RamosChief Executive Officer (CEO)London47$1,200,000
    Suki BurksDeveloperLondon53$114,500
    Prescott BartlettTechnical AuthorLondon27$145,000
    Timothy MooneyOffice ManagerLondon37$136,200
    Bruno NashSoftware EngineerLondon38$163,500
    Hermione ButlerRegional DirectorLondon47$356,250
    Lael GreerSystems AdministratorLondon21$103,500
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + var t1 = $('table.display').eq(0).DataTable(); + new $.fn.dataTable.FixedHeader( t1, { + bottom: true + } ); + + var t2 = $('table.display').eq(1).DataTable(); + new $.fn.dataTable.FixedHeader( t2, { + bottom: true + } ); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/FixedHeader/examples/zIndexes.html b/public/assets/plugins/datatables/extensions/FixedHeader/examples/zIndexes.html new file mode 100644 index 00000000..a3292c4c --- /dev/null +++ b/public/assets/plugins/datatables/extensions/FixedHeader/examples/zIndexes.html @@ -0,0 +1,653 @@ + + + + + + + + FixedHeader example - z-index order control + + + + + + + + + + + + + + +
    +
    +

    FixedHeader example z-index order control

    + +
    +

    When you have two or more columns fixed on a table, there might be occasions when you which to have + one column floating on top of another. This example shows how you can do that with the initialisation + parameters zTop, zBottom, zLeft and zRight. In this + example the left column is set to float on top of the header. The difference is subtle, but can be + effective.

    + +

    The default zIndexes are:

    + +
      +
    • zTop: 104
    • +
    • zBottom: 103
    • +
    • zLeft: 102
    • +
    • zRight: 101
    • +
    + +

    This example shows the left column being floated on top of the header.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + var table = $('#example').DataTable(); + + new $.fn.dataTable.FixedHeader( table, { + left: true, + zLeft: 105 + } ); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    div.dataTables_wrapper { + width: 1500px; + } +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/FixedHeader/js/dataTables.fixedHeader.js b/public/assets/plugins/datatables/extensions/FixedHeader/js/dataTables.fixedHeader.js new file mode 100644 index 00000000..90df8786 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/FixedHeader/js/dataTables.fixedHeader.js @@ -0,0 +1,1028 @@ +/*! FixedHeader 2.1.2 + * ©2010-2014 SpryMedia Ltd - datatables.net/license + */ + +/** + * @summary FixedHeader + * @description Fix a table's header or footer, so it is always visible while + * Scrolling + * @version 2.1.2 + * @file dataTables.fixedHeader.js + * @author SpryMedia Ltd (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * @copyright Copyright 2009-2014 SpryMedia Ltd. + * + * This source file is free software, available under the following license: + * MIT license - http://datatables.net/license/mit + * + * This source file 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 license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +/* Global scope for FixedColumns for backwards compatibility - will be removed + * in future. Not documented in 1.1.x. + */ + +/* Global scope for FixedColumns */ +var FixedHeader; + +(function(window, document, undefined) { + + +var factory = function( $, DataTable ) { +"use strict"; + +/* + * Function: FixedHeader + * Purpose: Provide 'fixed' header, footer and columns for a DataTable + * Returns: object:FixedHeader - must be called with 'new' + * Inputs: mixed:mTable - target table + * @param {object} dt DataTables instance or HTML table node. With DataTables + * 1.10 this can also be a jQuery collection (with just a single table in its + * result set), a jQuery selector, DataTables API instance or settings + * object. + * @param {object} [oInit] initialisation settings, with the following + * properties (each optional) + * * bool:top - fix the header (default true) + * * bool:bottom - fix the footer (default false) + * * int:left - fix the left column(s) (default 0) + * * int:right - fix the right column(s) (default 0) + * * int:zTop - fixed header zIndex + * * int:zBottom - fixed footer zIndex + * * int:zLeft - fixed left zIndex + * * int:zRight - fixed right zIndex + */ +FixedHeader = function ( mTable, oInit ) { + /* Sanity check - you just know it will happen */ + if ( ! this instanceof FixedHeader ) + { + alert( "FixedHeader warning: FixedHeader must be initialised with the 'new' keyword." ); + return; + } + + var that = this; + var oSettings = { + "aoCache": [], + "oSides": { + "top": true, + "bottom": false, + "left": 0, + "right": 0 + }, + "oZIndexes": { + "top": 104, + "bottom": 103, + "left": 102, + "right": 101 + }, + "oCloneOnDraw": { + "top": false, + "bottom": false, + "left": true, + "right": true + }, + "oMes": { + "iTableWidth": 0, + "iTableHeight": 0, + "iTableLeft": 0, + "iTableRight": 0, /* note this is left+width, not actually "right" */ + "iTableTop": 0, + "iTableBottom": 0 /* note this is top+height, not actually "bottom" */ + }, + "oOffset": { + "top": 0 + }, + "nTable": null, + "bFooter": false, + "bInitComplete": false + }; + + /* + * Function: fnGetSettings + * Purpose: Get the settings for this object + * Returns: object: - settings object + * Inputs: - + */ + this.fnGetSettings = function () { + return oSettings; + }; + + /* + * Function: fnUpdate + * Purpose: Update the positioning and copies of the fixed elements + * Returns: - + * Inputs: - + */ + this.fnUpdate = function () { + this._fnUpdateClones(); + this._fnUpdatePositions(); + }; + + /* + * Function: fnPosition + * Purpose: Update the positioning of the fixed elements + * Returns: - + * Inputs: - + */ + this.fnPosition = function () { + this._fnUpdatePositions(); + }; + + + var dt = $.fn.dataTable.Api ? + new $.fn.dataTable.Api( mTable ).settings()[0] : + mTable.fnSettings(); + + dt._oPluginFixedHeader = this; + + /* Let's do it */ + this.fnInit( dt, oInit ); + +}; + + +/* + * Variable: FixedHeader + * Purpose: Prototype for FixedHeader + * Scope: global + */ +FixedHeader.prototype = { + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Initialisation + */ + + /* + * Function: fnInit + * Purpose: The "constructor" + * Returns: - + * Inputs: {as FixedHeader function} + */ + fnInit: function ( oDtSettings, oInit ) + { + var s = this.fnGetSettings(); + var that = this; + + /* Record the user definable settings */ + this.fnInitSettings( s, oInit ); + + if ( oDtSettings.oScroll.sX !== "" || oDtSettings.oScroll.sY !== "" ) + { + alert( "FixedHeader 2 is not supported with DataTables' scrolling mode at this time" ); + return; + } + + s.nTable = oDtSettings.nTable; + oDtSettings.aoDrawCallback.unshift( { + "fn": function () { + FixedHeader.fnMeasure(); + that._fnUpdateClones.call(that); + that._fnUpdatePositions.call(that); + }, + "sName": "FixedHeader" + } ); + + s.bFooter = ($('>tfoot', s.nTable).length > 0) ? true : false; + + /* Add the 'sides' that are fixed */ + if ( s.oSides.top ) + { + s.aoCache.push( that._fnCloneTable( "fixedHeader", "FixedHeader_Header", that._fnCloneThead ) ); + } + if ( s.oSides.bottom ) + { + s.aoCache.push( that._fnCloneTable( "fixedFooter", "FixedHeader_Footer", that._fnCloneTfoot ) ); + } + if ( s.oSides.left ) + { + s.aoCache.push( that._fnCloneTable( "fixedLeft", "FixedHeader_Left", that._fnCloneTLeft, s.oSides.left ) ); + } + if ( s.oSides.right ) + { + s.aoCache.push( that._fnCloneTable( "fixedRight", "FixedHeader_Right", that._fnCloneTRight, s.oSides.right ) ); + } + + /* Event listeners for window movement */ + FixedHeader.afnScroll.push( function () { + that._fnUpdatePositions.call(that); + } ); + + $(window).resize( function () { + FixedHeader.fnMeasure(); + that._fnUpdateClones.call(that); + that._fnUpdatePositions.call(that); + } ); + + $(s.nTable) + .on('column-reorder.dt', function () { + FixedHeader.fnMeasure(); + that._fnUpdateClones( true ); + that._fnUpdatePositions(); + } ) + .on('column-visibility.dt', function () { + FixedHeader.fnMeasure(); + that._fnUpdateClones( true ); + that._fnUpdatePositions(); + } ); + + /* Get things right to start with */ + FixedHeader.fnMeasure(); + that._fnUpdateClones(); + that._fnUpdatePositions(); + + s.bInitComplete = true; + }, + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Support functions + */ + + /* + * Function: fnInitSettings + * Purpose: Take the user's settings and copy them to our local store + * Returns: - + * Inputs: object:s - the local settings object + * object:oInit - the user's settings object + */ + fnInitSettings: function ( s, oInit ) + { + if ( oInit !== undefined ) + { + if ( oInit.top !== undefined ) { + s.oSides.top = oInit.top; + } + if ( oInit.bottom !== undefined ) { + s.oSides.bottom = oInit.bottom; + } + if ( typeof oInit.left == 'boolean' ) { + s.oSides.left = oInit.left ? 1 : 0; + } + else if ( oInit.left !== undefined ) { + s.oSides.left = oInit.left; + } + if ( typeof oInit.right == 'boolean' ) { + s.oSides.right = oInit.right ? 1 : 0; + } + else if ( oInit.right !== undefined ) { + s.oSides.right = oInit.right; + } + + if ( oInit.zTop !== undefined ) { + s.oZIndexes.top = oInit.zTop; + } + if ( oInit.zBottom !== undefined ) { + s.oZIndexes.bottom = oInit.zBottom; + } + if ( oInit.zLeft !== undefined ) { + s.oZIndexes.left = oInit.zLeft; + } + if ( oInit.zRight !== undefined ) { + s.oZIndexes.right = oInit.zRight; + } + + if ( oInit.offsetTop !== undefined ) { + s.oOffset.top = oInit.offsetTop; + } + if ( oInit.alwaysCloneTop !== undefined ) { + s.oCloneOnDraw.top = oInit.alwaysCloneTop; + } + if ( oInit.alwaysCloneBottom !== undefined ) { + s.oCloneOnDraw.bottom = oInit.alwaysCloneBottom; + } + if ( oInit.alwaysCloneLeft !== undefined ) { + s.oCloneOnDraw.left = oInit.alwaysCloneLeft; + } + if ( oInit.alwaysCloneRight !== undefined ) { + s.oCloneOnDraw.right = oInit.alwaysCloneRight; + } + } + }, + + /* + * Function: _fnCloneTable + * Purpose: Clone the table node and do basic initialisation + * Returns: - + * Inputs: - + */ + _fnCloneTable: function ( sType, sClass, fnClone, iCells ) + { + var s = this.fnGetSettings(); + var nCTable; + + /* We know that the table _MUST_ has a DIV wrapped around it, because this is simply how + * DataTables works. Therefore, we can set this to be relatively position (if it is not + * alreadu absolute, and use this as the base point for the cloned header + */ + if ( $(s.nTable.parentNode).css('position') != "absolute" ) + { + s.nTable.parentNode.style.position = "relative"; + } + + /* Just a shallow clone will do - we only want the table node */ + nCTable = s.nTable.cloneNode( false ); + nCTable.removeAttribute( 'id' ); + + var nDiv = document.createElement( 'div' ); + nDiv.style.position = "absolute"; + nDiv.style.top = "0px"; + nDiv.style.left = "0px"; + nDiv.className += " FixedHeader_Cloned "+sType+" "+sClass; + + /* Set the zIndexes */ + if ( sType == "fixedHeader" ) + { + nDiv.style.zIndex = s.oZIndexes.top; + } + if ( sType == "fixedFooter" ) + { + nDiv.style.zIndex = s.oZIndexes.bottom; + } + if ( sType == "fixedLeft" ) + { + nDiv.style.zIndex = s.oZIndexes.left; + } + else if ( sType == "fixedRight" ) + { + nDiv.style.zIndex = s.oZIndexes.right; + } + + /* remove margins since we are going to position it absolutely */ + nCTable.style.margin = "0"; + + /* Insert the newly cloned table into the DOM, on top of the "real" header */ + nDiv.appendChild( nCTable ); + document.body.appendChild( nDiv ); + + return { + "nNode": nCTable, + "nWrapper": nDiv, + "sType": sType, + "sPosition": "", + "sTop": "", + "sLeft": "", + "fnClone": fnClone, + "iCells": iCells + }; + }, + + /* + * Function: _fnMeasure + * Purpose: Get the current positioning of the table in the DOM + * Returns: - + * Inputs: - + */ + _fnMeasure: function () + { + var + s = this.fnGetSettings(), + m = s.oMes, + jqTable = $(s.nTable), + oOffset = jqTable.offset(), + iParentScrollTop = this._fnSumScroll( s.nTable.parentNode, 'scrollTop' ), + iParentScrollLeft = this._fnSumScroll( s.nTable.parentNode, 'scrollLeft' ); + + m.iTableWidth = jqTable.outerWidth(); + m.iTableHeight = jqTable.outerHeight(); + m.iTableLeft = oOffset.left + s.nTable.parentNode.scrollLeft; + m.iTableTop = oOffset.top + iParentScrollTop; + m.iTableRight = m.iTableLeft + m.iTableWidth; + m.iTableRight = FixedHeader.oDoc.iWidth - m.iTableLeft - m.iTableWidth; + m.iTableBottom = FixedHeader.oDoc.iHeight - m.iTableTop - m.iTableHeight; + }, + + /* + * Function: _fnSumScroll + * Purpose: Sum node parameters all the way to the top + * Returns: int: sum + * Inputs: node:n - node to consider + * string:side - scrollTop or scrollLeft + */ + _fnSumScroll: function ( n, side ) + { + var i = n[side]; + while ( n = n.parentNode ) + { + if ( n.nodeName == 'HTML' || n.nodeName == 'BODY' ) + { + break; + } + i = n[side]; + } + return i; + }, + + /* + * Function: _fnUpdatePositions + * Purpose: Loop over the fixed elements for this table and update their positions + * Returns: - + * Inputs: - + */ + _fnUpdatePositions: function () + { + var s = this.fnGetSettings(); + this._fnMeasure(); + + for ( var i=0, iLen=s.aoCache.length ; i oWin.iScrollTop + s.oOffset.top ) + { + /* Above the table */ + this._fnUpdateCache( oCache, 'sPosition', "absolute", 'position', nTable.style ); + this._fnUpdateCache( oCache, 'sTop', oMes.iTableTop+"px", 'top', nTable.style ); + this._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+"px", 'left', nTable.style ); + } + else if ( oWin.iScrollTop + s.oOffset.top > oMes.iTableTop+iTbodyHeight ) + { + /* At the bottom of the table */ + this._fnUpdateCache( oCache, 'sPosition', "absolute", 'position', nTable.style ); + this._fnUpdateCache( oCache, 'sTop', (oMes.iTableTop+iTbodyHeight)+"px", 'top', nTable.style ); + this._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+"px", 'left', nTable.style ); + } + else + { + /* In the middle of the table */ + this._fnUpdateCache( oCache, 'sPosition', 'fixed', 'position', nTable.style ); + this._fnUpdateCache( oCache, 'sTop', s.oOffset.top+"px", 'top', nTable.style ); + this._fnUpdateCache( oCache, 'sLeft', (oMes.iTableLeft-oWin.iScrollLeft)+"px", 'left', nTable.style ); + } + }, + + /* + * Function: _fnUpdateCache + * Purpose: Check the cache and update cache and value if needed + * Returns: - + * Inputs: object:oCache - local cache object + * string:sCache - cache property + * string:sSet - value to set + * string:sProperty - object property to set + * object:oObj - object to update + */ + _fnUpdateCache: function ( oCache, sCache, sSet, sProperty, oObj ) + { + if ( oCache[sCache] != sSet ) + { + oObj[sProperty] = sSet; + oCache[sCache] = sSet; + } + }, + + + + /** + * Copy the classes of all child nodes from one element to another. This implies + * that the two have identical structure - no error checking is performed to that + * fact. + * @param {element} source Node to copy classes from + * @param {element} dest Node to copy classes too + */ + _fnClassUpdate: function ( source, dest ) + { + var that = this; + + if ( source.nodeName.toUpperCase() === "TR" || source.nodeName.toUpperCase() === "TH" || + source.nodeName.toUpperCase() === "TD" || source.nodeName.toUpperCase() === "SPAN" ) + { + dest.className = source.className; + } + + $(source).children().each( function (i) { + that._fnClassUpdate( $(source).children()[i], $(dest).children()[i] ); + } ); + }, + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Cloning functions + */ + + /* + * Function: _fnCloneThead + * Purpose: Clone the thead element + * Returns: - + * Inputs: object:oCache - the cached values for this fixed element + */ + _fnCloneThead: function ( oCache ) + { + var s = this.fnGetSettings(); + var nTable = oCache.nNode; + + if ( s.bInitComplete && !s.oCloneOnDraw.top ) + { + this._fnClassUpdate( $('thead', s.nTable)[0], $('thead', nTable)[0] ); + return; + } + + /* Set the wrapper width to match that of the cloned table */ + var iDtWidth = $(s.nTable).outerWidth(); + oCache.nWrapper.style.width = iDtWidth+"px"; + nTable.style.width = iDtWidth+"px"; + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + $('thead th', nTable).unbind( 'click' ); + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Clone the DataTables header */ + var nThead = $('thead', s.nTable).clone(true)[0]; + nTable.appendChild( nThead ); + + /* Copy the widths across - apparently a clone isn't good enough for this */ + var a = []; + var b = []; + + $("thead>tr th", s.nTable).each( function (i) { + a.push( $(this).width() ); + } ); + + $("thead>tr td", s.nTable).each( function (i) { + b.push( $(this).width() ); + } ); + + $("thead>tr th", s.nTable).each( function (i) { + $("thead>tr th:eq("+i+")", nTable).width( a[i] ); + $(this).width( a[i] ); + } ); + + $("thead>tr td", s.nTable).each( function (i) { + $("thead>tr td:eq("+i+")", nTable).width( b[i] ); + $(this).width( b[i] ); + } ); + + // Stop DataTables 1.9 from putting a focus ring on the headers when + // clicked to sort + $('th.sorting, th.sorting_desc, th.sorting_asc', nTable).bind( 'click', function () { + this.blur(); + } ); + }, + + /* + * Function: _fnCloneTfoot + * Purpose: Clone the tfoot element + * Returns: - + * Inputs: object:oCache - the cached values for this fixed element + */ + _fnCloneTfoot: function ( oCache ) + { + var s = this.fnGetSettings(); + var nTable = oCache.nNode; + + /* Set the wrapper width to match that of the cloned table */ + oCache.nWrapper.style.width = $(s.nTable).outerWidth()+"px"; + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Clone the DataTables footer */ + var nTfoot = $('tfoot', s.nTable).clone(true)[0]; + nTable.appendChild( nTfoot ); + + /* Copy the widths across - apparently a clone isn't good enough for this */ + $("tfoot:eq(0)>tr th", s.nTable).each( function (i) { + $("tfoot:eq(0)>tr th:eq("+i+")", nTable).width( $(this).width() ); + } ); + + $("tfoot:eq(0)>tr td", s.nTable).each( function (i) { + $("tfoot:eq(0)>tr td:eq("+i+")", nTable).width( $(this).width() ); + } ); + }, + + /* + * Function: _fnCloneTLeft + * Purpose: Clone the left column(s) + * Returns: - + * Inputs: object:oCache - the cached values for this fixed element + */ + _fnCloneTLeft: function ( oCache ) + { + var s = this.fnGetSettings(); + var nTable = oCache.nNode; + var nBody = $('tbody', s.nTable)[0]; + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Is this the most efficient way to do this - it looks horrible... */ + nTable.appendChild( $("thead", s.nTable).clone(true)[0] ); + nTable.appendChild( $("tbody", s.nTable).clone(true)[0] ); + if ( s.bFooter ) + { + nTable.appendChild( $("tfoot", s.nTable).clone(true)[0] ); + } + + /* Remove unneeded cells */ + var sSelector = 'gt(' + (oCache.iCells - 1) + ')'; + $('thead tr', nTable).each( function (k) { + $('th:' + sSelector, this).remove(); + } ); + + $('tfoot tr', nTable).each( function (k) { + $('th:' + sSelector, this).remove(); + } ); + + $('tbody tr', nTable).each( function (k) { + $('td:' + sSelector, this).remove(); + } ); + + this.fnEqualiseHeights( 'thead', nBody.parentNode, nTable ); + this.fnEqualiseHeights( 'tbody', nBody.parentNode, nTable ); + this.fnEqualiseHeights( 'tfoot', nBody.parentNode, nTable ); + + var iWidth = 0; + for (var i = 0; i < oCache.iCells; i++) { + iWidth += $('thead tr th:eq(' + i + ')', s.nTable).outerWidth(); + } + nTable.style.width = iWidth+"px"; + oCache.nWrapper.style.width = iWidth+"px"; + }, + + /* + * Function: _fnCloneTRight + * Purpose: Clone the right most column(s) + * Returns: - + * Inputs: object:oCache - the cached values for this fixed element + */ + _fnCloneTRight: function ( oCache ) + { + var s = this.fnGetSettings(); + var nBody = $('tbody', s.nTable)[0]; + var nTable = oCache.nNode; + var iCols = $('tbody tr:eq(0) td', s.nTable).length; + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Is this the most efficient way to do this - it looks horrible... */ + nTable.appendChild( $("thead", s.nTable).clone(true)[0] ); + nTable.appendChild( $("tbody", s.nTable).clone(true)[0] ); + if ( s.bFooter ) + { + nTable.appendChild( $("tfoot", s.nTable).clone(true)[0] ); + } + $('thead tr th:lt('+(iCols-oCache.iCells)+')', nTable).remove(); + $('tfoot tr th:lt('+(iCols-oCache.iCells)+')', nTable).remove(); + + /* Remove unneeded cells */ + $('tbody tr', nTable).each( function (k) { + $('td:lt('+(iCols-oCache.iCells)+')', this).remove(); + } ); + + this.fnEqualiseHeights( 'thead', nBody.parentNode, nTable ); + this.fnEqualiseHeights( 'tbody', nBody.parentNode, nTable ); + this.fnEqualiseHeights( 'tfoot', nBody.parentNode, nTable ); + + var iWidth = 0; + for (var i = 0; i < oCache.iCells; i++) { + iWidth += $('thead tr th:eq('+(iCols-1-i)+')', s.nTable).outerWidth(); + } + nTable.style.width = iWidth+"px"; + oCache.nWrapper.style.width = iWidth+"px"; + }, + + + /** + * Equalise the heights of the rows in a given table node in a cross browser way. Note that this + * is more or less lifted as is from FixedColumns + * @method fnEqualiseHeights + * @returns void + * @param {string} parent Node type - thead, tbody or tfoot + * @param {element} original Original node to take the heights from + * @param {element} clone Copy the heights to + * @private + */ + "fnEqualiseHeights": function ( parent, original, clone ) + { + var that = this; + var originals = $(parent +' tr', original); + var height; + + $(parent+' tr', clone).each( function (k) { + height = originals.eq( k ).css('height'); + + // This is nasty :-(. IE has a sub-pixel error even when setting + // the height below (the Firefox fix) which causes the fixed column + // to go out of alignment. Need to add a pixel before the assignment + // Can this be feature detected? Not sure how... + if ( navigator.appName == 'Microsoft Internet Explorer' ) { + height = parseInt( height, 10 ) + 1; + } + + $(this).css( 'height', height ); + + // For Firefox to work, we need to also set the height of the + // original row, to the value that we read from it! Otherwise there + // is a sub-pixel rounding error + originals.eq( k ).css( 'height', height ); + } ); + } +}; + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Static properties and methods + * We use these for speed! This information is common to all instances of FixedHeader, so no + * point if having them calculated and stored for each different instance. + */ + +/* + * Variable: oWin + * Purpose: Store information about the window positioning + * Scope: FixedHeader + */ +FixedHeader.oWin = { + "iScrollTop": 0, + "iScrollRight": 0, + "iScrollBottom": 0, + "iScrollLeft": 0, + "iHeight": 0, + "iWidth": 0 +}; + +/* + * Variable: oDoc + * Purpose: Store information about the document size + * Scope: FixedHeader + */ +FixedHeader.oDoc = { + "iHeight": 0, + "iWidth": 0 +}; + +/* + * Variable: afnScroll + * Purpose: Array of functions that are to be used for the scrolling components + * Scope: FixedHeader + */ +FixedHeader.afnScroll = []; + +/* + * Function: fnMeasure + * Purpose: Update the measurements for the window and document + * Returns: - + * Inputs: - + */ +FixedHeader.fnMeasure = function () +{ + var + jqWin = $(window), + jqDoc = $(document), + oWin = FixedHeader.oWin, + oDoc = FixedHeader.oDoc; + + oDoc.iHeight = jqDoc.height(); + oDoc.iWidth = jqDoc.width(); + + oWin.iHeight = jqWin.height(); + oWin.iWidth = jqWin.width(); + oWin.iScrollTop = jqWin.scrollTop(); + oWin.iScrollLeft = jqWin.scrollLeft(); + oWin.iScrollRight = oDoc.iWidth - oWin.iScrollLeft - oWin.iWidth; + oWin.iScrollBottom = oDoc.iHeight - oWin.iScrollTop - oWin.iHeight; +}; + + +FixedHeader.version = "2.1.2"; + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Global processing + */ + +/* + * Just one 'scroll' event handler in FixedHeader, which calls the required components. This is + * done as an optimisation, to reduce calculation and proagation time + */ +$(window).scroll( function () { + FixedHeader.fnMeasure(); + + for ( var i=0, iLen=FixedHeader.afnScroll.length ; itfoot",c.nTable).length?!0:!1,c.oSides.top&&c.aoCache.push(d._fnCloneTable("fixedHeader","FixedHeader_Header",d._fnCloneThead)),c.oSides.bottom&&c.aoCache.push(d._fnCloneTable("fixedFooter","FixedHeader_Footer",d._fnCloneTfoot)),c.oSides.left&&c.aoCache.push(d._fnCloneTable("fixedLeft","FixedHeader_Left",d._fnCloneTLeft,c.oSides.left)), +c.oSides.right&&c.aoCache.push(d._fnCloneTable("fixedRight","FixedHeader_Right",d._fnCloneTRight,c.oSides.right)),FixedHeader.afnScroll.push(function(){d._fnUpdatePositions.call(d)}),e(j).resize(function(){FixedHeader.fnMeasure();d._fnUpdateClones.call(d);d._fnUpdatePositions.call(d)}),e(c.nTable).on("column-reorder.dt",function(){FixedHeader.fnMeasure();d._fnUpdateClones(!0);d._fnUpdatePositions()}).on("column-visibility.dt",function(){FixedHeader.fnMeasure();d._fnUpdateClones(!0);d._fnUpdatePositions()}), +FixedHeader.fnMeasure(),d._fnUpdateClones(),d._fnUpdatePositions(),c.bInitComplete=!0)},fnInitSettings:function(a,b){if(b!==h&&(b.top!==h&&(a.oSides.top=b.top),b.bottom!==h&&(a.oSides.bottom=b.bottom),"boolean"==typeof b.left?a.oSides.left=b.left?1:0:b.left!==h&&(a.oSides.left=b.left),"boolean"==typeof b.right?a.oSides.right=b.right?1:0:b.right!==h&&(a.oSides.right=b.right),b.zTop!==h&&(a.oZIndexes.top=b.zTop),b.zBottom!==h&&(a.oZIndexes.bottom=b.zBottom),b.zLeft!==h&&(a.oZIndexes.left=b.zLeft),b.zRight!== +h&&(a.oZIndexes.right=b.zRight),b.offsetTop!==h&&(a.oOffset.top=b.offsetTop),b.alwaysCloneTop!==h&&(a.oCloneOnDraw.top=b.alwaysCloneTop),b.alwaysCloneBottom!==h&&(a.oCloneOnDraw.bottom=b.alwaysCloneBottom),b.alwaysCloneLeft!==h&&(a.oCloneOnDraw.left=b.alwaysCloneLeft),b.alwaysCloneRight!==h))a.oCloneOnDraw.right=b.alwaysCloneRight},_fnCloneTable:function(a,b,c,d){var f=this.fnGetSettings(),g;"absolute"!=e(f.nTable.parentNode).css("position")&&(f.nTable.parentNode.style.position="relative");g=f.nTable.cloneNode(!1); +g.removeAttribute("id");var i=k.createElement("div");i.style.position="absolute";i.style.top="0px";i.style.left="0px";i.className+=" FixedHeader_Cloned "+a+" "+b;"fixedHeader"==a&&(i.style.zIndex=f.oZIndexes.top);"fixedFooter"==a&&(i.style.zIndex=f.oZIndexes.bottom);"fixedLeft"==a?i.style.zIndex=f.oZIndexes.left:"fixedRight"==a&&(i.style.zIndex=f.oZIndexes.right);g.style.margin="0";i.appendChild(g);k.body.appendChild(i);return{nNode:g,nWrapper:i,sType:a,sPosition:"",sTop:"",sLeft:"",fnClone:c,iCells:d}}, +_fnMeasure:function(){var a=this.fnGetSettings(),b=a.oMes,c=e(a.nTable),d=c.offset(),f=this._fnSumScroll(a.nTable.parentNode,"scrollTop");this._fnSumScroll(a.nTable.parentNode,"scrollLeft");b.iTableWidth=c.outerWidth();b.iTableHeight=c.outerHeight();b.iTableLeft=d.left+a.nTable.parentNode.scrollLeft;b.iTableTop=d.top+f;b.iTableRight=b.iTableLeft+b.iTableWidth;b.iTableRight=FixedHeader.oDoc.iWidth-b.iTableLeft-b.iTableWidth;b.iTableBottom=FixedHeader.oDoc.iHeight-b.iTableTop-b.iTableHeight},_fnSumScroll:function(a, +b){for(var c=a[b];(a=a.parentNode)&&!("HTML"==a.nodeName||"BODY"==a.nodeName);)c=a[b];return c},_fnUpdatePositions:function(){var a=this.fnGetSettings();this._fnMeasure();for(var b=0,c=a.aoCache.length;bd.iScrollTop+b.oOffset.top?(this._fnUpdateCache(a,"sPosition","absolute","position",e.style),this._fnUpdateCache(a,"sTop",c.iTableTop+"px","top",e.style),this._fnUpdateCache(a,"sLeft",c.iTableLeft+"px","left",e.style)):d.iScrollTop+b.oOffset.top>c.iTableTop+ +g?(this._fnUpdateCache(a,"sPosition","absolute","position",e.style),this._fnUpdateCache(a,"sTop",c.iTableTop+g+"px","top",e.style),this._fnUpdateCache(a,"sLeft",c.iTableLeft+"px","left",e.style)):(this._fnUpdateCache(a,"sPosition","fixed","position",e.style),this._fnUpdateCache(a,"sTop",b.oOffset.top+"px","top",e.style),this._fnUpdateCache(a,"sLeft",c.iTableLeft-d.iScrollLeft+"px","left",e.style))},_fnUpdateCache:function(a,b,c,d,e){a[b]!=c&&(e[d]=c,a[b]=c)},_fnClassUpdate:function(a,b){var c=this; +if("TR"===a.nodeName.toUpperCase()||"TH"===a.nodeName.toUpperCase()||"TD"===a.nodeName.toUpperCase()||"SPAN"===a.nodeName.toUpperCase())b.className=a.className;e(a).children().each(function(d){c._fnClassUpdate(e(a).children()[d],e(b).children()[d])})},_fnCloneThead:function(a){var b=this.fnGetSettings(),c=a.nNode;if(b.bInitComplete&&!b.oCloneOnDraw.top)this._fnClassUpdate(e("thead",b.nTable)[0],e("thead",c)[0]);else{var d=e(b.nTable).outerWidth();a.nWrapper.style.width=d+"px";for(c.style.width=d+ +"px";0tr th",b.nTable).each(function(){f.push(e(this).width())});e("thead>tr td",b.nTable).each(function(){g.push(e(this).width())});e("thead>tr th",b.nTable).each(function(a){e("thead>tr th:eq("+a+")",c).width(f[a]);e(this).width(f[a])});e("thead>tr td",b.nTable).each(function(a){e("thead>tr td:eq("+a+")",c).width(g[a]);e(this).width(g[a])}); +e("th.sorting, th.sorting_desc, th.sorting_asc",c).bind("click",function(){this.blur()})}},_fnCloneTfoot:function(a){var b=this.fnGetSettings(),c=a.nNode;for(a.nWrapper.style.width=e(b.nTable).outerWidth()+"px";0tr th",b.nTable).each(function(a){e("tfoot:eq(0)>tr th:eq("+a+")",c).width(e(this).width())});e("tfoot:eq(0)>tr td",b.nTable).each(function(a){e("tfoot:eq(0)>tr td:eq("+ +a+")",c).width(e(this).width())})},_fnCloneTLeft:function(a){for(var b=this.fnGetSettings(),c=a.nNode,d=e("tbody",b.nTable)[0];0 + + + + + + + KeyTable example - Events + + + + + + + + + + + + + + +
    +
    +

    KeyTable example Events

    + +
    +

    KeyTable provides the ability to listen for events such as focus, blur, + esc (the escape key) and 'return' (the return key) can be assigned event handling + functions through KeyTable's the API. This gives you the ability to take an action on a cell.

    + +

    The example shown below has a few cells (selected at random, but near the top) with blur and focus + events assigned to them. You can also see the navigation around the table using arrow keys.

    +
    + +
    + Event information:
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    function eventMsg ( msg ) { + var n = document.getElementById('info'); + n.innerHTML += msg+"<br>"; + n.scrollTop = n.scrollHeight; +} + +$(document).ready(function() { + var table = $('#example').DataTable(); + var keys = new $.fn.dataTable.KeyTable( table ); + + /* Focus handler for all cells in last column */ + keys.event.focus( 4, null, function( node, x, y ) { + eventMsg( "Cell "+x+","+y+" focused ('live' event - column)" ); + } ); + + /* Focus handler for all cells in 8th row */ + keys.event.focus( null, 7, function( node, x, y ) { + eventMsg( "Cell "+x+","+y+" focused ('live' event - row)" ); + } ); + + /* Focus using coords. */ + keys.event.focus( 1, 0, function( node ) { + keys.event.remove.focus( node ); + eventMsg( "Cell 1,0 focus - this event has now been removed" ); + } ); + + keys.event.focus( 1, 3, function() { + eventMsg( "Cell 1,3 focus" ); + } ); + + /* focus with a node */ + keys.event.focus( $('#example tbody tr:eq(2) td:eq(0)')[0], function() { + eventMsg( "Cell 0,2 focus" ); + } ); + + /* Blur using a node */ + keys.event.blur( $('#example tbody tr:eq(1) td:eq(2)')[0], function() { + eventMsg( "Cell 1,2 blur" ); + } ); + + /* Blur using coords */ + keys.event.blur( 2, 4, function() { + eventMsg( "Cell 2,4 blur" ); + } ); + + /* Action */ + keys.event.action( 2, 2, function( node ) { + eventMsg( "Cell 2,2 action" ); + if ( node.style.fontWeight == "" || node.style.fontWeight == "normal" ) { + node.style.fontWeight = "bold"; + } + else { + node.style.fontWeight = "normal"; + } + } ); + + keys.event.action( 2, 5, function( node ) { + eventMsg( "Cell 2,5 action" ); + if ( node.style.fontStyle == "" ) { + node.style.fontStyle = "italic"; + } + else { + node.style.fontStyle = ""; + } + } ); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/KeyTable/examples/html.html b/public/assets/plugins/datatables/extensions/KeyTable/examples/html.html new file mode 100644 index 00000000..a0a0e108 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/KeyTable/examples/html.html @@ -0,0 +1,627 @@ + + + + + + + + KeyTable example - Plain HTML table + + + + + + + + + + + + + + +
    +
    +

    KeyTable example Plain HTML table

    + +
    +

    As well as being usable with DataTables, KeyTable can also be used with a plain HTML table. Please + note that this ability is deprecated and will be removed in KeyTable 1.3.

    + +

    This example shows KeyTable being initialised without any parameter, which instructs it to search + for any table with the class KeyTable which will be used.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + $('#example').addClass('KeyTable'); + new $.fn.dataTable.KeyTable(); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/KeyTable/examples/index.html b/public/assets/plugins/datatables/extensions/KeyTable/examples/index.html new file mode 100644 index 00000000..71ab0a8f --- /dev/null +++ b/public/assets/plugins/datatables/extensions/KeyTable/examples/index.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + KeyTable examples - KeyTable examples + + + +
    +
    +

    KeyTable example KeyTable examples

    + +
    +

    KeyTable provides enhanced accessibility and navigation options for DataTables enhanced tables, by + allowing Excel like cell navigation on any table. Events (focus, blur, action etc) can be assigned to + individual cells, columns, rows or all cells to allow advanced interaction options.. Key features + include:

    + +
      +
    • Easy to use spreadsheet like interaction
    • +
    • Fully integrated with DataTables
    • +
    • Wide range of supported events
    • +
    • Works without DataTables if you just want a plain table
    • +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/KeyTable/examples/scrolling.html b/public/assets/plugins/datatables/extensions/KeyTable/examples/scrolling.html new file mode 100644 index 00000000..6df15805 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/KeyTable/examples/scrolling.html @@ -0,0 +1,637 @@ + + + + + + + + KeyTable example - Scrolling table + + + + + + + + + + + + + + +
    +
    +

    KeyTable example Scrolling table

    + +
    +

    KeyTable supports DataTables' scrolling options (scrollXDT and scrollYDT) without required any additional + configuration. As the navigation keys are used to alter the focus of the KeyTable, the DataTables + scrolling position is altered to show the focused cell.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + var table = $('#example').DataTable( { + scrollY: 300, + paging: false + } ); + + new $.fn.dataTable.KeyTable( table ); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/KeyTable/examples/simple.html b/public/assets/plugins/datatables/extensions/KeyTable/examples/simple.html new file mode 100644 index 00000000..e18ed1c6 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/KeyTable/examples/simple.html @@ -0,0 +1,631 @@ + + + + + + + + KeyTable example - Basic initialisation + + + + + + + + + + + + + + +
    +
    +

    KeyTable example Basic initialisation

    + +
    +

    KeyTable allows you to use keyboard navigation on a DataTables enhanced table, like an Excel + spreadsheet. The focused cell is shown through the CSS class ('focus') which in the case below is + simply a blue border. Use your keyboard's arrow keys and click the cells in the table to navigate.

    + +

    This example simply shows key table being initialised on a DataTable, but events can be listened for through the KeyTable API which provide interaction + options.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    + +
      +
    • Javascript
    • +
    • HTML
    • +
    • CSS
    • +
    • Ajax
    • +
    • Server-side script
    • +
    + +
    +
    +

    The Javascript shown below is used to initialise the table shown in this + example:

    $(document).ready(function() { + var table = $('#example').DataTable(); + + new $.fn.dataTable.KeyTable( table ); +} ); + +

    In addition to the above code, the following Javascript library files are loaded for use in this + example:

    + + +
    + +
    +

    The HTML shown below is the raw HTML table element, before it has been enhanced by + DataTables:

    +
    + +
    +
    +

    This example uses a little bit of additional CSS beyond what is loaded from the library + files (below), in order to correctly display the table. The additional CSS used is shown + below:

    +
    + +

    The following CSS library files are loaded for use in this example to provide the styling of the + table:

    + + +
    + +
    +

    This table loads data by Ajax. The latest data that has been loaded is shown below. This data + will update automatically as any additional data is loaded.

    +
    + +
    +

    The script used to perform the server-side processing for this table is shown below. Please note + that this is just an example script using PHP. Server-side processing scripts can be written in any + language, using the protocol described in the + DataTables documentation.

    +
    +
    +
    +
    + +
    + +
    + + \ No newline at end of file diff --git a/public/assets/plugins/datatables/extensions/KeyTable/js/dataTables.keyTable.js b/public/assets/plugins/datatables/extensions/KeyTable/js/dataTables.keyTable.js new file mode 100644 index 00000000..f303f766 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/KeyTable/js/dataTables.keyTable.js @@ -0,0 +1,1175 @@ +/*! KeyTable 1.2.1 + * ©2010-2014 SpryMedia Ltd - datatables.net/license + */ + +/** + * @summary KeyTable + * @description Spreadsheet like keyboard navigation for DataTables + * @version 1.2.1 + * @file dataTables.keyTable.js + * @author SpryMedia Ltd (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * @copyright Copyright 2009-2014 SpryMedia Ltd. + * + * This source file is free software, available under the following license: + * MIT license - http://datatables.net/license/mit + * + * This source file 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 license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +// Global scope for KeyTable for backwards compatibility. Will be removed in 1.3 +var KeyTable; + + +(function(window, document, undefined) { + + +var factory = function( $, DataTable ) { +"use strict"; + +KeyTable = function ( oInit ) +{ + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * API parameters + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /* + * Variable: block + * Purpose: Flag whether or not KeyTable events should be processed + * Scope: KeyTable - public + */ + this.block = false; + + /* + * Variable: event + * Purpose: Container for all event application methods + * Scope: KeyTable - public + * Notes: This object contains all the public methods for adding and removing events - these + * are dynamically added later on + */ + this.event = { + "remove": {} + }; + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * API methods + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /* + * Function: fnGetCurrentPosition + * Purpose: Get the currently focused cell's position + * Returns: array int: [ x, y ] + * Inputs: void + */ + this.fnGetCurrentPosition = function () + { + return [ _iOldX, _iOldY ]; + }; + + + /* + * Function: fnGetCurrentData + * Purpose: Get the currently focused cell's data (innerHTML) + * Returns: string: - data requested + * Inputs: void + */ + this.fnGetCurrentData = function () + { + return _nOldFocus.innerHTML; + }; + + + /* + * Function: fnGetCurrentTD + * Purpose: Get the currently focused cell + * Returns: node: - focused element + * Inputs: void + */ + this.fnGetCurrentTD = function () + { + return _nOldFocus; + }; + + + /* + * Function: fnSetPosition + * Purpose: Set the position of the focused cell + * Returns: - + * Inputs: int:x - x coordinate + * int:y - y coordinate + * Notes: Thanks to Rohan Daxini for the basis of this function + */ + this.fnSetPosition = function( x, y ) + { + if ( typeof x == 'object' && x.nodeName ) + { + _fnSetFocus( x ); + } + else + { + _fnSetFocus( _fnCellFromCoords(x, y) ); + } + }; + + + /* + * Function: fnBlur + * Purpose: Blur the current focus + * Returns: - + * Inputs: - + */ + this.fnBlur = function() + { + _fnBlur(); + }; + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Private parameters + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /* + * Variable: _nBody + * Purpose: Body node of the table - cached for renference + * Scope: KeyTable - private + */ + var _nBody = null; + + /* + * Variable: + * Purpose: + * Scope: KeyTable - private + */ + var _nOldFocus = null; + + /* + * Variable: _iOldX and _iOldY + * Purpose: X and Y coords of the old elemet that was focused on + * Scope: KeyTable - private + */ + var _iOldX = null; + var _iOldY = null; + + /* + * Variable: _that + * Purpose: Scope saving for 'this' after a jQuery event + * Scope: KeyTable - private + */ + var _that = null; + + /* + * Variable: sFocusClass + * Purpose: Class that should be used for focusing on a cell + * Scope: KeyTable - private + */ + var _sFocusClass = "focus"; + + /* + * Variable: _bKeyCapture + * Purpose: Flag for should KeyTable capture key events or not + * Scope: KeyTable - private + */ + var _bKeyCapture = false; + + /* + * Variable: _oaoEvents + * Purpose: Event cache object, one array for each supported event for speed of searching + * Scope: KeyTable - private + */ + var _oaoEvents = { + "action": [], + "esc": [], + "focus": [], + "blur": [] + }; + + /* + * Variable: _oDatatable + * Purpose: DataTables settings object for if we are actually using a + * DataTables table + * Scope: KeyTable - private + */ + var _oDatatable = null; + + var _bForm; + var _nInput; + var _bInputFocused = false; + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Private methods + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Key table events + */ + + /* + * Function: _fnEventAddTemplate + * Purpose: Create a function (with closure for sKey) event addition API + * Returns: function: - template function + * Inputs: string:sKey - type of event to detect + */ + function _fnEventAddTemplate( sKey ) + { + /* + * Function: - + * Purpose: API function for adding event to cache + * Returns: - + * Inputs: 1. node:x - target node to add event for + * 2. function:y - callback function to apply + * or + * 1. int:x - x coord. of target cell (can be null for live events) + * 2. int:y - y coord. of target cell (can be null for live events) + * 3. function:z - callback function to apply + * Notes: This function is (interally) overloaded (in as much as javascript allows for + * that) - the target cell can be given by either node or coords. + */ + return function ( x, y, z ) { + if ( (x===null || typeof x == "number") && + (y===null || typeof y == "number") && + typeof z == "function" ) + { + _fnEventAdd( sKey, x, y, z ); + } + else if ( typeof x == "object" && typeof y == "function" ) + { + var aCoords = _fnCoordsFromCell( x ); + _fnEventAdd( sKey, aCoords[0], aCoords[1], y ); + } + else + { + alert( "Unhandable event type was added: x" +x+ " y:" +y+ " z:" +z ); + } + }; + } + + + /* + * Function: _fnEventRemoveTemplate + * Purpose: Create a function (with closure for sKey) event removal API + * Returns: function: - template function + * Inputs: string:sKey - type of event to detect + */ + function _fnEventRemoveTemplate( sKey ) + { + /* + * Function: - + * Purpose: API function for removing event from cache + * Returns: int: - number of events removed + * Inputs: 1. node:x - target node to remove event from + * 2. function:y - callback function to apply + * or + * 1. int:x - x coord. of target cell (can be null for live events) + * 2. int:y - y coord. of target cell (can be null for live events) + * 3. function:z - callback function to remove - optional + * Notes: This function is (interally) overloaded (in as much as javascript allows for + * that) - the target cell can be given by either node or coords and the function + * to remove is optional + */ + return function ( x, y, z ) { + if ( (x===null || typeof arguments[0] == "number") && + (y===null || typeof arguments[1] == "number" ) ) + { + if ( typeof arguments[2] == "function" ) + { + _fnEventRemove( sKey, x, y, z ); + } + else + { + _fnEventRemove( sKey, x, y ); + } + } + else if ( typeof arguments[0] == "object" ) + { + var aCoords = _fnCoordsFromCell( x ); + if ( typeof arguments[1] == "function" ) + { + _fnEventRemove( sKey, aCoords[0], aCoords[1], y ); + } + else + { + _fnEventRemove( sKey, aCoords[0], aCoords[1] ); + } + } + else + { + alert( "Unhandable event type was removed: x" +x+ " y:" +y+ " z:" +z ); + } + }; + } + + /* Use the template functions to add the event API functions */ + for ( var sKey in _oaoEvents ) + { + if ( sKey ) + { + this.event[sKey] = _fnEventAddTemplate( sKey ); + this.event.remove[sKey] = _fnEventRemoveTemplate( sKey ); + } + } + + + /* + * Function: _fnEventAdd + * Purpose: Add an event to the internal cache + * Returns: - + * Inputs: string:sType - type of event to add, given by the available elements in _oaoEvents + * int:x - x-coords to add event to - can be null for "blanket" event + * int:y - y-coords to add event to - can be null for "blanket" event + * function:fn - callback function for when triggered + */ + function _fnEventAdd( sType, x, y, fn ) + { + _oaoEvents[sType].push( { + "x": x, + "y": y, + "fn": fn + } ); + } + + + /* + * Function: _fnEventRemove + * Purpose: Remove an event from the event cache + * Returns: int: - number of matching events removed + * Inputs: string:sType - type of event to look for + * node:nTarget - target table cell + * function:fn - optional - remove this function. If not given all handlers of this + * type will be removed + */ + function _fnEventRemove( sType, x, y, fn ) + { + var iCorrector = 0; + + for ( var i=0, iLen=_oaoEvents[sType].length ; i= oSettings.fnDisplayEnd() ) + { + if ( oSettings._iDisplayLength >= 0 ) + { + /* Make sure we are not over running the display array */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart += oSettings._iDisplayLength; + } + } + else + { + oSettings._iDisplayStart = 0; + } + _oDatatable.oApi._fnCalculateEnd( oSettings ); + } + + /* Page backwards */ + while ( iRow < oSettings._iDisplayStart ) + { + oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ? + oSettings._iDisplayStart - oSettings._iDisplayLength : + 0; + + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + _oDatatable.oApi._fnCalculateEnd( oSettings ); + } + + /* Re-draw the table */ + _oDatatable.oApi._fnDraw( oSettings ); + + /* Restore the key capture */ + _bKeyCapture = bKeyCaptureCache; + } + + /* Cache the information that we are interested in */ + var aNewPos = _fnCoordsFromCell( nTarget ); + _nOldFocus = nTarget; + _iOldX = aNewPos[0]; + _iOldY = aNewPos[1]; + + var iViewportHeight, iViewportWidth, iScrollTop, iScrollLeft, iHeight, iWidth, aiPos; + if ( bAutoScroll ) + { + /* Scroll the viewport such that the new cell is fully visible in the rendered window */ + iViewportHeight = $(window).height(); + iViewportWidth = $(window).width(); + iScrollTop = $(document).scrollTop(); + iScrollLeft = $(document).scrollLeft(); + iHeight = nTarget.offsetHeight; + iWidth = nTarget.offsetWidth; + aiPos = _fnGetPos( nTarget ); + + /* Take account of scrolling in DataTables 1.7 - remove scrolling since that would add to + * the positioning calculation + */ + if ( _oDatatable && typeof oSettings.oScroll != 'undefined' && + (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") ) + { + aiPos[1] -= $(oSettings.nTable.parentNode).scrollTop(); + aiPos[0] -= $(oSettings.nTable.parentNode).scrollLeft(); + } + + /* Correct viewport positioning for vertical scrolling */ + if ( aiPos[1]+iHeight > iScrollTop+iViewportHeight ) + { + /* Displayed element if off the bottom of the viewport */ + _fnSetScrollTop( aiPos[1]+iHeight - iViewportHeight ); + } + else if ( aiPos[1] < iScrollTop ) + { + /* Displayed element if off the top of the viewport */ + _fnSetScrollTop( aiPos[1] ); + } + + /* Correct viewport positioning for horizontal scrolling */ + if ( aiPos[0]+iWidth > iScrollLeft+iViewportWidth ) + { + /* Displayed element is off the bottom of the viewport */ + _fnSetScrollLeft( aiPos[0]+iWidth - iViewportWidth ); + } + else if ( aiPos[0] < iScrollLeft ) + { + /* Displayed element if off the Left of the viewport */ + _fnSetScrollLeft( aiPos[0] ); + } + } + + /* Take account of scrolling in DataTables 1.7 */ + if ( _oDatatable && typeof oSettings.oScroll != 'undefined' && + (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") ) + { + var dtScrollBody = oSettings.nTable.parentNode; + iViewportHeight = dtScrollBody.clientHeight; + iViewportWidth = dtScrollBody.clientWidth; + iScrollTop = dtScrollBody.scrollTop; + iScrollLeft = dtScrollBody.scrollLeft; + iHeight = nTarget.offsetHeight; + iWidth = nTarget.offsetWidth; + + /* Correct for vertical scrolling */ + if ( nTarget.offsetTop + iHeight > iViewportHeight+iScrollTop ) + { + dtScrollBody.scrollTop = (nTarget.offsetTop + iHeight) - iViewportHeight; + } + else if ( nTarget.offsetTop < iScrollTop ) + { + dtScrollBody.scrollTop = nTarget.offsetTop; + } + + /* Correct for horizontal scrolling */ + if ( nTarget.offsetLeft + iWidth > iViewportWidth+iScrollLeft ) + { + dtScrollBody.scrollLeft = (nTarget.offsetLeft + iWidth) - iViewportWidth; + } + else if ( nTarget.offsetLeft < iScrollLeft ) + { + dtScrollBody.scrollLeft = nTarget.offsetLeft; + } + } + + /* Focused - so we want to capture the keys */ + _fnCaptureKeys(); + + /* Fire of the focus event if there is one */ + _fnEventFire( "focus", _iOldX, _iOldY ); + } + + + /* + * Function: _fnBlur + * Purpose: Blur focus from the whole table + * Returns: - + * Inputs: - + */ + function _fnBlur() + { + _fnRemoveFocus( _nOldFocus ); + _iOldX = null; + _iOldY = null; + _nOldFocus = null; + _fnReleaseKeys(); + } + + + /* + * Function: _fnRemoveFocus + * Purpose: Remove focus from a cell and fire any blur events which are attached + * Returns: - + * Inputs: node:nTarget - cell of interest + */ + function _fnRemoveFocus( nTarget ) + { + $(nTarget).removeClass( _sFocusClass ); + $(nTarget).parent().removeClass( _sFocusClass ); + _fnEventFire( "blur", _iOldX, _iOldY ); + } + + + /* + * Function: _fnClick + * Purpose: Focus on the element that has been clicked on by the user + * Returns: - + * Inputs: event:e - click event + */ + function _fnClick ( e ) + { + var nTarget = this; + while ( nTarget.nodeName != "TD" ) + { + nTarget = nTarget.parentNode; + } + + _fnSetFocus( nTarget ); + _fnCaptureKeys(); + } + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Key events + */ + + /* + * Function: _fnKey + * Purpose: Deal with a key events, be it moving the focus or return etc. + * Returns: bool: - allow browser default action + * Inputs: event:e - key event + */ + function _fnKey ( e ) + { + /* If user or system has blocked KeyTable from doing anything, just ignore this event */ + if ( _that.block || !_bKeyCapture ) + { + return true; + } + + /* If a modifier key is pressed (exapct shift), ignore the event */ + if ( e.metaKey || e.altKey || e.ctrlKey ) + { + return true; + } + var + x, y, + iTableWidth = _nBody.getElementsByTagName('tr')[0].getElementsByTagName('td').length, + iTableHeight; + + /* Get table height and width - done here so as to be dynamic (if table is updated) */ + if ( _oDatatable ) + { + /* + * Locate the current node in the DataTable overriding the old positions - the reason for + * is is that there might have been some DataTables interaction between the last focus and + * now + */ + iTableHeight = _oDatatable.aiDisplay.length; + + var aDtPos = _fnFindDtCell( _nOldFocus ); + if ( aDtPos === null ) + { + /* If the table has been updated such that the focused cell can't be seen - do nothing */ + return; + } + _iOldX = aDtPos[ 0 ]; + _iOldY = aDtPos[ 1 ]; + } + else + { + iTableHeight = _nBody.getElementsByTagName('tr').length; + } + + /* Capture shift+tab to match the left arrow key */ + var iKey = (e.keyCode == 9 && e.shiftKey) ? -1 : e.keyCode; + + switch( iKey ) + { + case 13: /* return */ + e.preventDefault(); + e.stopPropagation(); + _fnEventFire( "action", _iOldX, _iOldY ); + return true; + + case 27: /* esc */ + if ( !_fnEventFire( "esc", _iOldX, _iOldY ) ) + { + /* Only lose focus if there isn't an escape handler on the cell */ + _fnBlur(); + return; + } + x = _iOldX; + y = _iOldY; + break; + + case -1: + case 37: /* left arrow */ + if ( _iOldX > 0 ) { + x = _iOldX - 1; + y = _iOldY; + } else if ( _iOldY > 0 ) { + x = iTableWidth-1; + y = _iOldY - 1; + } else { + /* at start of table */ + if ( iKey == -1 && _bForm ) + { + /* If we are in a form, return focus to the 'input' element such that tabbing will + * follow correctly in the browser + */ + _bInputFocused = true; + _nInput.focus(); + + /* This timeout is a little nasty - but IE appears to have some asyhnc behaviour for + * focus + */ + setTimeout( function(){ _bInputFocused = false; }, 0 ); + _bKeyCapture = false; + _fnBlur(); + return true; + } + else + { + return false; + } + } + break; + + case 38: /* up arrow */ + if ( _iOldY > 0 ) { + x = _iOldX; + y = _iOldY - 1; + } else { + return false; + } + break; + + case 36: /* home */ + x = _iOldX; + y = 0; + break; + + case 33: /* page up */ + x = _iOldX; + y = _iOldY - 10; + if (y < 0) { + y = 0; + } + break; + + case 9: /* tab */ + case 39: /* right arrow */ + if ( _iOldX < iTableWidth-1 ) { + x = _iOldX + 1; + y = _iOldY; + } else if ( _iOldY < iTableHeight-1 ) { + x = 0; + y = _iOldY + 1; + } else { + /* at end of table */ + if ( iKey == 9 && _bForm ) + { + /* If we are in a form, return focus to the 'input' element such that tabbing will + * follow correctly in the browser + */ + _bInputFocused = true; + _nInput.focus(); + + /* This timeout is a little nasty - but IE appears to have some asyhnc behaviour for + * focus + */ + setTimeout( function(){ _bInputFocused = false; }, 0 ); + _bKeyCapture = false; + _fnBlur(); + return true; + } + else + { + return false; + } + } + break; + + case 40: /* down arrow */ + if ( _iOldY < iTableHeight-1 ) { + x = _iOldX; + y = _iOldY + 1; + } else { + return false; + } + break; + + case 35: /* end */ + x = _iOldX; + y = iTableHeight-1; + break; + + case 34: /* page down */ + x = _iOldX; + y = _iOldY+10; + if (y > iTableHeight-1) { + y = iTableHeight-1; + } + break; + + default: /* Nothing we are interested in */ + return true; + } + + _fnSetFocus( _fnCellFromCoords(x, y) ); + return false; + } + + + /* + * Function: _fnCaptureKeys + * Purpose: Start capturing key events for this table + * Returns: - + * Inputs: - + */ + function _fnCaptureKeys( ) + { + if ( !_bKeyCapture ) + { + _bKeyCapture = true; + } + } + + + /* + * Function: _fnReleaseKeys + * Purpose: Stop capturing key events for this table + * Returns: - + * Inputs: - + */ + function _fnReleaseKeys( ) + { + _bKeyCapture = false; + } + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Support functions + */ + + /* + * Function: _fnCellFromCoords + * Purpose: Calulate the target TD cell from x and y coordinates + * Returns: node: - TD target + * Inputs: int:x - x coordinate + * int:y - y coordinate + */ + function _fnCellFromCoords( x, y ) + { + if ( _oDatatable ) + { + if ( typeof _oDatatable.aoData[ _oDatatable.aiDisplay[ y ] ] != 'undefined' ) + { + return _oDatatable.aoData[ _oDatatable.aiDisplay[ y ] ].nTr.getElementsByTagName('td')[x]; + } + else + { + return null; + } + } + else + { + return $('tr:eq('+y+')>td:eq('+x+')', _nBody )[0]; + } + } + + + /* + * Function: _fnCoordsFromCell + * Purpose: Calculate the x and y position in a table from a TD cell + * Returns: array[2] int: [x, y] + * Inputs: node:n - TD cell of interest + * Notes: Not actually interested in this for DataTables since it might go out of date + */ + function _fnCoordsFromCell( n ) + { + if ( _oDatatable ) + { + return [ + $('td', n.parentNode).index(n), + $('tr', n.parentNode.parentNode).index(n.parentNode) + _oDatatable._iDisplayStart + ]; + } + else + { + return [ + $('td', n.parentNode).index(n), + $('tr', n.parentNode.parentNode).index(n.parentNode) + ]; + } + } + + + /* + * Function: _fnSetScrollTop + * Purpose: Set the vertical scrolling position + * Returns: - + * Inputs: int:iPos - scrolltop + * Notes: This is so nasty, but without browser detection you can't tell which you should set + * So on browsers that support both, the scroll top will be set twice. I can live with + * that :-) + */ + function _fnSetScrollTop( iPos ) + { + document.documentElement.scrollTop = iPos; + document.body.scrollTop = iPos; + } + + + /* + * Function: _fnSetScrollLeft + * Purpose: Set the horizontal scrolling position + * Returns: - + * Inputs: int:iPos - scrollleft + */ + function _fnSetScrollLeft( iPos ) + { + document.documentElement.scrollLeft = iPos; + document.body.scrollLeft = iPos; + } + + + /* + * Function: _fnGetPos + * Purpose: Get the position of an object on the rendered page + * Returns: array[2] int: [left, right] + * Inputs: node:obj - element of interest + */ + function _fnGetPos ( obj ) + { + var iLeft = 0; + var iTop = 0; + + if (obj.offsetParent) + { + iLeft = obj.offsetLeft; + iTop = obj.offsetTop; + obj = obj.offsetParent; + while (obj) + { + iLeft += obj.offsetLeft; + iTop += obj.offsetTop; + obj = obj.offsetParent; + } + } + return [iLeft,iTop]; + } + + + /* + * Function: _fnFindDtCell + * Purpose: Get the coords. of a cell from the DataTables internal information + * Returns: array[2] int: [x, y] coords. or null if not found + * Inputs: node:nTarget - the node of interest + */ + function _fnFindDtCell( nTarget ) + { + for ( var i=0, iLen=_oDatatable.aiDisplay.length ; i

    '+ + '

    Copied '+lines+' row'+plural+' to the clipboard.

    ', + 1500 + ); + } + } ), + + "pdf": $.extend( {}, TableTools.buttonBase, { + "sAction": "flash_pdf", + "sNewLine": "\n", + "sFileName": "*.pdf", + "sButtonClass": "DTTT_button_pdf", + "sButtonText": "PDF", + "sPdfOrientation": "portrait", + "sPdfSize": "A4", + "sPdfMessage": "", + "fnClick": function( nButton, oConfig, flash ) { + this.fnSetText( flash, + "title:"+ this.fnGetTitle(oConfig) +"\n"+ + "message:"+ oConfig.sPdfMessage +"\n"+ + "colWidth:"+ this.fnCalcColRatios(oConfig) +"\n"+ + "orientation:"+ oConfig.sPdfOrientation +"\n"+ + "size:"+ oConfig.sPdfSize +"\n"+ + "--/TableToolsOpts--\n" + + this.fnGetTableData(oConfig) + ); + } + } ), + + "print": $.extend( {}, TableTools.buttonBase, { + "sInfo": "
    Print view

    Please use your browser's print function to "+ + "print this table. Press escape when finished.

    ", + "sMessage": null, + "bShowAll": true, + "sToolTip": "View print view", + "sButtonClass": "DTTT_button_print", + "sButtonText": "Print", + "fnClick": function ( nButton, oConfig ) { + this.fnPrint( true, oConfig ); + } + } ), + + "text": $.extend( {}, TableTools.buttonBase ), + + "select": $.extend( {}, TableTools.buttonBase, { + "sButtonText": "Select button", + "fnSelect": function( nButton, oConfig ) { + if ( this.fnGetSelected().length !== 0 ) { + $(nButton).removeClass( this.classes.buttons.disabled ); + } else { + $(nButton).addClass( this.classes.buttons.disabled ); + } + }, + "fnInit": function( nButton, oConfig ) { + $(nButton).addClass( this.classes.buttons.disabled ); + } + } ), + + "select_single": $.extend( {}, TableTools.buttonBase, { + "sButtonText": "Select button", + "fnSelect": function( nButton, oConfig ) { + var iSelected = this.fnGetSelected().length; + if ( iSelected == 1 ) { + $(nButton).removeClass( this.classes.buttons.disabled ); + } else { + $(nButton).addClass( this.classes.buttons.disabled ); + } + }, + "fnInit": function( nButton, oConfig ) { + $(nButton).addClass( this.classes.buttons.disabled ); + } + } ), + + "select_all": $.extend( {}, TableTools.buttonBase, { + "sButtonText": "Select all", + "fnClick": function( nButton, oConfig ) { + this.fnSelectAll(); + }, + "fnSelect": function( nButton, oConfig ) { + if ( this.fnGetSelected().length == this.s.dt.fnRecordsDisplay() ) { + $(nButton).addClass( this.classes.buttons.disabled ); + } else { + $(nButton).removeClass( this.classes.buttons.disabled ); + } + } + } ), + + "select_none": $.extend( {}, TableTools.buttonBase, { + "sButtonText": "Deselect all", + "fnClick": function( nButton, oConfig ) { + this.fnSelectNone(); + }, + "fnSelect": function( nButton, oConfig ) { + if ( this.fnGetSelected().length !== 0 ) { + $(nButton).removeClass( this.classes.buttons.disabled ); + } else { + $(nButton).addClass( this.classes.buttons.disabled ); + } + }, + "fnInit": function( nButton, oConfig ) { + $(nButton).addClass( this.classes.buttons.disabled ); + } + } ), + + "ajax": $.extend( {}, TableTools.buttonBase, { + "sAjaxUrl": "/xhr.php", + "sButtonText": "Ajax button", + "fnClick": function( nButton, oConfig ) { + var sData = this.fnGetTableData(oConfig); + $.ajax( { + "url": oConfig.sAjaxUrl, + "data": [ + { "name": "tableData", "value": sData } + ], + "success": oConfig.fnAjaxComplete, + "dataType": "json", + "type": "POST", + "cache": false, + "error": function () { + alert( "Error detected when sending table data to server" ); + } + } ); + }, + "fnAjaxComplete": function( json ) { + alert( 'Ajax complete' ); + } + } ), + + "div": $.extend( {}, TableTools.buttonBase, { + "sAction": "div", + "sTag": "div", + "sButtonClass": "DTTT_nonbutton", + "sButtonText": "Text button" + } ), + + "collection": $.extend( {}, TableTools.buttonBase, { + "sAction": "collection", + "sButtonClass": "DTTT_button_collection", + "sButtonText": "Collection", + "fnClick": function( nButton, oConfig ) { + this._fnCollectionShow(nButton, oConfig); + } + } ) +}; +/* + * on* callback parameters: + * 1. node - button element + * 2. object - configuration object for this button + * 3. object - ZeroClipboard reference (flash button only) + * 4. string - Returned string from Flash (flash button only - and only on 'complete') + */ + +// Alias to match the other plug-ins styling +TableTools.buttons = TableTools.BUTTONS; + + +/** + * @namespace Classes used by TableTools - allows the styles to be override easily. + * Note that when TableTools initialises it will take a copy of the classes object + * and will use its internal copy for the remainder of its run time. + */ +TableTools.classes = { + "container": "DTTT_container", + "buttons": { + "normal": "DTTT_button", + "disabled": "DTTT_disabled" + }, + "collection": { + "container": "DTTT_collection", + "background": "DTTT_collection_background", + "buttons": { + "normal": "DTTT_button", + "disabled": "DTTT_disabled" + } + }, + "select": { + "table": "DTTT_selectable", + "row": "DTTT_selected selected" + }, + "print": { + "body": "DTTT_Print", + "info": "DTTT_print_info", + "message": "DTTT_PrintMessage" + } +}; + + +/** + * @namespace ThemeRoller classes - built in for compatibility with DataTables' + * bJQueryUI option. + */ +TableTools.classes_themeroller = { + "container": "DTTT_container ui-buttonset ui-buttonset-multi", + "buttons": { + "normal": "DTTT_button ui-button ui-state-default" + }, + "collection": { + "container": "DTTT_collection ui-buttonset ui-buttonset-multi" + } +}; + + +/** + * @namespace TableTools default settings for initialisation + */ +TableTools.DEFAULTS = { + "sSwfPath": "../swf/copy_csv_xls_pdf.swf", + "sRowSelect": "none", + "sRowSelector": "tr", + "sSelectedClass": null, + "fnPreRowSelect": null, + "fnRowSelected": null, + "fnRowDeselected": null, + "aButtons": [ "copy", "csv", "xls", "pdf", "print" ], + "oTags": { + "container": "div", + "button": "a", // We really want to use buttons here, but Firefox and IE ignore the + // click on the Flash element in the button (but not mouse[in|out]). + "liner": "span", + "collection": { + "container": "div", + "button": "a", + "liner": "span" + } + } +}; + +// Alias to match the other plug-ins +TableTools.defaults = TableTools.DEFAULTS; + + +/** + * Name of this class + * @constant CLASS + * @type String + * @default TableTools + */ +TableTools.prototype.CLASS = "TableTools"; + + +/** + * TableTools version + * @constant VERSION + * @type String + * @default See code + */ +TableTools.version = "2.2.4"; + + + +// DataTables 1.10 API +// +// This will be extended in a big way in in TableTools 3 to provide API methods +// such as rows().select() and rows.selected() etc, but for the moment the +// tabletools() method simply returns the instance. + +if ( $.fn.dataTable.Api ) { + $.fn.dataTable.Api.register( 'tabletools()', function () { + var tt = null; + + if ( this.context.length > 0 ) { + tt = TableTools.fnGetInstance( this.context[0].nTable ); + } + + return tt; + } ); +} + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Initialisation + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Register a new feature with DataTables + */ +if ( typeof $.fn.dataTable == "function" && + typeof $.fn.dataTableExt.fnVersionCheck == "function" && + $.fn.dataTableExt.fnVersionCheck('1.9.0') ) +{ + $.fn.dataTableExt.aoFeatures.push( { + "fnInit": function( oDTSettings ) { + var init = oDTSettings.oInit; + var opts = init ? + init.tableTools || init.oTableTools || {} : + {}; + + return new TableTools( oDTSettings.oInstance, opts ).dom.container; + }, + "cFeature": "T", + "sFeature": "TableTools" + } ); +} +else +{ + alert( "Warning: TableTools requires DataTables 1.9.0 or newer - www.datatables.net/download"); +} + +$.fn.DataTable.TableTools = TableTools; + +})(jQuery, window, document); + +/* + * Register a new feature with DataTables + */ +if ( typeof $.fn.dataTable == "function" && + typeof $.fn.dataTableExt.fnVersionCheck == "function" && + $.fn.dataTableExt.fnVersionCheck('1.9.0') ) +{ + $.fn.dataTableExt.aoFeatures.push( { + "fnInit": function( oDTSettings ) { + var oOpts = typeof oDTSettings.oInit.oTableTools != 'undefined' ? + oDTSettings.oInit.oTableTools : {}; + + var oTT = new TableTools( oDTSettings.oInstance, oOpts ); + TableTools._aInstances.push( oTT ); + + return oTT.dom.container; + }, + "cFeature": "T", + "sFeature": "TableTools" + } ); +} +else +{ + alert( "Warning: TableTools 2 requires DataTables 1.9.0 or newer - www.datatables.net/download"); +} + + +$.fn.dataTable.TableTools = TableTools; +$.fn.DataTable.TableTools = TableTools; + + +return TableTools; +}; // /factory + + +// Define as an AMD module if possible +if ( typeof define === 'function' && define.amd ) { + define( ['jquery', 'datatables'], factory ); +} +else if ( typeof exports === 'object' ) { + // Node/CommonJS + factory( require('jquery'), require('datatables') ); +} +else if ( jQuery && !jQuery.fn.dataTable.TableTools ) { + // Otherwise simply initialise as normal, stopping multiple evaluation + factory( jQuery, jQuery.fn.dataTable ); +} + + +})(window, document); + diff --git a/public/assets/plugins/datatables/extensions/TableTools/js/dataTables.tableTools.min.js b/public/assets/plugins/datatables/extensions/TableTools/js/dataTables.tableTools.min.js new file mode 100644 index 00000000..e8c87056 --- /dev/null +++ b/public/assets/plugins/datatables/extensions/TableTools/js/dataTables.tableTools.min.js @@ -0,0 +1,70 @@ +/*! + TableTools 2.2.4 + 2009-2015 SpryMedia Ltd - datatables.net/license + + ZeroClipboard 1.0.4 + Author: Joseph Huckaby - MIT licensed +*/ +var TableTools; +(function(n,k,q){var p=function(m,p){var g={version:"1.0.4-TableTools2",clients:{},moviePath:"",nextId:1,$:function(a){"string"==typeof a&&(a=k.getElementById(a));a.addClass||(a.hide=function(){this.style.display="none"},a.show=function(){this.style.display=""},a.addClass=function(a){this.removeClass(a);this.className+=" "+a},a.removeClass=function(a){this.className=this.className.replace(RegExp("\\s*"+a+"\\s*")," ").replace(/^\s+/,"").replace(/\s+$/,"")},a.hasClass=function(a){return!!this.className.match(RegExp("\\s*"+a+ +"\\s*"))});return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(a,b,c){(a=this.clients[a])&&a.receiveEvent(b,c)},register:function(a,b){this.clients[a]=b},getDOMObjectPosition:function(a){var b={left:0,top:0,width:a.width?a.width:a.offsetWidth,height:a.height?a.height:a.offsetHeight};""!==a.style.width&&(b.width=a.style.width.replace("px",""));""!==a.style.height&&(b.height=a.style.height.replace("px",""));for(;a;)b.left+=a.offsetLeft,b.top+=a.offsetTop,a=a.offsetParent;return b}, +Client:function(a){this.handlers={};this.id=g.nextId++;this.movieId="ZeroClipboard_TableToolsMovie_"+this.id;g.register(this.id,this);a&&this.glue(a)}};g.Client.prototype={id:0,ready:!1,movie:null,clipText:"",fileName:"",action:"copy",handCursorEnabled:!0,cssEffects:!0,handlers:null,sized:!1,glue:function(a,b){this.domElement=g.$(a);var c=99;this.domElement.style.zIndex&&(c=parseInt(this.domElement.style.zIndex,10)+1);var d=g.getDOMObjectPosition(this.domElement);this.div=k.createElement("div");var f= +this.div.style;f.position="absolute";f.left="0px";f.top="0px";f.width=d.width+"px";f.height=d.height+"px";f.zIndex=c;"undefined"!=typeof b&&""!==b&&(this.div.title=b);0!==d.width&&0!==d.height&&(this.sized=!0);this.domElement&&(this.domElement.appendChild(this.div),this.div.innerHTML=this.getHTML(d.width,d.height).replace(/&/g,"&"))},positionElement:function(){var a=g.getDOMObjectPosition(this.domElement),b=this.div.style;b.position="absolute";b.width=a.width+"px";b.height=a.height+"px";0!==a.width&& +0!==a.height&&(this.sized=!0,b=this.div.childNodes[0],b.width=a.width,b.height=a.height)},getHTML:function(a,b){var c="",d="id="+this.id+"&width="+a+"&height="+b;if(navigator.userAgent.match(/MSIE/))var f=location.href.match(/^https/i)?"https://":"http://",c=c+('');else c+='';return c},hide:function(){this.div&&(this.div.style.left="-2000px")},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=k.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.div=this.domElement=null}},reposition:function(a){a&&((this.domElement=g.$(a))||this.hide());if(this.domElement&&this.div){var a=g.getDOMObjectPosition(this.domElement),b=this.div.style;b.left=""+a.left+ +"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setCharSet:function(a){this.charSet=a;this.ready&&this.movie.setCharSet(a)},setBomInc:function(a){this.incBom=a;this.ready&&this.movie.setBomInc(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)},setAction:function(a){this.action= +a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){var c,a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=k.getElementById(this.movieId);if(!this.movie){c=this;setTimeout(function(){c.receiveEvent("load", +null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=!0;return}this.ready=!0;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setCharSet(this.charSet);this.movie.setBomInc(this.incBom);this.movie.setHandCursor(this.handCursorEnabled);break;case "mouseover":this.domElement&&this.cssEffects&& +this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":this.domElement&&this.cssEffects&&(this.recoverActive=!1,this.domElement.hasClass("active")&&(this.domElement.removeClass("active"),this.recoverActive=!0));break;case "mousedown":this.domElement&&this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":this.domElement&&this.cssEffects&&(this.domElement.removeClass("active"),this.recoverActive=!1)}if(this.handlers[a])for(var d=0,f=this.handlers[a].length;d< +f;d++){var e=this.handlers[a][d];if("function"==typeof e)e(this,b);else if("object"==typeof e&&2==e.length)e[0][e[1]](this,b);else if("string"==typeof e)n[e](this,b)}}};n.ZeroClipboard_TableTools=g;var e=jQuery;TableTools=function(a,b){!this instanceof TableTools&&alert("Warning: TableTools must be initialised with the keyword 'new'");this.s={that:this,dt:e.fn.dataTable.Api?(new e.fn.dataTable.Api(a)).settings()[0]:a.fnSettings(),print:{saveStart:-1,saveLength:-1,saveScroll:-1,funcEnd:function(){}}, +buttonCounter:0,select:{type:"",selected:[],preRowSelect:null,postSelected:null,postDeselected:null,all:!1,selectedClass:""},custom:{},swfPath:"",buttonSet:[],master:!1,tags:{}};this.dom={container:null,table:null,print:{hidden:[],message:null},collection:{collection:null,background:null}};this.classes=e.extend(!0,{},TableTools.classes);this.s.dt.bJUI&&e.extend(!0,this.classes,TableTools.classes_themeroller);this.fnSettings=function(){return this.s};"undefined"==typeof b&&(b={});TableTools._aInstances.push(this); +this._fnConstruct(b);return this};TableTools.prototype={fnGetSelected:function(a){var b=[],c=this.s.dt.aoData,d=this.s.dt.aiDisplay,f;if(a){a=0;for(f=d.length;a"¡".toString().length?b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""):b.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g,"")},fnCalcColRatios:function(a){var b=this.s.dt.aoColumns,a=this._fnColumnTargets(a.mColumns),c=[],d=0,f=0,e,i;e=0;for(i=a.length;e").addClass(this.classes.print.info).html(a).appendTo("body");setTimeout(function(){c.fadeOut("normal",function(){c.remove()})},b)},fnContainer:function(){return this.dom.container},_fnConstruct:function(a){var b=this;this._fnCustomiseSettings(a);this.dom.container=k.createElement(this.s.tags.container);this.dom.container.className=this.classes.container; +"none"!=this.s.select.type&&this._fnRowSelectConfig();this._fnButtonDefinations(this.s.buttonSet,this.dom.container);this.s.dt.aoDestroyCallback.push({sName:"TableTools",fn:function(){e(b.s.dt.nTBody).off("click.DTTT_Select",b.s.custom.sRowSelector).off("mousedown.DTTT_Select","tr").off("mouseup.DTTT_Select","tr");e(b.dom.container).empty();var a=e.inArray(b,TableTools._aInstances);-1!==a&&TableTools._aInstances.splice(a,1)}})},_fnCustomiseSettings:function(a){"undefined"==typeof this.s.dt._TableToolsInit&& +(this.s.master=!0,this.s.dt._TableToolsInit=!0);this.dom.table=this.s.dt.nTable;this.s.custom=e.extend({},TableTools.DEFAULTS,a);this.s.swfPath=this.s.custom.sSwfPath;"undefined"!=typeof g&&(g.moviePath=this.s.swfPath);this.s.select.type=this.s.custom.sRowSelect;this.s.select.preRowSelect=this.s.custom.fnPreRowSelect;this.s.select.postSelected=this.s.custom.fnRowSelected;this.s.select.postDeselected=this.s.custom.fnRowDeselected;this.s.custom.sSelectedClass&&(this.classes.select.row=this.s.custom.sSelectedClass); +this.s.tags=this.s.custom.oTags;this.s.buttonSet=this.s.custom.aButtons},_fnButtonDefinations:function(a,b){for(var c,d=0,f=a.length;dh?i:h)+"px";l.style.width=(o>g?o:g)+"px";l.className=this.classes.collection.background;e(l).css("opacity",0);k.body.appendChild(l);k.body.appendChild(f);i=e(f).outerWidth();o=e(f).outerHeight();j+i>g&&(f.style.left=g-i+"px");d+o>h&&(f.style.top=d-o-e(a).outerHeight()+"px");this.dom.collection.collection=f;this.dom.collection.background=l;setTimeout(function(){e(f).animate({opacity:1},500);e(l).animate({opacity:0.25}, +500)},10);this.fnResizeButtons();e(l).click(function(){c._fnCollectionHide.call(c,null,null)})},_fnCollectionHide:function(a,b){!(null!==b&&"collection"==b.sExtends)&&null!==this.dom.collection.collection&&(e(this.dom.collection.collection).animate({opacity:0},500,function(){this.style.display="none"}),e(this.dom.collection.background).animate({opacity:0},500,function(){this.parentNode.removeChild(this)}),this.dom.collection.collection=null,this.dom.collection.background=null)},_fnRowSelectConfig:function(){if(this.s.master){var a= +this,b=this.s.dt;e(b.nTable).addClass(this.classes.select.table);"os"===this.s.select.type&&(e(b.nTBody).on("mousedown.DTTT_Select","tr",function(a){if(a.shiftKey)e(b.nTBody).css("-moz-user-select","none").one("selectstart.DTTT_Select","tr",function(){return!1})}),e(b.nTBody).on("mouseup.DTTT_Select","tr",function(){e(b.nTBody).css("-moz-user-select","")}));e(b.nTBody).on("click.DTTT_Select",this.s.custom.sRowSelector,function(c){var d=this.nodeName.toLowerCase()==="tr"?this:e(this).parents("tr")[0], +f=a.s.select,j=a.s.dt.oInstance.fnGetPosition(d);if(d.parentNode==b.nTBody&&b.oInstance.fnGetData(d)!==null){if(f.type=="os")if(c.ctrlKey||c.metaKey)a.fnIsSelected(d)?a._fnRowDeselect(d,c):a._fnRowSelect(d,c);else if(c.shiftKey){var i=a.s.dt.aiDisplay.slice(),h=e.inArray(f.lastRow,i),o=e.inArray(j,i);if(a.fnGetSelected().length===0||h===-1)i.splice(e.inArray(j,i)+1,i.length);else{if(h>o)var g=o,o=h,h=g;i.splice(o+1,i.length);i.splice(0,h)}if(a.fnIsSelected(d)){i.splice(e.inArray(j,i),1);a._fnRowDeselect(i, +c)}else a._fnRowSelect(i,c)}else if(a.fnIsSelected(d)&&a.fnGetSelected().length===1)a._fnRowDeselect(d,c);else{a.fnSelectNone();a._fnRowSelect(d,c)}else if(a.fnIsSelected(d))a._fnRowDeselect(d,c);else if(f.type=="single"){a.fnSelectNone();a._fnRowSelect(d,c)}else f.type=="multi"&&a._fnRowSelect(d,c);f.lastRow=j}});b.oApi._fnCallbackReg(b,"aoRowCreatedCallback",function(c,d,f){b.aoData[f]._DTTT_selected&&e(c).addClass(a.classes.select.row)},"TableTools-SelectAll")}},_fnRowSelect:function(a,b){var c= +this._fnSelectData(a),d=[],f,j;f=0;for(j=c.length;f/g,"").replace(/^\s+|\s+$/g,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));i.push(j.join(a.sFieldSeperator))}d=!0;var m;f=this.fnGetSelectedIndexes();m=(d="none"!==this.s.select.type&&d&&0!==f.length)?f:p.Api?(new p.Api(g)).rows(a.oSelectorOpts).indexes().flatten().toArray():g.oInstance.$("tr",a.oSelectorOpts).map(function(a,b){return g.oInstance.fnGetPosition(b)}).get(); +d=0;for(f=m.length;d]+)).*?>/gi,"$1$2$3"),h=h.replace(/<.*?>/g,"")):h+="",h=h.replace(/^\s+/,"").replace(/\s+$/,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));i.push(j.join(a.sFieldSeperator));a.bOpenRows&& +(b=e.grep(g.aoOpenRows,function(a){return a.nParent===k}),1===b.length&&(h=this._fnBoundData(e("td",b[0].nTr).html(),a.sFieldBoundary,l),i.push(h)))}if(a.bFooter&&null!==g.nTFoot){j=[];b=0;for(c=g.aoColumns.length;b/g,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));i.push(j.join(a.sFieldSeperator))}return i.join(this._fnNewline(a))},_fnBoundData:function(a,b,c){return""=== +b?a:b+a.replace(c,b+b)+b},_fnChunkData:function(a,b){for(var c=[],d=a.length,f=0;f").addClass(this.classes.print.message).html(a.sMessage).prependTo("body");this.s.print.saveScroll=e(n).scrollTop();n.scrollTo(0,0);e(k).bind("keydown.DTTT",function(a){if(a.keyCode==27){a.preventDefault();b._fnPrintEnd.call(b,a)}})},_fnPrintEnd:function(){var a=this.s.dt,b=this.s.print;this._fnPrintShowNodes();if(""!==a.oScroll.sX||""!==a.oScroll.sY)e(this.s.dt.nTable).unbind("draw.DTTT_Print"), +this._fnPrintScrollEnd();n.scrollTo(0,b.saveScroll);e("div."+this.classes.print.message).remove();e(k.body).removeClass("DTTT_Print");a._iDisplayStart=b.saveStart;a._iDisplayLength=b.saveLength;a.oApi._fnCalculateEnd&&a.oApi._fnCalculateEnd(a);a.oApi._fnDraw(a);e(k).unbind("keydown.DTTT")},_fnPrintScrollStart:function(){var a=this.s.dt;a.nScrollHead.getElementsByTagName("div")[0].getElementsByTagName("table");var b=a.nTable.parentNode,c;c=a.nTable.getElementsByTagName("thead");0Table copied

    Copied "+a+" row"+(1==a?"":"s")+" to the clipboard.

    ",1500)}}),pdf:e.extend({},TableTools.buttonBase,{sAction:"flash_pdf",sNewLine:"\n",sFileName:"*.pdf",sButtonClass:"DTTT_button_pdf",sButtonText:"PDF",sPdfOrientation:"portrait",sPdfSize:"A4",sPdfMessage:"",fnClick:function(a,b,c){this.fnSetText(c,"title:"+this.fnGetTitle(b)+"\nmessage:"+b.sPdfMessage+"\ncolWidth:"+this.fnCalcColRatios(b)+ +"\norientation:"+b.sPdfOrientation+"\nsize:"+b.sPdfSize+"\n--/TableToolsOpts--\n"+this.fnGetTableData(b))}}),print:e.extend({},TableTools.buttonBase,{sInfo:"
    Print view

    Please use your browser's print function to print this table. Press escape when finished.

    ",sMessage:null,bShowAll:!0,sToolTip:"View print view",sButtonClass:"DTTT_button_print",sButtonText:"Print",fnClick:function(a,b){this.fnPrint(!0,b)}}),text:e.extend({},TableTools.buttonBase),select:e.extend({},TableTools.buttonBase, +{sButtonText:"Select button",fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)},fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}),select_single:e.extend({},TableTools.buttonBase,{sButtonText:"Select button",fnSelect:function(a){1==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)},fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}), +select_all:e.extend({},TableTools.buttonBase,{sButtonText:"Select all",fnClick:function(){this.fnSelectAll()},fnSelect:function(a){this.fnGetSelected().length==this.s.dt.fnRecordsDisplay()?e(a).addClass(this.classes.buttons.disabled):e(a).removeClass(this.classes.buttons.disabled)}}),select_none:e.extend({},TableTools.buttonBase,{sButtonText:"Deselect all",fnClick:function(){this.fnSelectNone()},fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)}, +fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}),ajax:e.extend({},TableTools.buttonBase,{sAjaxUrl:"/xhr.php",sButtonText:"Ajax button",fnClick:function(a,b){var c=this.fnGetTableData(b);e.ajax({url:b.sAjaxUrl,data:[{name:"tableData",value:c}],success:b.fnAjaxComplete,dataType:"json",type:"POST",cache:!1,error:function(){alert("Error detected when sending table data to server")}})},fnAjaxComplete:function(){alert("Ajax complete")}}),div:e.extend({},TableTools.buttonBase,{sAction:"div", +sTag:"div",sButtonClass:"DTTT_nonbutton",sButtonText:"Text button"}),collection:e.extend({},TableTools.buttonBase,{sAction:"collection",sButtonClass:"DTTT_button_collection",sButtonText:"Collection",fnClick:function(a,b){this._fnCollectionShow(a,b)}})};TableTools.buttons=TableTools.BUTTONS;TableTools.classes={container:"DTTT_container",buttons:{normal:"DTTT_button",disabled:"DTTT_disabled"},collection:{container:"DTTT_collection",background:"DTTT_collection_background",buttons:{normal:"DTTT_button", +disabled:"DTTT_disabled"}},select:{table:"DTTT_selectable",row:"DTTT_selected selected"},print:{body:"DTTT_Print",info:"DTTT_print_info",message:"DTTT_PrintMessage"}};TableTools.classes_themeroller={container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}};TableTools.DEFAULTS={sSwfPath:"../swf/copy_csv_xls_pdf.swf",sRowSelect:"none",sRowSelector:"tr",sSelectedClass:null, +fnPreRowSelect:null,fnRowSelected:null,fnRowDeselected:null,aButtons:["copy","csv","xls","pdf","print"],oTags:{container:"div",button:"a",liner:"span",collection:{container:"div",button:"a",liner:"span"}}};TableTools.defaults=TableTools.DEFAULTS;TableTools.prototype.CLASS="TableTools";TableTools.version="2.2.4";e.fn.dataTable.Api&&e.fn.dataTable.Api.register("tabletools()",function(){var a=null;05xGClFvT5MU!W&$^JmdX&}|XGlY=uhW`PC-0=)^_HnhA-|5(nKa1SmYwaND z&X!8s+uOzM>qXbwEKT3OeY;eiDb37Gp~jTI>jc`)l;dB%HWxXlGGF(sZeY1ip7UDE z?FDzQUF&-_^bbzEJQ=YyNhs(h`rH?AnN3ghaq?-F@;tr_@2L}hw)dW^w!oQgQ z-J|Q+1B874m-Ve>r2eWtXP#TJt!~TJJcIl=Vx$P+DyFA(*fhzJA`#yFoFD?}KRqID zxt5WRYExueyr9WNK1q$hvz$$O&vk94Imrdj({@v_UN5k0U%9s%un5hZST+;u7?$6) zwOy&v^{jv;4Y#voNUdHFxQ?u&?i$+(k}b^6YuU7H_7DSAzv-%eEL>+f2$80Z% z@v6J+(1=>^Cj9_AD%;>=19jPoYcOT;*+OOQWo>Cq@ei?nUHx4@U>&)^^d1&t7ba8a z-`%dd9nEsoWmhwpx8#_v=(%p7+8=netMSIc9r#kc^@{0%U>O(tM^7`{7Axv*r?k+x zUYaSFZrgDMo%t!p6g|ooGs0^jC{4elD7;sZdjhm z3}*hQPvlKc>$WZ3S6Xb-a1p797-Z~*}`gJGSrp&dSmfr{mJ5ErBAM}^}%ZW=|edt*H>k%`_hwz zwMCJaPKolch5Jh#J1?}~ry}p%Sf%K&Aj1#DV`egsIXaUo^_A7-MRdeFKhZVJg|)Wj z=Pd^}gz~&==1;V79)*q@L&FVR$gbyHt#Kd6J;U_ zcgGoD<@ZJf%eD{SyQfYungH#%# z(g>ACDV(Bkn!*_h;}p(PI7i_;g-Lke{Ys}vql;W32< z1&n!}!V?NlDLkX_E2{pQ!V5aoq@Yn~QF)U>o5HKJpxB^v(6>XurKv6zeoIABXB~7bQ&PRQISM1sXq77ARads5{V>|QldXZ4^UZ2lH{mDNCH45L?-yw zOXMIO0T~>JA&c+JRB8a}F~|Xt27%BaAo4H}Wdw*i3M4fKBz+1<2EVbgXMhZh1Ie8Q zGI$Qi(0L%kxYP(x5y&V;BP)rp{0%}$K~*!&PYTzXO5xLd{ep;~a2%ZMgNftd=Y3E- z4i@@g62bJpAuKOxkK_s#mq?Xq>^(ygmi> zFCd~O$Ye8b-oXFO`j;X?CD3kd+(x2)n`<;@&96f9O#O}!Gk53V13fn{e4xLcPkf-~ z=S5D}b9_UBxe%H;MrfgCnfSolqQ0L3yF z)3A(q7Fk6AMU{~)Ks$xJ$^%OwADXGXw-J;&vfym`h)pA#Ibt)&W;v@MYpQ$N3<3km zgra^ImN%*os^m@er+v)KVrY&>S<4h!BU2cgIe@_q5wg#ht)0gLr0X>ympw$z9U|Ac za;BhE= zqKi1~n@hef<}P7&_TQNg_6o1x*1m;_gJB*|A1FX=S-Ah_#JiR_`u^ac0QU(Q5^$?i zxK-(aMBYe0g=TgL?}_~@|AP7o>|gm~JpC9=d-aE~k4D1@Nl|^ieDMCz5NTc9GnWEA z$$ju;uN=h2Kl3T~C5E=w5^Hq`-oHapdVoj96($Im4{{dqKXB;Xg!}`}E%Ep0wI#Na zqklR$;7gC-MI~Pj%ZxN9%gxnt^HI6^xZG@%n=<~Mk@L~hrkJFmVg8kU^6PsZk^caS Gw#hVg)?W(% literal 0 HcmV?d00001 diff --git a/public/assets/plugins/datatables/extensions/TableTools/swf/copy_csv_xls_pdf.swf b/public/assets/plugins/datatables/extensions/TableTools/swf/copy_csv_xls_pdf.swf new file mode 100644 index 0000000000000000000000000000000000000000..10f6d950f851157160e6385f5adeaf5be3aafeb0 GIT binary patch literal 58846 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 NK-1vB{{!5-pq43jD?9)I literal 0 HcmV?d00001 diff --git a/public/assets/plugins/datatables/images/sort_asc.png b/public/assets/plugins/datatables/images/sort_asc.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ba61a8055fcb18273f2468d335572204667b1f GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*bWaz@5R22v2@;zYta_*?F5u6Q zWR@in#&u+WgT?Hi<}D3B3}GOXuX|8Oj3tosHiJ3*4TN zC7>_x-r1O=t(?KoTC+`+>7&2GzdqLHBg&F)2Q?&EGZ+}|Rpsc~9`m>jw35No)z4*} HQ$iB}HK{Sd literal 0 HcmV?d00001 diff --git a/public/assets/plugins/datatables/images/sort_asc_disabled.png b/public/assets/plugins/datatables/images/sort_asc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fb11dfe24a6c564cb7ddf8bc96703ebb121df1e7 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX(Vi}jAsXkC6BcOhI9!^3NY?Do zDX;f`c1`y6n0RgO@$!H7chZT&|Jn0dmaqO^XNm-CGtk!Ur<_=Jws3;%W$<+Mb6Mw<&;$T1GdZXL literal 0 HcmV?d00001 diff --git a/public/assets/plugins/datatables/images/sort_both.png b/public/assets/plugins/datatables/images/sort_both.png new file mode 100644 index 0000000000000000000000000000000000000000..af5bc7c5a10b9d6d57cb641aeec752428a07f0ca GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX6FglULp08Bycxyy87-Q;~nRxO8@-UU*I^KVWyN+&SiMHu5xDOu|HNvwzODfTdXjhVyNu1 z#7^XbGKZ7LW3XeONb$RKLeE*WhqbYpIXPIqK@r4)v+qN8um%99%MPpS9d#7Ed7SL@Bp00i_>zopr0H-Zb Aj{pDw literal 0 HcmV?d00001 diff --git a/public/assets/plugins/datatables/images/sort_desc.png b/public/assets/plugins/datatables/images/sort_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..0e156deb5f61d18f9e2ec5da4f6a8c94a5b4fb41 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*R8JSj5R22v2@yo z(czD9$NuDl3Ljm9c#_#4$vXUz=f1~&WY3aa=h!;z7fOEN>ySP9QA=6C-^Dmb&tuM= z4Z&=WZU;2WF>e%GI&mWJk^K!jrbro{W;-I>FeCfLGJl3}+Z^2)3Kw?+EoAU?^>bP0 Hl+XkKC^j|Q{b@g3TV7E(Grjn^aLC2o)_ptHrtUEoT$S@q)~)7U@V;W{6)!%@ u>N?4t-1qslpJw9!O?PJ&w0Cby .sorting_1, +table.dataTable.order-column tbody tr > .sorting_2, +table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, +table.dataTable.display tbody tr > .sorting_2, +table.dataTable.display tbody tr > .sorting_3 { + background-color: #f9f9f9; +} +table.dataTable.order-column tbody tr.selected > .sorting_1, +table.dataTable.order-column tbody tr.selected > .sorting_2, +table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, +table.dataTable.display tbody tr.selected > .sorting_2, +table.dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad4; +} +table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; +} +table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; +} +table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; +} +table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b3cd; +} +table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a7b5ce; +} +table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b6d0; +} +table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #f9f9f9; +} +table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fbfbfb; +} +table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fdfdfd; +} +table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad4; +} +table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #adbbd6; +} +table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; +} +table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { + background-color: #eaeaea; +} +table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { + background-color: #ebebeb; +} +table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { + background-color: #eeeeee; +} +table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + background-color: #a1aec7; +} +table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + background-color: #a2afc8; +} +table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + background-color: #a4b2cb; +} +table.dataTable.no-footer { + border-bottom: 1px solid #111; +} +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} +table.dataTable.compact thead th, +table.dataTable.compact thead td { + padding: 4px 17px 4px 4px; +} +table.dataTable.compact tfoot th, +table.dataTable.compact tfoot td { + padding: 4px; +} +table.dataTable.compact tbody th, +table.dataTable.compact tbody td { + padding: 4px; +} +table.dataTable th.dt-left, +table.dataTable td.dt-left { + text-align: left; +} +table.dataTable th.dt-center, +table.dataTable td.dt-center, +table.dataTable td.dataTables_empty { + text-align: center; +} +table.dataTable th.dt-right, +table.dataTable td.dt-right { + text-align: right; +} +table.dataTable th.dt-justify, +table.dataTable td.dt-justify { + text-align: justify; +} +table.dataTable th.dt-nowrap, +table.dataTable td.dt-nowrap { + white-space: nowrap; +} +table.dataTable thead th.dt-head-left, +table.dataTable thead td.dt-head-left, +table.dataTable tfoot th.dt-head-left, +table.dataTable tfoot td.dt-head-left { + text-align: left; +} +table.dataTable thead th.dt-head-center, +table.dataTable thead td.dt-head-center, +table.dataTable tfoot th.dt-head-center, +table.dataTable tfoot td.dt-head-center { + text-align: center; +} +table.dataTable thead th.dt-head-right, +table.dataTable thead td.dt-head-right, +table.dataTable tfoot th.dt-head-right, +table.dataTable tfoot td.dt-head-right { + text-align: right; +} +table.dataTable thead th.dt-head-justify, +table.dataTable thead td.dt-head-justify, +table.dataTable tfoot th.dt-head-justify, +table.dataTable tfoot td.dt-head-justify { + text-align: justify; +} +table.dataTable thead th.dt-head-nowrap, +table.dataTable thead td.dt-head-nowrap, +table.dataTable tfoot th.dt-head-nowrap, +table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} +table.dataTable tbody th.dt-body-left, +table.dataTable tbody td.dt-body-left { + text-align: left; +} +table.dataTable tbody th.dt-body-center, +table.dataTable tbody td.dt-body-center { + text-align: center; +} +table.dataTable tbody th.dt-body-right, +table.dataTable tbody td.dt-body-right { + text-align: right; +} +table.dataTable tbody th.dt-body-justify, +table.dataTable tbody td.dt-body-justify { + text-align: justify; +} +table.dataTable tbody th.dt-body-nowrap, +table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +table.dataTable, +table.dataTable th, +table.dataTable td { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* + * Control feature layout + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; +} +.dataTables_wrapper .dataTables_length { + float: left; +} +.dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; +} +.dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; +} +.dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; +} +.dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; +} +.dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; +} +.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: #333 !important; + border: 1px solid #cacaca; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); + /* IE10+ */ + background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; +} +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #111; + background-color: #585858; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #585858 0%, #111 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #585858 0%, #111 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #585858 0%, #111 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #585858 0%, #111 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #585858 0%, #111 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #2b2b2b; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); + /* W3C */ + box-shadow: inset 0 0 3px #111; +} +.dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; +} +.dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* IE10+ */ + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* Opera 11.10+ */ + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_length, +.dataTables_wrapper .dataTables_filter, +.dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_processing, +.dataTables_wrapper .dataTables_paginate { + color: #333; +} +.dataTables_wrapper .dataTables_scroll { + clear: both; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; +} +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #111; +} +.dataTables_wrapper.no-footer div.dataTables_scrollHead table, +.dataTables_wrapper.no-footer div.dataTables_scrollBody table { + border-bottom: none; +} +.dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_info, + .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } +} +@media screen and (max-width: 640px) { + .dataTables_wrapper .dataTables_length, + .dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; + } +} diff --git a/public/assets/plugins/datatables/jquery.dataTables.js b/public/assets/plugins/datatables/jquery.dataTables.js new file mode 100644 index 00000000..2a9bdb36 --- /dev/null +++ b/public/assets/plugins/datatables/jquery.dataTables.js @@ -0,0 +1,14951 @@ +/*! DataTables 1.10.7 + * ©2008-2014 SpryMedia Ltd - datatables.net/license + */ + +/** + * @summary DataTables + * @description Paginate, search and order HTML tables + * @version 1.10.7 + * @file jquery.dataTables.js + * @author SpryMedia Ltd (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * @copyright Copyright 2008-2014 SpryMedia Ltd. + * + * This source file is free software, available under the following license: + * MIT license - http://datatables.net/license + * + * This source file 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 license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +/*jslint evil: true, undef: true, browser: true */ +/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnScrollBarWidth,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/ + +(/** @lends */function( window, document, undefined ) { + +(function( factory ) { + "use strict"; + + if ( typeof define === 'function' && define.amd ) { + // Define as an AMD module if possible + define( 'datatables', ['jquery'], factory ); + } + else if ( typeof exports === 'object' ) { + // Node/CommonJS + module.exports = factory( require( 'jquery' ) ); + } + else if ( jQuery && !jQuery.fn.dataTable ) { + // Define using browser globals otherwise + // Prevent multiple instantiations if the script is loaded twice + factory( jQuery ); + } +} +(/** @lends */function( $ ) { + "use strict"; + + /** + * DataTables is a plug-in for the jQuery Javascript library. It is a highly + * flexible tool, based upon the foundations of progressive enhancement, + * which will add advanced interaction controls to any HTML table. For a + * full list of features please refer to + * [DataTables.net](href="http://datatables.net). + * + * Note that the `DataTable` object is not a global variable but is aliased + * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may + * be accessed. + * + * @class + * @param {object} [init={}] Configuration object for DataTables. Options + * are defined by {@link DataTable.defaults} + * @requires jQuery 1.7+ + * + * @example + * // Basic initialisation + * $(document).ready( function { + * $('#example').dataTable(); + * } ); + * + * @example + * // Initialisation with configuration options - in this case, disable + * // pagination and sorting. + * $(document).ready( function { + * $('#example').dataTable( { + * "paginate": false, + * "sort": false + * } ); + * } ); + */ + var DataTable; + + + /* + * It is useful to have variables which are scoped locally so only the + * DataTables functions can access them and they don't leak into global space. + * At the same time these functions are often useful over multiple files in the + * core and API, so we list, or at least document, all variables which are used + * by DataTables as private variables here. This also ensures that there is no + * clashing of variable names and that they can easily referenced for reuse. + */ + + + // Defined else where + // _selector_run + // _selector_opts + // _selector_first + // _selector_row_indexes + + var _ext; // DataTable.ext + var _Api; // DataTable.Api + var _api_register; // DataTable.Api.register + var _api_registerPlural; // DataTable.Api.registerPlural + + var _re_dic = {}; + var _re_new_lines = /[\r\n]/g; + var _re_html = /<.*?>/g; + var _re_date_start = /^[\w\+\-]/; + var _re_date_end = /[\w\+\-]$/; + + // Escape regular expression special characters + var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' ); + + // http://en.wikipedia.org/wiki/Foreign_exchange_market + // - \u20BD - Russian ruble. + // - \u20a9 - South Korean Won + // - \u20BA - Turkish Lira + // - \u20B9 - Indian Rupee + // - R - Brazil (R$) and South Africa + // - fr - Swiss Franc + // - kr - Swedish krona, Norwegian krone and Danish krone + // - \u2009 is thin space and \u202F is narrow no-break space, both used in many + // standards as thousands separators. + var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi; + + + var _empty = function ( d ) { + return !d || d === true || d === '-' ? true : false; + }; + + + var _intVal = function ( s ) { + var integer = parseInt( s, 10 ); + return !isNaN(integer) && isFinite(s) ? integer : null; + }; + + // Convert from a formatted number with characters other than `.` as the + // decimal place, to a Javascript number + var _numToDecimal = function ( num, decimalPoint ) { + // Cache created regular expressions for speed as this function is called often + if ( ! _re_dic[ decimalPoint ] ) { + _re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' ); + } + return typeof num === 'string' && decimalPoint !== '.' ? + num.replace( /\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) : + num; + }; + + + var _isNumber = function ( d, decimalPoint, formatted ) { + var strType = typeof d === 'string'; + + // If empty return immediately so there must be a number if it is a + // formatted string (this stops the string "k", or "kr", etc being detected + // as a formatted number for currency + if ( _empty( d ) ) { + return true; + } + + if ( decimalPoint && strType ) { + d = _numToDecimal( d, decimalPoint ); + } + + if ( formatted && strType ) { + d = d.replace( _re_formatted_numeric, '' ); + } + + return !isNaN( parseFloat(d) ) && isFinite( d ); + }; + + + // A string without HTML in it can be considered to be HTML still + var _isHtml = function ( d ) { + return _empty( d ) || typeof d === 'string'; + }; + + + var _htmlNumeric = function ( d, decimalPoint, formatted ) { + if ( _empty( d ) ) { + return true; + } + + var html = _isHtml( d ); + return ! html ? + null : + _isNumber( _stripHtml( d ), decimalPoint, formatted ) ? + true : + null; + }; + + + var _pluck = function ( a, prop, prop2 ) { + var out = []; + var i=0, ien=a.length; + + // Could have the test in the loop for slightly smaller code, but speed + // is essential here + if ( prop2 !== undefined ) { + for ( ; i') + .css( { + position: 'absolute', + top: 0, + left: 0, + height: 1, + width: 1, + overflow: 'hidden' + } ) + .append( + $('
      ') + .css( { + position: 'absolute', + top: 1, + left: 1, + width: 100, + overflow: 'scroll' + } ) + .append( + $('
      ') + .css( { + width: '100%', + height: 10 + } ) + ) + ) + .appendTo( 'body' ); + + var test = n.find('.test'); + + // IE6/7 will oversize a width 100% element inside a scrolling element, to + // include the width of the scrollbar, while other browsers ensure the inner + // element is contained without forcing scrolling + browser.bScrollOversize = test[0].offsetWidth === 100; + + // In rtl text layout, some browsers (most, but not all) will place the + // scrollbar on the left, rather than the right. + browser.bScrollbarLeft = Math.round( test.offset().left ) !== 1; + + n.remove(); + } + + + /** + * Array.prototype reduce[Right] method, used for browsers which don't support + * JS 1.6. Done this way to reduce code size, since we iterate either way + * @param {object} settings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnReduce ( that, fn, init, start, end, inc ) + { + var + i = start, + value, + isSet = false; + + if ( init !== undefined ) { + value = init; + isSet = true; + } + + while ( i !== end ) { + if ( ! that.hasOwnProperty(i) ) { + continue; + } + + value = isSet ? + fn( value, that[i], i, that ) : + that[i]; + + isSet = true; + i += inc; + } + + return value; + } + + /** + * Add a column to the list used for the table with default values + * @param {object} oSettings dataTables settings object + * @param {node} nTh The th element for this column + * @memberof DataTable#oApi + */ + function _fnAddColumn( oSettings, nTh ) + { + // Add column to aoColumns array + var oDefaults = DataTable.defaults.column; + var iCol = oSettings.aoColumns.length; + var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { + "nTh": nTh ? nTh : document.createElement('th'), + "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', + "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], + "mData": oDefaults.mData ? oDefaults.mData : iCol, + idx: iCol + } ); + oSettings.aoColumns.push( oCol ); + + // Add search object for column specific search. Note that the `searchCols[ iCol ]` + // passed into extend can be undefined. This allows the user to give a default + // with only some of the parameters defined, and also not give a default + var searchCols = oSettings.aoPreSearchCols; + searchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] ); + + // Use the default column options function to initialise classes etc + _fnColumnOptions( oSettings, iCol, $(nTh).data() ); + } + + + /** + * Apply options for a column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column index to consider + * @param {object} oOptions object with sType, bVisible and bSearchable etc + * @memberof DataTable#oApi + */ + function _fnColumnOptions( oSettings, iCol, oOptions ) + { + var oCol = oSettings.aoColumns[ iCol ]; + var oClasses = oSettings.oClasses; + var th = $(oCol.nTh); + + // Try to get width information from the DOM. We can't get it from CSS + // as we'd need to parse the CSS stylesheet. `width` option can override + if ( ! oCol.sWidthOrig ) { + // Width attribute + oCol.sWidthOrig = th.attr('width') || null; + + // Style attribute + var t = (th.attr('style') || '').match(/width:\s*(\d+[pxem%]+)/); + if ( t ) { + oCol.sWidthOrig = t[1]; + } + } + + /* User specified column options */ + if ( oOptions !== undefined && oOptions !== null ) + { + // Backwards compatibility + _fnCompatCols( oOptions ); + + // Map camel case parameters to their Hungarian counterparts + _fnCamelToHungarian( DataTable.defaults.column, oOptions ); + + /* Backwards compatibility for mDataProp */ + if ( oOptions.mDataProp !== undefined && !oOptions.mData ) + { + oOptions.mData = oOptions.mDataProp; + } + + if ( oOptions.sType ) + { + oCol._sManualType = oOptions.sType; + } + + // `class` is a reserved word in Javascript, so we need to provide + // the ability to use a valid name for the camel case input + if ( oOptions.className && ! oOptions.sClass ) + { + oOptions.sClass = oOptions.className; + } + + $.extend( oCol, oOptions ); + _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); + + /* iDataSort to be applied (backwards compatibility), but aDataSort will take + * priority if defined + */ + if ( oOptions.iDataSort !== undefined ) + { + oCol.aDataSort = [ oOptions.iDataSort ]; + } + _fnMap( oCol, oOptions, "aDataSort" ); + } + + /* Cache the data get and set functions for speed */ + var mDataSrc = oCol.mData; + var mData = _fnGetObjectDataFn( mDataSrc ); + var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null; + + var attrTest = function( src ) { + return typeof src === 'string' && src.indexOf('@') !== -1; + }; + oCol._bAttrSrc = $.isPlainObject( mDataSrc ) && ( + attrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter) + ); + + oCol.fnGetData = function (rowData, type, meta) { + var innerData = mData( rowData, type, undefined, meta ); + + return mRender && type ? + mRender( innerData, type, rowData, meta ) : + innerData; + }; + oCol.fnSetData = function ( rowData, val, meta ) { + return _fnSetObjectDataFn( mDataSrc )( rowData, val, meta ); + }; + + // Indicate if DataTables should read DOM data as an object or array + // Used in _fnGetRowElements + if ( typeof mDataSrc !== 'number' ) { + oSettings._rowReadObject = true; + } + + /* Feature sorting overrides column specific when off */ + if ( !oSettings.oFeatures.bSort ) + { + oCol.bSortable = false; + th.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called + } + + /* Check that the class assignment is correct for sorting */ + var bAsc = $.inArray('asc', oCol.asSorting) !== -1; + var bDesc = $.inArray('desc', oCol.asSorting) !== -1; + if ( !oCol.bSortable || (!bAsc && !bDesc) ) + { + oCol.sSortingClass = oClasses.sSortableNone; + oCol.sSortingClassJUI = ""; + } + else if ( bAsc && !bDesc ) + { + oCol.sSortingClass = oClasses.sSortableAsc; + oCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed; + } + else if ( !bAsc && bDesc ) + { + oCol.sSortingClass = oClasses.sSortableDesc; + oCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed; + } + else + { + oCol.sSortingClass = oClasses.sSortable; + oCol.sSortingClassJUI = oClasses.sSortJUI; + } + } + + + /** + * Adjust the table column widths for new data. Note: you would probably want to + * do a redraw after calling this function! + * @param {object} settings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnAdjustColumnSizing ( settings ) + { + /* Not interested in doing column width calculation if auto-width is disabled */ + if ( settings.oFeatures.bAutoWidth !== false ) + { + var columns = settings.aoColumns; + + _fnCalculateColumnWidths( settings ); + for ( var i=0 , iLen=columns.length ; i