rt-4.4.4/0000755000175000017500000000000014006075255010274 5ustar domdomrt-4.4.4/devel/0000755000175000017500000000000014006075255011373 5ustar domdomrt-4.4.4/devel/third-party/0000755000175000017500000000000014006075352013640 5ustar domdomrt-4.4.4/devel/third-party/jquery-modal-0.5.2.js0000644000175000017500000001441613437512115017255 0ustar domdom/* A simple jQuery modal (http://github.com/kylefox/jquery-modal) Version 0.5.2 Copyright (c) 2012 Kyle Fox 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. */ (function($) { var current = null; $.modal = function(el, options) { $.modal.close(); // Close any open modals. var remove, target; this.$body = $('body'); this.options = $.extend({}, $.modal.defaults, options); if (el.is('a')) { target = el.attr('href'); //Select element by id from href if (/^#/.test(target)) { this.$elm = $(target); if (this.$elm.length !== 1) return null; this.open(); //AJAX } else { this.$elm = $('
'); this.$body.append(this.$elm); remove = function(event, modal) { modal.elm.remove(); }; this.showSpinner(); el.trigger($.modal.AJAX_SEND); $.get(target).done(function(html) { if (!current) return; el.trigger($.modal.AJAX_SUCCESS); current.$elm.empty().append(html).on($.modal.CLOSE, remove); current.hideSpinner(); current.open(); el.trigger($.modal.AJAX_COMPLETE); }).fail(function() { el.trigger($.modal.AJAX_FAIL); current.hideSpinner(); el.trigger($.modal.AJAX_COMPLETE); }); } } else { this.$elm = el; this.open(); } }; $.modal.prototype = { constructor: $.modal, open: function() { this.block(); this.show(); if (this.options.escapeClose) { $(document).on('keydown.modal', function(event) { if (event.which == 27) $.modal.close(); }); } if (this.options.clickClose) this.blocker.click($.modal.close); }, close: function() { this.unblock(); this.hide(); $(document).off('keydown.modal'); }, block: function() { this.$elm.trigger($.modal.BEFORE_BLOCK, [this._ctx()]); this.blocker = $('
').css({ top: 0, right: 0, bottom: 0, left: 0, width: "100%", height: "100%", position: "fixed", zIndex: this.options.zIndex, background: this.options.overlay, opacity: this.options.opacity }); this.$body.append(this.blocker); this.$elm.trigger($.modal.BLOCK, [this._ctx()]); }, unblock: function() { this.blocker.remove(); }, show: function() { this.$elm.trigger($.modal.BEFORE_OPEN, [this._ctx()]); if (this.options.showClose) { this.closeButton = $('' + this.options.closeText + ''); this.$elm.append(this.closeButton); } this.$elm.addClass(this.options.modalClass + ' current'); this.center(); this.$elm.show().trigger($.modal.OPEN, [this._ctx()]); }, hide: function() { this.$elm.trigger($.modal.BEFORE_CLOSE, [this._ctx()]); if (this.closeButton) this.closeButton.remove(); this.$elm.removeClass('current').hide(); this.$elm.trigger($.modal.CLOSE, [this._ctx()]); }, showSpinner: function() { if (!this.options.showSpinner) return; this.spinner = this.spinner || $('
') .append(this.options.spinnerHtml); this.$body.append(this.spinner); this.spinner.show(); }, hideSpinner: function() { if (this.spinner) this.spinner.remove(); }, center: function() { this.$elm.css({ position: 'fixed', top: "50%", left: "50%", marginTop: - (this.$elm.outerHeight() / 2), marginLeft: - (this.$elm.outerWidth() / 2), zIndex: this.options.zIndex + 1 }); }, //Return context for custom events _ctx: function() { return { elm: this.$elm, blocker: this.blocker, options: this.options }; } }; //resize is alias for center for now $.modal.prototype.resize = $.modal.prototype.center; $.modal.close = function(event) { if (!current) return; if (event) event.preventDefault(); current.close(); current = null; }; $.modal.resize = function() { if (!current) return; current.resize(); }; $.modal.defaults = { overlay: "#000", opacity: 0.75, zIndex: 1, escapeClose: true, clickClose: true, closeText: 'Close', modalClass: "modal", spinnerHtml: null, showSpinner: true, showClose: true }; // Event constants $.modal.BEFORE_BLOCK = 'modal:before-block'; $.modal.BLOCK = 'modal:block'; $.modal.BEFORE_OPEN = 'modal:before-open'; $.modal.OPEN = 'modal:open'; $.modal.BEFORE_CLOSE = 'modal:before-close'; $.modal.CLOSE = 'modal:close'; $.modal.AJAX_SEND = 'modal:ajax:send'; $.modal.AJAX_SUCCESS = 'modal:ajax:success'; $.modal.AJAX_FAIL = 'modal:ajax:fail'; $.modal.AJAX_COMPLETE = 'modal:ajax:complete'; $.fn.modal = function(options){ if (this.length === 1) { current = new $.modal(this, options); } return this; }; // Automatically bind links with rel="modal:close" to, well, close the modal. $(document).on('click.modal', 'a[rel="modal:close"]', $.modal.close); $(document).on('click.modal', 'a[rel="modal:open"]', function(event) { event.preventDefault(); $(this).modal(); }); })(jQuery); rt-4.4.4/devel/third-party/ckeditor-src/0000755000175000017500000000000014006075352016231 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/.gitattributes0000644000175000017500000000030513776355015021134 0ustar domdom* text=auto *.htaccess eol=lf *.cgi eol=lf *.sh eol=lf *.css text *.htm text *.html text *.js text *.json text *.php text *.txt text *.md text *.png -text *.gif -text *.jpg -text rt-4.4.4/devel/third-party/ckeditor-src/gruntfile.js0000644000175000017500000000335314006075350020570 0ustar domdom/* jshint node: true, browser: false, es3: false */ 'use strict'; module.exports = function( grunt ) { // First register the "default" task, so it can be analyzed by other tasks. grunt.registerTask( 'default', [ 'jshint:git', 'jscs:git' ] ); // Files that will be ignored by the "jscs" and "jshint" tasks. var ignoreFiles = [ // Automatically loaded from .gitignore. Add more if necessary. 'lang/**', 'plugins/*/lib/**', 'plugins/**/lang/**', 'plugins/uicolor/yui/**', 'plugins/htmlwriter/samples/assets/outputforflash/**', 'samples/toolbarconfigurator/lib/**', 'tests/adapters/jquery/_assets/**', 'tests/core/dom/_assets/**', 'tests/core/selection/_helpers/rangy.js' ]; // Basic configuration which will be overloaded by the tasks. grunt.initConfig( { pkg: grunt.file.readJSON( 'package.json' ), jshint: { options: { ignores: ignoreFiles } }, jscs: { options: { excludeFiles: ignoreFiles } }, plugin: { externalDir: '../ckeditor-plugins/', installationDir: 'plugins/' }, imagemin: { plugins: { files: [ { expand: true, cwd: '.', src: [ 'plugins/*/images/**/*.{png,jpg,gif}' ] } ] }, skins: { files: [ { expand: true, cwd: '.', src: [ 'skins/*/images/**/*.{png,jpg,gif}' ] } ] }, samples: { files: [ { expand: true, cwd: '.', src: [ 'samples/**/*.{png,jpg,gif}', 'plugins/*/samples/**/*.{png,jpg,gif}' ] } ] } } } ); // Finally load the tasks. grunt.loadTasks( 'dev/tasks' ); grunt.loadNpmTasks( 'grunt-contrib-imagemin' ); grunt.registerTask( 'images', 'Optimizes images which are not processed later by the CKBuilder (i.e. icons).', [ 'imagemin' ] ); }; rt-4.4.4/devel/third-party/ckeditor-src/styles.js0000644000175000017500000000671114006075351020116 0ustar domdom/** * @license Copyright (c) 2003-2015, 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' } } ] ); // %LEAVE_UNMINIFIED% %REMOVE_LINE% rt-4.4.4/devel/third-party/ckeditor-src/samples/0000755000175000017500000000000014006075351017674 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/old/0000755000175000017500000000000014006075351020452 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/old/ajax.html0000644000175000017500000000507514006075351022272 0ustar domdom Ajax — CKEditor Sample

CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing area will be displayed in a <div> element.

For details of how to create this setup check the source code of this sample page for JavaScript code responsible for the creation and destruction of a CKEditor instance.

Click the buttons to create and remove a CKEditor instance.

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/sample.js0000644000175000017500000000320314006075351022267 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ // Tool scripts for the sample pages. // This file can be ignored and is not required to make use of CKEditor. ( function() { CKEDITOR.on( 'instanceReady', function( ev ) { // Check for sample compliance. var editor = ev.editor, meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], missing = [], i; if ( requires.length ) { for ( i = 0; i < requires.length; i++ ) { if ( !editor.plugins[ requires[ i ] ] ) missing.push( '' + requires[ i ] + '' ); } if ( missing.length ) { var warn = CKEDITOR.dom.element.createFromHtml( '
' + 'To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.' + '
' ); warn.insertBefore( editor.container ); } } // Set icons. var doc = new CKEDITOR.dom.document( document ), icons = doc.find( '.button_icon' ); for ( i = 0; i < icons.count(); i++ ) { var icon = icons.getItem( i ), name = icon.getAttribute( 'data-icon' ), style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); icon.addClass( 'cke_button_icon' ); icon.addClass( 'cke_button__' + name + '_icon' ); icon.setAttribute( 'style', style ); icon.setStyle( 'float', 'none' ); } } ); } )(); // %LEAVE_UNMINIFIED% %REMOVE_LINE% rt-4.4.4/devel/third-party/ckeditor-src/samples/old/replacebyclass.html0000644000175000017500000001544714006075351024347 0ustar domdom Replace Textareas by Class Name — CKEditor Sample

CKEditor Samples » Replace Textarea Elements by Class Name

This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

This sample shows how to automatically replace all <textarea> elements of a given class with a CKEditor instance.

To replace a <textarea> element, simply assign it the ckeditor class, as in the code below:

<textarea class="ckeditor" name="editor1"></textarea>

Note that other <textarea> attributes (like id or name) need to be adjusted to your document.

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/inlinetextarea.html0000644000175000017500000001130714006075351024356 0ustar domdom Replace Textarea with Inline Editor — CKEditor Sample

CKEditor Samples » Replace Textarea with Inline Editor

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

You can also create an inline editor from a textarea element. In this case the textarea will be replaced by a div element with inline editing enabled.

// "article-body" is the name of a textarea element.
var editor = CKEDITOR.inline( 'article-body' );

This is a sample form with some fields

Title:

Article Body (Textarea converted to CKEditor):

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/readonly.html0000644000175000017500000000537214006075351023164 0ustar domdom Using the CKEditor Read-Only API — CKEditor Sample

CKEditor Samples » Using the CKEditor Read-Only API

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how to use the setReadOnly API to put editor into the read-only state that makes it impossible for users to change the editor contents.

For details on how to create this setup check the source code of this sample page.

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/xhtmlstyle.html0000644000175000017500000001521114006075351023555 0ustar domdom XHTML Compliant Output — CKEditor Sample

CKEditor Samples » Producing XHTML Compliant Output

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how to configure CKEditor to output valid XHTML 1.1 code. Deprecated elements (<font>, <u>) or attributes (size, face) will be replaced with XHTML compliant code.

To add a CKEditor instance outputting valid XHTML code, load the editor using a standard JavaScript call and define CKEditor features to use the XHTML compliant elements and styles.

A snippet of the configuration code can be seen below; check the source of this page for full definition:

CKEDITOR.replace( 'textarea_id', {
	contentsCss: 'assets/outputxhtml.css',

	coreStyles_bold: {
		element: 'span',
		attributes: { 'class': 'Bold' }
	},
	coreStyles_italic: {
		element: 'span',
		attributes: { 'class': 'Italic' }
	},

	...
});

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/inlinebycode.html0000644000175000017500000001366214006075351024014 0ustar domdom Inline Editing by Code — CKEditor Sample

CKEditor Samples » Inline Editing by Code

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how to create an inline editor instance of CKEditor. It is created with a JavaScript call using the following code:

// This property tells CKEditor to not activate every element with contenteditable=true element.
CKEDITOR.disableAutoInline = true;

var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );

Note that editable in the code above is the id attribute of the <div> element to be converted into an inline instance.

Saturn V carrying Apollo 11 Apollo 11

Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

Broadcasting and quotes

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

One small step for [a] man, one giant leap for mankind.

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

Technical details

Mission crew
Position Astronaut
Commander Neil A. Armstrong
Command Module Pilot Michael Collins
Lunar Module Pilot Edwin "Buzz" E. Aldrin, Jr.

Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

  1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
  2. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
  3. Lunar Module for landing on the Moon.

After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.


Source: Wikipedia.org

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/uicolor.html0000644000175000017500000000474414006075351023025 0ustar domdom UI Color Picker — CKEditor Sample

CKEditor Samples » UI Color

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how to automatically replace <textarea> elements with a CKEditor instance with an option to change the color of its user interface.
Note:The UI skin color feature depends on the CKEditor skin compatibility. The Moono and Kama skins are examples of skins that work with it.

This editor instance has a UI color value defined in configuration to change the skin color, To specify the color of the user interface, set the uiColor property:

CKEDITOR.replace( 'textarea_id', {
	uiColor: '#14B8C4'
});

Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/tabindex.html0000644000175000017500000000442614006075351023144 0ustar domdom TAB Key-Based Navigation — CKEditor Sample

CKEditor Samples » TAB Key-Based Navigation

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how tab key navigation among editor instances is affected by the tabIndex attribute from the original page element. Use TAB key to move between the editors.

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/divreplace.html0000644000175000017500000001065614006075351023466 0ustar domdom Replace DIV — CKEditor Sample

CKEditor Samples » Replace DIV with CKEditor on the Fly

This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

This sample shows how to automatically replace <div> elements with a CKEditor instance on the fly, following user's doubleclick. The content that was previously placed inside the <div> element will now be moved into CKEditor editing area.

For details on how to create this setup check the source code of this sample page.

Double-click any of the following <div> elements to transform them into editor instances.

Part 1

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.

Part 2

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.

Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate.

Part 3

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/inlineall.html0000644000175000017500000002323114006075351023310 0ustar domdom Massive inline editing — CKEditor Sample

CKEditor Samples » Massive inline editing

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

<div contenteditable="true" > ... </div>

Click inside of any element below to start editing.

Fusce vitae porttitor

Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor.

Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat.

Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum

Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu.

Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

Integer condimentum sit amet

Aenean nonummy a, mattis varius. Cras aliquet. Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

Praesent wisi accumsan sit amet nibh

Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

CKEditor logo

Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

Nullam laoreet vel consectetuer tellus suscipit

  • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
  • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
  • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

Tags of this article:

inline, editing, floating, CKEditor

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/index.html0000644000175000017500000002154114006075351022452 0ustar domdom CKEditor Samples

CKEditor Samples

These samples are not maintained anymore. Check out the brand new samples in CKEditor SDK.

Basic Samples

Replace textarea elements by class name
Automatic replacement of all textarea elements of a given class with a CKEditor instance.
Replace textarea elements by code
Replacement of textarea elements with CKEditor instances by using a JavaScript call.
Create editors with jQuery
Creating standard and inline CKEditor instances with jQuery adapter.

Basic Customization

User Interface color
Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
User Interface languages
Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.

Plugins

New Image plugin New!
Using the new Image plugin to insert captioned images and adjust their dimensions.
Mathematics plugin New!
Create mathematical equations in TeX and display them in visual form.
Code Snippet plugin New!
View and modify code using the Code Snippet plugin.
Editing source code in a dialog
Editing HTML content of both inline and classic editor instances.
Shared-Space plugin
Having the toolbar and the bottom bar spaces shared by different editor instances.
AutoGrow plugin
Using the AutoGrow plugin in order to make the editor grow to fit the size of its content.
Output for BBCode
Configuring CKEditor to produce BBCode tags instead of HTML.
Full page support
CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.
Stylesheet Parser plugin
Using the Stylesheet Parser plugin to fill the Styles drop-down list based on the CSS classes available in the document stylesheet.
Developer Tools plugin
Using the Developer Tools plugin to display information about dialog window UI elements to allow for easier customization.
Placeholder plugin
Using the Placeholder plugin to create uneditable sections that can only be created and modified with a proper dialog window.
TableResize plugin
Using the TableResize plugin to enable table column resizing.
Magicline plugin
Using the Magicline plugin to access difficult focus spaces.
Document Properties plugin
Manage various page meta data with a dialog.
UIColor plugin
Using the UIColor plugin to pick up skin color.

Inline Editing

Massive inline editor creation
Turn all elements with contentEditable = true attribute into inline editors.
Convert element into an inline editor by code
Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
Replace textarea with inline editor New!
A form with a textarea that is replaced by an inline editor at runtime.

Advanced Samples

Data filtering and features activation New!
Data filtering and automatic features activation basing on configuration.
Replace DIV elements on the fly
Transforming a div element into an instance of CKEditor with a mouse click.
Append editor instances
Appending editor instances to existing DOM elements.
Create and destroy editor instances for Ajax applications
Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
Basic usage of the API
Using the CKEditor JavaScript API to interact with the editor at runtime.
XHTML-compliant style
Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
Read-only mode
Using the readOnly API to block introducing changes to the editor contents.
"Tab" key-based navigation
Navigating among editor instances with tab key.
Replace textarea with a "DIV-based" editor
Using div instead of iframe for rich editing.
Using the JavaScript API to customize dialog windows
Using the dialog windows API to customize dialog windows without changing the original editor code.
Using the "Enter" key in CKEditor
Configuring the behavior of Enter and Shift+Enter keys.
Toolbar configuration
Configuring CKEditor to display full or custom toolbar layout.
Output HTML
Configuring CKEditor to produce legacy HTML 4 code.
Output for Flash
Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
rt-4.4.4/devel/third-party/ckeditor-src/samples/old/appendto.html0000644000175000017500000000423014006075351023151 0ustar domdom Append To Page Element Using JavaScript Code — CKEditor Sample

CKEditor Samples » Append To Page Element Using JavaScript Code

This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

The CKEDITOR.appendTo() method serves to to place editors inside existing DOM elements. Unlike CKEDITOR.replace(), a target container to be replaced is no longer necessary. A new editor instance is inserted directly wherever it is desired.

CKEDITOR.appendTo( 'container_id',
	{ /* Configuration options to be used. */ }
	'Editor content to be used.'
);

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/replacebycode.html0000644000175000017500000001531214006075351024143 0ustar domdom Replace Textarea by Code — CKEditor Sample

CKEditor Samples » Replace Textarea Elements Using JavaScript Code

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin.

CKEDITOR.replace( 'textarea_id' )

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/sample.css0000644000175000017500000001120114006075351022440 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre { line-height: 1.5; } body { padding: 10px 30px; } input, textarea, select, option, optgroup, button, td, th { font-size: 100%; } pre { -moz-tab-size: 4; tab-size: 4; } pre, code, kbd, samp, tt { font-family: monospace,monospace; font-size: 1em; } body { width: 960px; margin: 0 auto; } code { background: #f3f3f3; border: 1px solid #ddd; padding: 1px 4px; border-radius: 3px; } abbr { border-bottom: 1px dotted #555; cursor: pointer; } .new, .beta { text-transform: uppercase; font-size: 10px; font-weight: bold; padding: 1px 4px; margin: 0 0 0 5px; color: #fff; float: right; border-radius: 3px; } .new { background: #FF7E00; border: 1px solid #DA8028; text-shadow: 0 1px 0 #C97626; box-shadow: 0 2px 3px 0 #FFA54E inset; } .beta { background: #18C0DF; border: 1px solid #19AAD8; text-shadow: 0 1px 0 #048CAD; font-style: italic; box-shadow: 0 2px 3px 0 #50D4FD inset; } h1.samples { color: #0782C1; font-size: 200%; font-weight: normal; margin: 0; padding: 0; } h1.samples a { color: #0782C1; text-decoration: none; border-bottom: 1px dotted #0782C1; } .samples a:hover { border-bottom: 1px dotted #0782C1; } h2.samples { color: #000000; font-size: 130%; margin: 15px 0 0 0; padding: 0; } p, blockquote, address, form, pre, dl, h1.samples, h2.samples { margin-bottom: 15px; } ul.samples { margin-bottom: 15px; } .clear { clear: both; } fieldset { margin: 0; padding: 10px; } body, input, textarea { color: #333333; font-family: Arial, Helvetica, sans-serif; } body { font-size: 75%; } a.samples { color: #189DE1; text-decoration: none; } form { margin: 0; padding: 0; } pre.samples { background-color: #F7F7F7; border: 1px solid #D7D7D7; overflow: auto; padding: 0.25em; white-space: pre-wrap; /* CSS 2.1 */ word-wrap: break-word; /* IE7 */ } #footer { clear: both; padding-top: 10px; } #footer hr { margin: 10px 0 15px 0; height: 1px; border: solid 1px gray; border-bottom: none; } #footer p { margin: 0 10px 10px 10px; float: left; } #footer #copy { float: right; } #outputSample { width: 100%; table-layout: fixed; } #outputSample thead th { color: #dddddd; background-color: #999999; padding: 4px; white-space: nowrap; } #outputSample tbody th { vertical-align: top; text-align: left; } #outputSample pre { margin: 0; padding: 0; } .description { border: 1px dotted #B7B7B7; margin-bottom: 10px; padding: 10px 10px 0; overflow: hidden; } label { display: block; margin-bottom: 6px; } /** * CKEditor editables are automatically set with the "cke_editable" class * plus cke_editable_(inline|themed) depending on the editor type. */ /* Style a bit the inline editables. */ .cke_editable.cke_editable_inline { cursor: pointer; } /* Once an editable element gets focused, the "cke_focus" class is added to it, so we can style it differently. */ .cke_editable.cke_editable_inline.cke_focus { box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; outline: none; background: #eee; cursor: text; } /* Avoid pre-formatted overflows inline editable. */ .cke_editable_inline pre { white-space: pre-wrap; word-wrap: break-word; } /** * Samples index styles. */ .twoColumns, .twoColumnsLeft, .twoColumnsRight { overflow: hidden; } .twoColumnsLeft, .twoColumnsRight { width: 45%; } .twoColumnsLeft { float: left; } .twoColumnsRight { float: right; } dl.samples { padding: 0 0 0 40px; } dl.samples > dt { display: list-item; list-style-type: disc; list-style-position: outside; margin: 0 0 3px; } dl.samples > dd { margin: 0 0 3px; } .warning { color: #ff0000; background-color: #FFCCBA; border: 2px dotted #ff0000; padding: 15px 10px; margin: 10px 0; } .warning.deprecated { font-size: 1.3em; } /* Used on inline samples */ blockquote { font-style: italic; font-family: Georgia, Times, "Times New Roman", serif; padding: 2px 0; border-style: solid; border-color: #ccc; border-width: 0; } .cke_contents_ltr blockquote { padding-left: 20px; padding-right: 8px; border-left-width: 5px; } .cke_contents_rtl blockquote { padding-left: 8px; padding-right: 20px; border-right-width: 5px; } img.right { border: 1px solid #ccc; float: right; margin-left: 15px; padding: 5px; } img.left { border: 1px solid #ccc; float: left; margin-right: 15px; padding: 5px; } .marker { background-color: Yellow; } rt-4.4.4/devel/third-party/ckeditor-src/samples/old/sample_posteddata.php0000644000175000017500000000140514006075351024654 0ustar domdom

-------------------------------------------------------------------------------------------
  CKEditor - Posted Data

  We are sorry, but your Web server does not support the PHP language used in this script.

  Please note that CKEditor can be used with any other server-side language than just PHP.
  To save the content created with CKEditor you need to read the POST data on the server
  side and write it to a file or the database.

  Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or http://ckeditor.com/license
-------------------------------------------------------------------------------------------

*/ include "assets/posteddata.php"; ?> rt-4.4.4/devel/third-party/ckeditor-src/samples/old/uilanguages.html0000644000175000017500000001042514006075351023646 0ustar domdom User Interface Globalization — CKEditor Sample

CKEditor Samples » User Interface Languages

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how to automatically replace <textarea> elements with a CKEditor instance with an option to change the language of its user interface.

It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates a drop-down list that lets the user change the UI language.

By default, CKEditor automatically localizes the editor to the language of the user. The UI language can be controlled with two configuration options: language and defaultLanguage. The defaultLanguage setting specifies the default CKEditor language to be used when a localization suitable for user's settings is not available.

To specify the user interface language that will be used no matter what language is specified in user's browser or operating system, set the language property:

CKEDITOR.replace( 'textarea_id', {
	// Load the German interface.
	language: 'de'
});

Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

Available languages ( languages!):

(You may see strange characters if your system does not support the selected language)

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/jquery.html0000644000175000017500000001636014006075351022665 0ustar domdom jQuery Adapter — CKEditor Sample

CKEditor Samples » Create Editors with jQuery

This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

This sample shows how to use the jQuery adapter. Note that you have to include both CKEditor and jQuery scripts before including the adapter.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="/ckedit../../ckeditor.js"></script>
<script src="/ckeditor/adapters/jquery.js"></script>

Then you can replace HTML elements with a CKEditor instance using the ckeditor() method.

$( document ).ready( function() {
	$( 'textarea#editor1' ).ckeditor();
} );

Inline Example

Saturn V carrying Apollo 11Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

One small step for [a] man, one giant leap for mankind.

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.


Classic (iframe-based) Example

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/datafiltering.html0000644000175000017500000013351214006075351024162 0ustar domdom Data Filtering — CKEditor Sample

CKEditor Samples » Data Filtering and Features Activation

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample page demonstrates the idea of Advanced Content Filter (ACF), a sophisticated tool that takes control over what kind of data is accepted by the editor and what kind of output is produced.

When and what is being filtered?

ACF controls every single source of data that comes to the editor. It process both HTML that is inserted manually (i.e. pasted by the user) and programmatically like:

editor.setData( '<p>Hello world!</p>' );

ACF discards invalid, useless HTML tags and attributes so the editor remains "clean" during runtime. ACF behaviour can be configured and adjusted for a particular case to prevent the output HTML (i.e. in CMS systems) from being polluted. This kind of filtering is a first, client-side line of defense against "tag soups", the tool that precisely restricts which tags, attributes and styles are allowed (desired). When properly configured, ACF is an easy and fast way to produce a high-quality, intentionally filtered HTML.

How to configure or disable ACF?

Advanced Content Filter is enabled by default, working in "automatic mode", yet it provides a set of easy rules that allow adjusting filtering rules and disabling the entire feature when necessary. The config property responsible for this feature is config.allowedContent.

By "automatic mode" is meant that loaded plugins decide which kind of content is enabled and which is not. For example, if the link plugin is loaded it implies that <a> tag is automatically allowed. Each plugin is given a set of predefined ACF rules that control the editor until config.allowedContent is defined manually.

Let's assume our intention is to restrict the editor to accept (produce) paragraphs only: no attributes, no styles, no other tags. With ACF this is very simple. Basically set config.allowedContent to 'p':

var editor = CKEDITOR.replace( textarea_id, {
	allowedContent: 'p'
} );

Now try to play with allowed content:

// Trying to insert disallowed tag and attribute.
editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
alert( editor.getData() );

// Filtered data is returned.
"<p>Hello world!</p>"

What happened? Since config.allowedContent: 'p' is set the editor assumes that only plain <p> are accepted. Nothing more. This is why style attribute and <em> tag are gone. The same filtering would happen if we pasted disallowed HTML into this editor.

This is just a small sample of what ACF can do. To know more, please refer to the sample section below and the official Advanced Content Filter guide.

You may, of course, want CKEditor to avoid filtering of any kind. To get rid of ACF, basically set config.allowedContent to true like this:

CKEDITOR.replace( textarea_id, {
	allowedContent: true
} );

Beyond data flow: Features activation

ACF is far more than I/O control: the entire UI of the editor is adjusted to what filters restrict. For example: if <a> tag is disallowed by ACF, then accordingly link command, toolbar button and link dialog are also disabled. Editor is smart: it knows which features must be removed from the interface to match filtering rules.

CKEditor can be far more specific. If <a> tag is allowed by filtering rules to be used but it is restricted to have only one attribute (href) config.allowedContent = 'a[!href]', then "Target" tab of the link dialog is automatically disabled as target attribute isn't included in ACF rules for <a>. This behaviour applies to dialog fields, context menus and toolbar buttons.

Sample configurations

There are several editor instances below that present different ACF setups. All of them, except the inline instance, share the same HTML content to visualize how different filtering rules affect the same input data.

This editor is using default configuration ("automatic mode"). It means that config.allowedContent is defined by loaded plugins. Each plugin extends filtering rules to make it's own associated content available for the user.


This editor is using a custom configuration for ACF:

CKEDITOR.replace( 'editor2', {
	allowedContent:
		'h1 h2 h3 p blockquote strong em;' +
		'a[!href];' +
		'img(left,right)[!src,alt,width,height];' +
		'table tr th td caption;' +
		'span{!font-family};' +'
		'span{!color};' +
		'span(!marker);' +
		'del ins'
} );

The following rules may require additional explanation:

  • h1 h2 h3 p blockquote strong em - These tags are accepted by the editor. Any tag attributes will be discarded.
  • a[!href] - href attribute is obligatory for <a> tag. Tags without this attribute are disarded. No other attribute will be accepted.
  • img(left,right)[!src,alt,width,height] - src attribute is obligatory for <img> tag. alt, width, height and class attributes are accepted but class must be either class="left" or class="right"
  • table tr th td caption - These tags are accepted by the editor. Any tag attributes will be discarded.
  • span{!font-family}, span{!color}, span(!marker) - <span> tags will be accepted if either font-family or color style is set or class="marker" is present.
  • del ins - These tags are accepted by the editor. Any tag attributes will be discarded.

Please note that UI of the editor is different. It's a response to what happened to the filters. Since text-align isn't allowed, the align toolbar is gone. The same thing happened to subscript/superscript, strike, underline (<u>, <sub>, <sup> are disallowed by config.allowedContent) and many other buttons.


This editor is using a custom configuration for ACF. Note that filters can be configured as an object literal as an alternative to a string-based definition.

CKEDITOR.replace( 'editor3', {
	allowedContent: {
		'b i ul ol big small': true,
		'h1 h2 h3 p blockquote li': {
			styles: 'text-align'
		},
		a: { attributes: '!href,target' },
		img: {
			attributes: '!src,alt',
			styles: 'width,height',
			classes: 'left,right'
		}
	}
} );

This editor is using a custom set of plugins and buttons.

CKEDITOR.replace( 'editor4', {
	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
	format_tags: 'p;h1;h2;h3;pre;address'
} );

As you can see, removing plugins and buttons implies filtering. Several tags are not allowed in the editor because there's no plugin/button that is responsible for creating and editing this kind of content (for example: the image is missing because of removeButtons: 'Image'). The conclusion is that ACF works "backwards" as well: modifying UI elements is changing allowed content rules.


This editor is built on editable <h1> element. ACF takes care of what can be included in <h1>. Note that there are no block styles in Styles combo. Also why lists, indentation, blockquote, div, form and other buttons are missing.

ACF makes sure that no disallowed tags will come to <h1> so the final markup is valid. If the user tried to paste some invalid HTML into this editor (let's say a list), it would be automatically converted into plain text.

Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC.


This editor is using a custom configuration for ACF. It's using the Disallowed Content property of the filter to eliminate all title attributes.

CKEDITOR.replace( 'editor6', {
	allowedContent: {
		'b i ul ol big small': true,
		'h1 h2 h3 p blockquote li': {
			styles: 'text-align'
		},
		a: {attributes: '!href,target'},
		img: {
			attributes: '!src,alt',
			styles: 'width,height',
			classes: 'left,right'
		}
	},
	disallowedContent: '*{title*}'
} );

This editor is using a custom configuration for ACF. It's using the Disallowed Content property of the filter to eliminate all a and img tags, while allowing all other tags.

CKEDITOR.replace( 'editor7', {
	allowedContent: {
		// Allow all content.
		$1: {
			elements: CKEDITOR.dtd,
			attributes: true,
			styles: true,
			classes: true
		}
	},
	disallowedContent: 'img a'
} );
rt-4.4.4/devel/third-party/ckeditor-src/samples/old/api.html0000644000175000017500000001547114006075351022121 0ustar domdom API Usage — CKEditor Sample

CKEditor Samples » Using CKEditor JavaScript API

This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

This sample shows how to use the CKEditor JavaScript API to interact with the editor at runtime.

For details on how to create this setup check the source code of this sample page.

rt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/0000755000175000017500000000000014006075351021754 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/outputxhtml/0000755000175000017500000000000014006075351024371 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/outputxhtml/outputxhtml.css0000644000175000017500000000362314006075351027524 0ustar domdom/* * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license * * Styles used by the XHTML 1.1 sample page (xhtml.html). */ /** * Basic definitions for the editing area. */ body { font-family: Arial, Verdana, sans-serif; font-size: 80%; color: #000000; background-color: #ffffff; padding: 5px; margin: 0px; } /** * Core styles. */ .Bold { font-weight: bold; } .Italic { font-style: italic; } .Underline { text-decoration: underline; } .StrikeThrough { text-decoration: line-through; } .Subscript { vertical-align: sub; font-size: smaller; } .Superscript { vertical-align: super; font-size: smaller; } /** * Font faces. */ .FontComic { font-family: 'Comic Sans MS'; } .FontCourier { font-family: 'Courier New'; } .FontTimes { font-family: 'Times New Roman'; } /** * Font sizes. */ .FontSmaller { font-size: smaller; } .FontLarger { font-size: larger; } .FontSmall { font-size: 8pt; } .FontBig { font-size: 14pt; } .FontDouble { font-size: 200%; } /** * Font colors. */ .FontColor1 { color: #ff9900; } .FontColor2 { color: #0066cc; } .FontColor3 { color: #ff0000; } .FontColor1BG { background-color: #ff9900; } .FontColor2BG { background-color: #0066cc; } .FontColor3BG { background-color: #ff0000; } /** * Indentation. */ .Indent1 { margin-left: 40px; } .Indent2 { margin-left: 80px; } .Indent3 { margin-left: 120px; } /** * Alignment. */ .JustifyLeft { text-align: left; } .JustifyRight { text-align: right; } .JustifyCenter { text-align: center; } .JustifyFull { text-align: justify; } /** * Other. */ code { font-family: courier, monospace; background-color: #eeeeee; padding-left: 1px; padding-right: 1px; border: #c0c0c0 1px solid; } kbd { padding: 0px 1px 0px 1px; border-width: 1px 2px 2px 1px; border-style: solid; } blockquote { color: #808080; } rt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/sample.jpg0000644000175000017500000003416113776355015023757 0ustar domdomJFIF,,C   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((( itwQ˪NDp`gU̥<՛ !rqmX7{=͍bfbfVa+z{.㡨"Y>%JB22ū?A1$E}XuJ{|OK7,|{jOs4sOWs3]a3YDxfz"Lh$h{Wڦu;Z3--yÎri+z#iTd35VHnUKtSDe=f!ќlZR]MF9ͣiʛVp:Sd͠6%<̚vZˠ][gtSEd=l4ؤxDjxy^/>*Q8‹J9z$4ϒ8d/:{ּζǘ}2bsɠg==٣ҔGy!~s& wyK)0i'ش7^jqH,}F:T3әv':4<-@tX8_Lоt>#K 2B+!"#12 3$5AB7M'K=} LSɒ5ggR6;Vv, a7X+%c;a7a|L*N\]K9بKfTńmC}Kq݀,&П/e Z ?+{~BXQ Z:'UƄeqQ Pc`Y֝ܪcsU.hZIi zQ J)_ q ,2˰hud\[hPkg)Y3s I>T~+}KmD*"E%}f& Ck` 8djyVήo$>Wu*ɬZεJfM&ɏXL_+On.ZGPkjAV.7MXOVWLe^>߸u? iW Cqߒ3! j^UJNOif5zr5UUZ[3 q| !Y3 ha5N?亄@r.x KV9Xї\rV8J2hGKg_ t6 kXByYVَhOs,*Sr~uܼ]~Nəg5CbZLkKo0lߋĬBzcvVRكi9%A\L.pL[Qf-?V d ,#]iV Y^^vAS vZ+tB@ȻJ]1jj*ؗS?YX~[kVuOʮ&tk@ O%t<J}̬{];=sz+z'a}[rڟ6WRҰВT!@d]Հr&nYJJ}߻f؏ZaO8¿[]l=kcX|o?g3R:-Qzݜ`{-!o,ۑbSvL FaU7<6ǿ"jfl>i5]kźc{w]bex稷̞2 k1ӭVV82^5L[.ܯmnS[ps?,!1A"2Q Ba#3R?eG%85Em{k{  QģRJ(oe38 <"ٖ4jGfh#4sfŵ%p=4=/GPE !+D(h 0$PXh(h{2C[GMy8PĨjƬq$28P (M2**'"% Kh"HR\z(pzȿhrb"YTN"(:[7"9Q=&ݒU {GyeБ!gr$iɓZ01Kjgnĉe,=Q Y%c-'oږRbY+4rLvkjdv"LB-oO20fH!Q} ]YE{=,ly:D*xT6Nl2YԌTb _,.$ KӨY:!9E%8 N$cy$Cnmq;)4.EJ3Q5r"4kivEffxID̲Ec~dEвg1d9"3ƼOԨ'cf?ibdYlo[:%;2R.ȳ܉e:yNlr%ddCtatFDEY7蔆wfd-N6ro,e:$L$я7c>}$}4dTݜY=#*C,Ye,G,kd9ҍYg#/ "?L1rZ$cɤb9Heֆt6EPcڱvY ZSC$szؑN(oEђN&G:u"'gL&nD/¯_%&13db}chdQ/q'  1ʴ8ˈrd#0 +v%F:kĐݳ.׌j+piL5'}V8"+#+D$>̒Gd\hS#ƹIFiވV"*#FNHt oT{n?fKBb6bw- HH4N4c~^R壣l QЄ/R>|˱NZgbEbF?#ؚc/j膾'/vճ$Q[>^iEtqtqMZI+2%Q,ʬg*51qĆ.=.4]ZďpԭH~KBĔlI|볍= !1AQ"2aq #3BRrCbs%0S?]l6@.k5 ܫ|W\?2*jpZw71«5 AEw9IaSJf|߲z~JNlJ`BiI  ;O "VP\Lq,[uV HQ[ˮwϹ\6~+JpFVH[%6{zm(R湿 d£GJɍu.桱 h-`DWUWGhe-^{$l.] cpqXe(TC]d˺Y arEgaD:R.TZ0'@gϪغȻ7AnWvscӽ^\S:N]2Ɖp(?57{j3&҄.+RH9pr L; 0U,fop6 Mr6OR?%LS2CsNXKzto4,.ʩN;O RIa sy艐Dt}Y|討VQcmwB܁.c'sܩS&J]ʨٻ]qt.NS&.uQ=uQ\z ? 13e 3w]38A>1A3.0xQN $4ܙFHpjULHUH Cpm:RN|u_'cEJkXNrsMPPwjS fe h3\|n&7 PP7Φ|M'u_pEY= 0_R%W|]E o<>îK=y/v)ɓJAԤ\wXQMO"QLs~u.E`[fX;K"XRLߘ4a,_ hqJF@>IkBE_`wآau6ǰZb j'XU{X]G_($EӢgpz#?̙){(7W.2, )ܩRpsC3.>"u;cTTe${8p]DԘr^߬qQJ+70h!KsoY YI X6Ee4 ]4E>*d-9zVJ j Hu՜$> nW%$dh 48S&S.Xc& .JpKRtb]w.JuM L5=/c]SJB Y(_{Krbg(d ڭ䔐 {`NJmeP1Yn%5r,<7 l홺<alRۣ97Nx㯙0[l0+Es«UV6|\j c}ˑ /I.O;ePu.tJ1`/b x _:@ES֟DO) "z[9kg/XIWo&o>~Xu c0$7]u1ꙶ/}B<^'Õb= 1*wBvޥD%D1wee!/4>B؛{L-,_B:hDX+bõ9u ,L;5Yzu)VNy% |=`K׶)ۗ&NYe~*\}ϼ0xoكDݻ"ѷpHKhF7}b}{iNJ©dW Am-Mݺ{V~n0_d☌@1fR2#^Ub'%D4tOe s\Eiv8*40zjEsK_`n 0p٣sʎfk?k'L2Xc־Q˪d*zo_Gsgl4%O7X"tsN{V` rǦVIn.1sQᱳ+e/Ic ieתx5/oxf]F'pSU>[ܠ˃?:U2 b !'SP85EUlF;Pu޷\<C>k^o0,CܥR rbvu~fFU1G`T(" xcZkVn[~Jbm?@6XefzpÓ mO[׹(-ݞ{FM>}>T?1 =2Վ#+ ?!.-o; śUu6(9iy(2G>""m|WZgU'uȺmA ߇K>XLl\ l uׯ?;FP>MlwL\>%WT jk^aCS i=&=NNU_=#J7 #W0[;Z Ǐ&!1AQaqѡ?n$fS`$ҢcIq; JX6)c-P<$‘HaDGN%U/#yRU1ͳ̶cv o 4)ԳS8&pe3 Hn/j 3(;a!r2- !fr#'DF% m5aB.+>[J`(N H][Ddmde!1Gܧ krp mxp+1 /ܥ8ě3D%Bs-<+t]GUBDkFx!ĬڙK(DYJg4Ɗ _ ʲ )s a]@˗b2"(A),Y`TT@L ix2C& C>L+ iWg]0DOD89?c̼+~FɣRg!]%y||M㜦\0j <=J^R[1vRTY2]w?&!1AQaq?0Ne XjX *[;'+Jc$Caˊ\\0X.e'zEkK&G$hԪWF CLa n'`mm{Z B-yʂw `ea+X@[j%5~<7UQˈ;"fF#d 2z`B .\ GD18V', 6ǽEeD*4haRȪpFziY" +u2b#0&Xw*ȊweK1d0s*@˙KC!MDaMI.7",{Kܪx,\?AEa6+j5) y_C|5r!&CSD࿠80Dv xwvZ i?؆3 3*7hؖP t(-;L" n:BۘI3"Kc9M΍3 v*,"Sx1e[ |6%Hۉ j*pVu "5gO}xq}#T3 0a/9\K ~u (heF* K/} 1 ]wyV'A;8T#7(7(ճ')zE.'BRQ- ksf9랍$D%2Y5}_+^~J001wЖx5  :y&^q丣Qt" 5?_2w)bp_Rd*N}짌"*Ym80E Au5e!>\ArX'!-Ax\#K.P#蘥iz|ho>* ܳ/ 2|b/#}?>f;2+^yqU|ŗ;|13B2x.S%!1AQaq?T]ސX[au\PU* L+n#>;ɑ4< 8YD bT}@ r ްUzŻ@I5ɑhZo o9tDZ-:2㋖:!kK(7yiqʂƆ;пSl1#]bۖ|5ڙ f:7y8hlӍj&f,rxC_y]C)B{/b#$ʻFXAB^5WNswm^8 8|ݺ+եQEJl8sFiD/ErB%BycyE+'-Su-vj?.~ ;"/Qb#&*ہ3 aFr$?Qׁ!`sDŧ(;_n_ =>H_-7R=|gy&3ejiUܥj~\௎W& ehpcщ*f\ !k"!>3˻;(s| ۩qGUJ#DbpY` ֧|a֤;x mj:LAGRSS$_h0 qӸ"a 2K̀sǷT]Tcf{D Bco~@ {~}nkYFִ*ze7 ;=?,D8 ?MWlڽёޟGY9,"O)].yl@CxE[ڜa6Kz 0?Qy!j@5q,D?%ģC)t!̺ٔ4{~2UO_Ás~9WbaY;( pt:wW8@b^Xa7 {lsYG6#ÁTEƃA hN fȲ/{Vը}4WG0ıaM3q~39h.1@Vӌ&'4QJ H _xI|xrz cho|L\ 6 4P A}aPN4eT5Tk8FZr)Rz`yE~|[HaEe!;&"a-;1R!O>V-" y}?HT]~08Gq Fh7ӬHC[5*ݻxnok,6/9J`.& (Iӆ$Y2klĵN]d>'=$쎿8l9E[z0uMoEi u;H""y<rMRe.lKxלsݧLv&v0@5+yq8Gz∀\1TQ:4ZqtʤE +54Q E[[H^PS_է"-"oh.8lԂAnL$k×AM EoK5]/{&ymjn^& D(5G 5|CK0F"#+9P 5)]Z a8ϙxLD70NP 0s[*v*V-&,xp$Pӓh`޵C_.5CB4[]@ #?ʇy+ ze;I#SBQoQ fv%m(@ysF´yѧwv܍A&e#`Vj& Er)47q_1؈üFଆȜ0Pm<0hÛjr}`'|JޏKbQ>C TJFQXd5 d,Vi!ploa tfG :w"^؂|FNرRfov~1y [PTZ`Py"h d,f uvNœ BMx :]qU򈿼)l bdtƈw'~W\EF6:ՃEj{C8vS%PCMzw+̫de5Y!JzԃMa$@D| 9PSdR 'xmט =~&P CzAbz :kKMZPV0aw+ Ď4B%!*ki9eʧ&ڦ7Jb@Ggl뚆R GŃHVTÞ^p%u;0"ʵ7 lq, e\ZlF`4Sߌr(۫r%W|G;Fjk. @w^]PLC4݀6<>4 k`|٦*sByL9ADKD8 U޸602] .^=!'Pmmq&ȑ_ |p\rt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/inlineall/0000755000175000017500000000000013776355015023736 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/inlineall/logo.png0000644000175000017500000001027313776355015025407 0ustar domdomPNG  IHDR?MO2IDATx tSU&KRdjQPP*Fh(FVq8Lݰ"v`*c]Nϙ9z+0:Jiӽi.iZ`}{mҌs9$シh~}/pq'pq8\\l.^/|!RݰlK,uzL>[kn˵$ߜc1t7f[0PRfեqBEBB!11? s0'ni-=FGg"`U',1lҶHѮ_Z"=\,q_(VAoGoAz} =d]"O skJsS3M&jZa32;&[ l`u&c3ԭ70nj[`n0>SI6<\w۳!!~"G*p:0ȯω[[#o# ԭ ԫЭ7b<'ȧ[;`K nk|LƓJ;=tr+`?@n1>ބ`ht7uhti a;::R܇q50>>UP|&6r;)|PPO4a|ހe‹s0:eݗ w/ѭqB?ktQ AV#]f1a\tNQ`v {19Po;@,-Av Q:']aiI?ҡKiQ?'0E_M_zETo1n-bH #[ޓAKƺr{xSXT-P&$acktĭ3JFC&@`N>$:Bև`גd}R.2QέsĢl v|UkI_cAHyPɭ0{J ]qI O1$aGm AD>`7BD1<@Ylԑ2(~gQ[׋(E\\/&]| =۽'nm Q*y, Hb"Rk\ށkB+=z#]~*Y+*AJa y`w uP;Hu[$qi=! ㊲&X >g{j˽ N7aRH0 !{Tة[[D.Jx/V `+}^_hd--/աcܝ܋ 9b\.%\]c 9u1+4 ˄_PkՎQ4N$M y.9d% Q^[gjJ% [I{W3˽H?r)amE–[1 "S#*r%$/ 9-,)̾>MMqϕ~'^8 y80Z+%,n^#"zT'4A;INQqg$#' E|9g >/ke&{q ^Z %V#=Dy֥dw1L~£GwMԭn=ro! S#YA[^2ys>⼾9S)~1RcAY”1 Gɴ8^-&)h8ON> >m-򉝄^;奻gl%R4phOdA7uP8A5{]e6~M4ʝ0Y S+, u6&;]{H H聽X!qdyF > rh"Iܚӎ$.E)sտVw"u|l`bn?o9gر! 6lؽW`!]{?H cUb ݙgl lmȂЖ&<܋$NfmRޓD܋TBx8֝0"W,cob=z<34zԱ;B {3Y,R?[#nM\[fIH wtc"&S2J2t5zra3q> `Q'xt7#~z+yTsCH5۽GiSӣTr/bqa PI^>4Au `zܧU cΙc-vդB*DVK{e\Sqńq(֗@eI28}l[U;&hX(zi&FSAV*YwA ~*F-a!;g@3?ҏ~X?~,4P~l`M˝Y AR]5)[+$rzF&3ĩ۟aȺȆ%)jB ə0<# WU~ )`PdrJpYCA$l.5Ky\IENDB`rt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/posteddata.php0000644000175000017500000000255014006075351024617 0ustar domdom Sample — CKEditor

CKEditor — Posted Data

$value ) { if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) continue; if ( get_magic_quotes_gpc() ) $value = htmlspecialchars( stripslashes((string)$value) ); else $value = htmlspecialchars( (string)$value ); ?>
Field Name Value
rt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/uilanguages/0000755000175000017500000000000014006075351024260 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/old/assets/uilanguages/languages.js0000644000175000017500000000341414006075351026566 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /* exported CKEDITOR_LANGS */ var CKEDITOR_LANGS = ( function() { var langs = { af: 'Afrikaans', ar: 'Arabic', bg: 'Bulgarian', bn: 'Bengali/Bangla', bs: 'Bosnian', ca: 'Catalan', cs: 'Czech', cy: 'Welsh', da: 'Danish', de: 'German', el: 'Greek', en: 'English', 'en-au': 'English (Australia)', 'en-ca': 'English (Canadian)', 'en-gb': 'English (United Kingdom)', eo: 'Esperanto', es: 'Spanish', et: 'Estonian', eu: 'Basque', fa: 'Persian', fi: 'Finnish', fo: 'Faroese', fr: 'French', 'fr-ca': 'French (Canada)', gl: 'Galician', gu: 'Gujarati', he: 'Hebrew', hi: 'Hindi', hr: 'Croatian', hu: 'Hungarian', id: 'Indonesian', is: 'Icelandic', it: 'Italian', ja: 'Japanese', ka: 'Georgian', km: 'Khmer', ko: 'Korean', ku: 'Kurdish', lt: 'Lithuanian', lv: 'Latvian', mk: 'Macedonian', mn: 'Mongolian', ms: 'Malay', nb: 'Norwegian Bokmal', nl: 'Dutch', no: 'Norwegian', pl: 'Polish', pt: 'Portuguese (Portugal)', 'pt-br': 'Portuguese (Brazil)', ro: 'Romanian', ru: 'Russian', si: 'Sinhala', sk: 'Slovak', sq: 'Albanian', sl: 'Slovenian', sr: 'Serbian (Cyrillic)', 'sr-latn': 'Serbian (Latin)', sv: 'Swedish', th: 'Thai', tr: 'Turkish', tt: 'Tatar', ug: 'Uighur', uk: 'Ukrainian', vi: 'Vietnamese', zh: 'Chinese Traditional', 'zh-cn': 'Chinese Simplified' }; var langsArray = []; for ( var code in CKEDITOR.lang.languages ) { langsArray.push( { code: code, name: ( langs[ code ] || code ) } ); } langsArray.sort( function( a, b ) { return ( a.name < b.name ) ? -1 : 1; } ); return langsArray; } )(); rt-4.4.4/devel/third-party/ckeditor-src/samples/js/0000755000175000017500000000000014006075351020310 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/js/sample.js0000644000175000017500000000303314006075351022126 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /* exported initSample */ if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) CKEDITOR.tools.enableHtml5Elements( document ); // The trick to keep the editor in the sample quite small // unless user specified own height. CKEDITOR.config.height = 150; CKEDITOR.config.width = 'auto'; var initSample = ( function() { var wysiwygareaAvailable = isWysiwygareaAvailable(), isBBCodeBuiltIn = !!CKEDITOR.plugins.get( 'bbcode' ); return function() { var editorElement = CKEDITOR.document.getById( 'editor' ); // :((( if ( isBBCodeBuiltIn ) { editorElement.setHtml( 'Hello world!\n\n' + 'I\'m an instance of [url=http://ckeditor.com]CKEditor[/url].' ); } // Depending on the wysiwygare plugin availability initialize classic or inline editor. if ( wysiwygareaAvailable ) { CKEDITOR.replace( 'editor' ); } else { editorElement.setAttribute( 'contenteditable', 'true' ); CKEDITOR.inline( 'editor' ); // TODO we can consider displaying some info box that // without wysiwygarea the classic editor may not work. } }; function isWysiwygareaAvailable() { // If in development mode, then the wysiwygarea must be available. // Split REV into two strings so builder does not replace it :D. if ( CKEDITOR.revision == ( '%RE' + 'V%' ) ) { return true; } return !!CKEDITOR.plugins.get( 'wysiwygarea' ); } } )(); // %LEAVE_UNMINIFIED% %REMOVE_LINE% rt-4.4.4/devel/third-party/ckeditor-src/samples/js/sf.js0000644000175000017500000004472314006075351021270 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /* exported SF */ 'use strict'; var SF = ( function() { var SF = {}; SF.attachListener = function( elem, evtName, callback ) { if ( elem.addEventListener ) { elem.addEventListener( evtName, callback, false ); } else if ( elem.attachEvent ) { elem.attachEvent( 'on' + evtName , function() { callback.apply( elem, arguments ); } ); } else { throw new Error( 'Could not attach event.' ); } }; SF.indexOf = ( function() { var indexOf = Array.prototype.indexOf; if ( indexOf === 'function' ) { return function( arr, elem ) { return indexOf.call( arr, elem ); }; } else { return function( arr, elem ) { var max = arr.length; for ( var i = 0; i < max; i++ ) { if ( arr[ i ] === elem ) { return i; } } return -1; }; } }() ); SF.accept = function( node, visitor ) { var children; // Handling node as a node and array if ( node.children ) { children = node.children; visitor( node ); } else if ( typeof node.length === 'number' ) { children = node; } var i = children ? ( children.length || 0 ) : 0; while ( i-- ) { SF.accept( children[ i ], visitor ); } }; SF.getByClass = ( function( ) { var getByClass = document.getElementsByClassName; if ( typeof getByClass === 'function' ) { return function( root, className ) { if ( typeof root === 'string' ) { className = root; root = document; } return getByClass.call( root, className ); }; } return function( root, className ) { if ( typeof root === 'string' ) { className = root; root = document.getElementsByTagName( 'html' )[ 0 ]; } var results = []; SF.accept( root, function( elem ) { if ( SF.classList.contains( elem, className ) ) { results.push( elem ); } } ); return results; }; }() ); SF.classList = {}; SF.classList.add = function( elem, className ) { var classes = parseClasses( elem ); classes.push( className ); elem.attributes.setNamedItem( createClassAttr( classes ) ); }; SF.classList.remove = function( elem, className ) { var classes = parseClasses( elem, className ), foundAt = SF.indexOf( classes, className ); if ( foundAt === -1 ) { return; } classes.splice( foundAt, 1 ); elem.attributes.setNamedItem( createClassAttr( classes ) ); }; SF.classList.contains = function( elem, className ) { return findIndex( elem, className ) !== -1; }; SF.classList.toggle = function( elem, className ) { this.contains( elem, className ) ? this.remove( elem, className ) : this.add( elem, className ); }; function findIndex( elem, className ) { return SF.indexOf( parseClasses( elem ), className ); } function parseClasses( elem ) { var classAttr = elem.attributes ? elem.attributes.getNamedItem( 'class' ) : null; return classAttr ? classAttr.value.split( ' ' ) : []; } function createClassAttr( classesArray ) { var attr = document.createAttribute( 'class' ); attr.value = classesArray.join( ' ' ); return attr; } return SF; }() ); /* global SF, picoModal */ 'use strict'; ( function() { // Purges all styles in passed object. function purgeStyles( styles ) { for ( var i in styles ) { delete styles[ i ]; } } SF.modal = function( config ) { // Modal should use the same style set as the rest of the page (.content component). config.modalClass = 'modal content'; config.closeClass = 'modal-close'; // Purge all pre-defined pico styles. Use the lessfile instead. config.modalStyles = purgeStyles; // Close button styles are customized via lessfile. config.closeStyles = purgeStyles; var userDefinedAfterCreate = config.afterCreate, userDefinedAfterClose = config.afterClose; // Close modal on ESC key. function onKeyDown( event ) { if ( event.keyCode == 27 ) { modal.close(); } } // Use afterCreate as a config option rather than function chain. config.afterCreate = function( modal ) { userDefinedAfterCreate && userDefinedAfterCreate( modal ); window.addEventListener( 'keydown', onKeyDown ); }; // Use afterClose as a config option rather than function chain. config.afterClose = function( modal ) { userDefinedAfterClose && userDefinedAfterClose( modal ); window.removeEventListener( 'keydown', onKeyDown ); }; var modal = new picoModal( config ) .afterCreate( config.afterCreate ) .afterClose( config.afterClose ); return modal; }; } )(); 'use strict'; ( function() { // All .tree-a elements in DOM. var expanders = SF.getByClass( 'toggler' ); var i = expanders.length; while ( i-- ) { var expander = expanders[ i ]; SF.attachListener( expander, 'click', function() { var containsIcon = SF.classList.contains( this, 'icon-toggler-expanded' ) || SF.classList.contains( this, 'icon-toggler-collapsed' ), related = document.getElementById( this.getAttribute( 'data-for' ) ); SF.classList.toggle( this, 'collapsed' ); if ( SF.classList.contains( this, 'collapsed' ) ) { SF.classList.add( related, 'collapsed' ); if ( containsIcon ) { SF.classList.remove( this, 'icon-toggler-expanded' ); SF.classList.add( this, 'icon-toggler-collapsed' ); } } else { SF.classList.remove( related, 'collapsed' ); if ( containsIcon ) { SF.classList.remove( this, 'icon-toggler-collapsed' ); SF.classList.add( this, 'icon-toggler-expanded' ); } } } ); } } )(); /* global SF */ 'use strict'; ( function() { // All .tree-a elements in DOM. var trees = SF.getByClass( 'tree-a' ); for ( var i = trees.length; i--; ) { var tree = trees[ i ]; SF.attachListener( tree, 'click', function( evt ) { var target = evt.target || evt.srcElement; // Collapse or expand item groups. if ( target.nodeName === 'H2' && !SF.classList.contains( target, 'tree-a-no-sub' ) ) { SF.classList.toggle( target, 'tree-a-active' ); } } ); } } )(); // jshint ignore:start // jscs:disable /** * 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. */ /** * A self-contained modal library */ (function(window, document) { "use strict"; /** Returns whether a value is a dom node */ function isNode(value) { if ( typeof Node === "object" ) { return value instanceof Node; } else { return value && typeof value === "object" && typeof value.nodeType === "number"; } } /** Returns whether a value is a string */ function isString(value) { return typeof value === "string"; } /** * Generates observable objects that can be watched and triggered */ function observable() { var callbacks = []; return { watch: callbacks.push.bind(callbacks), trigger: function( modal ) { var unprevented = true; var event = { preventDefault: function preventDefault () { unprevented = false; } }; for (var i = 0; i < callbacks.length; i++) { callbacks[i](modal, event); } return unprevented; } }; } /** * A small interface for creating and managing a dom element */ function Elem( elem ) { this.elem = elem; } /** * Creates a new div */ Elem.div = function ( parent ) { var elem = document.createElement('div'); (parent || document.body).appendChild(elem); return new Elem(elem); }; Elem.prototype = { /** Creates a child of this node */ child: function () { return Elem.div(this.elem); }, /** Applies a set of styles to an element */ stylize: function(styles) { styles = styles || {}; if ( typeof styles.opacity !== "undefined" ) { styles.filter = "alpha(opacity=" + (styles.opacity * 100) + ")"; } for (var prop in styles) { if (styles.hasOwnProperty(prop)) { this.elem.style[prop] = styles[prop]; } } return this; }, /** Adds a class name */ clazz: function (clazz) { this.elem.className += " " + clazz; return this; }, /** Sets the HTML */ html: function (content) { if ( isNode(content) ) { this.elem.appendChild( content ); } else { this.elem.innerHTML = content; } return this; }, /** Adds a click handler to this element */ onClick: function(callback) { this.elem.addEventListener('click', callback); return this; }, /** Removes this element from the DOM */ destroy: function() { document.body.removeChild(this.elem); }, /** Hides this element */ hide: function() { this.elem.style.display = "none"; }, /** Shows this element */ show: function() { this.elem.style.display = "block"; }, /** Sets an attribute on this element */ attr: function ( name, value ) { this.elem.setAttribute(name, value); return this; }, /** Executes a callback on all the ancestors of an element */ anyAncestor: function ( predicate ) { var elem = this.elem; while ( elem ) { if ( predicate( new Elem(elem) ) ) { return true; } else { elem = elem.parentNode; } } return false; } }; /** Generates the grey-out effect */ function buildOverlay( getOption, close ) { return Elem.div() .clazz("pico-overlay") .clazz( getOption("overlayClass", "") ) .stylize({ display: "block", position: "fixed", top: "0px", left: "0px", height: "100%", width: "100%", zIndex: 10000 }) .stylize(getOption('overlayStyles', { opacity: 0.5, background: "#000" })) .onClick(function () { if ( getOption('overlayClose', true) ) { close(); } }); } /** Builds the content of a modal */ function buildModal( getOption, close ) { var width = getOption('width', 'auto'); if ( typeof width === "number" ) { width = "" + width + "px"; } var elem = Elem.div() .clazz("pico-content") .clazz( getOption("modalClass", "") ) .stylize({ display: 'block', position: 'fixed', zIndex: 10001, left: "50%", top: "50px", width: width, '-ms-transform': 'translateX(-50%)', '-moz-transform': 'translateX(-50%)', '-webkit-transform': 'translateX(-50%)', '-o-transform': 'translateX(-50%)', 'transform': 'translateX(-50%)' }) .stylize(getOption('modalStyles', { backgroundColor: "white", padding: "20px", borderRadius: "5px" })) .html( getOption('content') ) .attr("role", "dialog") .onClick(function (event) { var isCloseClick = new Elem(event.target) .anyAncestor(function (elem) { return /\bpico-close\b/.test(elem.elem.className); }); if ( isCloseClick ) { close(); } }); return elem; } /** Builds the close button */ function buildClose ( elem, getOption ) { if ( getOption('closeButton', true) ) { return elem.child() .html( getOption('closeHtml', "×") ) .clazz("pico-close") .clazz( getOption("closeClass") ) .stylize( getOption('closeStyles', { borderRadius: "2px", cursor: "pointer", height: "15px", width: "15px", position: "absolute", top: "5px", right: "5px", fontSize: "16px", textAlign: "center", lineHeight: "15px", background: "#CCC" }) ); } } /** Builds a method that calls a method and returns an element */ function buildElemAccessor( builder ) { return function () { return builder().elem; }; } /** * Displays a modal */ function picoModal(options) { if ( isString(options) || isNode(options) ) { options = { content: options }; } var afterCreateEvent = observable(); var beforeShowEvent = observable(); var afterShowEvent = observable(); var beforeCloseEvent = observable(); var afterCloseEvent = observable(); /** * Returns a named option if it has been explicitly defined. Otherwise, * it returns the given default value */ function getOption ( opt, defaultValue ) { var value = options[opt]; if ( typeof value === "function" ) { value = value( defaultValue ); } return value === undefined ? defaultValue : value; } /** Hides this modal */ function forceClose () { shadowElem().hide(); modalElem().hide(); afterCloseEvent.trigger(iface); } /** Gracefully hides this modal */ function close () { if ( beforeCloseEvent.trigger(iface) ) { forceClose(); } } /** Wraps a method so it returns the modal interface */ function returnIface ( callback ) { return function () { callback.apply(this, arguments); return iface; }; } // The constructed dom nodes var built; /** Builds a method that calls a method and returns an element */ function build ( name ) { if ( !built ) { var modal = buildModal(getOption, close); built = { modal: modal, overlay: buildOverlay(getOption, close), close: buildClose(modal, getOption) }; afterCreateEvent.trigger(iface); } return built[name]; } var modalElem = build.bind(window, 'modal'); var shadowElem = build.bind(window, 'overlay'); var closeElem = build.bind(window, 'close'); var iface = { /** Returns the wrapping modal element */ modalElem: buildElemAccessor(modalElem), /** Returns the close button element */ closeElem: buildElemAccessor(closeElem), /** Returns the overlay element */ overlayElem: buildElemAccessor(shadowElem), /** Shows this modal */ show: function () { if ( beforeShowEvent.trigger(iface) ) { shadowElem().show(); closeElem(); modalElem().show(); afterShowEvent.trigger(iface); } return this; }, /** Hides this modal */ close: returnIface(close), /** * Force closes this modal. This will not call beforeClose * events and will just immediately hide the modal */ forceClose: returnIface(forceClose), /** Destroys this modal */ destroy: function () { modalElem = modalElem().destroy(); shadowElem = shadowElem().destroy(); closeElem = undefined; }, /** * Updates the options for this modal. This will only let you * change options that are re-evaluted regularly, such as * `overlayClose`. */ options: function ( opts ) { options = opts; }, /** Executes after the DOM nodes are created */ afterCreate: returnIface(afterCreateEvent.watch), /** Executes a callback before this modal is closed */ beforeShow: returnIface(beforeShowEvent.watch), /** Executes a callback after this modal is shown */ afterShow: returnIface(afterShowEvent.watch), /** Executes a callback before this modal is closed */ beforeClose: returnIface(beforeCloseEvent.watch), /** Executes a callback after this modal is closed */ afterClose: returnIface(afterCloseEvent.watch) }; return iface; } if ( typeof window.define === "function" && window.define.amd ) { window.define(function () { return picoModal; }); } else { window.picoModal = picoModal; } }(window, document)); // jscs:enable // jshint ignore:endrt-4.4.4/devel/third-party/ckeditor-src/samples/img/0000755000175000017500000000000014006075351020450 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/img/logo.png0000644000175000017500000001340314006075351022117 0ustar domdomPNG  IHDR<ӣIDATx tU  $ӁA@TP** 3QxFGs9&;"Y{B! [V.1=;]U]~ޢM`~Sd~r̜)EeZvP60GKGH<0+.LvM;¦`$ğ\lAWj /f&Pe>4+&;j,6=:~$#n$l7f9רy_ ɐCLDzu,Aј[4Ս`q\Ϳ9.koB9fa۝,6CQi[+pDxG ݑʮ2¦}:%)}0% 9l~|6nvLм F6M(Rnl\,_2leqqŷ,,~ WA͒|Pr?1-0FxM(+IJ ou pc\w2y%X[BV1[Q]Z[ ~B8ll.`3*[&q;I [ru"c%plni^F?yGZx+lEk JK%b\f{])\)@[+q[';0n?|m(RtC >xyWZpu~* V唰nO أAvj>WAn9Y*Y8.-ep}DzٞJIu leޙV:/})V$\i![ u[͍B`Mn)9ɊϜ+T $8esd@Y;= n`, δzQ䗲J۳pO\i[6JSCtd;+T9 Mճ Y~9;BS @JNn:jqѕR )>a5gؗE'Ki.ʺ Nbv7QF_l?mywZE°JgJQ >*R(H>=Փq% 3 i6O7U!= [sKG|]FMaߧ>eޝcV䔜[QK KB%<rvf ZWJ 8W J|e ⶏX8NΜeU5\Nɕp{Sو}fyҏe ۢ\JPH\MHiW ъ*f**gP'OMJqs@G` ' Yu2N+dU+ULe5˨>]GJh+M2)3;Y!~j])^J>Ɂ(w:|܈=i̻ DznZ $$W9+$ I5l3 ]!ɸz^J2N#'8lTېl讔Aң)yDjE q^d#{zBKx pWɸӜ2Ƕ•N4V:JWߛR õR! dwҺJ ZLKzgEqj diZG ޕn$cޝ\BoQwh]ql^@j%Gjwdr[")^C*ᶿA+aI7h'۝bޝ1~h% ((T ۽ fQX9t#7JB<׉P//m'w&Rtu# ܕͼ;tY ˑp I&+}R Kefes,8/FI $6=Y.1c4?8xuرcFY, Oxm34cXXX,4ٹ5S7ny1Lngܶvj=-Km·afA!-N\+tgf%D*|:גHFGfdP692TS zڪ+g&J]Dʸmur>߶ TH(QK ?Õ&sWJݖՒPЃY%o1!Ctds!<wy皋yskb_8wP"6FUW]P&5.nrڑQdwIN=q% TPmnܬ&(\uX])W>%!R6ˍ pN U \*qV]Nlwy*l~"3}G&zM& ,x֔  4v\n5\T(m1eۍ"Q ʖv=XIS,.I߭8(qބ6fVA)qއ#:kiw ׻Y\wN8R2`ڝ":K߶n6ǣ~~Cݹݍίcȅ0j7U"9+YBX ߣJyRH^or`|Fܦ{+l[M]Fՙ+_ 8R3ާW œC-pdk|>j#p9Dg>"D+㾒׉O?:~J9v{53:+UBɅ0fz=6Օ]U5}m ^TPpӮ$-QpO"x=w ppnM8?D&n$aQK XJs4ḉP4($C)Jre]jxx/S*ueW:Z!E3e.Wgh2XFi,S& r% To8QkXtRqڶ?#(nvPSDnۿ£S8> 58R hᑎ@;sl]뎕 J3#pCP[KJX(8ח$=TPyٺEoXS/km4rrSp*ARq >MO*Y97 $p-9vZ,}nnImgs{yƠl_9,\ƮT(u UM+dcMЦM1'N@& gDᵔB~8O4em?Ąan:%.b㢴bT*ڪ7cN < xsTSd~a)dQ qJw,74!VS+Oj|w!&D!"cKn5^fGZ1_~mM\3ȕ&z1/P (W'HK<~K+bWq۷J+%ؠpJmذŶ5܆f}k̫.{)oZj\SJntFGbrc%|T1*w|UPΖ1?HI&[W$SoS]8lfc6hc|{J=Oߧul%^O$:_ |H>{h_Dݕ^͕)BL6Y5O??VK>MIPr"z{YP66QMdܕn۸ e8w}wS=qb}ѣ W~;tk9{kеI 2#\*X=$D\f ќ0z=76BFÄ ߽Q@qnqڽSU.ULbu7^4R*da T`~۷,0+ll`X@l8 _ xҼ Qq] n֣pGM*P!3*ܵu*J 먨5!Za2fjf|GފjuQb]$frq% jz2U53/C R+W섽.4IENDB`rt-4.4.4/devel/third-party/ckeditor-src/samples/img/navigation-tip.png0000644000175000017500000002737513776355015024140 0ustar domdomPNG  IHDR,h.IDATx t[չ%YyB)q&2Alq&NHB ˒gْ;kKoܮ.Go{tWn弳O#\\t&I|}{t]zSmvy܆U'muؓF Nz}nF~ͳ o]a./ޜ\]5q`6 `I0)u[S[-\0@@g eN7]k67y)WLLu"~ڝ7dHDȲf+ЀXܖ}/֞$py'13!ctjg6'SrŢӥd׵=mߺ$·\w~[EBgS6ܵ'}ϾJL$Syvѝ7ۚl\CCW/mJduiPp>tNa^ٱ H!53 y[Zxڇ>AI gKuqxwm-kcǛ϶:жU֥nwv?>)W,z(+|>Ou@(s}Ui|urujf՛D;IPpmy\Ȼ:;/?|Qn:YuCkcIHhV Lx-]2hɒltJQ4Rݦm)-|ְt߿Hܨ~/Ll٦7 I,zr˼ϻ;. nm>Q%DKI-|#(, D(0ٳRfRiRlZ)!z [6teE:׆+7#]y+9㋔]躖q{=WRt$;I°7u+}Tַ͖7vu Oߊޗ;<7Ϋ 4wg8Bˆ6_5wū:4O vo80ٶg[;'Ρ~;Z5%_u^\1#7۵qCr6v4?~Mέq?X;/\[QfUSQkd\ۺ._yAy?7| ՉH[d[ؾy赻}p+캟c"xX_d|RNR)vjS32/O+^|=cw?Q_!V~\!d%8[AQLT4/(;β߆ ʘ &v@؂q}²#T1\T{[Ģb~m 9zG@fʛ$ik}Qr:f+Fx @#U-ɛ^ki!9`qbd03j Q8&m U-!{3! K%/Tr^8ДZ$4!>ȔuF&Dxx&x2z4ᰦ!BKN.Y916*(:?Z%(O:~5iԟbβFywJ}ROKF-&(dĈ񨨗sf:%7QK< oV[7d+1">ס)}.V8C^/=%ϔ]% Ii 봆|jh!Vƛ(cδ(z.ikx͸ZM0M(xDśN'W򂣒VxɮjҼEIJ3i)~ e8䵆QK|9%,q ZϳnfN2-?y2l@f"rv81ZxR2akru#EHT*"GYRKUz5Ğ@1pODŭ=>+9ס Ϭ *%SF,o&c*'ȽVjiBǝ]g+#mL.S&9G=j ?dTi*$>~yk+?FHK!p-2Aq4v]$&R4+5uc@ey5:&!][ZhmJu^KSvݚ$;EGF*t]P6|D# ǒv~GҮF +nDԮ!( a9~1Q[M-d$aaCCEnx8HCE͐ϐ.(xRd]&e>Ua"E5HQIgqF]õn]Zm4#Ԃr{5ϣdx cwB^'v=Y}< q|_9ܓE.K)'4wRp(*=)k%tcG^a dѮOV9.;NxfK͛F%kwT1.U@D!v.9=ܓU>|;&JJN '' U! B8B V8è$(,M2*xvElg51ZXI^"|7Կ;qdvY)r~x_g{rEOR' 4'OiJ"Sh!@BB$ո=lƀǛ`y*~ǣ}OLEj'; 7^f-IgwIڲs4sb;5}VQ&:Vi>-1~UNIhE;!$m{b/,0et5,E%%w0|.:{xb|ֱi)Κ\E'WK%v4/:,M¼KH*Ŗ}bqðA @`gFʛ9'jfvz[|_ ws>5kJTl9g<>_{HE럔İ 7:MG*Ϣ-T[B-7\JX5Tfer% q3|eZҌx<_Ǔkr׈H<Ņ߇ j-d4GۦȈBR_I*g&WC^Uj)H5ȏn+ACy*1iLƖ-(=2'Ȣ,aǪ|x2V fQzxl=10} 6*ZPXyt1J)5}4j%7һa1[Ǎ}ψ3}C{<yX7S8'ZEMۓ\Hh(zCPg.%t,?g:F0//O_Y]mE$]J0%Sl+kvTqqt1]%X˙lG_=ēHmE'9_HN'|и㓕w֖:Zz^hE|ki~QYƝWֆ~0x3-iy}}[uשMh{!>5C1;aKݾ7iݗ:yڇ[nC ʃN?T-؜,7\] P n|z_%5/X$mʕe6AHZ~eޓ3 i3ffNϝIʖ N{;B[K-sҧߔb+-5=66fx_(~,xE|f4̘63}5¾& >@?`H$ib7wNV&ﮝ9o &6U6wkr#; 3M:yͲGON6EOgq>);;$n2f-Rzh=uJgo! Y-c)s8%Y`±*>nm#8o޲qyiy3VxL@p)3ҶSr6KnMQRf&I}OH)j?[{kK\S VN;-`dǶ}xOK=vǥڿfiT$s&´=6޹y%1d[CwCiC.thvwl[]h.F]>]Wr3R^ю%⦤YeWܦ`d*[J/ntmߚpʹYflJZ&;!3[p}J&[SϿ[~Vm]=$swVe; a#&l#L >KEGN^6m=y2jPžb8j=kc*A;uEܛRV搄(%AZ6Y a{-tg,7miu`ⰲ/9["6kSϋ``k `ͽg˗>0 ?#})tKB;C;ssw؛{h %u6i20&ac^)PHoam} {C%^?_L6n^|乊6^q_{6|ȗ&s41OEbx  .9xQ]*P~o,|<e :N:/{P].[zVu.L,n? S6tqco7[K#󞧭o\j=}t+}n;oP_|\(XyPdKWKo:zfƺ`:_Foƞ;om yQp|}C3Co"C;2$5uuއ+f 7*;#frB[N7i޺t W =gSCu>uI%؟(؆"+2(=GW(:jyjH -vq:lmͽ/Y}w=3ʻ.{y vG%_lz$pz9f}_AϿ)jqrjl͡ߕ6v1~Y}s5=pG6t?sit@ LL苯<# ֿ=іpt\״վuԭ-=׼vՁ8cyqxxlDMI)9ft漂2|ƣMDW449/<$eҵ.-0_`dg"Pfz5d,o8:̸hmmےzvz8vt4uj>9 톀:}zH$T^bJ7o Q/ ((ˬmXQQbI@b3];Y,) (Ç#:], צO6UeAije; KWkjD,DB4EԐP[%nNK 8Xj 钜{ܡAGo .e# z5n|4x̐`ݸG<.#ڏB9ГMդ/Slg+뺃·t~`6l{ZVeGQXT y|m8p] }qEץKWmⶦtaf"blam6VYw1l O\V99üu.W)S*WWm˯|ɬ_'8xyzGu7"A? (Cӊ^f盞Kn?<'n_5[u#gkV@PĦ5=-WMBc޴UB =|5g7P(( +Hٻ]Ζ҆ο,kn8ֲ!z2g0\]&|D~nr i[O=N i^1Y ot 6| _]Ts&N끠SވX֎t_(qFمk%gZ"hnٶķ7@LI݋f6ԝjlG olg 򎭩]<кya`ޥ.^zm<]9[.Ty۳q Wa,s%֦kPUtFf@v Ń?k޶ev_+iDE3>UupA/ An r;$/ضQAZL@˖-{-6;C8=CT{(,$4U=csEAE#F0MDMZ&tME :຤Ji r;3>1li&OeosqWw?iX_)R5$(ǓA'A1B]]qD1%j$ Y\8`&E+5"D~moJ7:S{MecJzEӧ/"nu:Vx`$`EcaaclZAg |ގZny3y*\?:%WkY713Qo>OfBڄ>p~Xx(3"rs@,z}Q/Y4n A^GQbya7ĘgT`oM5cJ\@"ƍ!G{D0G |]_Z!Ej4TTHI ,H5kVJtkN~}+Л]'AD# E+# **7vSx74 ZQ<7>Wpj ]sc8eJ@h y]J5t#;gFeڴii,T1L`CwQcfky?<.CMsk2׋ʍNiFB+\MZ&-*ZåԘą>G)Mғ+#1-HΘ\\m.z-I? fuX+6%ёXAKh>C)S =Ix^x6y2Qxz ڡZJRh,){㉆w]y]'2 OLu!:DYpO8x&X %) m``u-@cQ\r#xD yezH(h)ENg>rɈ&Rhyn䌨Wim =/:5Fc^ٞbIHw"GX!+^G]hu+(y2<&6Oʒ}_V?SN^5cj7 \hX O>E˘\VZD-?=X_ŕ"'=Q7ߜ$NiDRb8<O S^+y&H2z0PO6jïF#od^y-b]_5ttuv-#C7iIՎ(˜b[n>Gk߫6-e}tT7UxQg wDfhJOĺsd}/q%PXD%4ƛQJ>KG:v,u XzEW~ }`|`k|?pɣ?iNg*ʖ)~Q\IcZ2ӧQK<>O߈[HՓ$@0ZK"NGɣiPtK(g( jhm*_ӛeusgH4'\sȓj(O>:llVo߉{yJwVtA,V_X&<ԓ cPʭpώ͈ |' RKEOjf; {A!B1~@ Hrӊ)+5ADHIx*bKhI:<T!J@ZxܫΣMUK"=| ;PړH.OxYT yb˜iCqkE5 "_ @6IENDB`rt-4.4.4/devel/third-party/ckeditor-src/samples/img/header-bg.png0000644000175000017500000003143613776355015023016 0ustar domdomPNG  IHDRqr%2IDATx}Yeu]H8H#P, NdPMٖĬzU)Ѳ# GĎl N#@䧃|(b%fwPU]Cwo>{uXUTΝog3;6v;Nۿ_}W 7蓏vse_~76ӏd4S 2qt])_7sĿIOݳx$Zk?g}AoyMV66ۛ9p' 磙}4VK7qsS$*ګtkZNtR+Y2U73g;-<"ۗ! eb9_L τ2E,"Jn:Uw߅칔 9;ݛ.w?67'ύ6{f[+@mOyegėp!_>; ؙ*|Ǿի_J!s@pik+kf A!X?n!ק {*;] e徻.$vxԜ*nsm cHSP+۔p_JjWJ-qŹB\)^Oŋ7QB۩_Aܙ.).-?qeh˸5vsp5U³qnۋ@jQ4>1P0U>)şm1?=6=^>Asב}*+x f p3*YwJ #}5WJ߆|=U>A;fʁs?M4MS@/l$+9|_cyZnc`m*kzZ x,rqr﹁cԖA k48 iW J-h&v\]9Mc :d4jrRB>J=u*TSkZyyT:V0𾦂n۸62 )#JӶ<6 33amY̳QA5W914eHS.5}K,CV]wUȺn#-SZ8mHwH;H;iפ 9VHq_0Lys&o2u~L}vs_NT&ۚʠ[!ߚ۵Y&wnp%GQwRжpiagDOEg h*_)Bo ‚1S݌%ʤI&]py-uTփF d0\Ux >][@F #0WMۄ4JA@6%iUx:CpvV*A#} vsLdm 3Zvt]̂VDT6lDՒ5x0wE:[(M}`|vb sTy1Th7,h"}{L0Q(*"Mj' AQh6-B4&q,zV2@C vDqϐktcpY ƹ>}vy@v{Cn[zO\zS>MY-u$``WLŔI]X /hHh6 ^`Q<iq8#xb& hG@(wa^ݩhxt@9amSMtws_}ׯ; "2 mK-6KJZ &*(M_N"5J4Pnmy< pA++E@bq@9>済F;h>oDAnHM\S{ vU+;j4;6Q!"*Ah v'`v*EHi' m:դRZ9RaÐͼ6Ԇq㽁6:pΜoytO⽓&VkPh)Af,+WE'I{ZS)w(KL]ȵt CWJ#cfÂ~|.Z08CDA!nB;"A?d֮?7n.q*h*Q8= xQCuf[h ab}%HfVc Ҏ%sfG"R8 1-ܬihe=@ԁ3u^r `. "ߐ6ˆZ :3Q ;mQ^j!GgT:izM$t%Ahal@6]_C#F@w=U7ʞ8M:db AXNm.-aD-8.ABh;(C1_*dK ^hߨi~h/OI٢f2%m +0DΫai %CUI(U1ԦJj-1p $i[;7Bul+ZOhl=6 aA @J ZBKAlgLRĠn"nAnsk uR+VPMC҄@V%lIU##astdaȝn4߫nt*;;eu[,2#(XilyG灮h[LP`ZhJZHPI[8 m>x wb:/i 4PC(v?™J+΍Ji滔M'6JH™j NfC/C'.Bnէ$:`o6USٍy YPQ9Hq { F9\spKL|!28,el&86Bv,ZaF.@B{;яbp"g}gŒ$Oܼ$s`8Ym6m di]46@gZ ڂ)^46@imZIMkp:\\R \͎RnVKtͦ~#E-eƐPfSS4Ѱ9:[oHh;YD3HE [4zScף`i&RZ+Cnt'U];О^ ؾR*ŷE qrT_#Łlzw];I2 4rslh+tĎʞLj:2L!Z*>i)imMnu&44YLrى˝g.B=3of|ҟy3/m? "3gw~/}h ryQ[whJ 2\!rv SktM} gŮGYsىսݳ{g'dDs3k(ې[:d6MW!oA^|U~%#/̯>4uB5@'D PÔWtkoc]J߿ii2 S5Jӻ3̙g_?YŸ6O7GmYR C#\ ɂV0n,Yw{3c0;f۞Ø=z[է>/>]Տ\xL<:~1sfRta`v=0ЌI#[L ObO=>؇>#O=#ih0>7{GyGޟ{艜w;Nw;~*~q+SK0sh?c_+q'4':/ZW꓅֊cIt._M|֋gPYBatУr>Jg˿r4ansaInU+IR=lCx;ZjDSWq|6,_+ M 4gƌ{dT@lg{=#%Tq$煵=.eF}=Sz[Է[&_jNjwPHl=lpvT@l?0I˘9װF666+[Soq.L+:jK#fgqP:[&.-&'7/qd}l:̞N>Y=>T +i%]KtZȨy?8Qgo伌)K`d”ݰ/4Xq3n*+JL0eYauThdqTAl Ri(ؼ5& ]Rpt#P_q4+ہ,MJgKBSej|FONr^\ct &=˝@e=^s_pX&񀬢1{t#fDP@Ok^X}r"id|.ԐL{fR)a5.}&8VZG0Ԩ\-;J*tc{#ߜjO sF$e,ڧV%pEJ(v5PEk˜IFZb(O!)Чfr pNr^ƌ'VF%'4KsZH)־¦ІJwZ8qǕUy(Ty'D!۞.+X{q^UI*@1\vdH ީ ku8(-0 ɬ,{#P =y!HkQ>!U椴>9N eMڤRfuĄ'QB{(8(-I>بw;yS2RW;I[@xNM4Ӏ͎+O4q*\.r<" )1P:[SJJ I AL:U:%)Dj0e f o jF7m QR9< %2Cm&*'9/"$.۵ZHNlhV^]*9xn))1P:[;3%4S"i`̓LF tyB:ùnpf6T)-ZxTA_K)H=TG{'9/c/'˅tš&n:*FNprڪl#5#r>Jg'ky퉉Jzb96q& UOM) A"=g)i5W4M8(-j}8; ;^ jtѼ8Ă#"H:*ޟ.RY3RM,Ԑmǃ#Ȩ '꘡Rv:'ԼIJY@u2FzC7J> (в՞h;埕Ozp q4+7>yK Fо8xY- LBYIP ,n}QR9_:eL8n5DjvBM4M5u&S8 4zcG'#UGF|Ζva^IkSX25 I& OI%g]UmWV-=qvay#wFK)-.|S+6ڰh8='wRDvDqr}v8R*ctM?% 伌NdRHa4h5@j&4\Q0r>JgtB.uk- ؼun*Iv* B`n!m7pNXʊi%qP:[Єr;q.'7/ci X"PHVFA! &2~Ȕ֗Ѡ%tTAl ն2HSvb+HECUKXYm,ꎚJzK?輤LQ!qP:[eaM˺.csb2FF\ԞL\@.v_|%9;q=]ҮgZf /pvZ}Ie(aH6Bl=I 4q-ȏ g'^`U˷[*d-!o1._nEM'| )@\lT9=a? +w>5/ۏ/~w>^1dJ~r6d&S^{C|gx>/'MeP'0zRr;, =qW6/H,=|mI5lSr ,7z\J7KNV#/Q87Z^ΉQ'ٶm/>[T'JUKgMkd\N=.یsE:aMَٗ~Z Xs2V^%$|F_(ۑ&rǏW?nO77z\27yaŸ v LJ,g-('7HW6Y{Lj^ iTd Prxl?m_n*rjlVw'~yhmY΃m[E ]sp(k2U#($R$vL+f9:VHf*WI%r*6Of>*m2͚/da3U;k# ?Jmoߟ/"/nem-T gBZ@'cI%VW®u ʶ$+[aiVٞ5g%90<m} /@&~qCFR^O"vțE N透.-QP v9% #c86Qf,XpɲoaA 2M *"uJuE+_ g*p;+,Xx.FqH/0zo_7YZ|)-ef2sYY_:q9`7 : V={:i6lBI.<>+WJE]D T$<>@[6JZ'kF=ccW *`?ﯻHYfi2 XZ ι0輅BH x9sXxòe^;6h;It%p5+ (YXl ?VC]]]Nga ̥/h˃g&_Լ$?Aւ>o Fz4c{B[j2ѓ8:k؃\!\dB$,N²5 5ϑ˝R:Do4qhIVBAe2f<U"5t΋P4&AĺG{/J_*i5S(S"İUR 8IWxxJ~/8'oDрs6ߴ?ϰ^!^< ĈH%]h*˔Q@ut$&iq5$ӶP@cCxVZ+o.R^ ,yIhowԼ/.7Æa{{ʹ7B?Y{[m_siQAkށCwBoa! NZBknM8Q ruk`(+7HrKn@Ƈ= ^-OEuh`yyf.mYf^g:;3GR˙7O Du7 i"R+ǔfoZLD!Pp:]Svрd {.xM\8E.SI ^7]j( @̨5w"[h{lv31'8M< Ӿh9 -Nk }m1Ӥ@)! sj_ঐNwZH: .D\KBbKaHbqcŽqzaBs>0 F$<>y!ޙp5h9y?'vLu imM+#@Y-5oB/yJ[X ~Hk3qV48St\\! so|`n5:(iNLhzX(NyA5"8q;]bXg$ ƪnNCž~B0ӳB"$ i[;G< VtZ$ c,M-}F%vD>jrTK (-4ެ ـ ڀfa~+ U=>̡٘S)61Z "Z\ :wsvU۲7ٹ5hs^P<wvt}?ۍ\sQkgF2=c쇝-;hZA8A yx05t@FRq@n( tFڮMNnk4<Qs q́)u{-7sQnm&Z(LAĉV5 bf;?TgW+轆[}o4g?n Ebk-~ ak~hRsb Ex9Y}Yf;+nUVBuDS23P%>~үσXπmNP@'OzBaJ7B Yi0Hva殟kTx5zܦK[&^V 4{ϠTvpqMU6i~-#kb=cdv?+W959lS9sf娋=m_lfѷiy};m>RҮskH} ?ms4lg/ؼZqLyy?W!*ݣ.)q+Qo;I1LT6}hAzH>CْrA5}! lFh` !%=29S< Y5l->fo*wsU/@hUL5֞ZύM >Ⱏя0I{Qar\-O<{ƃV:~u\6ϴzTVai^%V~AbƺL̹s4|"mqIENDB`rt-4.4.4/devel/third-party/ckeditor-src/samples/img/header-separator.png0000644000175000017500000000017313776355015024420 0ustar domdomPNG  IHDRM3BIDATxK CrCG!76]I2Y.|h +Y6--_ E7IENDB`rt-4.4.4/devel/third-party/ckeditor-src/samples/img/github-top.png0000644000175000017500000000057713776355015023264 0ustar domdomPNG  IHDR[iPLTEv"tRNS=\-gQ'Bv6kl|IDATEr0JnB°ٌ06Ov]vgU9Bp.V-y^PvZ E9k<;E=zШ9DjP#eU^KYa8e XU.\l5I_ʜ)dHyIENDB`rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/0000755000175000017500000000000014006075351023761 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/js/0000755000175000017500000000000013776355015024410 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/js/toolbarmodifier.js0000644000175000017500000010610513776355015030132 0ustar domdom/* global ToolbarConfigurator, alert */ 'use strict'; ( function() { var AbstractToolbarModifier = ToolbarConfigurator.AbstractToolbarModifier; /** * @class ToolbarConfigurator.ToolbarModifier * @param {String} editorId An id of modified editor * @param {Object} cfg * @extends AbstractToolbarModifier * @constructor */ function ToolbarModifier( editorId, cfg ) { AbstractToolbarModifier.call( this, editorId, cfg ); this.removedButtons = null; this.originalConfig = null; this.actualConfig = null; this.emptyVisible = false; // edit, paste, config this.state = 'edit'; this.toolbarButtons = [ { text: { active: 'Hide empty toolbar groups', inactive: 'Show empty toolbar groups' }, group: 'edit', position: 'left', cssClass: 'button-a-soft', clickCallback: function( button, buttonDefinition ) { var className = 'button-a-background'; button[ button.hasClass( className ) ? 'removeClass' : 'addClass' ]( className ); this._toggleVisibilityEmptyElements(); if ( this.emptyVisible ) { button.setText( buttonDefinition.text.active ); } else { button.setText( buttonDefinition.text.inactive ); } } }, { text: 'Add row separator', group: 'edit', position: 'left', cssClass: 'button-a-soft', clickCallback: function() { this._addSeparator(); } }, /*{ text: 'Paste config', group: 'edit', position: 'left', clickCallback: function() { this.state = 'paste'; this.modifyContainer.addClass( 'hidden' ); this.configContainer.removeClass( 'hidden' ); this.configContainer.setHtml( '' ); this.showToolbarBtnsByGroupName( 'config' ); } },*/ { text: 'Select config', group: 'config', position: 'left', cssClass: 'button-a-soft', clickCallback: function() { this.configContainer.findOne( 'textarea' ).$.select(); } }, { text: 'Back to configurator', group: 'config', position: 'right', cssClass: 'button-a-background', clickCallback: function() { if ( this.state === 'paste' ) { var cfg = this.configContainer.findOne( 'textarea' ).getValue(); cfg = ToolbarModifier.evaluateToolbarGroupsConfig( cfg ); if ( cfg ) { this.setConfig( cfg ); } else { alert( 'Your pasted config is wrong.' ); } } this.state = 'edit'; this._showConfigurationTool(); this.showToolbarBtnsByGroupName( this.state ); } }, { text: 'Get toolbar config', group: 'edit', position: 'right', cssClass: 'button-a-background icon-pos-left icon-download', clickCallback: function() { this.state = 'config'; this._showConfig(); this.showToolbarBtnsByGroupName( this.state ); } } ]; this.cachedActiveElement = null; } // Expose the class. ToolbarConfigurator.ToolbarModifier = ToolbarModifier; ToolbarModifier.prototype = Object.create( ToolbarConfigurator.AbstractToolbarModifier.prototype ); /** * @returns {Object} */ ToolbarModifier.prototype.getActualConfig = function() { var copy = AbstractToolbarModifier.prototype.getActualConfig.call( this ); if ( copy.toolbarGroups ) { var max = copy.toolbarGroups.length; for ( var i = 0; i < max; i += 1 ) { var currentGroup = copy.toolbarGroups[ i ]; copy.toolbarGroups[ i ] = ToolbarModifier.parseGroupToConfigValue( currentGroup ); } } return copy; }; /** * @param {Function} callback * @param {String} [config] * @param {Boolean} [forceKeepRemoveButtons=false] * @private */ ToolbarModifier.prototype._onInit = function( callback, config, forceKeepRemoveButtons ) { forceKeepRemoveButtons = ( forceKeepRemoveButtons === true ); AbstractToolbarModifier.prototype._onInit.call( this, undefined, config ); this.removedButtons = []; if ( forceKeepRemoveButtons ) { if ( this.actualConfig.removeButtons ) { this.removedButtons = this.actualConfig.removeButtons.split( ',' ); } else { this.removedButtons = []; } } else { if ( !( 'removeButtons' in this.originalConfig ) ) { this.originalConfig.removeButtons = ''; this.removedButtons = []; } else { this.removedButtons = this.originalConfig.removeButtons ? this.originalConfig.removeButtons.split( ',' ) : []; } } if ( !this.actualConfig.toolbarGroups ) this.actualConfig.toolbarGroups = this.fullToolbarEditor.getFullToolbarGroupsConfig(); this._fixGroups( this.actualConfig ); this._calculateTotalBtns(); this._createModifier(); this._refreshMoveBtnsAvalibility(); this._refreshBtnTabIndexes(); if ( typeof callback === 'function' ) callback( this.mainContainer ); }; /** * @private */ ToolbarModifier.prototype._showConfigurationTool = function() { this.configContainer.addClass( 'hidden' ); this.modifyContainer.removeClass( 'hidden' ); }; /** * Show configuration file in tool * * @private */ ToolbarModifier.prototype._showConfig = function() { var that = this, actualConfig = this.getActualConfig(), cfg = {}; if ( actualConfig.toolbarGroups ) { cfg.toolbarGroups = actualConfig.toolbarGroups; var groups = prepareGroups( actualConfig.toolbarGroups, this.cfg.trimEmptyGroups ); cfg.toolbarGroups = '\n\t\t' + groups.join( ',\n\t\t' ); } function prepareGroups( toolbarGroups, trimEmptyGroups ) { var groups = [], max = toolbarGroups.length; for ( var i = 0; i < max; i++ ) { var group = toolbarGroups[ i ]; if ( group === '/' ) { groups.push( '\'/\'' ); continue; } if ( trimEmptyGroups ) { var max2 = group.groups.length; while ( max2-- ) { var subgroup = group.groups[ max2 ]; if ( ToolbarModifier.getTotalSubGroupButtonsNumber( subgroup, that.fullToolbarEditor ) === 0 ) { group.groups.splice( max2, 1 ); } } } if ( !( trimEmptyGroups && group.groups.length === 0 ) ) { groups.push( AbstractToolbarModifier.stringifyJSONintoOneLine( group, { addSpaces: true, noQuotesOnKey: true, singleQuotes: true } ) ); } } return groups; } if ( actualConfig.removeButtons ) { cfg.removeButtons = actualConfig.removeButtons; } var content = [ '' ].join( '' ); this.modifyContainer.addClass( 'hidden' ); this.configContainer.removeClass( 'hidden' ); this.configContainer.setHtml( content ); }; /** * Toggle empty groups and subgroups visibility. * * @private */ ToolbarModifier.prototype._toggleVisibilityEmptyElements = function() { if ( this.modifyContainer.hasClass( 'empty-visible' ) ) { this.modifyContainer.removeClass( 'empty-visible' ); this.emptyVisible = false; } else { this.modifyContainer.addClass( 'empty-visible' ); this.emptyVisible = true; } this._refreshMoveBtnsAvalibility(); }; /** * Creates HTML main container of modifier. * * @returns {CKEDITOR.dom.element} * @private */ ToolbarModifier.prototype._createModifier = function() { var that = this; AbstractToolbarModifier.prototype._createModifier.call( this ); this.modifyContainer.setHtml( this._toolbarConfigToListString() ); var groupLi = this.modifyContainer.find( 'li[data-type="group"]' ); this.modifyContainer.on( 'mouseleave', function() { this._dehighlightActiveToolGroup(); }, this ); var max = groupLi.count(); for ( var i = 0; i < max; i += 1 ) { groupLi.getItem( i ).on( 'mouseenter', onGroupHover ); } function onGroupHover() { that._highlightGroup( this.data( 'name' ) ); } CKEDITOR.document.on( 'keypress', function( e ) { var nativeEvent = e.data.$, keyCode = nativeEvent.keyCode, spaceOrEnter = ( keyCode === 32 || keyCode === 13 ), active = new CKEDITOR.dom.element( CKEDITOR.document.$.activeElement ); var mainContainer = active.getAscendant( function( node ) { return node.$ === that.mainContainer.$; } ); if ( !mainContainer || !spaceOrEnter ) { return; } if ( active.data( 'type' ) === 'button' ) { active.findOne( 'input' ).$.click(); } } ); this.modifyContainer.on( 'click', function( e ) { var origEvent = e.data.$, target = new CKEDITOR.dom.element( ( origEvent.target || origEvent.srcElement ) ), relativeGroupOrSeparatorLi = ToolbarModifier.getGroupOrSeparatorLiAncestor( target ); if ( !relativeGroupOrSeparatorLi ) { return; } that.cachedActiveElement = document.activeElement; // checkbox clicked if ( target.$ instanceof HTMLInputElement ) that._handleCheckboxClicked( target ); // link clicked else if ( target.$ instanceof HTMLButtonElement ) { if ( origEvent.preventDefault ) origEvent.preventDefault(); else origEvent.returnValue = false; var result = that._handleAnchorClicked( target.$ ); if ( result && result.action == 'remove' ) return; } var elementType = relativeGroupOrSeparatorLi.data( 'type' ), elementName = relativeGroupOrSeparatorLi.data( 'name' ); that._setActiveElement( elementType, elementName ); if ( that.cachedActiveElement ) that.cachedActiveElement.focus(); } ); if ( !this.toolbarContainer ) { this._createToolbar(); this.toolbarContainer.insertBefore( this.mainContainer.getChildren().getItem( 0 ) ); } this.showToolbarBtnsByGroupName( 'edit' ); if ( !this.configContainer ) { this.configContainer = new CKEDITOR.dom.element( 'div' ); this.configContainer.addClass( 'configContainer' ); this.configContainer.addClass( 'hidden' ); this.mainContainer.append( this.configContainer ); } return this.mainContainer; }; /** * Show toolbar buttons related to group name provided in argument * and hide other buttons * Please note: this method works on toolbar in tool, which is located * on top of the tool * * @param {String} groupName */ ToolbarModifier.prototype.showToolbarBtnsByGroupName = function( groupName ) { if ( !this.toolbarContainer ) { return; } var allButtons = this.toolbarContainer.find( 'button' ); var max = allButtons.count(); for ( var i = 0; i < max; i += 1 ) { var currentBtn = allButtons.getItem( i ); if ( currentBtn.data( 'group' ) == groupName ) currentBtn.removeClass( 'hidden' ); else currentBtn.addClass( 'hidden' ); } }; /** * Parse group "model" to configuration value * * @param {Object} group * @returns {Object} * @private */ ToolbarModifier.parseGroupToConfigValue = function( group ) { if ( group.type == 'separator' ) { return '/'; } var groups = group.groups, max = groups.length; delete group.totalBtns; for ( var i = 0; i < max; i += 1 ) { groups[ i ] = groups[ i ].name; } return group; }; /** * Find closest Li ancestor in DOM tree which is group or separator element * * @param {CKEDITOR.dom.element} element * @returns {CKEDITOR.dom.element} */ ToolbarModifier.getGroupOrSeparatorLiAncestor = function( element ) { if ( element.$ instanceof HTMLLIElement && element.data( 'type' ) == 'group' ) return element; else { return ToolbarModifier.getFirstAncestor( element, function( ancestor ) { var type = ancestor.data( 'type' ); return ( type == 'group' || type == 'separator' ); } ); } }; /** * Set active element in tool by provided type and name. * * @param {String} type * @param {String} name */ ToolbarModifier.prototype._setActiveElement = function( type, name ) { // clear current active element if ( this.currentActive ) this.currentActive.elem.removeClass( 'active' ); if ( type === null ) { this._dehighlightActiveToolGroup(); this.currentActive = null; return; } var liElem = this.mainContainer.findOne( 'ul[data-type=table-body] li[data-type="' + type + '"][data-name="' + name + '"]' ); liElem.addClass( 'active' ); // setup model this.currentActive = { type: type, name: name, elem: liElem }; // highlight group in toolbar if ( type == 'group' ) this._highlightGroup( name ); if ( type == 'separator' ) this._dehighlightActiveToolGroup(); }; /** * @returns {CKEDITOR.dom.element|null} */ ToolbarModifier.prototype.getActiveToolGroup = function() { if ( this.editorInstance.container ) return this.editorInstance.container.findOne( '.cke_toolgroup.active, .cke_toolbar.active' ); else return null; }; /** * @private */ ToolbarModifier.prototype._dehighlightActiveToolGroup = function() { var currentActive = this.getActiveToolGroup(); if ( currentActive ) currentActive.removeClass( 'active' ); // @see ToolbarModifier.prototype._highlightGroup. if ( this.editorInstance.container ) { this.editorInstance.container.removeClass( 'some-toolbar-active' ); } }; /** * Highlight group by its name, and dehighlight current group. * * @param {String} name */ ToolbarModifier.prototype._highlightGroup = function( name ) { if ( !this.editorInstance.container ) return; var foundBtnName = this.getFirstEnabledButtonInGroup( name ), foundBtn = this.editorInstance.container.findOne( '.cke_button__' + foundBtnName + ', .cke_combo__' + foundBtnName ); this._dehighlightActiveToolGroup(); // Helpful to dim other toolbar groups if one is highlighted. if ( this.editorInstance.container ) { this.editorInstance.container.addClass( 'some-toolbar-active' ); } if ( foundBtn ) { var btnToolbar = ToolbarModifier.getFirstAncestor( foundBtn, function( ancestor ) { return ancestor.hasClass( 'cke_toolbar' ); } ); if ( btnToolbar ) btnToolbar.addClass( 'active' ); } }; /** * @param {String} groupName * @return {String|null} */ ToolbarModifier.prototype.getFirstEnabledButtonInGroup = function( groupName ) { var groups = this.actualConfig.toolbarGroups, groupIndex = this.getGroupIndex( groupName ), group = groups[ groupIndex ]; if ( groupIndex === -1 ) { return null; } var max = group.groups ? group.groups.length : 0; for ( var i = 0; i < max; i += 1 ) { var currSubgroupName = group.groups[ i ].name, firstEnabled = this.getFirstEnabledButtonInSubgroup( currSubgroupName ); if ( firstEnabled ) return firstEnabled; } return null; }; /** * @param {String} subgroupName * @returns {String|null} */ ToolbarModifier.prototype.getFirstEnabledButtonInSubgroup = function( subgroupName ) { var subgroupBtns = this.fullToolbarEditor.buttonsByGroup[ subgroupName ]; var max = subgroupBtns ? subgroupBtns.length : 0; for ( var i = 0; i < max; i += 1 ) { var currBtnName = subgroupBtns[ i ].name; if ( !this.isButtonRemoved( currBtnName ) ) return currBtnName; } return null; }; /** * Sets up parameters and call adequate action. * * @param {CKEDITOR.dom.element} checkbox * @private */ ToolbarModifier.prototype._handleCheckboxClicked = function( checkbox ) { var closestLi = checkbox.getAscendant( 'li' ), elementName = closestLi.data( 'name' ), aboutToAddToRemoved = !checkbox.$.checked; if ( aboutToAddToRemoved ) this._addButtonToRemoved( elementName ); else this._removeButtonFromRemoved( elementName ); }; /** * Sets up parameters and call adequate action. * * @param {HTMLAnchorElement} anchor * @private */ ToolbarModifier.prototype._handleAnchorClicked = function( anchor ) { var anchorDOM = new CKEDITOR.dom.element( anchor ), relativeLi = anchorDOM.getAscendant( 'li' ), relativeUl = relativeLi.getAscendant( 'ul' ), elementType = relativeLi.data( 'type' ), elementName = relativeLi.data( 'name' ), direction = anchorDOM.data( 'direction' ), nearestLi = ( direction === 'up' ? relativeLi.getPrevious() : relativeLi.getNext() ), groupName, subgroupName, newIndex; // nothing to do if ( anchorDOM.hasClass( 'disabled' ) ) return null; // remove separator and nothing else if ( anchorDOM.hasClass( 'remove' ) ) { relativeLi.remove(); this._removeSeparator( relativeLi.data( 'name' ) ); this._setActiveElement( null ); return { action: 'remove' }; } if ( !anchorDOM.hasClass( 'move' ) || !nearestLi ) return { action: null }; // move group or separator if ( elementType === 'group' || elementType === 'separator' ) { groupName = elementName; newIndex = this._moveGroup( direction, groupName ); } // move subgroup if ( elementType === 'subgroup' ) { subgroupName = elementName; groupName = relativeLi.getAscendant( 'li' ).data( 'name' ); newIndex = this._moveSubgroup( direction, groupName, subgroupName ); } // Visual effect if ( direction === 'up' ) relativeLi.insertBefore( relativeUl.getChild( newIndex ) ); if ( direction === 'down' ) relativeLi.insertAfter( relativeUl.getChild( newIndex ) ); // Should know whether there is next li element after modifications. var nextLi = relativeLi; // We are looking for next li element in list (to check whether current one is the last one) var found; while ( nextLi = ( direction === 'up' ? nextLi.getPrevious() : nextLi.getNext() ) ) { if ( !this.emptyVisible && nextLi.hasClass( 'empty' ) ) { continue; } found = nextLi; break; } // If not found, it means that we reached end. if ( !found ) { var selector = ( '[data-direction="' + ( direction === 'up' ? 'down' : 'up' ) + '"]' ); // Shifting direction. this.cachedActiveElement = anchorDOM.getParent().findOne( selector ); } this._refreshMoveBtnsAvalibility(); this._refreshBtnTabIndexes(); return { action: 'move' }; }; /** * First element can not be moved up, and last element can not be moved down, * so they are disabled. */ ToolbarModifier.prototype._refreshMoveBtnsAvalibility = function() { var that = this, disabledBtns = this.mainContainer.find( 'ul[data-type=table-body] li > p > span > button.move.disabled' ); // enabling all disabled buttons var max = disabledBtns.count(); for ( var i = 0; i < max; i += 1 ) { var currentBtn = disabledBtns.getItem( i ); currentBtn.removeClass( 'disabled' ); } function disableElementsInLists( ulList ) { var max = ulList.count(); for ( i = 0; i < max; i += 1 ) { that._disableElementsInList( ulList.getItem( i ) ); } } // Disable buttons in toolbars. disableElementsInLists( this.mainContainer.find( 'ul[data-type=table-body]' ) ); // Disable buttons in toolbar groups. disableElementsInLists( this.mainContainer.find( 'ul[data-type=table-body] > li > ul' ) ); }; /** * @private */ ToolbarModifier.prototype._refreshBtnTabIndexes = function() { var tabindexed = this.mainContainer.find( '[data-tab="true"]' ); var max = tabindexed.count(); for ( var i = 0; i < max; i++ ) { var item = tabindexed.getItem( i ), disabled = item.hasClass( 'disabled' ); item.setAttribute( 'tabindex', disabled ? -1 : i ); } }; /** * Disable buttons to move elements up and down which should be disabled. * * @param {CKEDITOR.dom.element} ul * @private */ ToolbarModifier.prototype._disableElementsInList = function( ul ) { var liList = ul.getChildren(); if ( !liList.count() ) return; var firstDisabled, lastDisabled; if ( this.emptyVisible ) { firstDisabled = ul.getFirst(); lastDisabled = ul.getLast(); } else { firstDisabled = ul.getFirst( isNotEmptyChecker ); lastDisabled = ul.getLast( isNotEmptyChecker ); } function isNotEmptyChecker( element ) { return !element.hasClass( 'empty' ); } if ( firstDisabled ) var firstDisabledBtn = firstDisabled.findOne( 'p button[data-direction="up"]' ); if ( lastDisabled ) var lastDisabledBtn = lastDisabled.findOne( 'p button[data-direction="down"]' ); if ( firstDisabledBtn ) { firstDisabledBtn.addClass( 'disabled' ); firstDisabledBtn.setAttribute( 'tabindex', '-1' ); } if ( lastDisabledBtn ) { lastDisabledBtn.addClass( 'disabled' ); lastDisabledBtn.setAttribute( 'tabindex', '-1' ); } }; /** * Gets group index in actual config toolbarGroups * * @param {String} name * @returns {Number} */ ToolbarModifier.prototype.getGroupIndex = function( name ) { var groups = this.actualConfig.toolbarGroups; var max = groups.length; for ( var i = 0; i < max; i += 1 ) { if ( groups[ i ].name === name ) return i; } return -1; }; /** * Handle adding separator. * * @private */ ToolbarModifier.prototype._addSeparator = function() { var separatorIndex = this._determineSeparatorToAddIndex(), separator = ToolbarModifier.createSeparatorLiteral(), domSeparator = CKEDITOR.dom.element.createFromHtml( ToolbarModifier.getToolbarSeparatorString( separator ) ); this.actualConfig.toolbarGroups.splice( separatorIndex, 0, separator ); domSeparator.insertBefore( this.modifyContainer.findOne( 'ul[data-type=table-body]' ).getChild( separatorIndex ) ); this._setActiveElement( 'separator', separator.name ); this._refreshMoveBtnsAvalibility(); this._refreshBtnTabIndexes(); this._refreshEditor(); }; /** * Handle removing separator. * * @param {String} name */ ToolbarModifier.prototype._removeSeparator = function( name ) { var separatorIndex = CKEDITOR.tools.indexOf( this.actualConfig.toolbarGroups, function( group ) { return group.type == 'separator' && group.name == name; } ); this.actualConfig.toolbarGroups.splice( separatorIndex, 1 ); this._refreshMoveBtnsAvalibility(); this._refreshBtnTabIndexes(); this._refreshEditor(); }; /** * Determine index where separator should be added, based on currently selected element. * * @returns {Number} * @private */ ToolbarModifier.prototype._determineSeparatorToAddIndex = function() { if ( !this.currentActive ) return 0; var groupLi; if ( this.currentActive.elem.data( 'type' ) == 'group' || this.currentActive.elem.data( 'type' ) == 'separator' ) groupLi = this.currentActive.elem; else groupLi = this.currentActive.elem.getAscendant( 'li' ); return groupLi.getIndex(); }; /** * @param {Array} elementsArray * @param {Number} elementIndex * @param {String} direction * @returns {Number} * @private */ ToolbarModifier.prototype._moveElement = function( elementsArray, elementIndex, direction ) { var nextIndex; if ( this.emptyVisible ) nextIndex = ( direction == 'down' ? elementIndex + 1 : elementIndex - 1 ); else { // When empty elements are not visible, there is need to skip them. nextIndex = ToolbarModifier.getFirstElementIndexWith( elementsArray, elementIndex, direction, isEmptyOrSeparatorChecker ); } function isEmptyOrSeparatorChecker( element ) { return element.totalBtns || element.type == 'separator'; } var offset = nextIndex - elementIndex; return ToolbarModifier.moveTo( offset, elementsArray, elementIndex ); }; /** * Moves group located in config level up or down and refresh editor. * * @param {String} direction * @param {String} groupName * @returns {Number} */ ToolbarModifier.prototype._moveGroup = function( direction, groupName ) { var groupIndex = this.getGroupIndex( groupName ), groups = this.actualConfig.toolbarGroups, newIndex = this._moveElement( groups, groupIndex, direction ); this._refreshMoveBtnsAvalibility(); this._refreshBtnTabIndexes(); this._refreshEditor(); return newIndex; }; /** * Moves subgroup located in config level up or down and refresh editor. * * @param {String} direction * @param {String} groupName * @param {String} subgroupName * @private */ ToolbarModifier.prototype._moveSubgroup = function( direction, groupName, subgroupName ) { var groupIndex = this.getGroupIndex( groupName ), groups = this.actualConfig.toolbarGroups, group = groups[ groupIndex ], subgroupIndex = CKEDITOR.tools.indexOf( group.groups, function( subgroup ) { return subgroup.name == subgroupName; } ), newIndex = this._moveElement( group.groups, subgroupIndex, direction ); this._refreshEditor(); return newIndex; }; /** * Set `totalBtns` property in `actualConfig.toolbarGroups` elements. * * @private */ ToolbarModifier.prototype._calculateTotalBtns = function() { var groups = this.actualConfig.toolbarGroups; var i = groups.length; // from the end while ( i-- ) { var currentGroup = groups[ i ], totalBtns = ToolbarModifier.getTotalGroupButtonsNumber( currentGroup, this.fullToolbarEditor ); if ( currentGroup.type == 'separator' ) { // nothing to do with separator continue; } currentGroup.totalBtns = totalBtns; } }; /** * Add button to removeButtons field in config and refresh editor. * * @param {String} buttonName * @private */ ToolbarModifier.prototype._addButtonToRemoved = function( buttonName ) { if ( CKEDITOR.tools.indexOf( this.removedButtons, buttonName ) != -1 ) throw 'Button already added to removed'; this.removedButtons.push( buttonName ); this.actualConfig.removeButtons = this.removedButtons.join( ',' ); this._refreshEditor(); }; /** * Remove button from removeButtons field in config and refresh editor. * * @param {String} buttonName * @private */ ToolbarModifier.prototype._removeButtonFromRemoved = function( buttonName ) { var foundAtIndex = CKEDITOR.tools.indexOf( this.removedButtons, buttonName ); if ( foundAtIndex === -1 ) throw 'Trying to remove button from removed, but not found'; this.removedButtons.splice( foundAtIndex, 1 ); this.actualConfig.removeButtons = this.removedButtons.join( ',' ); this._refreshEditor(); }; /** * Parse group "model" to configuration value * * @param {Object} group * @returns {Object} * @static */ ToolbarModifier.parseGroupToConfigValue = function( group ) { if ( group.type == 'separator' ) { return '/'; } var groups = group.groups, max = groups.length; delete group.totalBtns; for ( var i = 0; i < max; i += 1 ) { groups[ i ] = groups[ i ].name; } return group; }; /** * Find closest Li ancestor in DOM tree which is group or separator element * * @param {CKEDITOR.dom.element} element * @returns {CKEDITOR.dom.element} * @static */ ToolbarModifier.getGroupOrSeparatorLiAncestor = function( element ) { if ( element.$ instanceof HTMLLIElement && element.data( 'type' ) == 'group' ) return element; else { return ToolbarModifier.getFirstAncestor( element, function( ancestor ) { var type = ancestor.data( 'type' ); return ( type == 'group' || type == 'separator' ); } ); } }; /** * Create separator literal with unique id. * * @public * @static * @return {Object} */ ToolbarModifier.createSeparatorLiteral = function() { return { type: 'separator', name: ( 'separator' + CKEDITOR.tools.getNextNumber() ) }; }; /** * Creates HTML unordered list string based on toolbarGroups field in config. * * @returns {String} * @static */ ToolbarModifier.prototype._toolbarConfigToListString = function() { var groups = this.actualConfig.toolbarGroups || [], listString = '
    '; var max = groups.length; for ( var i = 0; i < max; i += 1 ) { var currentGroup = groups[ i ]; if ( currentGroup.type === 'separator' ) listString += ToolbarModifier.getToolbarSeparatorString( currentGroup ); else listString += this._getToolbarGroupString( currentGroup ); } listString += '
'; var headerString = ToolbarModifier.getToolbarHeaderString(); return headerString + listString; }; /** * Created HTML group list element based on group field in config. * * @param {Object} group * @returns {String} * @private */ ToolbarModifier.prototype._getToolbarGroupString = function( group ) { var subgroups = group.groups, groupString = ''; groupString += [ '
  • ' ].join( '' ); groupString += ToolbarModifier.getToolbarElementPreString( group ) + '
      '; var max = subgroups.length; for ( var i = 0; i < max; i += 1 ) { var currentSubgroup = subgroups[ i ], subgroupBtns = this.fullToolbarEditor.buttonsByGroup[ currentSubgroup.name ]; groupString += this._getToolbarSubgroupString( currentSubgroup, subgroupBtns ); } groupString += '
  • '; return groupString; }; /** * @param {Object} separator * @returns {String} * @static */ ToolbarModifier.getToolbarSeparatorString = function( separator ) { return [ '
  • ', ToolbarModifier.getToolbarElementPreString( 'row separator' ), '
  • ' ].join( '' ); }; /** * @returns {string} */ ToolbarModifier.getToolbarHeaderString = function() { return '
      ' + '
    • ' + '

      Toolbars

      ' + '
        ' + '
      • ' + '

        Toolbar groups

        ' + '

        Toolbar group items

        ' + '
      • ' + '
      ' + '
    • ' + '
    '; }; /** * Find and return first ancestor of element provided in first argument * which match the criteria checked in function provided in second argument. * * @param {CKEDITOR.dom.element} element * @param {Function} checker * @returns {CKEDITOR.dom.element|null} */ ToolbarModifier.getFirstAncestor = function( element, checker ) { var ancestors = element.getParents(), i = ancestors.length; while ( i-- ) { if ( checker( ancestors[ i ] ) ) return ancestors[ i ]; } return null; }; /** * Looking through array elements start from index provided in second argument * and go 'up' or 'down' in array * last argument is condition checker which should return Boolean value * * User cases: * * ToolbarModifier.getFirstElementIndexWith( [3, 4, 8, 1, 4], 2, 'down', function( elem ) { return elem == 4; } ); // 4 * ToolbarModifier.getFirstElementIndexWith( [3, 4, 8, 1, 4], 2, 'up', function( elem ) { return elem == 4; } ); // 1 * * @param {Array} array * @param {Number} i * @param {String} direction 'up' or 'down' * @param {Function} conditionChecker * @static * @returns {Number} index of found element */ ToolbarModifier.getFirstElementIndexWith = function( array, i, direction, conditionChecker ) { function whileChecker() { var result; if ( direction === 'up' ) result = i--; else result = ( ++i < array.length ); return result; } while ( whileChecker() ) { if ( conditionChecker( array[ i ] ) ) return i; } return -1; }; /** * Moves array element at index level up or down. * * @static * @param {String} direction * @param {Array} array * @param {Number} index * @returns {Number} */ ToolbarModifier.moveTo = function( offset, array, index ) { var element, newIndex; if ( index !== -1 ) element = array.splice( index, 1 )[ 0 ]; newIndex = index + offset; array.splice( newIndex, 0, element ); return newIndex; }; /** * @static * @param {Object} subgroup * @returns {Number} */ ToolbarModifier.getTotalSubGroupButtonsNumber = function( subgroup, fullToolbarEditor ) { var subgroupName = ( typeof subgroup == 'string' ? subgroup : subgroup.name ), subgroupBtns = fullToolbarEditor.buttonsByGroup[ subgroupName ]; return ( subgroupBtns ? subgroupBtns.length : 0 ); }; /** * Returns all buttons number in group which are nested in subgroups also. * * @param {Object} group * @param {ToolbarModifier.FullToolbarEditor} * @static * @returns {Number} */ ToolbarModifier.getTotalGroupButtonsNumber = function( group, fullToolbarEditor ) { var total = 0, subgroups = group.groups; var max = subgroups ? subgroups.length : 0; for ( var i = 0; i < max; i += 1 ) total += ToolbarModifier.getTotalSubGroupButtonsNumber( subgroups[ i ], fullToolbarEditor ); return total; }; /** * Creates HTML subgroup list element based on subgroup field in config. * * @param {Object} subgroup * @param {Array} groupBtns * @returns {String} * @private */ ToolbarModifier.prototype._getToolbarSubgroupString = function( subgroup, groupBtns ) { var subgroupString = ''; subgroupString += [ '
  • ' ].join( '' ); subgroupString += ToolbarModifier.getToolbarElementPreString( subgroup.name ); subgroupString += '
      '; var max = groupBtns ? groupBtns.length : 0; for ( var i = 0; i < max; i += 1 ) subgroupString += this.getButtonString( groupBtns[ i ] ); subgroupString += '
    '; subgroupString += '
  • '; return subgroupString; }; /** * @param {String} buttonName * @returns {String|null} * @private */ ToolbarModifier.prototype._getConfigButtonName = function( buttonName ) { var items = this.fullToolbarEditor.editorInstance.ui.items; var name; for ( name in items ) { if ( items[ name ].name == buttonName ) return name; } return null; }; /** * @param {String} buttonName * @returns {Boolean} */ ToolbarModifier.prototype.isButtonRemoved = function( buttonName ) { return CKEDITOR.tools.indexOf( this.removedButtons, this._getConfigButtonName( buttonName ) ) != -1; }; /** * @param {CKEDITOR.ui.button/CKEDITOR.ui.richCombo} button * @returns {String} * @public */ ToolbarModifier.prototype.getButtonString = function( button ) { var checked = ( this.isButtonRemoved( button.name ) ? '' : 'checked="checked"' ); return [ '
  • ', '', '
  • ' ].join( '' ); }; /** * Creates group header string. * * @param {Object|String} group * @returns {String} * @static */ ToolbarModifier.getToolbarElementPreString = function( group ) { var name = ( group.name ? group.name : group ); return [ '

    ', '', '', '', ( name == 'row separator' ? '' : '' ), name, '', '

    ' ].join( '' ); }; /** * @static * @param {String} cfg * @returns {String} */ ToolbarModifier.evaluateToolbarGroupsConfig = function( cfg ) { cfg = ( function( cfg ) { var config = {}, result; /*jshint -W002 */ try { result = eval( '(' + cfg + ')' ); } catch ( e ) { try { result = eval( cfg ); } catch ( e ) { return null; } } /*jshint +W002 */ if ( config.toolbarGroups && typeof config.toolbarGroups.length === 'number' ) { return JSON.stringify( config ); } else if ( result && typeof result.length === 'number' ) { return JSON.stringify( { toolbarGroups: result } ); } else if ( result && result.toolbarGroups ) { return JSON.stringify( result ); } else { return null; } }( cfg ) ); return cfg; }; return ToolbarModifier; } )(); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js0000644000175000017500000003401513776355015031656 0ustar domdom/* global ToolbarConfigurator */ 'use strict'; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create if ( typeof Object.create != 'function' ) { ( function() { var F = function() {}; Object.create = function( o ) { if ( arguments.length > 1 ) { throw Error( 'Second argument not supported' ); } if ( o === null ) { throw Error( 'Cannot set a null [[Prototype]]' ); } if ( typeof o != 'object' ) { throw TypeError( 'Argument must be an object' ); } F.prototype = o; return new F(); }; } )(); } // Copy of the divarea plugin (with some enhancements), so we always have some editable mode, regardless of the build's config. CKEDITOR.plugins.add( 'toolbarconfiguratorarea', { // Use afterInit to override wysiwygarea's mode. May still fail to override divarea, but divarea is nice. afterInit: function( editor ) { editor.addMode( 'wysiwyg', function( callback ) { var editingBlock = CKEDITOR.dom.element.createFromHtml( '
    ' ); var contentSpace = editor.ui.space( 'contents' ); contentSpace.append( editingBlock ); editingBlock = editor.editable( editingBlock ); editingBlock.detach = CKEDITOR.tools.override( editingBlock.detach, function( org ) { return function() { org.apply( this, arguments ); this.remove(); }; } ); editor.setData( editor.getData( 1 ), callback ); editor.fire( 'contentDom' ); } ); // Additions to the divarea. // Speed up data processing. editor.dataProcessor.toHtml = function( html ) { return html; }; editor.dataProcessor.toDataFormat = function( html ) { return html; }; // End of the additions. } } ); // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys if ( !Object.keys ) { Object.keys = ( function() { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !( { toString: null } ).propertyIsEnumerable( 'toString' ), dontEnums = [ 'toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor' ], dontEnumsLength = dontEnums.length; return function( obj ) { if ( typeof obj !== 'object' && ( typeof obj !== 'function' || obj === null ) ) throw new TypeError( 'Object.keys called on non-object' ); var result = [], prop, i; for ( prop in obj ) { if ( hasOwnProperty.call( obj, prop ) ) result.push( prop ); } if ( hasDontEnumBug ) { for ( i = 0; i < dontEnumsLength; i++ ) { if ( hasOwnProperty.call( obj, dontEnums[ i ] ) ) result.push( dontEnums[ i ] ); } } return result; }; }() ); } ( function() { /** * @class ToolbarConfigurator.AbstractToolbarModifier * @param {String} editorId An id of modified editor * @constructor */ function AbstractToolbarModifier( editorId, cfg ) { this.cfg = cfg || {}; this.hidden = false; this.editorId = editorId; this.fullToolbarEditor = new ToolbarConfigurator.FullToolbarEditor(); this.mainContainer = null; this.originalConfig = null; this.actualConfig = null; this.waitForReady = false; this.isEditableVisible = false; this.toolbarContainer = null; this.toolbarButtons = []; } // Expose the class. ToolbarConfigurator.AbstractToolbarModifier = AbstractToolbarModifier; /** * @param {String} config */ AbstractToolbarModifier.prototype.setConfig = function( config ) { this._onInit( undefined, config, true ); }; /** * @param {Function} [callback] */ AbstractToolbarModifier.prototype.init = function( callback ) { var that = this; this.mainContainer = new CKEDITOR.dom.element( 'div' ); if ( this.fullToolbarEditor.editorInstance !== null ) { throw 'Only one instance of ToolbarModifier is allowed'; } if ( !this.editorInstance ) { // Do not refresh yet, let's wait for the full toolbar editor (see below). this._createEditor( false ); } this.editorInstance.once( 'loaded', function() { that.fullToolbarEditor.init( function() { that._onInit( callback ); if ( typeof that.onRefresh == 'function' ) { that.onRefresh(); } }, that.editorInstance.config ); } ); return this.mainContainer; }; /** * Called editor initialization finished. * * @param {Function} callback * @param {String} [actualConfig] * @private */ AbstractToolbarModifier.prototype._onInit = function( callback, actualConfig ) { this.originalConfig = this.editorInstance.config; if ( !actualConfig ) { this.actualConfig = JSON.parse( JSON.stringify( this.originalConfig ) ); } else { this.actualConfig = JSON.parse( actualConfig ); } if ( !this.actualConfig.toolbarGroups && !this.actualConfig.toolbar ) { this.actualConfig.toolbarGroups = getDefaultToolbarGroups( this.editorInstance ); } if ( typeof callback === 'function' ) callback( this.mainContainer ); // Here we are going to keep only `name` and `groups` data from editor `toolbar` property. function getDefaultToolbarGroups( editor ) { var toolbarGroups = editor.toolbar, copy = []; var max = toolbarGroups.length; for ( var i = 0; i < max; i++ ) { var group = toolbarGroups[ i ]; if ( typeof group == 'string' ) { copy.push( group ); // separator } else { copy.push( { name: group.name, groups: group.groups ? group.groups.slice() : [] } ); } } return copy; } }; /** * Creates DOM structure of tool. * * @returns {CKEDITOR.dom.element} * @private */ AbstractToolbarModifier.prototype._createModifier = function() { this.mainContainer.addClass( 'unselectable' ); if ( this.modifyContainer ) { this.modifyContainer.remove(); } this.modifyContainer = new CKEDITOR.dom.element( 'div' ); this.modifyContainer.addClass( 'toolbarModifier' ); this.mainContainer.append( this.modifyContainer ); return this.mainContainer; }; /** * Find editable area in CKEditor instance DOM container * * @returns {CKEDITOR.dom.element} */ AbstractToolbarModifier.prototype.getEditableArea = function() { var selector = ( '#' + this.editorInstance.id + '_contents' ); return this.editorInstance.container.findOne( selector ); }; /** * Hide editable area in modified editor by sets its height to 0. * * @private */ AbstractToolbarModifier.prototype._hideEditable = function() { var area = this.getEditableArea(); this.isEditableVisible = false; this.lastEditableAreaHeight = area.getStyle( 'height' ); area.setStyle( 'height', '0' ); }; /** * Show editable area in modified editor. * * @private */ AbstractToolbarModifier.prototype._showEditable = function() { this.isEditableVisible = true; this.getEditableArea().setStyle( 'height', this.lastEditableAreaHeight || 'auto' ); }; /** * Toggle editable area visibility. * * @private */ AbstractToolbarModifier.prototype._toggleEditable = function() { if ( this.isEditableVisible ) this._hideEditable(); else this._showEditable(); }; /** * Usually called when configuration changes. * * @private */ AbstractToolbarModifier.prototype._refreshEditor = function() { var that = this, status = this.editorInstance.status; // Wait for ready only once. if ( this.waitForReady ) return; // Not ready. if ( status == 'unloaded' || status == 'loaded' ) { this.waitForReady = true; this.editorInstance.once( 'instanceReady', function() { refresh(); }, this ); // Ready or destroyed. } else { refresh(); } function refresh() { that.editorInstance.destroy(); that._createEditor( true, that.getActualConfig() ); that.waitForReady = false; } }; /** * Creates editor that can be used to present the toolbar configuration. * * @private */ AbstractToolbarModifier.prototype._createEditor = function( doRefresh, configOverrides ) { var that = this; this.editorInstance = CKEDITOR.replace( this.editorId ); this.editorInstance.on( 'configLoaded', function() { var config = that.editorInstance.config; if ( configOverrides ) { CKEDITOR.tools.extend( config, configOverrides, true ); } AbstractToolbarModifier.extendPluginsConfig( config ); } ); // Prevent creating any other space than the top one. this.editorInstance.on( 'uiSpace', function( evt ) { if ( evt.data.space != 'top' ) { evt.stop(); } }, null, null, -999 ); this.editorInstance.once( 'loaded', function() { var btns = that.editorInstance.ui.instances; for ( var i in btns ) { if ( btns[ i ] ) { btns[ i ].click = empty; btns[ i ].onClick = empty; } } if ( !that.isEditableVisible ) { that._hideEditable(); } if ( that.currentActive && that.currentActive.name ) { that._highlightGroup( that.currentActive.name ); } if ( that.hidden ) { that.hideUI(); } else { that.showUI(); } if ( doRefresh && ( typeof that.onRefresh === 'function' ) ) { that.onRefresh(); } } ); function empty() {} }; /** * Always returns copy of config. * * @returns {Object} */ AbstractToolbarModifier.prototype.getActualConfig = function() { return JSON.parse( JSON.stringify( this.actualConfig ) ); }; /** * Creates toolbar in tool. * * @private */ AbstractToolbarModifier.prototype._createToolbar = function() { if ( !this.toolbarButtons.length ) { return; } this.toolbarContainer = new CKEDITOR.dom.element( 'div' ); this.toolbarContainer.addClass( 'toolbar' ); var max = this.toolbarButtons.length; for ( var i = 0; i < max; i += 1 ) { this._createToolbarBtn( this.toolbarButtons[ i ] ); } }; /** * Create toolbar button and add it to toolbar container * * @param {Object} cfg * @returns {CKEDITOR.dom.element} * @private */ AbstractToolbarModifier.prototype._createToolbarBtn = function( cfg ) { var btnText = ( typeof cfg.text === 'string' ? cfg.text : cfg.text.inactive ), btn = ToolbarConfigurator.FullToolbarEditor.createButton( btnText, cfg.cssClass ); this.toolbarContainer.append( btn ); btn.data( 'group', cfg.group ); btn.addClass( cfg.position ); btn.on( 'click', function() { cfg.clickCallback.call( this, btn, cfg ); }, this ); return btn; }; /** * @private * @param {Object} config */ AbstractToolbarModifier.prototype._fixGroups = function( config ) { var groups = config.toolbarGroups || []; var max = groups.length; for ( var i = 0; i < max; i += 1 ) { var currentGroup = groups[ i ]; // separator, in config, is in raw format // need to make it more sophisticated to keep unique id // for each one if ( currentGroup == '/' ) { currentGroup = groups[ i ] = {}; currentGroup.type = 'separator'; currentGroup.name = ( 'separator' + CKEDITOR.tools.getNextNumber() ); continue; } // sometimes subgroups are not set (basic package), so need to // create them artifically currentGroup.groups = currentGroup.groups || []; // when there is no subgroup with same name like its parent name // then it have to be added artificially // in order to maintain consistency between user interface and config if ( CKEDITOR.tools.indexOf( currentGroup.groups, currentGroup.name ) == -1 ) { this.editorInstance.ui.addToolbarGroup( currentGroup.name, currentGroup.groups[ currentGroup.groups.length - 1 ], currentGroup.name ); currentGroup.groups.push( currentGroup.name ); } this._fixSubgroups( currentGroup ); } }; /** * Transform subgroup string to object literal * with keys: {String} name and {Number} totalBtns * Please note: this method modify Object provided in first argument * * input: * [ * { groups: [ 'nameOne', 'nameTwo' ] } * ] * * output: * [ * { groups: [ { name: 'nameOne', totalBtns: 3 }, { name: 'nameTwo', totalBtns: 5 } ] } * ] * * @param {Object} group * @private */ AbstractToolbarModifier.prototype._fixSubgroups = function( group ) { var subGroups = group.groups; var max = subGroups.length; for ( var i = 0; i < max; i += 1 ) { var subgroupName = subGroups[ i ]; subGroups[ i ] = { name: subgroupName, totalBtns: ToolbarConfigurator.ToolbarModifier.getTotalSubGroupButtonsNumber( subgroupName, this.fullToolbarEditor ) }; } }; /** * Same as JSON.stringify method but returned string is in one line * * @param {Object} json * @param {Object} opts * @param {Boolean} opts.addSpaces * @param {Boolean} opts.noQuotesOnKey * @param {Boolean} opts.singleQuotes * @returns {Object} */ AbstractToolbarModifier.stringifyJSONintoOneLine = function( json, opts ) { opts = opts || {}; var stringJSON = JSON.stringify( json, null, '' ); // IE8 make new line characters stringJSON = stringJSON.replace( /\n/g, '' ); if ( opts.addSpaces ) { stringJSON = stringJSON.replace( /(\{|:|,|\[|\])/g, function( sentence ) { return sentence + ' '; } ); stringJSON = stringJSON.replace( /(\])/g, function( sentence ) { return ' ' + sentence; } ); } if ( opts.noQuotesOnKey ) { stringJSON = stringJSON.replace( /"(\w*)":/g, function( sentence, word ) { return word + ':'; } ); } if ( opts.singleQuotes ) { stringJSON = stringJSON.replace( /\"/g, '\'' ); } return stringJSON; }; /** * Hide toolbar configurator */ AbstractToolbarModifier.prototype.hideUI = function() { this.hidden = true; this.mainContainer.hide(); if ( this.editorInstance.container ) { this.editorInstance.container.hide(); } }; /** * Show toolbar configurator */ AbstractToolbarModifier.prototype.showUI = function() { this.hidden = false; this.mainContainer.show(); if ( this.editorInstance.container ) { this.editorInstance.container.show(); } }; /** * Extends plugins setttings in the specified config with settings useful for * the toolbar configurator. * * @static */ AbstractToolbarModifier.extendPluginsConfig = function( config ) { var extraPlugins = config.extraPlugins; // Enable the special, lightweight area to replace wysiwygarea. config.extraPlugins = ( extraPlugins ? extraPlugins + ',' : '' ) + 'toolbarconfiguratorarea'; }; } )(); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/js/toolbartextmodifier.js0000644000175000017500000003755213776355015031050 0ustar domdom/* global CodeMirror, ToolbarConfigurator */ 'use strict'; ( function() { var AbstractToolbarModifier = ToolbarConfigurator.AbstractToolbarModifier, FullToolbarEditor = ToolbarConfigurator.FullToolbarEditor; /** * @class ToolbarConfigurator.ToolbarTextModifier * @param {String} editorId An id of modified editor * @extends AbstractToolbarModifier * @constructor */ function ToolbarTextModifier( editorId ) { AbstractToolbarModifier.call( this, editorId ); this.codeContainer = null; this.hintContainer = null; } // Expose the class. ToolbarConfigurator.ToolbarTextModifier = ToolbarTextModifier; ToolbarTextModifier.prototype = Object.create( AbstractToolbarModifier.prototype ); /** * @param {Function} callback * @param {String} [config] * @private */ ToolbarTextModifier.prototype._onInit = function( callback, config ) { AbstractToolbarModifier.prototype._onInit.call( this, undefined, config ); this._createModifier( config ? this.actualConfig : undefined ); if ( typeof callback === 'function' ) callback( this.mainContainer ); }; /** * Creates HTML main container of modifier. * * @param {String} cfg * @returns {CKEDITOR.dom.element} * @private */ ToolbarTextModifier.prototype._createModifier = function( cfg ) { var that = this; this._createToolbar(); if ( this.toolbarContainer ) { this.mainContainer.append( this.toolbarContainer ); } AbstractToolbarModifier.prototype._createModifier.call( this ); this._setupActualConfig( cfg ); var toolbarCfg = this.actualConfig.toolbar, cfgValue; if ( CKEDITOR.tools.isArray( toolbarCfg ) ) { var stringifiedToolbar = '[\n\t\t' + FullToolbarEditor.map( toolbarCfg, function( json ) { return AbstractToolbarModifier.stringifyJSONintoOneLine( json, { addSpaces: true, noQuotesOnKey: true, singleQuotes: true } ); } ).join( ',\n\t\t' ) + '\n\t]'; cfgValue = '\tconfig.toolbar = ' + stringifiedToolbar + ';'; } else { cfgValue = 'config.toolbar = [];'; } cfgValue = [ 'CKEDITOR.editorConfig = function( config ) {\n', cfgValue, '\n};' ].join( '' ); function hint( cm ) { var data = setupData( cm ); if ( data.charsBetween === null ) { return; } var unused = that.getUnusedButtonsArray( that.actualConfig.toolbar, true, data.charsBetween ), to = cm.getCursor(), from = CodeMirror.Pos( to.line, ( to.ch - ( data.charsBetween.length ) ) ), token = cm.getTokenAt( to ), prevToken = cm.getTokenAt( { line: to.line, ch: token.start } ); // determine that we are at beginning of group, // so first key is "name" if ( prevToken.string === '{' ) unused = [ 'name' ]; // preventing close with special character and move cursor forward // when no autocomplete if ( unused.length === 0 ) return; return new HintData( from, to, unused ); } function HintData( from, to, list ) { this.from = from; this.to = to; this.list = list; this._handlers = []; } function setupData( cm, character ) { var result = {}; result.cur = cm.getCursor(); result.tok = cm.getTokenAt( result.cur ); result[ 'char' ] = character || result.tok.string.charAt( result.tok.string.length - 1 ); // Getting string between begin of line and cursor. var curLineTillCur = cm.getRange( CodeMirror.Pos( result.cur.line, 0 ), result.cur ); // Reverse string. var currLineTillCurReversed = curLineTillCur.split( '' ).reverse().join( '' ); // Removing proper string definitions : // FROM: // R' ,'odeR' ,'odnU' [ :smeti{ // ^^^^^^ ^^^^^^ // TO: // R' , [ :smeti{ currLineTillCurReversed = currLineTillCurReversed.replace( /(['|"]\w*['|"])/g, '' ); // Matching letters till ' or " character and end string char. // R' , [ :smeti{ // ^ result.charsBetween = currLineTillCurReversed.match( /(^\w*)(['|"])/ ); if ( result.charsBetween ) { result.endChar = result.charsBetween[ 2 ]; // And reverse string (bring to original state). result.charsBetween = result.charsBetween[ 1 ].split( '' ).reverse().join( '' ); } return result; } function complete( cm ) { setTimeout( function() { if ( !cm.state.completionActive ) { CodeMirror.showHint( cm, hint, { hintsClass: 'toolbar-modifier', completeSingle: false } ); } }, 100 ); return CodeMirror.Pass; } var codeMirrorWrapper = new CKEDITOR.dom.element( 'div' ); codeMirrorWrapper.addClass( 'codemirror-wrapper' ); this.modifyContainer.append( codeMirrorWrapper ); this.codeContainer = CodeMirror( codeMirrorWrapper.$, { mode: { name: 'javascript', json: true }, // For some reason (most likely CM's bug) gutter breaks CM's height. // Refreshing CM does not help. lineNumbers: false, lineWrapping: true, // Trick to make CM autogrow. http://codemirror.net/demo/resize.html viewportMargin: Infinity, value: cfgValue, smartIndent: false, indentWithTabs: true, indentUnit: 4, tabSize: 4, theme: 'neo', extraKeys: { 'Left': complete, 'Right': complete, "'''": complete, "'\"'": complete, Backspace: complete, Delete: complete, 'Shift-Tab': 'indentLess' } } ); this.codeContainer.on( 'endCompletion', function( cm, completionData ) { var data = setupData( cm ); // preventing close with special character and move cursor forward // when no autocomplete if ( completionData === undefined ) return; cm.replaceSelection( data.endChar ); } ); this.codeContainer.on( 'change', function() { var value = that.codeContainer.getValue(); value = that._evaluateValue( value ); if ( value !== null ) { that.actualConfig.toolbar = ( value.toolbar ? value.toolbar : that.actualConfig.toolbar ); that._fillHintByUnusedElements(); that._refreshEditor(); that.mainContainer.removeClass( 'invalid' ); } else { that.mainContainer.addClass( 'invalid' ); } } ); this.hintContainer = new CKEDITOR.dom.element( 'div' ); this.hintContainer.addClass( 'toolbarModifier-hints' ); this._fillHintByUnusedElements(); this.hintContainer.insertBefore( codeMirrorWrapper ); }; /** * Create DOM string and set to hint container, * show proper information when no unused element left. * * @private */ ToolbarTextModifier.prototype._fillHintByUnusedElements = function() { var unused = this.getUnusedButtonsArray( this.actualConfig.toolbar, true ); unused = this.groupButtonNamesByGroup( unused ); var unusedElements = FullToolbarEditor.map( unused, function( elem ) { var buttonsList = FullToolbarEditor.map( elem.buttons, function( buttonName ) { return '' + buttonName + ' '; } ).join( '' ); return [ '
    ', '', elem.name, '', '
    ', '
    ', buttonsList, '
    ' ].join( '' ); } ).join( ' ' ); var listHeader = [ '
    Toolbar group
    ', '
    Unused items
    ' ].join( '' ); var header = '

    Unused toolbar items

    '; if ( !unused.length ) { listHeader = '

    All items are in use.

    '; } this.codeContainer.refresh(); this.hintContainer.setHtml( header + '
    ' + listHeader + unusedElements + '
    ' ); }; /** * @param {String} buttonName * @returns {String} */ ToolbarTextModifier.prototype.getToolbarGroupByButtonName = function( buttonName ) { var buttonNames = this.fullToolbarEditor.buttonNamesByGroup; for ( var groupName in buttonNames ) { var buttons = buttonNames[ groupName ]; var i = buttons.length; while ( i-- ) { if ( buttonName === buttons[ i ] ) { return groupName; } } } return null; }; /** * Filter all available toolbar elements by array of elements provided in first argument. * Returns elements which are not used. * * @param {Object} toolbar * @param {Boolean} [sorted=false] * @param {String} prefix * @returns {Array} */ ToolbarTextModifier.prototype.getUnusedButtonsArray = function( toolbar, sorted, prefix ) { sorted = ( sorted === true ? true : false ); var providedElements = ToolbarTextModifier.mapToolbarCfgToElementsList( toolbar ), allElements = Object.keys( this.fullToolbarEditor.editorInstance.ui.items ); // get rid of "-" elements allElements = FullToolbarEditor.filter( allElements, function( elem ) { var isSeparator = ( elem === '-' ), matchPrefix = ( prefix === undefined || elem.toLowerCase().indexOf( prefix.toLowerCase() ) === 0 ); return !isSeparator && matchPrefix; } ); var elementsNotUsed = FullToolbarEditor.filter( allElements, function( elem ) { return CKEDITOR.tools.indexOf( providedElements, elem ) == -1; } ); if ( sorted ) elementsNotUsed.sort(); return elementsNotUsed; }; /** * * @param {Array} buttons * @returns {Array} */ ToolbarTextModifier.prototype.groupButtonNamesByGroup = function( buttons ) { var result = [], groupedBtns = JSON.parse( JSON.stringify( this.fullToolbarEditor.buttonNamesByGroup ) ); for ( var groupName in groupedBtns ) { var currGroup = groupedBtns[ groupName ]; currGroup = FullToolbarEditor.filter( currGroup, function( btnName ) { return CKEDITOR.tools.indexOf( buttons, btnName ) !== -1; } ); if ( currGroup.length ) { result.push( { name: groupName, buttons: currGroup } ); } } return result; }; /** * Map toolbar config value to flat items list. * * input: * [ * { name: "basicstyles", items: ["Bold", "Italic"] }, * { name: "advancedstyles", items: ["Bold", "Outdent", "Indent"] } * ] * * output: * ["Bold", "Italic", "Outdent", "Indent"] * * @param {Object} toolbar * @returns {Array} */ ToolbarTextModifier.mapToolbarCfgToElementsList = function( toolbar ) { var elements = []; var max = toolbar.length; for ( var i = 0; i < max; i += 1 ) { if ( !toolbar[ i ] || typeof toolbar[ i ] === 'string' ) continue; elements = elements.concat( FullToolbarEditor.filter( toolbar[ i ].items, checker ) ); } function checker( elem ) { return elem !== '-'; } return elements; }; /** * @param {String} cfg * @private */ ToolbarTextModifier.prototype._setupActualConfig = function( cfg ) { cfg = cfg || this.editorInstance.config; // if toolbar already exists in config, there is nothing to do if ( CKEDITOR.tools.isArray( cfg.toolbar ) ) return; // if toolbar group not present, we need to pick them from full toolbar instance if ( !cfg.toolbarGroups ) cfg.toolbarGroups = this.fullToolbarEditor.getFullToolbarGroupsConfig( true ); this._fixGroups( cfg ); cfg.toolbar = this._mapToolbarGroupsToToolbar( cfg.toolbarGroups, this.actualConfig.removeButtons ); this.actualConfig.toolbar = cfg.toolbar; this.actualConfig.removeButtons = ''; }; /** * **Please note:** This method modify element provided in first argument. * * @param {Array} toolbarGroups * @returns {Array} * @private */ ToolbarTextModifier.prototype._mapToolbarGroupsToToolbar = function( toolbarGroups, removedBtns ) { removedBtns = removedBtns || this.editorInstance.config.removedBtns; removedBtns = typeof removedBtns == 'string' ? removedBtns.split( ',' ) : []; // from the end, because array indexes may change var i = toolbarGroups.length; while ( i-- ) { var mappedSubgroup = this._mapToolbarSubgroup( toolbarGroups[ i ], removedBtns ); if ( toolbarGroups[ i ].type === 'separator' ) { toolbarGroups[ i ] = '/'; continue; } // don't want empty groups if ( CKEDITOR.tools.isArray( mappedSubgroup ) && mappedSubgroup.length === 0 ) { toolbarGroups.splice( i, 1 ); continue; } if ( typeof mappedSubgroup == 'string' ) toolbarGroups[ i ] = mappedSubgroup; else { toolbarGroups[ i ] = { name: toolbarGroups[ i ].name, items: mappedSubgroup }; } } return toolbarGroups; }; /** * * @param {String|Object} group * @param {Array} removedBtns * @returns {Array} * @private */ ToolbarTextModifier.prototype._mapToolbarSubgroup = function( group, removedBtns ) { var totalBtns = 0; if ( typeof group == 'string' ) return group; var max = group.groups ? group.groups.length : 0, result = []; for ( var i = 0; i < max; i += 1 ) { var currSubgroup = group.groups[ i ]; var buttons = this.fullToolbarEditor.buttonsByGroup[ typeof currSubgroup === 'string' ? currSubgroup : currSubgroup.name ] || []; buttons = this._mapButtonsToButtonsNames( buttons, removedBtns ); var currTotalBtns = buttons.length; totalBtns += currTotalBtns; result = result.concat( buttons ); if ( currTotalBtns ) result.push( '-' ); } if ( result[ result.length - 1 ] == '-' ) result.pop(); return result; }; /** * * @param {Array} buttons * @param {Array} removedBtns * @returns {Array} * @private */ ToolbarTextModifier.prototype._mapButtonsToButtonsNames = function( buttons, removedBtns ) { var i = buttons.length; while ( i-- ) { var currBtn = buttons[ i ], camelCasedName; if ( typeof currBtn === 'string' ) { camelCasedName = currBtn; } else { camelCasedName = this.fullToolbarEditor.getCamelCasedButtonName( currBtn.name ); } if ( CKEDITOR.tools.indexOf( removedBtns, camelCasedName ) !== -1 ) { buttons.splice( i, 1 ); continue; } buttons[ i ] = camelCasedName; } return buttons; }; /** * @param {String} val * @returns {Object} * @private */ ToolbarTextModifier.prototype._evaluateValue = function( val ) { var parsed; try { var config = {}; ( function() { var CKEDITOR = Function( 'var CKEDITOR = {}; ' + val + '; return CKEDITOR;' )(); CKEDITOR.editorConfig( config ); parsed = config; } )(); // CKEditor does not handle empty arrays in configuration files // on IE8 var i = parsed.toolbar.length; while ( i-- ) if ( !parsed.toolbar[ i ] ) parsed.toolbar.splice( i, 1 ); } catch ( e ) { parsed = null; } return parsed; }; /** * @param {Array} toolbar * @returns {{toolbarGroups: Array, removeButtons: string}} */ ToolbarTextModifier.prototype.mapToolbarToToolbarGroups = function( toolbar ) { var usedGroups = {}, removeButtons = [], toolbarGroups = []; var max = toolbar.length; for ( var i = 0; i < max; i++ ) { if ( toolbar[ i ] === '/' ) { toolbarGroups.push( '/' ); continue; } var items = toolbar[ i ].items; var toolbarGroup = {}; toolbarGroup.name = toolbar[ i ].name; toolbarGroup.groups = []; var max2 = items.length; for ( var j = 0; j < max2; j++ ) { var item = items[ j ]; if ( item === '-' ) { continue; } var groupName = this.getToolbarGroupByButtonName( item ); var groupIndex = toolbarGroup.groups.indexOf( groupName ); if ( groupIndex === -1 ) { toolbarGroup.groups.push( groupName ); } usedGroups[ groupName ] = usedGroups[ groupName ] || {}; var buttons = ( usedGroups[ groupName ].buttons = usedGroups[ groupName ].buttons || {} ); buttons[ item ] = buttons[ item ] || { used: 0, origin: toolbarGroup.name }; buttons[ item ].used++; } toolbarGroups.push( toolbarGroup ); } // Handling removed buttons removeButtons = prepareRemovedButtons( usedGroups, this.fullToolbarEditor.buttonNamesByGroup ); function prepareRemovedButtons( usedGroups, buttonNames ) { var removed = []; for ( var groupName in usedGroups ) { var group = usedGroups[ groupName ]; var allButtonsInGroup = buttonNames[ groupName ].slice(); removed = removed.concat( removeStuffFromArray( allButtonsInGroup, Object.keys( group.buttons ) ) ); } return removed; } function removeStuffFromArray( array, stuff ) { array = array.slice(); var i = stuff.length; while ( i-- ) { var atIndex = array.indexOf( stuff[ i ] ); if ( atIndex !== -1 ) { array.splice( atIndex, 1 ); } } return array; } return { toolbarGroups: toolbarGroups, removeButtons: removeButtons.join( ',' ) }; }; return ToolbarTextModifier; } )(); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/js/fulltoolbareditor.js0000644000175000017500000002153013776355015030503 0ustar domdom/* exported ToolbarConfigurator */ /* global ToolbarConfigurator */ 'use strict'; window.ToolbarConfigurator = {}; ( function() { /** * @class ToolbarConfigurator.FullToolbarEditor * @constructor */ function FullToolbarEditor() { this.instanceid = 'fte' + CKEDITOR.tools.getNextId(); this.textarea = new CKEDITOR.dom.element( 'textarea' ); this.textarea.setAttributes( { id: this.instanceid, name: this.instanceid, contentEditable: true } ); this.buttons = null; this.editorInstance = null; } // Expose the class. ToolbarConfigurator.FullToolbarEditor = FullToolbarEditor; /** * @param {Function} callback * @param {Object} cfg */ FullToolbarEditor.prototype.init = function( callback ) { var that = this; document.body.appendChild( this.textarea.$ ); CKEDITOR.replace( this.instanceid ); this.editorInstance = CKEDITOR.instances[ this.instanceid ]; this.editorInstance.once( 'configLoaded', function( e ) { var cfg = e.editor.config; // We want all the buttons. delete cfg.removeButtons; delete cfg.toolbarGroups; delete cfg.toolbar; ToolbarConfigurator.AbstractToolbarModifier.extendPluginsConfig( cfg ); e.editor.once( 'loaded', function() { that.buttons = FullToolbarEditor.toolbarToButtons( that.editorInstance.toolbar ); that.buttonsByGroup = FullToolbarEditor.groupButtons( that.buttons ); that.buttonNamesByGroup = that.groupButtonNamesByGroup( that.buttons ); e.editor.container.hide(); if ( typeof callback === 'function' ) callback( that.buttons ); } ); } ); }; /** * Group array of button names by their group parents. * * @param {Array} buttons * @returns {Object} */ FullToolbarEditor.prototype.groupButtonNamesByGroup = function( buttons ) { var that = this, groups = FullToolbarEditor.groupButtons( buttons ); for ( var groupName in groups ) { var currGroup = groups[ groupName ]; groups[ groupName ] = FullToolbarEditor.map( currGroup, function( button ) { return that.getCamelCasedButtonName( button.name ); } ); } return groups; }; /** * Returns group literal. * * @param {String} name * @returns {Object} */ FullToolbarEditor.prototype.getGroupByName = function( name ) { var groups = this.editorInstance.config.toolbarGroups || this.getFullToolbarGroupsConfig(); var max = groups.length; for ( var i = 0; i < max; i += 1 ) { if ( groups[ i ].name === name ) return groups[ i ]; } return null; }; /** * @param {String} name * @returns {String | null} */ FullToolbarEditor.prototype.getCamelCasedButtonName = function( name ) { var items = this.editorInstance.ui.items; for ( var key in items ) { if ( items[ key ].name == name ) return key; } return null; }; /** * Returns full toolbarGroups config value which is used when * there is no toolbarGroups field in config. * * @param {Boolean} [pickSeparators=false] * @returns {Array} */ FullToolbarEditor.prototype.getFullToolbarGroupsConfig = function( pickSeparators ) { pickSeparators = ( pickSeparators === true ? true : false ); var result = [], toolbarGroups = this.editorInstance.toolbar; var max = toolbarGroups.length; for ( var i = 0; i < max; i += 1 ) { var currentGroup = toolbarGroups[ i ], copiedGroup = {}; if ( typeof currentGroup.name != 'string' ) { // this is not a group if ( pickSeparators ) { result.push( '/' ); } continue; } copiedGroup.name = currentGroup.name; if ( currentGroup.groups ) copiedGroup.groups = Array.prototype.slice.call( currentGroup.groups ); result.push( copiedGroup ); } return result; }; /** * Filters array items based on checker provided in second argument. * Returns new array. * * @param {Array} arr * @param {Function} checker * @returns {Array} */ FullToolbarEditor.filter = function( arr, checker ) { var max = ( arr && arr.length ? arr.length : 0 ), result = []; for ( var i = 0; i < max; i += 1 ) { if ( checker( arr[ i ] ) ) result.push( arr[ i ] ); } return result; }; /** * Simplified http://underscorejs.org/#map functionality * * @param {Array | Object} enumerable * @param {Function} modifier * @returns {Array | Object} */ FullToolbarEditor.map = function( enumerable, modifier ) { var result; if ( CKEDITOR.tools.isArray( enumerable ) ) { result = []; var max = enumerable.length; for ( var i = 0; i < max; i += 1 ) result.push( modifier( enumerable[ i ] ) ); } else { result = {}; for ( var key in enumerable ) result[ key ] = modifier( enumerable[ key ] ); } return result; }; /** * Group buttons by their parent names. * * @static * @param {Array} buttons * @returns {Object} The object (`name => group`) representing CKEDITOR.ui.button or CKEDITOR.ui.richCombo */ FullToolbarEditor.groupButtons = function( buttons ) { var groups = {}; var max = buttons.length; for ( var i = 0; i < max; i += 1 ) { var currBtn = buttons[ i ], currBtnGroupName = currBtn.toolbar.split( ',' )[ 0 ]; groups[ currBtnGroupName ] = groups[ currBtnGroupName ] || []; groups[ currBtnGroupName ].push( currBtn ); } return groups; }; /** * Pick all buttons from toolbar. * * @static * @param {Array} groups * @returns {Array} */ FullToolbarEditor.toolbarToButtons = function( groups ) { var buttons = []; var max = groups.length; for ( var i = 0; i < max; i += 1 ) { var currentGroup = groups[ i ]; if ( typeof currentGroup == 'object' ) buttons = buttons.concat( FullToolbarEditor.groupToButtons( groups[ i ] ) ); } return buttons; }; /** * Creates HTML button representation for view. * * @static * @param {CKEDITOR.ui.button | CKEDITOR.ui.richCombo} button * @returns {CKEDITOR.dom.element} */ FullToolbarEditor.createToolbarButton = function( button ) { var $button = new CKEDITOR.dom.element( 'a' ), icon = FullToolbarEditor.createIcon( button.name, button.icon, button.command ); $button.setStyle( 'float', 'none' ); $button.addClass( 'cke_' + ( CKEDITOR.lang.dir == 'rtl' ? 'rtl' : 'ltr' ) ); if ( button instanceof CKEDITOR.ui.button ) { $button.addClass( 'cke_button' ); $button.addClass( 'cke_toolgroup' ); $button.append( icon ); } else if ( CKEDITOR.ui.richCombo && button instanceof CKEDITOR.ui.richCombo ) { var comboLabel = new CKEDITOR.dom.element( 'span' ), comboOpen = new CKEDITOR.dom.element( 'span' ), comboArrow = new CKEDITOR.dom.element( 'span' ); $button.addClass( 'cke_combo_button' ); comboLabel.addClass( 'cke_combo_text' ); comboLabel.addClass( 'cke_combo_inlinelabel' ); comboLabel.setText( button.label ); comboOpen.addClass( 'cke_combo_open' ); comboArrow.addClass( 'cke_combo_arrow' ); comboOpen.append( comboArrow ); $button.append( comboLabel ); $button.append( comboOpen ); } return $button; }; /** * Create and return icon element. * * @param {String} name * @param {String} icon * @param {String} command * @static * @returns {CKEDITOR.dom.element} */ FullToolbarEditor.createIcon = function( name, icon, command ) { var iconStyle = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); // We don't know exactly how to get icon style. Especially for extra plugins, // Which definition may vary. iconStyle = iconStyle || CKEDITOR.skin.getIconStyle( icon, ( CKEDITOR.lang.dir == 'rtl' ) ); iconStyle = iconStyle || CKEDITOR.skin.getIconStyle( command, ( CKEDITOR.lang.dir == 'rtl' ) ); var iconElement = new CKEDITOR.dom.element( 'span' ); iconElement.addClass( 'cke_button_icon' ); iconElement.addClass( 'cke_button__' + name + '_icon' ); iconElement.setAttribute( 'style', iconStyle ); iconElement.setStyle( 'float', 'none' ); return iconElement; }; /** * Create and return button element * * @param {String} text * @param {String} cssClasses * @returns {CKEDITOR.dom.element} */ FullToolbarEditor.createButton = function( text, cssClasses ) { var $button = new CKEDITOR.dom.element( 'button' ); $button.addClass( 'button-a' ); $button.setAttribute( 'type', 'button' ); if ( typeof cssClasses == 'string' ) { cssClasses = cssClasses.split( ' ' ); var i = cssClasses.length; while ( i-- ) { $button.addClass( cssClasses[ i ] ); } } $button.setHtml( text ); return $button; }; /** * @static * @param {Object} group * @returns {Array} representing HTML buttons for view */ FullToolbarEditor.groupToButtons = function( group ) { var buttons = [], items = group.items; var max = items ? items.length : 0; for ( var i = 0; i < max; i += 1 ) { var item = items[ i ]; if ( item instanceof CKEDITOR.ui.button || CKEDITOR.ui.richCombo && item instanceof CKEDITOR.ui.richCombo ) { item.$ = FullToolbarEditor.createToolbarButton( item ); buttons.push( item ); } } return buttons; }; } )(); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/0000755000175000017500000000000013776355015024542 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/0000755000175000017500000000000014006075351026674 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/show-hint.js0000644000175000017500000003401213776355015031165 0ustar domdom// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var HINT_ELEMENT_CLASS = "CodeMirror-hint"; var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; // This is the old interface, kept around for now to stay // backwards-compatible. CodeMirror.showHint = function(cm, getHints, options) { if (!getHints) return cm.showHint(options); if (options && options.async) getHints.async = true; var newOpts = {hint: getHints}; if (options) for (var prop in options) newOpts[prop] = options[prop]; return cm.showHint(newOpts); }; CodeMirror.defineExtension("showHint", function(options) { // We want a single cursor position. if (this.listSelections().length > 1 || this.somethingSelected()) return; if (this.state.completionActive) this.state.completionActive.close(); var completion = this.state.completionActive = new Completion(this, options); if (!completion.options.hint) return; CodeMirror.signal(this, "startCompletion", this); completion.update(); }); function Completion(cm, options) { this.cm = cm; this.options = this.buildOptions(options); this.widget = null; this.debounce = 0; this.tick = 0; this.startPos = this.cm.getCursor(); this.startLen = this.cm.getLine(this.startPos.line).length; var self = this; cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); }); } var requestAnimationFrame = window.requestAnimationFrame || function(fn) { return setTimeout(fn, 1000/60); }; var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; Completion.prototype = { close: function() { if (!this.active()) return; this.cm.state.completionActive = null; this.tick = null; this.cm.off("cursorActivity", this.activityFunc); if (this.widget) this.widget.close(); CodeMirror.signal(this.cm, "endCompletion", this.cm); }, active: function() { return this.cm.state.completionActive == this; }, pick: function(data, i) { var completion = data.list[i]; if (completion.hint) completion.hint(this.cm, data, completion); else this.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to, "complete"); CodeMirror.signal(data, "pick", completion); this.close(); }, showHints: function(data) { if (!data || !data.list.length || !this.active()) return this.close(); if (this.options.completeSingle && data.list.length == 1) this.pick(data, 0); else this.showWidget(data); }, cursorActivity: function() { if (this.debounce) { cancelAnimationFrame(this.debounce); this.debounce = 0; } var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line); if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || pos.ch < this.startPos.ch || this.cm.somethingSelected() || (pos.ch && this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) { this.close(); } else { var self = this; this.debounce = requestAnimationFrame(function() {self.update();}); if (this.widget) this.widget.disable(); } }, update: function() { if (this.tick == null) return; if (this.data) CodeMirror.signal(this.data, "update"); if (!this.options.hint.async) { this.finishUpdate(this.options.hint(this.cm, this.options), myTick); } else { var myTick = ++this.tick, self = this; this.options.hint(this.cm, function(data) { if (self.tick == myTick) self.finishUpdate(data); }, this.options); } }, finishUpdate: function(data) { this.data = data; var picked = this.widget && this.widget.picked; if (this.widget) this.widget.close(); if (data && data.list.length) { if (picked && data.list.length == 1) this.pick(data, 0); else this.widget = new Widget(this, data); } }, showWidget: function(data) { this.data = data; this.widget = new Widget(this, data); CodeMirror.signal(data, "shown"); }, buildOptions: function(options) { var editor = this.cm.options.hintOptions; var out = {}; for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; if (editor) for (var prop in editor) if (editor[prop] !== undefined) out[prop] = editor[prop]; if (options) for (var prop in options) if (options[prop] !== undefined) out[prop] = options[prop]; return out; } }; function getText(completion) { if (typeof completion == "string") return completion; else return completion.text; } function buildKeyMap(completion, handle) { var baseMap = { Up: function() {handle.moveFocus(-1);}, Down: function() {handle.moveFocus(1);}, PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);}, PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);}, Home: function() {handle.setFocus(0);}, End: function() {handle.setFocus(handle.length - 1);}, Enter: handle.pick, Tab: handle.pick, Esc: handle.close }; var custom = completion.options.customKeys; var ourMap = custom ? {} : baseMap; function addBinding(key, val) { var bound; if (typeof val != "string") bound = function(cm) { return val(cm, handle); }; // This mechanism is deprecated else if (baseMap.hasOwnProperty(val)) bound = baseMap[val]; else bound = val; ourMap[key] = bound; } if (custom) for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]); var extra = completion.options.extraKeys; if (extra) for (var key in extra) if (extra.hasOwnProperty(key)) addBinding(key, extra[key]); return ourMap; } function getHintElement(hintsElement, el) { while (el && el != hintsElement) { if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; el = el.parentNode; } } function Widget(completion, data) { this.completion = completion; this.data = data; this.picked = false; var widget = this, cm = completion.cm; var hints = this.hints = document.createElement("ul"); hints.className = "CodeMirror-hints"; this.selectedHint = data.selectedHint || 0; var completions = data.list; for (var i = 0; i < completions.length; ++i) { var elt = hints.appendChild(document.createElement("li")), cur = completions[i]; var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); if (cur.className != null) className = cur.className + " " + className; elt.className = className; if (cur.render) cur.render(elt, data, cur); else elt.appendChild(document.createTextNode(cur.displayText || getText(cur))); elt.hintId = i; } var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); var left = pos.left, top = pos.bottom, below = true; hints.style.left = left + "px"; hints.style.top = top + "px"; // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth); var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight); (completion.options.container || document.body).appendChild(hints); var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH; if (overlapY > 0) { var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); if (curTop - height > 0) { // Fits above cursor hints.style.top = (top = pos.top - height) + "px"; below = false; } else if (height > winH) { hints.style.height = (winH - 5) + "px"; hints.style.top = (top = pos.bottom - box.top) + "px"; var cursor = cm.getCursor(); if (data.from.ch != cursor.ch) { pos = cm.cursorCoords(cursor); hints.style.left = (left = pos.left) + "px"; box = hints.getBoundingClientRect(); } } } var overlapX = box.right - winW; if (overlapX > 0) { if (box.right - box.left > winW) { hints.style.width = (winW - 5) + "px"; overlapX -= (box.right - box.left) - winW; } hints.style.left = (left = pos.left - overlapX) + "px"; } cm.addKeyMap(this.keyMap = buildKeyMap(completion, { moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); }, setFocus: function(n) { widget.changeActive(n); }, menuSize: function() { return widget.screenAmount(); }, length: completions.length, close: function() { completion.close(); }, pick: function() { widget.pick(); }, data: data })); if (completion.options.closeOnUnfocus) { var closingOnBlur; cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); }); cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); }); } var startScroll = cm.getScrollInfo(); cm.on("scroll", this.onScroll = function() { var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect(); var newTop = top + startScroll.top - curScroll.top; var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop); if (!below) point += hints.offsetHeight; if (point <= editor.top || point >= editor.bottom) return completion.close(); hints.style.top = newTop + "px"; hints.style.left = (left + startScroll.left - curScroll.left) + "px"; }); CodeMirror.on(hints, "dblclick", function(e) { var t = getHintElement(hints, e.target || e.srcElement); if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();} }); CodeMirror.on(hints, "click", function(e) { var t = getHintElement(hints, e.target || e.srcElement); if (t && t.hintId != null) { widget.changeActive(t.hintId); if (completion.options.completeOnSingleClick) widget.pick(); } }); CodeMirror.on(hints, "mousedown", function() { setTimeout(function(){cm.focus();}, 20); }); CodeMirror.signal(data, "select", completions[0], hints.firstChild); return true; } Widget.prototype = { close: function() { if (this.completion.widget != this) return; this.completion.widget = null; this.hints.parentNode.removeChild(this.hints); this.completion.cm.removeKeyMap(this.keyMap); var cm = this.completion.cm; if (this.completion.options.closeOnUnfocus) { cm.off("blur", this.onBlur); cm.off("focus", this.onFocus); } cm.off("scroll", this.onScroll); }, disable: function() { this.completion.cm.removeKeyMap(this.keyMap); var widget = this; this.keyMap = {Enter: function() { widget.picked = true; }}; this.completion.cm.addKeyMap(this.keyMap); }, pick: function() { this.completion.pick(this.data, this.selectedHint); }, changeActive: function(i, avoidWrap) { if (i >= this.data.list.length) i = avoidWrap ? this.data.list.length - 1 : 0; else if (i < 0) i = avoidWrap ? 0 : this.data.list.length - 1; if (this.selectedHint == i) return; var node = this.hints.childNodes[this.selectedHint]; node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); node = this.hints.childNodes[this.selectedHint = i]; node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; if (node.offsetTop < this.hints.scrollTop) this.hints.scrollTop = node.offsetTop - 3; else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3; CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); }, screenAmount: function() { return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; } }; CodeMirror.registerHelper("hint", "auto", function(cm, options) { var helpers = cm.getHelpers(cm.getCursor(), "hint"), words; if (helpers.length) { for (var i = 0; i < helpers.length; i++) { var cur = helpers[i](cm, options); if (cur && cur.list.length) return cur; } } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { if (words) return CodeMirror.hint.fromList(cm, {words: words}); } else if (CodeMirror.hint.anyword) { return CodeMirror.hint.anyword(cm, options); } }); CodeMirror.registerHelper("hint", "fromList", function(cm, options) { var cur = cm.getCursor(), token = cm.getTokenAt(cur); var found = []; for (var i = 0; i < options.words.length; i++) { var word = options.words[i]; if (word.slice(0, token.string.length) == token.string) found.push(word); } if (found.length) return { list: found, from: CodeMirror.Pos(cur.line, token.start), to: CodeMirror.Pos(cur.line, token.end) }; }); CodeMirror.commands.autocomplete = CodeMirror.showHint; var defaultOptions = { hint: CodeMirror.hint.auto, completeSingle: true, alignWithWord: true, closeCharacters: /[\s()\[\]{};:>,]/, closeOnUnfocus: true, completeOnSingleClick: false, container: null, customKeys: null, extraKeys: null }; CodeMirror.defineOption("hintOptions", null); }); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/show-hint.css0000644000175000017500000000122613776355015031342 0ustar domdom.CodeMirror-hints { position: absolute; z-index: 10; overflow: hidden; list-style: none; margin: 0; padding: 2px; -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); box-shadow: 2px 3px 5px rgba(0,0,0,.2); border-radius: 3px; border: 1px solid silver; background: white; font-size: 90%; font-family: monospace; max-height: 20em; overflow-y: auto; } .CodeMirror-hint { margin: 0; padding: 0 4px; border-radius: 2px; max-width: 19em; overflow: hidden; white-space: pre; color: black; cursor: pointer; } li.CodeMirror-hint-active { background: #08f; color: white; } rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/codemirror.css0000644000175000017500000001713313776355015031573 0ustar domdom/* BASICS */ .CodeMirror { /* Set height, width, borders, and global font properties here */ font-family: monospace; height: 300px; color: black; } /* PADDING */ .CodeMirror-lines { padding: 4px 0; /* Vertical padding around content */ } .CodeMirror pre { padding: 0 4px; /* Horizontal padding of content */ } .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: white; /* The little square between H and V scrollbars */ } /* GUTTER */ .CodeMirror-gutters { border-right: 1px solid #ddd; background-color: #f7f7f7; white-space: nowrap; } .CodeMirror-linenumbers {} .CodeMirror-linenumber { padding: 0 3px 0 5px; min-width: 20px; text-align: right; color: #999; white-space: nowrap; } .CodeMirror-guttermarker { color: black; } .CodeMirror-guttermarker-subtle { color: #999; } /* CURSOR */ .CodeMirror div.CodeMirror-cursor { border-left: 1px solid black; } /* Shown when moving in bi-directional text */ .CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver; } .CodeMirror.cm-fat-cursor div.CodeMirror-cursor { width: auto; border: 0; background: #7e7; } .CodeMirror.cm-fat-cursor div.CodeMirror-cursors { z-index: 1; } .cm-animate-fat-cursor { width: auto; border: 0; -webkit-animation: blink 1.06s steps(1) infinite; -moz-animation: blink 1.06s steps(1) infinite; animation: blink 1.06s steps(1) infinite; } @-moz-keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } @-webkit-keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } @keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } /* Can style cursor different in overwrite (non-insert) mode */ div.CodeMirror-overwrite div.CodeMirror-cursor {} .cm-tab { display: inline-block; text-decoration: inherit; } .CodeMirror-ruler { border-left: 1px solid #ccc; position: absolute; } /* DEFAULT THEME */ .cm-s-default .cm-keyword {color: #708;} .cm-s-default .cm-atom {color: #219;} .cm-s-default .cm-number {color: #164;} .cm-s-default .cm-def {color: #00f;} .cm-s-default .cm-variable, .cm-s-default .cm-punctuation, .cm-s-default .cm-property, .cm-s-default .cm-operator {} .cm-s-default .cm-variable-2 {color: #05a;} .cm-s-default .cm-variable-3 {color: #085;} .cm-s-default .cm-comment {color: #a50;} .cm-s-default .cm-string {color: #a11;} .cm-s-default .cm-string-2 {color: #f50;} .cm-s-default .cm-meta {color: #555;} .cm-s-default .cm-qualifier {color: #555;} .cm-s-default .cm-builtin {color: #30a;} .cm-s-default .cm-bracket {color: #997;} .cm-s-default .cm-tag {color: #170;} .cm-s-default .cm-attribute {color: #00c;} .cm-s-default .cm-header {color: blue;} .cm-s-default .cm-quote {color: #090;} .cm-s-default .cm-hr {color: #999;} .cm-s-default .cm-link {color: #00c;} .cm-negative {color: #d44;} .cm-positive {color: #292;} .cm-header, .cm-strong {font-weight: bold;} .cm-em {font-style: italic;} .cm-link {text-decoration: underline;} .cm-strikethrough {text-decoration: line-through;} .cm-s-default .cm-error {color: #f00;} .cm-invalidchar {color: #f00;} .CodeMirror-composing { border-bottom: 2px solid; } /* Default styles for common addons */ div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } .CodeMirror-activeline-background {background: #e8f2ff;} /* STOP */ /* The rest of this file contains styles related to the mechanics of the editor. You probably shouldn't touch them. */ .CodeMirror { position: relative; overflow: hidden; background: white; } .CodeMirror-scroll { overflow: scroll !important; /* Things will break if this is overridden */ /* 30px is the magic margin used to hide the element's real scrollbars */ /* See overflow: hidden in .CodeMirror */ margin-bottom: -30px; margin-right: -30px; padding-bottom: 30px; height: 100%; outline: none; /* Prevent dragging from highlighting the element */ position: relative; } .CodeMirror-sizer { position: relative; border-right: 30px solid transparent; } /* The fake, visible scrollbars. Used to force redraw during scrolling before actuall scrolling happens, thus preventing shaking and flickering artifacts. */ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { position: absolute; z-index: 6; display: none; } .CodeMirror-vscrollbar { right: 0; top: 0; overflow-x: hidden; overflow-y: scroll; } .CodeMirror-hscrollbar { bottom: 0; left: 0; overflow-y: hidden; overflow-x: scroll; } .CodeMirror-scrollbar-filler { right: 0; bottom: 0; } .CodeMirror-gutter-filler { left: 0; bottom: 0; } .CodeMirror-gutters { position: absolute; left: 0; top: 0; z-index: 3; } .CodeMirror-gutter { white-space: normal; height: 100%; display: inline-block; margin-bottom: -30px; /* Hack to make IE7 behave */ *zoom:1; *display:inline; } .CodeMirror-gutter-wrapper { position: absolute; z-index: 4; height: 100%; } .CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; } .CodeMirror-gutter-wrapper { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .CodeMirror-lines { cursor: text; min-height: 1px; /* prevents collapsing before first draw */ } .CodeMirror pre { /* Reset some styles that the rest of the page might have set */ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-width: 0; background: transparent; font-family: inherit; font-size: inherit; margin: 0; white-space: pre; word-wrap: normal; line-height: inherit; color: inherit; z-index: 2; position: relative; overflow: visible; -webkit-tap-highlight-color: transparent; } .CodeMirror-wrap pre { word-wrap: break-word; white-space: pre-wrap; word-break: normal; } .CodeMirror-linebackground { position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: 0; } .CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; } .CodeMirror-widget {} .CodeMirror-code { outline: none; } /* Force content-box sizing for the elements where we expect it */ .CodeMirror-scroll, .CodeMirror-sizer, .CodeMirror-gutter, .CodeMirror-gutters, .CodeMirror-linenumber { -moz-box-sizing: content-box; box-sizing: content-box; } .CodeMirror-measure { position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; } .CodeMirror-measure pre { position: static; } .CodeMirror div.CodeMirror-cursor { position: absolute; border-right: none; width: 0; } div.CodeMirror-cursors { visibility: hidden; position: relative; z-index: 3; } .CodeMirror-focused div.CodeMirror-cursors { visibility: visible; } .CodeMirror-selected { background: #d9d9d9; } .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } .CodeMirror-crosshair { cursor: crosshair; } .CodeMirror ::selection { background: #d7d4f0; } .CodeMirror ::-moz-selection { background: #d7d4f0; } .cm-searching { background: #ffa; background: rgba(255, 255, 0, .4); } /* IE7 hack to prevent it from returning funny offsetTops on the spans */ .CodeMirror span { *vertical-align: text-bottom; } /* Used to force a border model for a node */ .cm-force-border { padding-right: .1px; } @media print { /* Hide the cursor when printing */ .CodeMirror div.CodeMirror-cursors { visibility: hidden; } } /* See issue #2901 */ .cm-tab-wrap-hack:after { content: ''; } /* Help users use markselection to safely style text background */ span.CodeMirror-selectedtext { background: none; } rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/javascript.js0000644000175000017500000006401413776355015031420 0ustar domdom// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // TODO actually recognize syntax of TypeScript constructs (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("javascript", function(config, parserConfig) { var indentUnit = config.indentUnit; var statementIndent = parserConfig.statementIndent; var jsonldMode = parserConfig.jsonld; var jsonMode = parserConfig.json || jsonldMode; var isTS = parserConfig.typescript; var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; // Tokenizer var keywords = function(){ function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}; var jsKeywords = { "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, "debugger": C, "var": kw("var"), "const": kw("var"), "let": kw("var"), "function": kw("function"), "catch": kw("catch"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "typeof": operator, "instanceof": operator, "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, "this": kw("this"), "module": kw("module"), "class": kw("class"), "super": kw("atom"), "yield": C, "export": kw("export"), "import": kw("import"), "extends": C }; // Extend the 'normal' keywords with the TypeScript language extensions if (isTS) { var type = {type: "variable", style: "variable-3"}; var tsKeywords = { // object-like things "interface": kw("interface"), "extends": kw("extends"), "constructor": kw("constructor"), // scope modifiers "public": kw("public"), "private": kw("private"), "protected": kw("protected"), "static": kw("static"), // types "string": type, "number": type, "bool": type, "any": type }; for (var attr in tsKeywords) { jsKeywords[attr] = tsKeywords[attr]; } } return jsKeywords; }(); var isOperatorChar = /[+\-*&%=<>!?|~^]/; var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; function readRegexp(stream) { var escaped = false, next, inSet = false; while ((next = stream.next()) != null) { if (!escaped) { if (next == "/" && !inSet) return; if (next == "[") inSet = true; else if (inSet && next == "]") inSet = false; } escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { return ret("number", "number"); } else if (ch == "." && stream.match("..")) { return ret("spread", "meta"); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "=" && stream.eat(">")) { return ret("=>", "operator"); } else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else if (state.lastType == "operator" || state.lastType == "keyword c" || state.lastType == "sof" || /^[\[{}\(,;:]$/.test(state.lastType)) { readRegexp(stream); stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); return ret("regexp", "string-2"); } else { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } } else if (ch == "`") { state.tokenize = tokenQuasi; return tokenQuasi(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("error", "error"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } else if (wordRE.test(ch)) { stream.eatWhile(wordRE); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.lastType != ".") ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } function tokenString(quote) { return function(stream, state) { var escaped = false, next; if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ state.tokenize = tokenBase; return ret("jsonld-keyword", "meta"); } while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenQuasi(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { state.tokenize = tokenBase; break; } escaped = !escaped && next == "\\"; } return ret("quasi", "string-2", stream.current()); } var brackets = "([{}])"; // This is a crude lookahead trick to try and notice that we're // parsing the argument patterns for a fat-arrow function before we // actually hit the arrow token. It only works if the arrow is on // the same line as the arguments and there's no strange noise // (comments) in between. Fallback is to only notice when we hit the // arrow, and not declare the arguments as locals for the arrow // body. function findFatArrow(stream, state) { if (state.fatArrowAt) state.fatArrowAt = null; var arrow = stream.string.indexOf("=>", stream.start); if (arrow < 0) return; var depth = 0, sawSomething = false; for (var pos = arrow - 1; pos >= 0; --pos) { var ch = stream.string.charAt(pos); var bracket = brackets.indexOf(ch); if (bracket >= 0 && bracket < 3) { if (!depth) { ++pos; break; } if (--depth == 0) break; } else if (bracket >= 3 && bracket < 6) { ++depth; } else if (wordRE.test(ch)) { sawSomething = true; } else if (/["'\/]/.test(ch)) { return; } else if (sawSomething && !depth) { ++pos; break; } } if (sawSomething && !depth) state.fatArrowAt = pos; } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; function JSLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; for (var cx = state.context; cx; cx = cx.prev) { for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true; } } function parseJS(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; return style; } } } // Combinator utils var cx = {state: null, column: null, marked: null, cc: null}; function pass() { for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function register(varname) { function inList(list) { for (var v = list; v; v = v.next) if (v.name == varname) return true; return false; } var state = cx.state; if (state.context) { cx.marked = "def"; if (inList(state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; } else { if (inList(state.globalVars)) return; if (parserConfig.globalVars) state.globalVars = {name: varname, next: state.globalVars}; } } // Combinators var defaultVars = {name: "this", next: {name: "arguments"}}; function pushcontext() { cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; cx.state.localVars = defaultVars; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } function pushlex(type, info) { var result = function() { var state = cx.state, indent = state.indented; if (state.lexical.type == "stat") indent = state.lexical.indented; else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function exp(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(exp); }; return exp; } function statement(type, value) { if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), block, poplex); if (type == ";") return cont(); if (type == "if") { if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); return cont(pushlex("form"), expression, statement, poplex, maybeelse); } if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "module") return cont(pushlex("form"), pushcontext, afterModule, popcontext, poplex); if (type == "class") return cont(pushlex("form"), className, poplex); if (type == "export") return cont(pushlex("form"), afterExport, poplex); if (type == "import") return cont(pushlex("form"), afterImport, poplex); return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { return expressionInner(type, false); } function expressionNoComma(type) { return expressionInner(type, true); } function expressionInner(type, noComma) { if (cx.state.fatArrowAt == cx.stream.start) { var body = noComma ? arrowBodyNoComma : arrowBody; if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); } var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); if (type == "function") return cont(functiondef, maybeop); if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop); if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); if (type == "{") return contCommasep(objprop, "}", null, maybeop); if (type == "quasi") { return pass(quasi, maybeop); } return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeexpressionNoComma(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expressionNoComma); } function maybeoperatorComma(type, value) { if (type == ",") return cont(expression); return maybeoperatorNoComma(type, value, false); } function maybeoperatorNoComma(type, value, noComma) { var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; var expr = noComma == false ? expression : expressionNoComma; if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); if (type == "operator") { if (/\+\+|--/.test(value)) return cont(me); if (value == "?") return cont(expression, expect(":"), expr); return cont(expr); } if (type == "quasi") { return pass(quasi, me); } if (type == ";") return; if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); if (type == ".") return cont(property, me); if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); } function quasi(type, value) { if (type != "quasi") return pass(); if (value.slice(value.length - 2) != "${") return cont(quasi); return cont(expression, continueQuasi); } function continueQuasi(type) { if (type == "}") { cx.marked = "string-2"; cx.state.tokenize = tokenQuasi; return cont(quasi); } } function arrowBody(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expression); } function arrowBodyNoComma(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expressionNoComma); } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperatorComma, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type, value) { if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; if (value == "get" || value == "set") return cont(getterSetter); return cont(afterprop); } else if (type == "number" || type == "string") { cx.marked = jsonldMode ? "property" : (cx.style + " property"); return cont(afterprop); } else if (type == "jsonld-keyword") { return cont(afterprop); } else if (type == "[") { return cont(expression, expect("]"), afterprop); } } function getterSetter(type) { if (type != "variable") return pass(afterprop); cx.marked = "property"; return cont(functiondef); } function afterprop(type) { if (type == ":") return cont(expressionNoComma); if (type == "(") return pass(functiondef); } function commasep(what, end) { function proceed(type) { if (type == ",") { var lex = cx.state.lexical; if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; return cont(what, proceed); } if (type == end) return cont(); return cont(expect(end)); } return function(type) { if (type == end) return cont(); return pass(what, proceed); }; } function contCommasep(what, end, info) { for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); return cont(pushlex(end, info), commasep(what, end), poplex); } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function maybetype(type) { if (isTS && type == ":") return cont(typedef); } function typedef(type) { if (type == "variable"){cx.marked = "variable-3"; return cont();} } function vardef() { return pass(pattern, maybetype, maybeAssign, vardefCont); } function pattern(type, value) { if (type == "variable") { register(value); return cont(); } if (type == "[") return contCommasep(pattern, "]"); if (type == "{") return contCommasep(proppattern, "}"); } function proppattern(type, value) { if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { register(value); return cont(maybeAssign); } if (type == "variable") cx.marked = "property"; return cont(expect(":"), pattern, maybeAssign); } function maybeAssign(_type, value) { if (value == "=") return cont(expressionNoComma); } function vardefCont(type) { if (type == ",") return cont(vardef); } function maybeelse(type, value) { if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); } function forspec(type) { if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); } function forspec1(type) { if (type == "var") return cont(vardef, expect(";"), forspec2); if (type == ";") return cont(forspec2); if (type == "variable") return cont(formaybeinof); return pass(expression, expect(";"), forspec2); } function formaybeinof(_type, value) { if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return cont(maybeoperatorComma, forspec2); } function forspec2(type, value) { if (type == ";") return cont(forspec3); if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return pass(expression, expect(";"), forspec3); } function forspec3(type) { if (type != ")") cont(expression); } function functiondef(type, value) { if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} if (type == "variable") {register(value); return cont(functiondef);} if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, statement, popcontext); } function funarg(type) { if (type == "spread") return cont(funarg); return pass(pattern, maybetype); } function className(type, value) { if (type == "variable") {register(value); return cont(classNameAfter);} } function classNameAfter(type, value) { if (value == "extends") return cont(expression, classNameAfter); if (type == "{") return cont(pushlex("}"), classBody, poplex); } function classBody(type, value) { if (type == "variable" || cx.style == "keyword") { if (value == "static") { cx.marked = "keyword"; return cont(classBody); } cx.marked = "property"; if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody); return cont(functiondef, classBody); } if (value == "*") { cx.marked = "keyword"; return cont(classBody); } if (type == ";") return cont(classBody); if (type == "}") return cont(); } function classGetterSetter(type) { if (type != "variable") return pass(); cx.marked = "property"; return cont(); } function afterModule(type, value) { if (type == "string") return cont(statement); if (type == "variable") { register(value); return cont(maybeFrom); } } function afterExport(_type, value) { if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } return pass(statement); } function afterImport(type) { if (type == "string") return cont(); return pass(importSpec, maybeFrom); } function importSpec(type, value) { if (type == "{") return contCommasep(importSpec, "}"); if (type == "variable") register(value); if (value == "*") cx.marked = "keyword"; return cont(maybeAs); } function maybeAs(_type, value) { if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } } function maybeFrom(_type, value) { if (value == "from") { cx.marked = "keyword"; return cont(expression); } } function arrayLiteral(type) { if (type == "]") return cont(); return pass(expressionNoComma, maybeArrayComprehension); } function maybeArrayComprehension(type) { if (type == "for") return pass(comprehension, expect("]")); if (type == ",") return cont(commasep(maybeexpressionNoComma, "]")); return pass(commasep(expressionNoComma, "]")); } function comprehension(type) { if (type == "for") return cont(forspec, comprehension); if (type == "if") return cont(expression, comprehension); } function isContinuedStatement(state, textAfter) { return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); } // Interface return { startState: function(basecolumn) { var state = { tokenize: tokenBase, lastType: "sof", cc: [], lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); findFatArrow(stream, state); } if (state.tokenize != tokenComment && stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; return parseJS(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize == tokenComment) return CodeMirror.Pass; if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; // Kludge to prevent 'maybelse' from blocking lexical scope pops if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { var c = state.cc[i]; if (c == poplex) lexical = lexical.prev; else if (c != maybeelse) break; } if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "form") return lexical.indented + indentUnit; else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, blockCommentStart: jsonMode ? null : "/*", blockCommentEnd: jsonMode ? null : "*/", lineComment: jsonMode ? null : "//", fold: "brace", closeBrackets: "()[]{}''\"\"``", helperType: jsonMode ? "json" : "javascript", jsonldMode: jsonldMode, jsonMode: jsonMode }; }); CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); CodeMirror.defineMIME("text/javascript", "javascript"); CodeMirror.defineMIME("text/ecmascript", "javascript"); CodeMirror.defineMIME("application/javascript", "javascript"); CodeMirror.defineMIME("application/x-javascript", "javascript"); CodeMirror.defineMIME("application/ecmascript", "javascript"); CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); }); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/README.md0000644000175000017500000000142613776355015030171 0ustar domdom# CodeMirror [![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) [Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?again)](https://marijnhaverbeke.nl/fund/) CodeMirror is a JavaScript component that provides a code editor in the browser. When a mode is available for the language you are coding in, it will color your code, and optionally help with indentation. The project page is http://codemirror.net The manual is at http://codemirror.net/doc/manual.html The contributing guidelines are in [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/codemirror.js0000644000175000017500000124540114006075351031406 0ustar domdom// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // This is CodeMirror (http://codemirror.net), a code editor // implemented in JavaScript on top of the browser's DOM. // // You can find some technical background for some of the code below // at http://marijnhaverbeke.nl/blog/#cm-internals . (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS module.exports = mod(); else if (typeof define == "function" && define.amd) // AMD return define([], mod); else // Plain browser env this.CodeMirror = mod(); })(function() { "use strict"; // BROWSER SNIFFING // Kludges for bugs and behavior differences that can't be feature // detected are enabled based on userAgent etc sniffing. var gecko = /gecko\/\d/i.test(navigator.userAgent); var ie_upto10 = /MSIE \d/.test(navigator.userAgent); var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); var ie = ie_upto10 || ie_11up; var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); var webkit = /WebKit\//.test(navigator.userAgent); var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); var chrome = /Chrome\//.test(navigator.userAgent); var presto = /Opera\//.test(navigator.userAgent); var safari = /Apple Computer/.test(navigator.vendor); var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); var phantom = /PhantomJS/.test(navigator.userAgent); var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome. var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); var mac = ios || /Mac/.test(navigator.platform); var windows = /win/i.test(navigator.platform); var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/); if (presto_version) presto_version = Number(presto_version[1]); if (presto_version && presto_version >= 15) { presto = false; webkit = true; } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); var captureRightClick = gecko || (ie && ie_version >= 9); // Optimize some code when these features are not used. var sawReadOnlySpans = false, sawCollapsedSpans = false; // EDITOR CONSTRUCTOR // A CodeMirror instance represents an editor. This is the object // that user code is usually dealing with. function CodeMirror(place, options) { if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults. copyObj(defaults, options, false); setGuttersForLineNumbers(options); var doc = options.value; if (typeof doc == "string") doc = new Doc(doc, options.mode); this.doc = doc; var input = new CodeMirror.inputStyles[options.inputStyle](this); var display = this.display = new Display(place, doc, input); display.wrapper.CodeMirror = this; updateGutters(this); themeChanged(this); if (options.lineWrapping) this.display.wrapper.className += " CodeMirror-wrap"; if (options.autofocus && !mobile) display.input.focus(); initScrollbars(this); this.state = { keyMaps: [], // stores maps added by addKeyMap overlays: [], // highlighting overlays, as added by addOverlay modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info overwrite: false, delayingBlurEvent: false, focused: false, suppressEdits: false, // used to disable editing during key handlers when in readOnly mode pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll draggingText: false, highlight: new Delayed(), // stores highlight worker timeout keySeq: null, // Unfinished key sequence specialChars: null }; var cm = this; // Override magic textarea content restore that IE sometimes does // on our hidden textarea on reload if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); registerEventHandlers(this); ensureGlobalHandlers(); startOperation(this); this.curOp.forceUpdate = true; attachDoc(this, doc); if ((options.autofocus && !mobile) || cm.hasFocus()) setTimeout(bind(onFocus, this), 20); else onBlur(this); for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) optionHandlers[opt](this, options[opt], Init); maybeUpdateLineNumberWidth(this); if (options.finishInit) options.finishInit(this); for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text // measuring on line wrapping boundaries. if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") display.lineDiv.style.textRendering = "auto"; } // DISPLAY CONSTRUCTOR // The display handles the DOM integration, both for input reading // and content drawing. It holds references to DOM nodes and // display-related state. function Display(place, doc, input) { var d = this; this.input = input; // Covers bottom-right square when both scrollbars are present. d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); d.scrollbarFiller.setAttribute("cm-not-content", "true"); // Covers bottom of gutter when coverGutterNextToScrollbar is on // and h scrollbar is present. d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); d.gutterFiller.setAttribute("cm-not-content", "true"); // Will contain the actual code, positioned to cover the viewport. d.lineDiv = elt("div", null, "CodeMirror-code"); // Elements are added to these to represent selection and cursors. d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); d.cursorDiv = elt("div", null, "CodeMirror-cursors"); // A visibility: hidden element used to find the size of things. d.measure = elt("div", null, "CodeMirror-measure"); // When lines outside of the viewport are measured, they are drawn in this. d.lineMeasure = elt("div", null, "CodeMirror-measure"); // Wraps everything that needs to exist inside the vertically-padded coordinate system d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); // Moved around its parent to cover visible view. d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); // Set to the height of the document, allowing scrolling. d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is // inconsistent across browsers. This is used to ensure the // scrollable area is big enough. d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); // Will contain the gutters, if any. d.gutters = elt("div", null, "CodeMirror-gutters"); d.lineGutter = null; // Actual scrollable element. d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); d.scroller.setAttribute("tabIndex", "-1"); // The element in which the editor lives. d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; if (place) { if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); } // Current rendered range (may be bigger than the view window). d.viewFrom = d.viewTo = doc.first; d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines. d.view = []; d.renderedView = null; // Holds info about a single rendered line when it was rendered // for measurement, while not in view. d.externalMeasured = null; // Empty space (in pixels) above the view d.viewOffset = 0; d.lastWrapHeight = d.lastWrapWidth = 0; d.updateLineNumbers = null; d.nativeBarWidth = d.barHeight = d.barWidth = 0; d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when // the amount of lines crosses a boundary that makes its width change) d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is // added. As an optimization, line widget aligning is skipped when // this is false. d.alignWidgets = false; d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar // can be kept static when scrolling. d.maxLine = null; d.maxLineLength = 0; d.maxLineChanged = false; // Used for measuring wheel scrolling granularity d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down. d.shift = false; // Used to track whether anything happened since the context menu // was opened. d.selForContextMenu = null; d.activeTouch = null; input.init(d); } // STATE UPDATES // Used to get the editor into a consistent state again when options change. function loadMode(cm) { cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); resetModeState(cm); } function resetModeState(cm) { cm.doc.iter(function(line) { if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; }); cm.doc.frontier = cm.doc.first; startWorker(cm, 100); cm.state.modeGen++; if (cm.curOp) regChange(cm); } function wrappingChanged(cm) { if (cm.options.lineWrapping) { addClass(cm.display.wrapper, "CodeMirror-wrap"); cm.display.sizer.style.minWidth = ""; cm.display.sizerWidth = null; } else { rmClass(cm.display.wrapper, "CodeMirror-wrap"); findMaxLine(cm); } estimateLineHeights(cm); regChange(cm); clearCaches(cm); setTimeout(function(){updateScrollbars(cm);}, 100); } // Returns a function that estimates the height of a line, to use as // first approximation until the line becomes visible (and is thus // properly measurable). function estimateHeight(cm) { var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); return function(line) { if (lineIsHidden(cm.doc, line)) return 0; var widgetsHeight = 0; if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; } if (wrapping) return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; else return widgetsHeight + th; }; } function estimateLineHeights(cm) { var doc = cm.doc, est = estimateHeight(cm); doc.iter(function(line) { var estHeight = est(line); if (estHeight != line.height) updateLineHeight(line, estHeight); }); } function themeChanged(cm) { cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); clearCaches(cm); } function guttersChanged(cm) { updateGutters(cm); regChange(cm); setTimeout(function(){alignHorizontally(cm);}, 20); } // Rebuild the gutter elements, ensure the margin to the left of the // code matches their width. function updateGutters(cm) { var gutters = cm.display.gutters, specs = cm.options.gutters; removeChildren(gutters); for (var i = 0; i < specs.length; ++i) { var gutterClass = specs[i]; var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); if (gutterClass == "CodeMirror-linenumbers") { cm.display.lineGutter = gElt; gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; } } gutters.style.display = i ? "" : "none"; updateGutterSpace(cm); } function updateGutterSpace(cm) { var width = cm.display.gutters.offsetWidth; cm.display.sizer.style.marginLeft = width + "px"; } // Compute the character length of a line, taking into account // collapsed ranges (see markText) that might hide parts, and join // other lines onto it. function lineLength(line) { if (line.height == 0) return 0; var len = line.text.length, merged, cur = line; while (merged = collapsedSpanAtStart(cur)) { var found = merged.find(0, true); cur = found.from.line; len += found.from.ch - found.to.ch; } cur = line; while (merged = collapsedSpanAtEnd(cur)) { var found = merged.find(0, true); len -= cur.text.length - found.from.ch; cur = found.to.line; len += cur.text.length - found.to.ch; } return len; } // Find the longest line in the document. function findMaxLine(cm) { var d = cm.display, doc = cm.doc; d.maxLine = getLine(doc, doc.first); d.maxLineLength = lineLength(d.maxLine); d.maxLineChanged = true; doc.iter(function(line) { var len = lineLength(line); if (len > d.maxLineLength) { d.maxLineLength = len; d.maxLine = line; } }); } // Make sure the gutters options contains the element // "CodeMirror-linenumbers" when the lineNumbers option is true. function setGuttersForLineNumbers(options) { var found = indexOf(options.gutters, "CodeMirror-linenumbers"); if (found == -1 && options.lineNumbers) { options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); } else if (found > -1 && !options.lineNumbers) { options.gutters = options.gutters.slice(0); options.gutters.splice(found, 1); } } // SCROLLBARS // Prepare DOM reads needed to update the scrollbars. Done in one // shot to minimize update/measure roundtrips. function measureForScrollbars(cm) { var d = cm.display, gutterW = d.gutters.offsetWidth; var docH = Math.round(cm.doc.height + paddingVert(cm.display)); return { clientHeight: d.scroller.clientHeight, viewHeight: d.wrapper.clientHeight, scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, viewWidth: d.wrapper.clientWidth, barLeft: cm.options.fixedGutter ? gutterW : 0, docHeight: docH, scrollHeight: docH + scrollGap(cm) + d.barHeight, nativeBarWidth: d.nativeBarWidth, gutterWidth: gutterW }; } function NativeScrollbars(place, scroll, cm) { this.cm = cm; var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); place(vert); place(horiz); on(vert, "scroll", function() { if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); }); on(horiz, "scroll", function() { if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); }); this.checkedOverlay = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } NativeScrollbars.prototype = copyObj({ update: function(measure) { var needsH = measure.scrollWidth > measure.clientWidth + 1; var needsV = measure.scrollHeight > measure.clientHeight + 1; var sWidth = measure.nativeBarWidth; if (needsV) { this.vert.style.display = "block"; this.vert.style.bottom = needsH ? sWidth + "px" : "0"; var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it. this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; } else { this.vert.style.display = ""; this.vert.firstChild.style.height = "0"; } if (needsH) { this.horiz.style.display = "block"; this.horiz.style.right = needsV ? sWidth + "px" : "0"; this.horiz.style.left = measure.barLeft + "px"; var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); this.horiz.firstChild.style.width = (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; } else { this.horiz.style.display = ""; this.horiz.firstChild.style.width = "0"; } if (!this.checkedOverlay && measure.clientHeight > 0) { if (sWidth == 0) this.overlayHack(); this.checkedOverlay = true; } return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; }, setScrollLeft: function(pos) { if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; }, setScrollTop: function(pos) { if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; }, overlayHack: function() { var w = mac && !mac_geMountainLion ? "12px" : "18px"; this.horiz.style.minHeight = this.vert.style.minWidth = w; var self = this; var barMouseDown = function(e) { if (e_target(e) != self.vert && e_target(e) != self.horiz) operation(self.cm, onMouseDown)(e); }; on(this.vert, "mousedown", barMouseDown); on(this.horiz, "mousedown", barMouseDown); }, clear: function() { var parent = this.horiz.parentNode; parent.removeChild(this.horiz); parent.removeChild(this.vert); } }, NativeScrollbars.prototype); function NullScrollbars() {} NullScrollbars.prototype = copyObj({ update: function() { return {bottom: 0, right: 0}; }, setScrollLeft: function() {}, setScrollTop: function() {}, clear: function() {} }, NullScrollbars.prototype); CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; function initScrollbars(cm) { if (cm.display.scrollbars) { cm.display.scrollbars.clear(); if (cm.display.scrollbars.addClass) rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus on(node, "mousedown", function() { if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); }); node.setAttribute("cm-not-content", "true"); }, function(pos, axis) { if (axis == "horizontal") setScrollLeft(cm, pos); else setScrollTop(cm, pos); }, cm); if (cm.display.scrollbars.addClass) addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } function updateScrollbars(cm, measure) { if (!measure) measure = measureForScrollbars(cm); var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; updateScrollbarsInner(cm, measure); for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { if (startWidth != cm.display.barWidth && cm.options.lineWrapping) updateHeightsInViewport(cm); updateScrollbarsInner(cm, measureForScrollbars(cm)); startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; } } // Re-synchronize the fake scrollbars with the actual size of the // content. function updateScrollbarsInner(cm, measure) { var d = cm.display; var sizes = d.scrollbars.update(measure); d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; if (sizes.right && sizes.bottom) { d.scrollbarFiller.style.display = "block"; d.scrollbarFiller.style.height = sizes.bottom + "px"; d.scrollbarFiller.style.width = sizes.right + "px"; } else d.scrollbarFiller.style.display = ""; if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { d.gutterFiller.style.display = "block"; d.gutterFiller.style.height = sizes.bottom + "px"; d.gutterFiller.style.width = measure.gutterWidth + "px"; } else d.gutterFiller.style.display = ""; } // Compute the lines that are visible in a given viewport (defaults // the the current scroll position). viewport may contain top, // height, and ensure (see op.scrollToPos) properties. function visibleLines(display, doc, viewport) { var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; top = Math.floor(top - paddingTop(display)); var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and // forces those lines into the viewport (if possible). if (viewport && viewport.ensure) { var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; if (ensureFrom < from) { from = ensureFrom; to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); } else if (Math.min(ensureTo, doc.lastLine()) >= to) { from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); to = ensureTo; } } return {from: from, to: Math.max(to, from + 1)}; } // LINE NUMBERS // Re-align line numbers and gutter marks to compensate for // horizontal scrolling. function alignHorizontally(cm) { var display = cm.display, view = display.view; if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; var gutterW = display.gutters.offsetWidth, left = comp + "px"; for (var i = 0; i < view.length; i++) if (!view[i].hidden) { if (cm.options.fixedGutter && view[i].gutter) view[i].gutter.style.left = left; var align = view[i].alignable; if (align) for (var j = 0; j < align.length; j++) align[j].style.left = left; } if (cm.options.fixedGutter) display.gutters.style.left = (comp + gutterW) + "px"; } // Used to ensure that the line number gutter is still the right // size for the current document size. Returns true when an update // is needed. function maybeUpdateLineNumberWidth(cm) { if (!cm.options.lineNumbers) return false; var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; if (last.length != display.lineNumChars) { var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; display.lineGutter.style.width = ""; display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; display.lineNumWidth = display.lineNumInnerWidth + padding; display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; display.lineGutter.style.width = display.lineNumWidth + "px"; updateGutterSpace(cm); return true; } return false; } function lineNumberFor(options, i) { return String(options.lineNumberFormatter(i + options.firstLineNumber)); } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, // but using getBoundingClientRect to get a sub-pixel-accurate // result. function compensateForHScroll(display) { return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; } // DISPLAY DRAWING function DisplayUpdate(cm, viewport, force) { var display = cm.display; this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for) this.visible = visibleLines(display, cm.doc, viewport); this.editorIsHidden = !display.wrapper.offsetWidth; this.wrapperHeight = display.wrapper.clientHeight; this.wrapperWidth = display.wrapper.clientWidth; this.oldDisplayWidth = displayWidth(cm); this.force = force; this.dims = getDimensions(cm); this.events = []; } DisplayUpdate.prototype.signal = function(emitter, type) { if (hasHandler(emitter, type)) this.events.push(arguments); }; DisplayUpdate.prototype.finish = function() { for (var i = 0; i < this.events.length; i++) signal.apply(null, this.events[i]); }; function maybeClipScrollbars(cm) { var display = cm.display; if (!display.scrollbarsClipped && display.scroller.offsetWidth) { display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; display.heightForcer.style.height = scrollGap(cm) + "px"; display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; display.scrollbarsClipped = true; } } // Does the actual updating of the line display. Bails out // (returning false) when there is nothing to be done and forced is // false. function updateDisplayIfNeeded(cm, update) { var display = cm.display, doc = cm.doc; if (update.editorIsHidden) { resetView(cm); return false; } // Bail out if the visible area is already rendered and nothing changed. if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) return false; if (maybeUpdateLineNumberWidth(cm)) { resetView(cm); update.dims = getDimensions(cm); } // Compute a suitable new viewport (from & to) var end = doc.first + doc.size; var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); var to = Math.min(end, update.visible.to + cm.options.viewportMargin); if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); if (sawCollapsedSpans) { from = visualLineNo(cm.doc, from); to = visualLineEndNo(cm.doc, to); } var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; adjustView(cm, from, to); display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position cm.display.mover.style.top = display.viewOffset + "px"; var toUpdate = countDirtyView(cm); if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) return false; // For big changes, we hide the enclosing element during the // update, since that speeds up the operations on most browsers. var focused = activeElt(); if (toUpdate > 4) display.lineDiv.style.display = "none"; patchDisplay(cm, display.updateLineNumbers, update.dims); if (toUpdate > 4) display.lineDiv.style.display = ""; display.renderedView = display.view; // There might have been a widget with a focused element that got // hidden or updated, if so re-focus it. if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); // Prevent selection and cursors from interfering with the scroll // width and height. removeChildren(display.cursorDiv); removeChildren(display.selectionDiv); display.gutters.style.height = 0; if (different) { display.lastWrapHeight = update.wrapperHeight; display.lastWrapWidth = update.wrapperWidth; startWorker(cm, 400); } display.updateLineNumbers = null; return true; } function postUpdateDisplay(cm, update) { var force = update.force, viewport = update.viewport; for (var first = true;; first = false) { if (first && cm.options.lineWrapping && update.oldDisplayWidth != displayWidth(cm)) { force = true; } else { force = false; // Clip forced viewport to actual scrollable area. if (viewport && viewport.top != null) viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; // Updated line heights might result in the drawn area not // actually covering the viewport. Keep looping until it does. update.visible = visibleLines(cm.display, cm.doc, viewport); if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) break; } if (!updateDisplayIfNeeded(cm, update)) break; updateHeightsInViewport(cm); var barMeasure = measureForScrollbars(cm); updateSelection(cm); setDocumentHeight(cm, barMeasure); updateScrollbars(cm, barMeasure); } update.signal(cm, "update", cm); if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; } } function updateDisplaySimple(cm, viewport) { var update = new DisplayUpdate(cm, viewport); if (updateDisplayIfNeeded(cm, update)) { updateHeightsInViewport(cm); postUpdateDisplay(cm, update); var barMeasure = measureForScrollbars(cm); updateSelection(cm); setDocumentHeight(cm, barMeasure); updateScrollbars(cm, barMeasure); update.finish(); } } function setDocumentHeight(cm, measure) { cm.display.sizer.style.minHeight = measure.docHeight + "px"; var total = measure.docHeight + cm.display.barHeight; cm.display.heightForcer.style.top = total + "px"; cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + "px"; } // Read the actual heights of the rendered lines, and update their // stored heights to match. function updateHeightsInViewport(cm) { var display = cm.display; var prevBottom = display.lineDiv.offsetTop; for (var i = 0; i < display.view.length; i++) { var cur = display.view[i], height; if (cur.hidden) continue; if (ie && ie_version < 8) { var bot = cur.node.offsetTop + cur.node.offsetHeight; height = bot - prevBottom; prevBottom = bot; } else { var box = cur.node.getBoundingClientRect(); height = box.bottom - box.top; } var diff = cur.line.height - height; if (height < 2) height = textHeight(display); if (diff > .001 || diff < -.001) { updateLineHeight(cur.line, height); updateWidgetHeight(cur.line); if (cur.rest) for (var j = 0; j < cur.rest.length; j++) updateWidgetHeight(cur.rest[j]); } } } // Read and store the height of line widgets associated with the // given line. function updateWidgetHeight(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) line.widgets[i].height = line.widgets[i].node.offsetHeight; } // Do a bulk-read of the DOM positions and sizes needed to draw the // view, so that we don't interleave reading and writing to the DOM. function getDimensions(cm) { var d = cm.display, left = {}, width = {}; var gutterLeft = d.gutters.clientLeft; for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; width[cm.options.gutters[i]] = n.clientWidth; } return {fixedPos: compensateForHScroll(d), gutterTotalWidth: d.gutters.offsetWidth, gutterLeft: left, gutterWidth: width, wrapperWidth: d.wrapper.clientWidth}; } // Sync the actual display DOM structure with display.view, removing // nodes for lines that are no longer in view, and creating the ones // that are not there yet, and updating the ones that are out of // date. function patchDisplay(cm, updateNumbersFrom, dims) { var display = cm.display, lineNumbers = cm.options.lineNumbers; var container = display.lineDiv, cur = container.firstChild; function rm(node) { var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit if (webkit && mac && cm.display.currentWheelTarget == node) node.style.display = "none"; else node.parentNode.removeChild(node); return next; } var view = display.view, lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes // in display.lineDiv) with the view as we go. for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (lineView.hidden) { } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet var node = buildLineElement(cm, lineView, lineN, dims); container.insertBefore(node, cur); } else { // Already drawn while (cur != lineView.node) cur = rm(cur); var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; if (lineView.changes) { if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; updateLineForChanges(cm, lineView, lineN, dims); } if (updateNumber) { removeChildren(lineView.lineNumber); lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); } cur = lineView.node.nextSibling; } lineN += lineView.size; } while (cur) cur = rm(cur); } // When an aspect of a line changes, a string is added to // lineView.changes. This updates the relevant part of the line's // DOM structure. function updateLineForChanges(cm, lineView, lineN, dims) { for (var j = 0; j < lineView.changes.length; j++) { var type = lineView.changes[j]; if (type == "text") updateLineText(cm, lineView); else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); else if (type == "class") updateLineClasses(lineView); else if (type == "widget") updateLineWidgets(cm, lineView, dims); } lineView.changes = null; } // Lines with gutter elements, widgets or a background class need to // be wrapped, and have the extra elements added to the wrapper div function ensureLineWrapped(lineView) { if (lineView.node == lineView.text) { lineView.node = elt("div", null, null, "position: relative"); if (lineView.text.parentNode) lineView.text.parentNode.replaceChild(lineView.node, lineView.text); lineView.node.appendChild(lineView.text); if (ie && ie_version < 8) lineView.node.style.zIndex = 2; } return lineView.node; } function updateLineBackground(lineView) { var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; if (cls) cls += " CodeMirror-linebackground"; if (lineView.background) { if (cls) lineView.background.className = cls; else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } } else if (cls) { var wrap = ensureLineWrapped(lineView); lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); } } // Wrapper around buildLineContent which will reuse the structure // in display.externalMeasured when possible. function getLineContent(cm, lineView) { var ext = cm.display.externalMeasured; if (ext && ext.line == lineView.line) { cm.display.externalMeasured = null; lineView.measure = ext.measure; return ext.built; } return buildLineContent(cm, lineView); } // Redraw the line's text. Interacts with the background and text // classes because the mode may output tokens that influence these // classes. function updateLineText(cm, lineView) { var cls = lineView.text.className; var built = getLineContent(cm, lineView); if (lineView.text == lineView.node) lineView.node = built.pre; lineView.text.parentNode.replaceChild(built.pre, lineView.text); lineView.text = built.pre; if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { lineView.bgClass = built.bgClass; lineView.textClass = built.textClass; updateLineClasses(lineView); } else if (cls) { lineView.text.className = cls; } } function updateLineClasses(lineView) { updateLineBackground(lineView); if (lineView.line.wrapClass) ensureLineWrapped(lineView).className = lineView.line.wrapClass; else if (lineView.node != lineView.text) lineView.node.className = ""; var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; lineView.text.className = textClass || ""; } function updateLineGutter(cm, lineView, lineN, dims) { if (lineView.gutter) { lineView.node.removeChild(lineView.gutter); lineView.gutter = null; } var markers = lineView.line.gutterMarkers; if (cm.options.lineNumbers || markers) { var wrap = ensureLineWrapped(lineView); var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); cm.display.input.setUneditable(gutterWrap); wrap.insertBefore(gutterWrap, lineView.text); if (lineView.line.gutterClass) gutterWrap.className += " " + lineView.line.gutterClass; if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) lineView.lineNumber = gutterWrap.appendChild( elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; if (found) gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); } } } function updateLineWidgets(cm, lineView, dims) { if (lineView.alignable) lineView.alignable = null; for (var node = lineView.node.firstChild, next; node; node = next) { var next = node.nextSibling; if (node.className == "CodeMirror-linewidget") lineView.node.removeChild(node); } insertLineWidgets(cm, lineView, dims); } // Build a line's DOM representation from scratch function buildLineElement(cm, lineView, lineN, dims) { var built = getLineContent(cm, lineView); lineView.text = lineView.node = built.pre; if (built.bgClass) lineView.bgClass = built.bgClass; if (built.textClass) lineView.textClass = built.textClass; updateLineClasses(lineView); updateLineGutter(cm, lineView, lineN, dims); insertLineWidgets(cm, lineView, dims); return lineView.node; } // A lineView may contain multiple logical lines (when merged by // collapsed spans). The widgets for all of them need to be drawn. function insertLineWidgets(cm, lineView, dims) { insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { if (!line.widgets) return; var wrap = ensureLineWrapped(lineView); for (var i = 0, ws = line.widgets; i < ws.length; ++i) { var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); positionLineWidget(widget, node, lineView, dims); cm.display.input.setUneditable(node); if (allowAbove && widget.above) wrap.insertBefore(node, lineView.gutter || lineView.text); else wrap.appendChild(node); signalLater(widget, "redraw"); } } function positionLineWidget(widget, node, lineView, dims) { if (widget.noHScroll) { (lineView.alignable || (lineView.alignable = [])).push(node); var width = dims.wrapperWidth; node.style.left = dims.fixedPos + "px"; if (!widget.coverGutter) { width -= dims.gutterTotalWidth; node.style.paddingLeft = dims.gutterTotalWidth + "px"; } node.style.width = width + "px"; } if (widget.coverGutter) { node.style.zIndex = 5; node.style.position = "relative"; if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; } } // POSITION OBJECT // A Pos instance represents a position within the text. var Pos = CodeMirror.Pos = function(line, ch) { if (!(this instanceof Pos)) return new Pos(line, ch); this.line = line; this.ch = ch; }; // Compare two positions, return 0 if they are the same, a negative // number when a is less, and a positive number otherwise. var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; function copyPos(x) {return Pos(x.line, x.ch);} function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } // INPUT HANDLING function ensureFocus(cm) { if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } } function isReadOnly(cm) { return cm.options.readOnly || cm.doc.cantEdit; } // This will be set to an array of strings when copying, so that, // when pasting, we know what kind of selections the copied text // was made out of. var lastCopied = null; function applyTextInput(cm, inserted, deleted, sel, origin) { var doc = cm.doc; cm.display.shift = false; if (!sel) sel = doc.sel; var textLines = splitLines(inserted), multiPaste = null; // When pasing N lines into N selections, insert one line per selection if (cm.state.pasteIncoming && sel.ranges.length > 1) { if (lastCopied && lastCopied.join("\n") == inserted) multiPaste = sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines); else if (textLines.length == sel.ranges.length) multiPaste = map(textLines, function(l) { return [l]; }); } // Normal behavior is to insert the new text into every selection for (var i = sel.ranges.length - 1; i >= 0; i--) { var range = sel.ranges[i]; var from = range.from(), to = range.to(); if (range.empty()) { if (deleted && deleted > 0) // Handle deletion from = Pos(from.line, from.ch - deleted); else if (cm.state.overwrite && !cm.state.pasteIncoming) // Handle overwrite to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } var updateInput = cm.curOp.updateInput; var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, origin: origin || (cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; makeChange(cm.doc, changeEvent); signalLater(cm, "inputRead", cm, changeEvent); // When an 'electric' character is inserted, immediately trigger a reindent if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && cm.options.smartIndent && range.head.ch < 100 && (!i || sel.ranges[i - 1].head.line != range.head.line)) { var mode = cm.getModeAt(range.head); var end = changeEnd(changeEvent); var indented = false; if (mode.electricChars) { for (var j = 0; j < mode.electricChars.length; j++) if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { indented = indentLine(cm, end.line, "smart"); break; } } else if (mode.electricInput) { if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch))) indented = indentLine(cm, end.line, "smart"); } if (indented) signalLater(cm, "electricInput", cm, end.line); } } ensureCursorVisible(cm); cm.curOp.updateInput = updateInput; cm.curOp.typing = true; cm.state.pasteIncoming = cm.state.cutIncoming = false; } function copyableRanges(cm) { var text = [], ranges = []; for (var i = 0; i < cm.doc.sel.ranges.length; i++) { var line = cm.doc.sel.ranges[i].head.line; var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; ranges.push(lineRange); text.push(cm.getRange(lineRange.anchor, lineRange.head)); } return {text: text, ranges: ranges}; } function disableBrowserMagic(field) { field.setAttribute("autocorrect", "off"); field.setAttribute("autocapitalize", "off"); field.setAttribute("spellcheck", "false"); } // TEXTAREA INPUT STYLE function TextareaInput(cm) { this.cm = cm; // See input.poll and input.reset this.prevInput = ""; // Flag that indicates whether we expect input to appear real soon // now (after some event like 'keypress' or 'input') and are // polling intensively. this.pollingFast = false; // Self-resetting timeout for the poller this.polling = new Delayed(); // Tracks when input.reset has punted to just putting a short // string into the textarea instead of the full selection. this.inaccurateSelection = false; // Used to work around IE issue with selection being forgotten when focus moves away from textarea this.hasSelection = false; this.composing = null; }; function hiddenTextarea() { var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); // The textarea is kept positioned near the cursor to prevent the // fact that it'll be scrolled into view on input from scrolling // our fake cursor out of view. On webkit, when wrap=off, paste is // very slow. So make the area wide instead. if (webkit) te.style.width = "1000px"; else te.setAttribute("wrap", "off"); // If border: 0; -- iOS fails to open keyboard (issue #1287) if (ios) te.style.border = "1px solid black"; disableBrowserMagic(te); return div; } TextareaInput.prototype = copyObj({ init: function(display) { var input = this, cm = this.cm; // Wraps and hides input textarea var div = this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is // focused, and receives input. var te = this.textarea = div.firstChild; display.wrapper.insertBefore(div, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) if (ios) te.style.width = "0px"; on(te, "input", function() { if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; input.poll(); }); on(te, "paste", function() { // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206 // Add a char to the end of textarea before paste occur so that // selection doesn't span to the end of textarea. if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) { var start = te.selectionStart, end = te.selectionEnd; te.value += "$"; // The selection end needs to be set before the start, otherwise there // can be an intermediate non-empty selection between the two, which // can override the middle-click paste buffer on linux and cause the // wrong thing to get pasted. te.selectionEnd = end; te.selectionStart = start; cm.state.fakedLastChar = true; } cm.state.pasteIncoming = true; input.fastPoll(); }); function prepareCopyCut(e) { if (cm.somethingSelected()) { lastCopied = cm.getSelections(); if (input.inaccurateSelection) { input.prevInput = ""; input.inaccurateSelection = false; te.value = lastCopied.join("\n"); selectInput(te); } } else if (!cm.options.lineWiseCopyCut) { return; } else { var ranges = copyableRanges(cm); lastCopied = ranges.text; if (e.type == "cut") { cm.setSelections(ranges.ranges, null, sel_dontScroll); } else { input.prevInput = ""; te.value = ranges.text.join("\n"); selectInput(te); } } if (e.type == "cut") cm.state.cutIncoming = true; } on(te, "cut", prepareCopyCut); on(te, "copy", prepareCopyCut); on(display.scroller, "paste", function(e) { if (eventInWidget(display, e)) return; cm.state.pasteIncoming = true; input.focus(); }); // Prevent normal selection in the editor (we handle our own) on(display.lineSpace, "selectstart", function(e) { if (!eventInWidget(display, e)) e_preventDefault(e); }); on(te, "compositionstart", function() { var start = cm.getCursor("from"); input.composing = { start: start, range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) }; }); on(te, "compositionend", function() { if (input.composing) { input.poll(); input.composing.range.clear(); input.composing = null; } }); }, prepareSelection: function() { // Redraw the selection and/or cursor var cm = this.cm, display = cm.display, doc = cm.doc; var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts if (cm.options.moveInputWithCursor) { var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); } return result; }, showSelection: function(drawn) { var cm = this.cm, display = cm.display; removeChildrenAndAdd(display.cursorDiv, drawn.cursors); removeChildrenAndAdd(display.selectionDiv, drawn.selection); if (drawn.teTop != null) { this.wrapper.style.top = drawn.teTop + "px"; this.wrapper.style.left = drawn.teLeft + "px"; } }, // Reset the input to correspond to the selection (or to be empty, // when not typing and nothing is selected) reset: function(typing) { if (this.contextMenuPending) return; var minimal, selected, cm = this.cm, doc = cm.doc; if (cm.somethingSelected()) { this.prevInput = ""; var range = doc.sel.primary(); minimal = hasCopyEvent && (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); var content = minimal ? "-" : selected || cm.getSelection(); this.textarea.value = content; if (cm.state.focused) selectInput(this.textarea); if (ie && ie_version >= 9) this.hasSelection = content; } else if (!typing) { this.prevInput = this.textarea.value = ""; if (ie && ie_version >= 9) this.hasSelection = null; } this.inaccurateSelection = minimal; }, getField: function() { return this.textarea; }, supportsTouch: function() { return false; }, focus: function() { if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { try { this.textarea.focus(); } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM } }, blur: function() { this.textarea.blur(); }, resetPosition: function() { this.wrapper.style.top = this.wrapper.style.left = 0; }, receivedFocus: function() { this.slowPoll(); }, // Poll for input changes, using the normal rate of polling. This // runs as long as the editor is focused. slowPoll: function() { var input = this; if (input.pollingFast) return; input.polling.set(this.cm.options.pollInterval, function() { input.poll(); if (input.cm.state.focused) input.slowPoll(); }); }, // When an event has just come in that is likely to add or change // something in the input textarea, we poll faster, to ensure that // the change appears on the screen quickly. fastPoll: function() { var missed = false, input = this; input.pollingFast = true; function p() { var changed = input.poll(); if (!changed && !missed) {missed = true; input.polling.set(60, p);} else {input.pollingFast = false; input.slowPoll();} } input.polling.set(20, p); }, // Read input from the textarea, and update the document to match. // When something is selected, it is present in the textarea, and // selected (unless it is huge, in which case a placeholder is // used). When nothing is selected, the cursor sits after previously // seen text (can be empty), which is stored in prevInput (we must // not reset the textarea when typing, because that breaks IME). poll: function() { var cm = this.cm, input = this.textarea, prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as // possible when it is clear that nothing happened. hasSelection // will be the case when there is a lot of text in the textarea, // in which case reading its value would be expensive. if (!cm.state.focused || (hasSelection(input) && !prevInput) || isReadOnly(cm) || cm.options.disableInput || cm.state.keySeq) return false; // See paste handler for more on the fakedLastChar kludge if (cm.state.pasteIncoming && cm.state.fakedLastChar) { input.value = input.value.substring(0, input.value.length - 1); cm.state.fakedLastChar = false; } var text = input.value; // If nothing changed, bail. if (text == prevInput && !cm.somethingSelected()) return false; // Work around nonsensical selection resetting in IE9/10, and // inexplicable appearance of private area unicode characters on // some key combos in Mac (#2689). if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { cm.display.input.reset(); return false; } if (cm.doc.sel == cm.display.selForContextMenu) { var first = text.charCodeAt(0); if (first == 0x200b && !prevInput) prevInput = "\u200b"; if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } } // Find the part of the input that is actually new var same = 0, l = Math.min(prevInput.length, text.length); while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; var self = this; runInOp(cm, function() { applyTextInput(cm, text.slice(same), prevInput.length - same, null, self.composing ? "*compose" : null); // Don't leave long text in the textarea, since it makes further polling slow if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; else self.prevInput = text; if (self.composing) { self.composing.range.clear(); self.composing.range = cm.markText(self.composing.start, cm.getCursor("to"), {className: "CodeMirror-composing"}); } }); return true; }, ensurePolled: function() { if (this.pollingFast && this.poll()) this.pollingFast = false; }, onKeyPress: function() { if (ie && ie_version >= 9) this.hasSelection = null; this.fastPoll(); }, onContextMenu: function(e) { var input = this, cm = input.cm, display = cm.display, te = input.textarea; var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; if (!pos || presto) return; // Opera is difficult. // Reset the current text selection only if the click is done outside of the selection // and 'resetSelectionOnContextMenu' option is true. var reset = cm.options.resetSelectionOnContextMenu; if (reset && cm.doc.sel.contains(pos) == -1) operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); var oldCSS = te.style.cssText; input.wrapper.style.position = "absolute"; te.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) display.input.focus(); if (webkit) window.scrollTo(null, oldScrollY); display.input.reset(); // Adds "Select all" to context menu in FF if (!cm.somethingSelected()) te.value = input.prevInput = " "; input.contextMenuPending = true; display.selForContextMenu = cm.doc.sel; clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so // this adds a zero-width space so that we can later check whether // it got selected. function prepareSelectAllHack() { if (te.selectionStart != null) { var selected = cm.somethingSelected(); var extval = "\u200b" + (selected ? te.value : ""); te.value = "\u21da"; // Used to catch context-menu undo te.value = extval; input.prevInput = selected ? "" : "\u200b"; te.selectionStart = 1; te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the // selection in the meantime. display.selForContextMenu = cm.doc.sel; } } function rehide() { input.contextMenuPending = false; input.wrapper.style.position = "relative"; te.style.cssText = oldCSS; if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); // Try to detect the user choosing select-all if (te.selectionStart != null) { if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); var i = 0, poll = function() { if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "\u200b") operation(cm, commands.selectAll)(cm); else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); else display.input.reset(); }; display.detectingSelectAll = setTimeout(poll, 200); } } if (ie && ie_version >= 9) prepareSelectAllHack(); if (captureRightClick) { e_stop(e); var mouseup = function() { off(window, "mouseup", mouseup); setTimeout(rehide, 20); }; on(window, "mouseup", mouseup); } else { setTimeout(rehide, 50); } }, setUneditable: nothing, needsContentAttribute: false }, TextareaInput.prototype); // CONTENTEDITABLE INPUT STYLE function ContentEditableInput(cm) { this.cm = cm; this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; this.polling = new Delayed(); this.gracePeriod = false; } ContentEditableInput.prototype = copyObj({ init: function(display) { var input = this, cm = input.cm; var div = input.div = display.lineDiv; div.contentEditable = "true"; disableBrowserMagic(div); on(div, "paste", function(e) { var pasted = e.clipboardData && e.clipboardData.getData("text/plain"); if (pasted) { e.preventDefault(); cm.replaceSelection(pasted, null, "paste"); } }); on(div, "compositionstart", function(e) { var data = e.data; input.composing = {sel: cm.doc.sel, data: data, startData: data}; if (!data) return; var prim = cm.doc.sel.primary(); var line = cm.getLine(prim.head.line); var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); if (found > -1 && found <= prim.head.ch) input.composing.sel = simpleSelection(Pos(prim.head.line, found), Pos(prim.head.line, found + data.length)); }); on(div, "compositionupdate", function(e) { input.composing.data = e.data; }); on(div, "compositionend", function(e) { var ours = input.composing; if (!ours) return; if (e.data != ours.startData && !/\u200b/.test(e.data)) ours.data = e.data; // Need a small delay to prevent other code (input event, // selection polling) from doing damage when fired right after // compositionend. setTimeout(function() { if (!ours.handled) input.applyComposition(ours); if (input.composing == ours) input.composing = null; }, 50); }); on(div, "touchstart", function() { input.forceCompositionEnd(); }); on(div, "input", function() { if (input.composing) return; if (!input.pollContent()) runInOp(input.cm, function() {regChange(cm);}); }); function onCopyCut(e) { if (cm.somethingSelected()) { lastCopied = cm.getSelections(); if (e.type == "cut") cm.replaceSelection("", null, "cut"); } else if (!cm.options.lineWiseCopyCut) { return; } else { var ranges = copyableRanges(cm); lastCopied = ranges.text; if (e.type == "cut") { cm.operation(function() { cm.setSelections(ranges.ranges, 0, sel_dontScroll); cm.replaceSelection("", null, "cut"); }); } } // iOS exposes the clipboard API, but seems to discard content inserted into it if (e.clipboardData && !ios) { e.preventDefault(); e.clipboardData.clearData(); e.clipboardData.setData("text/plain", lastCopied.join("\n")); } else { // Old-fashioned briefly-focus-a-textarea hack var kludge = hiddenTextarea(), te = kludge.firstChild; cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); te.value = lastCopied.join("\n"); var hadFocus = document.activeElement; selectInput(te); setTimeout(function() { cm.display.lineSpace.removeChild(kludge); hadFocus.focus(); }, 50); } } on(div, "copy", onCopyCut); on(div, "cut", onCopyCut); }, prepareSelection: function() { var result = prepareSelection(this.cm, false); result.focus = this.cm.state.focused; return result; }, showSelection: function(info) { if (!info || !this.cm.display.view.length) return; if (info.focus) this.showPrimarySelection(); this.showMultipleSelections(info); }, showPrimarySelection: function() { var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) return; var start = posToDOM(this.cm, prim.from()); var end = posToDOM(this.cm, prim.to()); if (!start && !end) return; var view = this.cm.display.view; var old = sel.rangeCount && sel.getRangeAt(0); if (!start) { start = {node: view[0].measure.map[2], offset: 0}; } else if (!end) { // FIXME dangerously hacky var measure = view[view.length - 1].measure; var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; } try { var rng = range(start.node, start.offset, end.offset, end.node); } catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible if (rng) { sel.removeAllRanges(); sel.addRange(rng); if (old && sel.anchorNode == null) sel.addRange(old); else if (gecko) this.startGracePeriod(); } this.rememberSelection(); }, startGracePeriod: function() { var input = this; clearTimeout(this.gracePeriod); this.gracePeriod = setTimeout(function() { input.gracePeriod = false; if (input.selectionChanged()) input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); }, 20); }, showMultipleSelections: function(info) { removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); }, rememberSelection: function() { var sel = window.getSelection(); this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; }, selectionInEditor: function() { var sel = window.getSelection(); if (!sel.rangeCount) return false; var node = sel.getRangeAt(0).commonAncestorContainer; return contains(this.div, node); }, focus: function() { if (this.cm.options.readOnly != "nocursor") this.div.focus(); }, blur: function() { this.div.blur(); }, getField: function() { return this.div; }, supportsTouch: function() { return true; }, receivedFocus: function() { var input = this; if (this.selectionInEditor()) this.pollSelection(); else runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); function poll() { if (input.cm.state.focused) { input.pollSelection(); input.polling.set(input.cm.options.pollInterval, poll); } } this.polling.set(this.cm.options.pollInterval, poll); }, selectionChanged: function() { var sel = window.getSelection(); return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; }, pollSelection: function() { if (!this.composing && !this.gracePeriod && this.selectionChanged()) { var sel = window.getSelection(), cm = this.cm; this.rememberSelection(); var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var head = domToPos(cm, sel.focusNode, sel.focusOffset); if (anchor && head) runInOp(cm, function() { setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; }); } }, pollContent: function() { var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); var from = sel.from(), to = sel.to(); if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; var fromIndex; if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { var fromLine = lineNo(display.view[0].line); var fromNode = display.view[0].node; } else { var fromLine = lineNo(display.view[fromIndex].line); var fromNode = display.view[fromIndex - 1].node.nextSibling; } var toIndex = findViewIndex(cm, to.line); if (toIndex == display.view.length - 1) { var toLine = display.viewTo - 1; var toNode = display.view[toIndex].node; } else { var toLine = lineNo(display.view[toIndex + 1].line) - 1; var toNode = display.view[toIndex + 1].node.previousSibling; } var newText = splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); while (newText.length > 1 && oldText.length > 1) { if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } else break; } var cutFront = 0, cutEnd = 0; var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) ++cutFront; var newBot = lst(newText), oldBot = lst(oldText); var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) ++cutEnd; newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); newText[0] = newText[0].slice(cutFront); var chFrom = Pos(fromLine, cutFront); var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { replaceRange(cm.doc, newText, chFrom, chTo, "+input"); return true; } }, ensurePolled: function() { this.forceCompositionEnd(); }, reset: function() { this.forceCompositionEnd(); }, forceCompositionEnd: function() { if (!this.composing || this.composing.handled) return; this.applyComposition(this.composing); this.composing.handled = true; this.div.blur(); this.div.focus(); }, applyComposition: function(composing) { if (composing.data && composing.data != composing.startData) operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); }, setUneditable: function(node) { node.setAttribute("contenteditable", "false"); }, onKeyPress: function(e) { e.preventDefault(); operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }, onContextMenu: nothing, resetPosition: nothing, needsContentAttribute: true }, ContentEditableInput.prototype); function posToDOM(cm, pos) { var view = findViewForLine(cm, pos.line); if (!view || view.hidden) return null; var line = getLine(cm.doc, pos.line); var info = mapFromLineView(view, line, pos.line); var order = getOrder(line), side = "left"; if (order) { var partPos = getBidiPartAt(order, pos.ch); side = partPos % 2 ? "right" : "left"; } var result = nodeAndOffsetInLineMap(info.map, pos.ch, "left"); result.offset = result.collapse == "right" ? result.end : result.start; return result; } function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } function domToPos(cm, node, offset) { var lineNode; if (node == cm.display.lineDiv) { lineNode = cm.display.lineDiv.childNodes[offset]; if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); node = null; offset = 0; } else { for (lineNode = node;; lineNode = lineNode.parentNode) { if (!lineNode || lineNode == cm.display.lineDiv) return null; if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; } } for (var i = 0; i < cm.display.view.length; i++) { var lineView = cm.display.view[i]; if (lineView.node == lineNode) return locateNodeInLineView(lineView, node, offset); } } function locateNodeInLineView(lineView, node, offset) { var wrapper = lineView.text.firstChild, bad = false; if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); if (node == wrapper) { bad = true; node = wrapper.childNodes[offset]; offset = 0; if (!node) { var line = lineView.rest ? lst(lineView.rest) : lineView.line; return badPos(Pos(lineNo(line), line.text.length), bad); } } var textNode = node.nodeType == 3 ? node : null, topNode = node; if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { textNode = node.firstChild; if (offset) offset = textNode.nodeValue.length; } while (topNode.parentNode != wrapper) topNode = topNode.parentNode; var measure = lineView.measure, maps = measure.maps; function find(textNode, topNode, offset) { for (var i = -1; i < (maps ? maps.length : 0); i++) { var map = i < 0 ? measure.map : maps[i]; for (var j = 0; j < map.length; j += 3) { var curNode = map[j + 2]; if (curNode == textNode || curNode == topNode) { var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); var ch = map[j] + offset; if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; return Pos(line, ch); } } } } var found = find(textNode, topNode, offset); if (found) return badPos(found, bad); // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { found = find(after, after.firstChild, 0); if (found) return badPos(Pos(found.line, found.ch - dist), bad); else dist += after.textContent.length; } for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { found = find(before, before.firstChild, -1); if (found) return badPos(Pos(found.line, found.ch + dist), bad); else dist += after.textContent.length; } } function domTextBetween(cm, from, to, fromLine, toLine) { var text = "", closing = false; function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } function walk(node) { if (node.nodeType == 1) { var cmText = node.getAttribute("cm-text"); if (cmText != null) { if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); text += cmText; return; } var markerID = node.getAttribute("cm-marker"), range; if (markerID) { var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); if (found.length && (range = found[0].find())) text += getBetween(cm.doc, range.from, range.to).join("\n"); return; } if (node.getAttribute("contenteditable") == "false") return; for (var i = 0; i < node.childNodes.length; i++) walk(node.childNodes[i]); if (/^(pre|div|p)$/i.test(node.nodeName)) closing = true; } else if (node.nodeType == 3) { var val = node.nodeValue; if (!val) return; if (closing) { text += "\n"; closing = false; } text += val; } } for (;;) { walk(from); if (from == to) break; from = from.nextSibling; } return text; } CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; // SELECTION / CURSOR // Selection objects are immutable. A new one is created every time // the selection changes. A selection is one or more non-overlapping // (and non-touching) ranges, sorted, and an integer that indicates // which one is the primary selection (the one that's scrolled into // view, that getCursor returns, etc). function Selection(ranges, primIndex) { this.ranges = ranges; this.primIndex = primIndex; } Selection.prototype = { primary: function() { return this.ranges[this.primIndex]; }, equals: function(other) { if (other == this) return true; if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; for (var i = 0; i < this.ranges.length; i++) { var here = this.ranges[i], there = other.ranges[i]; if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; } return true; }, deepCopy: function() { for (var out = [], i = 0; i < this.ranges.length; i++) out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); return new Selection(out, this.primIndex); }, somethingSelected: function() { for (var i = 0; i < this.ranges.length; i++) if (!this.ranges[i].empty()) return true; return false; }, contains: function(pos, end) { if (!end) end = pos; for (var i = 0; i < this.ranges.length; i++) { var range = this.ranges[i]; if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) return i; } return -1; } }; function Range(anchor, head) { this.anchor = anchor; this.head = head; } Range.prototype = { from: function() { return minPos(this.anchor, this.head); }, to: function() { return maxPos(this.anchor, this.head); }, empty: function() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; } }; // Take an unsorted, potentially overlapping set of ranges, and // build a selection out of it. 'Consumes' ranges array (modifying // it). function normalizeSelection(ranges, primIndex) { var prim = ranges[primIndex]; ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); primIndex = indexOf(ranges, prim); for (var i = 1; i < ranges.length; i++) { var cur = ranges[i], prev = ranges[i - 1]; if (cmp(prev.to(), cur.from()) >= 0) { var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; if (i <= primIndex) --primIndex; ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); } } return new Selection(ranges, primIndex); } function simpleSelection(anchor, head) { return new Selection([new Range(anchor, head || anchor)], 0); } // Most of the external API clips given positions to make sure they // actually exist within the document. function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} function clipPos(doc, pos) { if (pos.line < doc.first) return Pos(doc.first, 0); var last = doc.first + doc.size - 1; if (pos.line > last) return Pos(last, getLine(doc, last).text.length); return clipToLen(pos, getLine(doc, pos.line).text.length); } function clipToLen(pos, linelen) { var ch = pos.ch; if (ch == null || ch > linelen) return Pos(pos.line, linelen); else if (ch < 0) return Pos(pos.line, 0); else return pos; } function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} function clipPosArray(doc, array) { for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); return out; } // SELECTION UPDATES // The 'scroll' parameter given to many of these indicated whether // the new cursor position should be scrolled into view after // modifying the selection. // If shift is held or the extend flag is set, extends a range to // include a given position (and optionally a second position). // Otherwise, simply returns the range between the given positions. // Used for cursor motion and such. function extendRange(doc, range, head, other) { if (doc.cm && doc.cm.display.shift || doc.extend) { var anchor = range.anchor; if (other) { var posBefore = cmp(head, anchor) < 0; if (posBefore != (cmp(other, anchor) < 0)) { anchor = head; head = other; } else if (posBefore != (cmp(head, other) < 0)) { head = other; } } return new Range(anchor, head); } else { return new Range(other || head, head); } } // Extend the primary selection range, discard the rest. function extendSelection(doc, head, other, options) { setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); } // Extend all selections (pos is an array of selections with length // equal the number of selections) function extendSelections(doc, heads, options) { for (var out = [], i = 0; i < doc.sel.ranges.length; i++) out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); var newSel = normalizeSelection(out, doc.sel.primIndex); setSelection(doc, newSel, options); } // Updates a single range in the selection. function replaceOneSelection(doc, i, range, options) { var ranges = doc.sel.ranges.slice(0); ranges[i] = range; setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); } // Reset the selection to a single range. function setSimpleSelection(doc, anchor, head, options) { setSelection(doc, simpleSelection(anchor, head), options); } // Give beforeSelectionChange handlers a change to influence a // selection update. function filterSelectionChange(doc, sel) { var obj = { ranges: sel.ranges, update: function(ranges) { this.ranges = []; for (var i = 0; i < ranges.length; i++) this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head)); } }; signal(doc, "beforeSelectionChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); else return sel; } function setSelectionReplaceHistory(doc, sel, options) { var done = doc.history.done, last = lst(done); if (last && last.ranges) { done[done.length - 1] = sel; setSelectionNoUndo(doc, sel, options); } else { setSelection(doc, sel, options); } } // Set a new selection. function setSelection(doc, sel, options) { setSelectionNoUndo(doc, sel, options); addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); } function setSelectionNoUndo(doc, sel, options) { if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) sel = filterSelectionChange(doc, sel); var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); if (!(options && options.scroll === false) && doc.cm) ensureCursorVisible(doc.cm); } function setSelectionInner(doc, sel) { if (sel.equals(doc.sel)) return; doc.sel = sel; if (doc.cm) { doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; signalCursorActivity(doc.cm); } signalLater(doc, "cursorActivity", doc); } // Verify that the selection does not partially select any atomic // marked ranges. function reCheckSelection(doc) { setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); } // Return a selection that does not partially select any atomic // ranges. function skipAtomicInSelection(doc, sel, bias, mayClear) { var out; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); var newHead = skipAtomic(doc, range.head, bias, mayClear); if (out || newAnchor != range.anchor || newHead != range.head) { if (!out) out = sel.ranges.slice(0, i); out[i] = new Range(newAnchor, newHead); } } return out ? normalizeSelection(out, sel.primIndex) : sel; } // Ensure a given position is not inside an atomic range. function skipAtomic(doc, pos, bias, mayClear) { var flipped = false, curPos = pos; var dir = bias || 1; doc.cantEdit = false; search: for (;;) { var line = getLine(doc, curPos.line); if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { var sp = line.markedSpans[i], m = sp.marker; if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { if (mayClear) { signal(m, "beforeCursorEnter"); if (m.explicitlyCleared) { if (!line.markedSpans) break; else {--i; continue;} } } if (!m.atomic) continue; var newPos = m.find(dir < 0 ? -1 : 1); if (cmp(newPos, curPos) == 0) { newPos.ch += dir; if (newPos.ch < 0) { if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); else newPos = null; } else if (newPos.ch > line.text.length) { if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); else newPos = null; } if (!newPos) { if (flipped) { // Driven in a corner -- no valid cursor position found at all // -- try again *with* clearing, if we didn't already if (!mayClear) return skipAtomic(doc, pos, bias, true); // Otherwise, turn off editing until further notice, and return the start of the doc doc.cantEdit = true; return Pos(doc.first, 0); } flipped = true; newPos = pos; dir = -dir; } } curPos = newPos; continue search; } } } return curPos; } } // SELECTION DRAWING function updateSelection(cm) { cm.display.input.showSelection(cm.display.input.prepareSelection()); } function prepareSelection(cm, primary) { var doc = cm.doc, result = {}; var curFragment = result.cursors = document.createDocumentFragment(); var selFragment = result.selection = document.createDocumentFragment(); for (var i = 0; i < doc.sel.ranges.length; i++) { if (primary === false && i == doc.sel.primIndex) continue; var range = doc.sel.ranges[i]; var collapsed = range.empty(); if (collapsed || cm.options.showCursorWhenSelecting) drawSelectionCursor(cm, range, curFragment); if (!collapsed) drawSelectionRange(cm, range, selFragment); } return result; } // Draws a cursor for the given range function drawSelectionCursor(cm, range, output) { var pos = cursorCoords(cm, range.head, "div", null, null, !cm.options.singleCursorHeightPerLine); var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); cursor.style.left = pos.left + "px"; cursor.style.top = pos.top + "px"; cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; if (pos.other) { // Secondary cursor, shown when on a 'jump' in bi-directional text var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); otherCursor.style.display = ""; otherCursor.style.left = pos.other.left + "px"; otherCursor.style.top = pos.other.top + "px"; otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; } } // Draws the given range as a highlighted selection function drawSelectionRange(cm, range, output) { var display = cm.display, doc = cm.doc; var fragment = document.createDocumentFragment(); var padding = paddingH(cm.display), leftSide = padding.left; var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; function add(left, top, width, bottom) { if (top < 0) top = 0; top = Math.round(top); bottom = Math.round(bottom); fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px; height: " + (bottom - top) + "px")); } function drawForLine(line, fromArg, toArg) { var lineObj = getLine(doc, line); var lineLen = lineObj.text.length; var start, end; function coords(ch, bias) { return charCoords(cm, Pos(line, ch), "div", lineObj, bias); } iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { var leftPos = coords(from, "left"), rightPos, left, right; if (from == to) { rightPos = leftPos; left = right = leftPos.left; } else { rightPos = coords(to - 1, "right"); if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } left = leftPos.left; right = rightPos.right; } if (fromArg == null && from == 0) left = leftSide; if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part add(left, leftPos.top, null, leftPos.bottom); left = leftSide; if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); } if (toArg == null && to == lineLen) right = rightSide; if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) start = leftPos; if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) end = rightPos; if (left < leftSide + 1) left = leftSide; add(left, rightPos.top, right - left, rightPos.bottom); }); return {start: start, end: end}; } var sFrom = range.from(), sTo = range.to(); if (sFrom.line == sTo.line) { drawForLine(sFrom.line, sFrom.ch, sTo.ch); } else { var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); var singleVLine = visualLine(fromLine) == visualLine(toLine); var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; if (singleVLine) { if (leftEnd.top < rightStart.top - 2) { add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); } else { add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); } } if (leftEnd.bottom < rightStart.top) add(leftSide, leftEnd.bottom, null, rightStart.top); } output.appendChild(fragment); } // Cursor-blinking function restartBlink(cm) { if (!cm.state.focused) return; var display = cm.display; clearInterval(display.blinker); var on = true; display.cursorDiv.style.visibility = ""; if (cm.options.cursorBlinkRate > 0) display.blinker = setInterval(function() { display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, cm.options.cursorBlinkRate); else if (cm.options.cursorBlinkRate < 0) display.cursorDiv.style.visibility = "hidden"; } // HIGHLIGHT WORKER function startWorker(cm, time) { if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) cm.state.highlight.set(time, bind(highlightWorker, cm)); } function highlightWorker(cm) { var doc = cm.doc; if (doc.frontier < doc.first) doc.frontier = doc.first; if (doc.frontier >= cm.display.viewTo) return; var end = +new Date + cm.options.workTime; var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); var changedLines = []; doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { if (doc.frontier >= cm.display.viewFrom) { // Visible var oldStyles = line.styles; var highlighted = highlightLine(cm, line, state, true); line.styles = highlighted.styles; var oldCls = line.styleClasses, newCls = highlighted.classes; if (newCls) line.styleClasses = newCls; else if (oldCls) line.styleClasses = null; var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; if (ischange) changedLines.push(doc.frontier); line.stateAfter = copyState(doc.mode, state); } else { processLine(cm, line.text, state); line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; } ++doc.frontier; if (+new Date > end) { startWorker(cm, cm.options.workDelay); return true; } }); if (changedLines.length) runInOp(cm, function() { for (var i = 0; i < changedLines.length; i++) regLineChange(cm, changedLines[i], "text"); }); } // Finds the line to start with when starting a parse. Tries to // find a line with a stateAfter, so that it can start with a // valid state. If that fails, it returns the line with the // smallest indentation, which tends to need the least context to // parse correctly. function findStartLine(cm, n, precise) { var minindent, minline, doc = cm.doc; var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); for (var search = n; search > lim; --search) { if (search <= doc.first) return doc.first; var line = getLine(doc, search - 1); if (line.stateAfter && (!precise || search <= doc.frontier)) return search; var indented = countColumn(line.text, null, cm.options.tabSize); if (minline == null || minindent > indented) { minline = search - 1; minindent = indented; } } return minline; } function getStateBefore(cm, n, precise) { var doc = cm.doc, display = cm.display; if (!doc.mode.startState) return true; var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; if (!state) state = startState(doc.mode); else state = copyState(doc.mode, state); doc.iter(pos, n, function(line) { processLine(cm, line.text, state); var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; line.stateAfter = save ? copyState(doc.mode, state) : null; ++pos; }); if (precise) doc.frontier = pos; return state; } // POSITION MEASUREMENT function paddingTop(display) {return display.lineSpace.offsetTop;} function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} function paddingH(display) { if (display.cachedPaddingH) return display.cachedPaddingH; var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; return data; } function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } function displayWidth(cm) { return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; } function displayHeight(cm) { return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; } // Ensure the lineView.wrapping.heights array is populated. This is // an array of bottom offsets for the lines that make up a drawn // line. When lineWrapping is on, there might be more than one // height. function ensureLineHeights(cm, lineView, rect) { var wrapping = cm.options.lineWrapping; var curWidth = wrapping && displayWidth(cm); if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { var heights = lineView.measure.heights = []; if (wrapping) { lineView.measure.width = curWidth; var rects = lineView.text.firstChild.getClientRects(); for (var i = 0; i < rects.length - 1; i++) { var cur = rects[i], next = rects[i + 1]; if (Math.abs(cur.bottom - next.bottom) > 2) heights.push((cur.bottom + next.top) / 2 - rect.top); } } heights.push(rect.bottom - rect.top); } } // Find a line map (mapping character offsets to text nodes) and a // measurement cache for the given line number. (A line view might // contain multiple lines when collapsed ranges are present.) function mapFromLineView(lineView, line, lineN) { if (lineView.line == line) return {map: lineView.measure.map, cache: lineView.measure.cache}; for (var i = 0; i < lineView.rest.length; i++) if (lineView.rest[i] == line) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; for (var i = 0; i < lineView.rest.length; i++) if (lineNo(lineView.rest[i]) > lineN) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; } // Render a line into the hidden node display.externalMeasured. Used // when measurement is needed for a line that's not in the viewport. function updateExternalMeasurement(cm, line) { line = visualLine(line); var lineN = lineNo(line); var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); view.lineN = lineN; var built = view.built = buildLineContent(cm, view); view.text = built.pre; removeChildrenAndAdd(cm.display.lineMeasure, built.pre); return view; } // Get a {top, bottom, left, right} box (in line-local coordinates) // for a given character. function measureChar(cm, line, ch, bias) { return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); } // Find a line view that corresponds to the given line number. function findViewForLine(cm, lineN) { if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) return cm.display.view[findViewIndex(cm, lineN)]; var ext = cm.display.externalMeasured; if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) return ext; } // Measurement can be split in two steps, the set-up work that // applies to the whole line, and the measurement of the actual // character. Functions like coordsChar, that need to do a lot of // measurements in a row, can thus ensure that the set-up work is // only done once. function prepareMeasureForLine(cm, line) { var lineN = lineNo(line); var view = findViewForLine(cm, lineN); if (view && !view.text) view = null; else if (view && view.changes) updateLineForChanges(cm, view, lineN, getDimensions(cm)); if (!view) view = updateExternalMeasurement(cm, line); var info = mapFromLineView(view, line, lineN); return { line: line, view: view, rect: null, map: info.map, cache: info.cache, before: info.before, hasHeights: false }; } // Given a prepared measurement object, measures the position of an // actual character (or fetches it from the cache). function measureCharPrepared(cm, prepared, ch, bias, varHeight) { if (prepared.before) ch = -1; var key = ch + (bias || ""), found; if (prepared.cache.hasOwnProperty(key)) { found = prepared.cache[key]; } else { if (!prepared.rect) prepared.rect = prepared.view.text.getBoundingClientRect(); if (!prepared.hasHeights) { ensureLineHeights(cm, prepared.view, prepared.rect); prepared.hasHeights = true; } found = measureCharInner(cm, prepared, ch, bias); if (!found.bogus) prepared.cache[key] = found; } return {left: found.left, right: found.right, top: varHeight ? found.rtop : found.top, bottom: varHeight ? found.rbottom : found.bottom}; } var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; function nodeAndOffsetInLineMap(map, ch, bias) { var node, start, end, collapse; // First, search the line map for the text node corresponding to, // or closest to, the target character. for (var i = 0; i < map.length; i += 3) { var mStart = map[i], mEnd = map[i + 1]; if (ch < mStart) { start = 0; end = 1; collapse = "left"; } else if (ch < mEnd) { start = ch - mStart; end = start + 1; } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { end = mEnd - mStart; start = end - 1; if (ch >= mEnd) collapse = "right"; } if (start != null) { node = map[i + 2]; if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) collapse = bias; if (bias == "left" && start == 0) while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { node = map[(i -= 3) + 2]; collapse = "left"; } if (bias == "right" && start == mEnd - mStart) while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { node = map[(i += 3) + 2]; collapse = "right"; } break; } } return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; } function measureCharInner(cm, prepared, ch, bias) { var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); var node = place.node, start = place.start, end = place.end, collapse = place.collapse; var rect; if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { rect = node.parentNode.getBoundingClientRect(); } else if (ie && cm.options.lineWrapping) { var rects = range(node, start, end).getClientRects(); if (rects.length) rect = rects[bias == "right" ? rects.length - 1 : 0]; else rect = nullRect; } else { rect = range(node, start, end).getBoundingClientRect() || nullRect; } if (rect.left || rect.right || start == 0) break; end = start; start = start - 1; collapse = "right"; } if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); } else { // If it is a widget, simply get the box for the whole widget. if (start > 0) collapse = bias = "right"; var rects; if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) rect = rects[bias == "right" ? rects.length - 1 : 0]; else rect = node.getBoundingClientRect(); } if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { var rSpan = node.parentNode.getClientRects()[0]; if (rSpan) rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; else rect = nullRect; } var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; var mid = (rtop + rbot) / 2; var heights = prepared.view.measure.heights; for (var i = 0; i < heights.length - 1; i++) if (mid < heights[i]) break; var top = i ? heights[i - 1] : 0, bot = heights[i]; var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, top: top, bottom: bot}; if (!rect.left && !rect.right) result.bogus = true; if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } return result; } // Work around problem with bounding client rects on ranges being // returned incorrectly when zoomed on IE10 and below. function maybeUpdateRectForZooming(measure, rect) { if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) return rect; var scaleX = screen.logicalXDPI / screen.deviceXDPI; var scaleY = screen.logicalYDPI / screen.deviceYDPI; return {left: rect.left * scaleX, right: rect.right * scaleX, top: rect.top * scaleY, bottom: rect.bottom * scaleY}; } function clearLineMeasurementCacheFor(lineView) { if (lineView.measure) { lineView.measure.cache = {}; lineView.measure.heights = null; if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) lineView.measure.caches[i] = {}; } } function clearLineMeasurementCache(cm) { cm.display.externalMeasure = null; removeChildren(cm.display.lineMeasure); for (var i = 0; i < cm.display.view.length; i++) clearLineMeasurementCacheFor(cm.display.view[i]); } function clearCaches(cm) { clearLineMeasurementCache(cm); cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; cm.display.lineNumChars = null; } function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } // Converts a {top, bottom, left, right} box from line-local // coordinates into another coordinate system. Context may be one of // "line", "div" (display.lineDiv), "local"/null (editor), "window", // or "page". function intoCoordSystem(cm, lineObj, rect, context) { if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { var size = widgetHeight(lineObj.widgets[i]); rect.top += size; rect.bottom += size; } if (context == "line") return rect; if (!context) context = "local"; var yOff = heightAtLine(lineObj); if (context == "local") yOff += paddingTop(cm.display); else yOff -= cm.display.viewOffset; if (context == "page" || context == "window") { var lOff = cm.display.lineSpace.getBoundingClientRect(); yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); rect.left += xOff; rect.right += xOff; } rect.top += yOff; rect.bottom += yOff; return rect; } // Coverts a box from "div" coords to another coordinate system. // Context may be "window", "page", "div", or "local"/null. function fromCoordSystem(cm, coords, context) { if (context == "div") return coords; var left = coords.left, top = coords.top; // First move into "page" coordinate system if (context == "page") { left -= pageScrollX(); top -= pageScrollY(); } else if (context == "local" || !context) { var localBox = cm.display.sizer.getBoundingClientRect(); left += localBox.left; top += localBox.top; } var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; } function charCoords(cm, pos, context, lineObj, bias) { if (!lineObj) lineObj = getLine(cm.doc, pos.line); return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); } // Returns a box for a given cursor position, which may have an // 'other' property containing the position of the secondary cursor // on a bidi boundary. function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { lineObj = lineObj || getLine(cm.doc, pos.line); if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); function get(ch, right) { var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); if (right) m.left = m.right; else m.right = m.left; return intoCoordSystem(cm, lineObj, m, context); } function getBidi(ch, partPos) { var part = order[partPos], right = part.level % 2; if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { part = order[--partPos]; ch = bidiRight(part) - (part.level % 2 ? 0 : 1); right = true; } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { part = order[++partPos]; ch = bidiLeft(part) - part.level % 2; right = false; } if (right && ch == part.to && ch > part.from) return get(ch - 1); return get(ch, right); } var order = getOrder(lineObj), ch = pos.ch; if (!order) return get(ch); var partPos = getBidiPartAt(order, ch); var val = getBidi(ch, partPos); if (bidiOther != null) val.other = getBidi(ch, bidiOther); return val; } // Used to cheaply estimate the coordinates for a position. Used for // intermediate scroll updates. function estimateCoords(cm, pos) { var left = 0, pos = clipPos(cm.doc, pos); if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; var lineObj = getLine(cm.doc, pos.line); var top = heightAtLine(lineObj) + paddingTop(cm.display); return {left: left, right: left, top: top, bottom: top + lineObj.height}; } // Positions returned by coordsChar contain some extra information. // xRel is the relative x position of the input coordinates compared // to the found position (so xRel > 0 means the coordinates are to // the right of the character position, for example). When outside // is true, that means the coordinates lie outside the line's // vertical range. function PosWithInfo(line, ch, outside, xRel) { var pos = Pos(line, ch); pos.xRel = xRel; if (outside) pos.outside = true; return pos; } // Compute the character position closest to the given coordinates. // Input must be lineSpace-local ("div" coordinate system). function coordsChar(cm, x, y) { var doc = cm.doc; y += cm.display.viewOffset; if (y < 0) return PosWithInfo(doc.first, 0, true, -1); var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; if (lineN > last) return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); if (x < 0) x = 0; var lineObj = getLine(doc, lineN); for (;;) { var found = coordsCharInner(cm, lineObj, lineN, x, y); var merged = collapsedSpanAtEnd(lineObj); var mergedPos = merged && merged.find(0, true); if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) lineN = lineNo(lineObj = mergedPos.to.line); else return found; } } function coordsCharInner(cm, lineObj, lineNo, x, y) { var innerOff = y - heightAtLine(lineObj); var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; var preparedMeasure = prepareMeasureForLine(cm, lineObj); function getX(ch) { var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); wrongLine = true; if (innerOff > sp.bottom) return sp.left - adjust; else if (innerOff < sp.top) return sp.left + adjust; else wrongLine = false; return sp.left; } var bidi = getOrder(lineObj), dist = lineObj.text.length; var from = lineLeft(lineObj), to = lineRight(lineObj); var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); // Do a binary search between these bounds. for (;;) { if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { var ch = x < fromX || x - fromX <= toX - x ? from : to; var xDiff = x - (ch == from ? fromX : toX); while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); return pos; } var step = Math.ceil(dist / 2), middle = from + step; if (bidi) { middle = from; for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); } var middleX = getX(middle); if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} } } var measureText; // Compute the default text height. function textHeight(display) { if (display.cachedTextHeight != null) return display.cachedTextHeight; if (measureText == null) { measureText = elt("pre"); // Measure a bunch of lines, for browsers that compute // fractional heights. for (var i = 0; i < 49; ++i) { measureText.appendChild(document.createTextNode("x")); measureText.appendChild(elt("br")); } measureText.appendChild(document.createTextNode("x")); } removeChildrenAndAdd(display.measure, measureText); var height = measureText.offsetHeight / 50; if (height > 3) display.cachedTextHeight = height; removeChildren(display.measure); return height || 1; } // Compute the default character width. function charWidth(display) { if (display.cachedCharWidth != null) return display.cachedCharWidth; var anchor = elt("span", "xxxxxxxxxx"); var pre = elt("pre", [anchor]); removeChildrenAndAdd(display.measure, pre); var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; if (width > 2) display.cachedCharWidth = width; return width || 10; } // OPERATIONS // Operations are used to wrap a series of changes to the editor // state in such a way that each change won't have to update the // cursor and display (which would be awkward, slow, and // error-prone). Instead, display updates are batched and then all // combined and executed at once. var operationGroup = null; var nextOpId = 0; // Start a new operation. function startOperation(cm) { cm.curOp = { cm: cm, viewChanged: false, // Flag that indicates that lines might need to be redrawn startHeight: cm.doc.height, // Used to detect need to update scrollbar forceUpdate: false, // Used to force a redraw updateInput: null, // Whether to reset the input textarea typing: false, // Whether this reset should be careful to leave existing text (for compositing) changeObjs: null, // Accumulated changes, for firing change events cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already selectionChanged: false, // Whether the selection needs to be redrawn updateMaxLine: false, // Set when the widest line needs to be determined anew scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet scrollToPos: null, // Used to scroll to a specific position focus: false, id: ++nextOpId // Unique ID }; if (operationGroup) { operationGroup.ops.push(cm.curOp); } else { cm.curOp.ownsGroup = operationGroup = { ops: [cm.curOp], delayedCallbacks: [] }; } } function fireCallbacksForOps(group) { // Calls delayed callbacks and cursorActivity handlers until no // new ones appear var callbacks = group.delayedCallbacks, i = 0; do { for (; i < callbacks.length; i++) callbacks[i](); for (var j = 0; j < group.ops.length; j++) { var op = group.ops[j]; if (op.cursorActivityHandlers) while (op.cursorActivityCalled < op.cursorActivityHandlers.length) op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm); } } while (i < callbacks.length); } // Finish an operation, updating the display and signalling delayed events function endOperation(cm) { var op = cm.curOp, group = op.ownsGroup; if (!group) return; try { fireCallbacksForOps(group); } finally { operationGroup = null; for (var i = 0; i < group.ops.length; i++) group.ops[i].cm.curOp = null; endOperations(group); } } // The DOM updates done when an operation finishes are batched so // that the minimum number of relayouts are required. function endOperations(group) { var ops = group.ops; for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R1(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W1(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R2(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W2(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_finish(ops[i]); } function endOperation_R1(op) { var cm = op.cm, display = cm.display; maybeClipScrollbars(cm); if (op.updateMaxLine) findMaxLine(cm); op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); } function endOperation_W1(op) { op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); } function endOperation_R2(op) { var cm = op.cm, display = cm.display; if (op.updatedDisplay) updateHeightsInViewport(cm); op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it, // and ensure the document's width matches it. // updateDisplay_W2 will use these properties to do the actual resizing if (display.maxLineChanged && !cm.options.lineWrapping) { op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; cm.display.sizerWidth = op.adjustWidthTo; op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); } if (op.updatedDisplay || op.selectionChanged) op.preparedSelection = display.input.prepareSelection(); } function endOperation_W2(op) { var cm = op.cm; if (op.adjustWidthTo != null) { cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; if (op.maxScrollLeft < cm.doc.scrollLeft) setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); cm.display.maxLineChanged = false; } if (op.preparedSelection) cm.display.input.showSelection(op.preparedSelection); if (op.updatedDisplay) setDocumentHeight(cm, op.barMeasure); if (op.updatedDisplay || op.startHeight != cm.doc.height) updateScrollbars(cm, op.barMeasure); if (op.selectionChanged) restartBlink(cm); if (cm.state.focused && op.updateInput) cm.display.input.reset(op.typing); if (op.focus && op.focus == activeElt()) ensureFocus(op.cm); } function endOperation_finish(op) { var cm = op.cm, display = cm.display, doc = cm.doc; if (op.updatedDisplay) postUpdateDisplay(cm, op.update); // Abort mouse wheel delta measurement, when scrolling explicitly if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) display.wheelStartX = display.wheelStartY = null; // Propagate the scroll position to the actual DOM scroller if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); display.scrollbars.setScrollTop(doc.scrollTop); display.scroller.scrollTop = doc.scrollTop; } if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - displayWidth(cm), op.scrollLeft)); display.scrollbars.setScrollLeft(doc.scrollLeft); display.scroller.scrollLeft = doc.scrollLeft; alignHorizontally(cm); } // If we need to scroll a specific position into view, do so. if (op.scrollToPos) { var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); } // Fire events for markers that are hidden/unidden by editing or // undoing var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; if (hidden) for (var i = 0; i < hidden.length; ++i) if (!hidden[i].lines.length) signal(hidden[i], "hide"); if (unhidden) for (var i = 0; i < unhidden.length; ++i) if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); if (display.wrapper.offsetHeight) doc.scrollTop = cm.display.scroller.scrollTop; // Fire change events, and delayed event handlers if (op.changeObjs) signal(cm, "changes", cm, op.changeObjs); if (op.update) op.update.finish(); } // Run the given function in an operation function runInOp(cm, f) { if (cm.curOp) return f(); startOperation(cm); try { return f(); } finally { endOperation(cm); } } // Wraps a function in an operation. Returns the wrapped function. function operation(cm, f) { return function() { if (cm.curOp) return f.apply(cm, arguments); startOperation(cm); try { return f.apply(cm, arguments); } finally { endOperation(cm); } }; } // Used to add methods to editor and doc instances, wrapping them in // operations. function methodOp(f) { return function() { if (this.curOp) return f.apply(this, arguments); startOperation(this); try { return f.apply(this, arguments); } finally { endOperation(this); } }; } function docMethodOp(f) { return function() { var cm = this.cm; if (!cm || cm.curOp) return f.apply(this, arguments); startOperation(cm); try { return f.apply(this, arguments); } finally { endOperation(cm); } }; } // VIEW TRACKING // These objects are used to represent the visible (currently drawn) // part of the document. A LineView may correspond to multiple // logical lines, if those are connected by collapsed ranges. function LineView(doc, line, lineN) { // The starting line this.line = line; // Continuing lines, if any this.rest = visualLineContinued(line); // Number of logical lines in this visual line this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; this.node = this.text = null; this.hidden = lineIsHidden(doc, line); } // Create a range of LineView objects for the given lines. function buildViewArray(cm, from, to) { var array = [], nextPos; for (var pos = from; pos < to; pos = nextPos) { var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); nextPos = pos + view.size; array.push(view); } return array; } // Updates the display.view data structure for a given change to the // document. From and to are in pre-change coordinates. Lendiff is // the amount of lines added or subtracted by the change. This is // used for changes that span multiple lines, or change the way // lines are divided into visual lines. regLineChange (below) // registers single-line changes. function regChange(cm, from, to, lendiff) { if (from == null) from = cm.doc.first; if (to == null) to = cm.doc.first + cm.doc.size; if (!lendiff) lendiff = 0; var display = cm.display; if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) display.updateLineNumbers = from; cm.curOp.viewChanged = true; if (from >= display.viewTo) { // Change after if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) resetView(cm); } else if (to <= display.viewFrom) { // Change before if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { resetView(cm); } else { display.viewFrom += lendiff; display.viewTo += lendiff; } } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap resetView(cm); } else if (from <= display.viewFrom) { // Top overlap var cut = viewCuttingPoint(cm, to, to + lendiff, 1); if (cut) { display.view = display.view.slice(cut.index); display.viewFrom = cut.lineN; display.viewTo += lendiff; } else { resetView(cm); } } else if (to >= display.viewTo) { // Bottom overlap var cut = viewCuttingPoint(cm, from, from, -1); if (cut) { display.view = display.view.slice(0, cut.index); display.viewTo = cut.lineN; } else { resetView(cm); } } else { // Gap in the middle var cutTop = viewCuttingPoint(cm, from, from, -1); var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); if (cutTop && cutBot) { display.view = display.view.slice(0, cutTop.index) .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) .concat(display.view.slice(cutBot.index)); display.viewTo += lendiff; } else { resetView(cm); } } var ext = display.externalMeasured; if (ext) { if (to < ext.lineN) ext.lineN += lendiff; else if (from < ext.lineN + ext.size) display.externalMeasured = null; } } // Register a change to a single line. Type must be one of "text", // "gutter", "class", "widget" function regLineChange(cm, line, type) { cm.curOp.viewChanged = true; var display = cm.display, ext = cm.display.externalMeasured; if (ext && line >= ext.lineN && line < ext.lineN + ext.size) display.externalMeasured = null; if (line < display.viewFrom || line >= display.viewTo) return; var lineView = display.view[findViewIndex(cm, line)]; if (lineView.node == null) return; var arr = lineView.changes || (lineView.changes = []); if (indexOf(arr, type) == -1) arr.push(type); } // Clear the view. function resetView(cm) { cm.display.viewFrom = cm.display.viewTo = cm.doc.first; cm.display.view = []; cm.display.viewOffset = 0; } // Find the view element corresponding to a given line. Return null // when the line isn't visible. function findViewIndex(cm, n) { if (n >= cm.display.viewTo) return null; n -= cm.display.viewFrom; if (n < 0) return null; var view = cm.display.view; for (var i = 0; i < view.length; i++) { n -= view[i].size; if (n < 0) return i; } } function viewCuttingPoint(cm, oldN, newN, dir) { var index = findViewIndex(cm, oldN), diff, view = cm.display.view; if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) return {index: index, lineN: newN}; for (var i = 0, n = cm.display.viewFrom; i < index; i++) n += view[i].size; if (n != oldN) { if (dir > 0) { if (index == view.length - 1) return null; diff = (n + view[index].size) - oldN; index++; } else { diff = n - oldN; } oldN += diff; newN += diff; } while (visualLineNo(cm.doc, newN) != newN) { if (index == (dir < 0 ? 0 : view.length - 1)) return null; newN += dir * view[index - (dir < 0 ? 1 : 0)].size; index += dir; } return {index: index, lineN: newN}; } // Force the view to cover a given range, adding empty view element // or clipping off existing ones as needed. function adjustView(cm, from, to) { var display = cm.display, view = display.view; if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { display.view = buildViewArray(cm, from, to); display.viewFrom = from; } else { if (display.viewFrom > from) display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); else if (display.viewFrom < from) display.view = display.view.slice(findViewIndex(cm, from)); display.viewFrom = from; if (display.viewTo < to) display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); else if (display.viewTo > to) display.view = display.view.slice(0, findViewIndex(cm, to)); } display.viewTo = to; } // Count the number of lines in the view whose DOM representation is // out of date (or nonexistent). function countDirtyView(cm) { var view = cm.display.view, dirty = 0; for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; } return dirty; } // EVENT HANDLERS // Attach the necessary event handlers when initializing the editor function registerEventHandlers(cm) { var d = cm.display; on(d.scroller, "mousedown", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click if (ie && ie_version < 11) on(d.scroller, "dblclick", operation(cm, function(e) { if (signalDOMEvent(cm, e)) return; var pos = posFromMouse(cm, e); if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); var word = cm.findWordAt(pos); extendSelection(cm.doc, word.anchor, word.head); })); else on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); // Some browsers fire contextmenu *after* opening the menu, at // which point we can't mess with it anymore. Context menu is // handled in onMouseDown for these browsers. if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); // Used to suppress mouse event handling when a touch happens var touchFinished, prevTouch = {end: 0}; function finishTouch() { if (d.activeTouch) { touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); prevTouch = d.activeTouch; prevTouch.end = +new Date; } }; function isMouseLikeTouchEvent(e) { if (e.touches.length != 1) return false; var touch = e.touches[0]; return touch.radiusX <= 1 && touch.radiusY <= 1; } function farAway(touch, other) { if (other.left == null) return true; var dx = other.left - touch.left, dy = other.top - touch.top; return dx * dx + dy * dy > 20 * 20; } on(d.scroller, "touchstart", function(e) { if (!isMouseLikeTouchEvent(e)) { clearTimeout(touchFinished); var now = +new Date; d.activeTouch = {start: now, moved: false, prev: now - prevTouch.end <= 300 ? prevTouch : null}; if (e.touches.length == 1) { d.activeTouch.left = e.touches[0].pageX; d.activeTouch.top = e.touches[0].pageY; } } }); on(d.scroller, "touchmove", function() { if (d.activeTouch) d.activeTouch.moved = true; }); on(d.scroller, "touchend", function(e) { var touch = d.activeTouch; if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date - touch.start < 300) { var pos = cm.coordsChar(d.activeTouch, "page"), range; if (!touch.prev || farAway(touch, touch.prev)) // Single tap range = new Range(pos, pos); else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap range = cm.findWordAt(pos); else // Triple tap range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); cm.setSelection(range.anchor, range.head); cm.focus(); e_preventDefault(e); } finishTouch(); }); on(d.scroller, "touchcancel", finishTouch); // Sync scrolling between fake scrollbars and real scrollable // area, ensure viewport is updated when scrolling. on(d.scroller, "scroll", function() { if (d.scroller.clientHeight) { setScrollTop(cm, d.scroller.scrollTop); setScrollLeft(cm, d.scroller.scrollLeft, true); signal(cm, "scroll", cm); } }); // Listen to wheel events in order to try and update the viewport on time. on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); // Prevent wrapper from ever scrolling on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); d.dragFunctions = { simple: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, start: function(e){onDragStart(cm, e);}, drop: operation(cm, onDrop) }; var inp = d.input.getField(); on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); on(inp, "keydown", operation(cm, onKeyDown)); on(inp, "keypress", operation(cm, onKeyPress)); on(inp, "focus", bind(onFocus, cm)); on(inp, "blur", bind(onBlur, cm)); } function dragDropChanged(cm, value, old) { var wasOn = old && old != CodeMirror.Init; if (!value != !wasOn) { var funcs = cm.display.dragFunctions; var toggle = value ? on : off; toggle(cm.display.scroller, "dragstart", funcs.start); toggle(cm.display.scroller, "dragenter", funcs.simple); toggle(cm.display.scroller, "dragover", funcs.simple); toggle(cm.display.scroller, "drop", funcs.drop); } } // Called when the window resizes function onResize(cm) { var d = cm.display; if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) return; // Might be a text scaling operation, clear size caches. d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; d.scrollbarsClipped = false; cm.setSize(); } // MOUSE EVENTS // Return true when the given mouse event happened in a widget function eventInWidget(display, e) { for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || (n.parentNode == display.sizer && n != display.mover)) return true; } } // Given a mouse event, find the corresponding position. If liberal // is false, it checks whether a gutter or scrollbar was clicked, // and returns null if it was. forRect is used by rectangular // selections, and tries to estimate a character position even for // coordinates beyond the right of the text. function posFromMouse(cm, e, liberal, forRect) { var display = cm.display; if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; var x, y, space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly. try { x = e.clientX - space.left; y = e.clientY - space.top; } catch (e) { return null; } var coords = coordsChar(cm, x, y), line; if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); } return coords; } // A mouse down can be a single click, double click, triple click, // start of selection drag, start of text drag, new cursor // (ctrl-click), rectangle drag (alt-drag), or xwin // middle-click-paste. Or it might be a click on something we should // not interfere with, such as a scrollbar or widget. function onMouseDown(e) { var cm = this, display = cm.display; if (display.activeTouch && display.input.supportsTouch() || signalDOMEvent(cm, e)) return; display.shift = e.shiftKey; if (eventInWidget(display, e)) { if (!webkit) { // Briefly turn off draggability, to allow widgets to do // normal dragging things. display.scroller.draggable = false; setTimeout(function(){display.scroller.draggable = true;}, 100); } return; } if (clickInGutter(cm, e)) return; var start = posFromMouse(cm, e); window.focus(); switch (e_button(e)) { case 1: if (start) leftButtonDown(cm, e, start); else if (e_target(e) == display.scroller) e_preventDefault(e); break; case 2: if (webkit) cm.state.lastMiddleDown = +new Date; if (start) extendSelection(cm.doc, start); setTimeout(function() {display.input.focus();}, 20); e_preventDefault(e); break; case 3: if (captureRightClick) onContextMenu(cm, e); else delayBlurEvent(cm); break; } } var lastClick, lastDoubleClick; function leftButtonDown(cm, e, start) { if (ie) setTimeout(bind(ensureFocus, cm), 0); else cm.curOp.focus = activeElt(); var now = +new Date, type; if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { type = "triple"; } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { type = "double"; lastDoubleClick = {time: now, pos: start}; } else { type = "single"; lastClick = {time: now, pos: start}; } var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && type == "single" && (contained = sel.contains(start)) > -1 && !sel.ranges[contained].empty()) leftButtonStartDrag(cm, e, start, modifier); else leftButtonSelect(cm, e, start, type, modifier); } // Start a text drag. When it ends, see if any dragging actually // happen, and treat as a click if it didn't. function leftButtonStartDrag(cm, e, start, modifier) { var display = cm.display, startTime = +new Date; var dragEnd = operation(cm, function(e2) { if (webkit) display.scroller.draggable = false; cm.state.draggingText = false; off(document, "mouseup", dragEnd); off(display.scroller, "drop", dragEnd); if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { e_preventDefault(e2); if (!modifier && +new Date - 200 < startTime) extendSelection(cm.doc, start); // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) if (webkit || ie && ie_version == 9) setTimeout(function() {document.body.focus(); display.input.focus();}, 20); else display.input.focus(); } }); // Let the drag handler handle this. if (webkit) display.scroller.draggable = true; cm.state.draggingText = dragEnd; // IE's approach to draggable if (display.scroller.dragDrop) display.scroller.dragDrop(); on(document, "mouseup", dragEnd); on(display.scroller, "drop", dragEnd); } // Normal selection, as opposed to text dragging. function leftButtonSelect(cm, e, start, type, addNew) { var display = cm.display, doc = cm.doc; e_preventDefault(e); var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; if (addNew && !e.shiftKey) { ourIndex = doc.sel.contains(start); if (ourIndex > -1) ourRange = ranges[ourIndex]; else ourRange = new Range(start, start); } else { ourRange = doc.sel.primary(); ourIndex = doc.sel.primIndex; } if (e.altKey) { type = "rect"; if (!addNew) ourRange = new Range(start, start); start = posFromMouse(cm, e, true, true); ourIndex = -1; } else if (type == "double") { var word = cm.findWordAt(start); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, word.anchor, word.head); else ourRange = word; } else if (type == "triple") { var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, line.anchor, line.head); else ourRange = line; } else { ourRange = extendRange(doc, ourRange, start); } if (!addNew) { ourIndex = 0; setSelection(doc, new Selection([ourRange], 0), sel_mouse); startSel = doc.sel; } else if (ourIndex == -1) { ourIndex = ranges.length; setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), {scroll: false, origin: "*mouse"}); } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0)); startSel = doc.sel; } else { replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); } var lastPos = start; function extendTo(pos) { if (cmp(lastPos, pos) == 0) return; lastPos = pos; if (type == "rect") { var ranges = [], tabSize = cm.options.tabSize; var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); if (left == right) ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); else if (text.length > leftPos) ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } if (!ranges.length) ranges.push(new Range(start, start)); setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {origin: "*mouse", scroll: false}); cm.scrollIntoView(pos); } else { var oldRange = ourRange; var anchor = oldRange.anchor, head = pos; if (type != "single") { if (type == "double") var range = cm.findWordAt(pos); else var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); if (cmp(range.anchor, anchor) > 0) { head = range.head; anchor = minPos(oldRange.from(), range.anchor); } else { head = range.anchor; anchor = maxPos(oldRange.to(), range.head); } } var ranges = startSel.ranges.slice(0); ranges[ourIndex] = new Range(clipPos(doc, anchor), head); setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); } } var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend // happened in the meantime (clearTimeout isn't reliable -- at // least on Chrome, the timeouts still happen even when cleared, // if the clear happens after their scheduled firing time). var counter = 0; function extend(e) { var curCount = ++counter; var cur = posFromMouse(cm, e, true, type == "rect"); if (!cur) return; if (cmp(cur, lastPos) != 0) { cm.curOp.focus = activeElt(); extendTo(cur); var visible = visibleLines(display, doc); if (cur.line >= visible.to || cur.line < visible.from) setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); } else { var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; if (outside) setTimeout(operation(cm, function() { if (counter != curCount) return; display.scroller.scrollTop += outside; extend(e); }), 50); } } function done(e) { counter = Infinity; e_preventDefault(e); display.input.focus(); off(document, "mousemove", move); off(document, "mouseup", up); doc.history.lastSelOrigin = null; } var move = operation(cm, function(e) { if (!e_button(e)) done(e); else extend(e); }); var up = operation(cm, done); on(document, "mousemove", move); on(document, "mouseup", up); } // Determines whether an event happened in the gutter, and fires the // handlers for the corresponding event. function gutterEvent(cm, e, type, prevent, signalfn) { try { var mX = e.clientX, mY = e.clientY; } catch(e) { return false; } if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; if (prevent) e_preventDefault(e); var display = cm.display; var lineBox = display.lineDiv.getBoundingClientRect(); if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); mY -= lineBox.top - display.viewOffset; for (var i = 0; i < cm.options.gutters.length; ++i) { var g = display.gutters.childNodes[i]; if (g && g.getBoundingClientRect().right >= mX) { var line = lineAtHeight(cm.doc, mY); var gutter = cm.options.gutters[i]; signalfn(cm, type, cm, line, gutter, e); return e_defaultPrevented(e); } } } function clickInGutter(cm, e) { return gutterEvent(cm, e, "gutterClick", true, signalLater); } // Kludge to work around strange IE behavior where it'll sometimes // re-fire a series of drag-related events right after the drop (#1551) var lastDrop = 0; function onDrop(e) { var cm = this; if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); if (ie) lastDrop = +new Date; var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; if (!pos || isReadOnly(cm)) return; // Might be a file drop, in which case we simply extract the text // and insert it. if (files && files.length && window.FileReader && window.File) { var n = files.length, text = Array(n), read = 0; var loadFile = function(file, i) { var reader = new FileReader; reader.onload = operation(cm, function() { text[i] = reader.result; if (++read == n) { pos = clipPos(cm.doc, pos); var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; makeChange(cm.doc, change); setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); } }); reader.readAsText(file); }; for (var i = 0; i < n; ++i) loadFile(files[i], i); } else { // Normal drop // Don't do a replace if the drop happened inside of the selected text. if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { cm.state.draggingText(e); // Ensure the editor is re-focused setTimeout(function() {cm.display.input.focus();}, 20); return; } try { var text = e.dataTransfer.getData("Text"); if (text) { if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey)) var selected = cm.listSelections(); setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); if (selected) for (var i = 0; i < selected.length; ++i) replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); cm.replaceSelection(text, "around", "paste"); cm.display.input.focus(); } } catch(e){} } } function onDragStart(cm, e) { if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e.dataTransfer.setData("Text", cm.getSelection()); // Use dummy image instead of default browsers image. // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. if (e.dataTransfer.setDragImage && !safari) { var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (presto) { img.width = img.height = 1; cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason img._top = img.offsetTop; } e.dataTransfer.setDragImage(img, 0, 0); if (presto) img.parentNode.removeChild(img); } } // SCROLL EVENTS // Sync the scrollable area and scrollbars, ensure the viewport // covers the visible area. function setScrollTop(cm, val) { if (Math.abs(cm.doc.scrollTop - val) < 2) return; cm.doc.scrollTop = val; if (!gecko) updateDisplaySimple(cm, {top: val}); if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; cm.display.scrollbars.setScrollTop(val); if (gecko) updateDisplaySimple(cm); startWorker(cm, 100); } // Sync scroller and scrollbar, ensure the gutter elements are // aligned. function setScrollLeft(cm, val, isScroller) { if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); cm.doc.scrollLeft = val; alignHorizontally(cm); if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; cm.display.scrollbars.setScrollLeft(val); } // Since the delta values reported on mouse wheel events are // unstandardized between browsers and even browser versions, and // generally horribly unpredictable, this code starts by measuring // the scroll effect that the first few mouse wheel events have, // and, from that, detects the way it can convert deltas to pixel // offsets afterwards. // // The reason we want to know the amount a wheel event will scroll // is that it gives us a chance to update the display before the // actual scrolling happens, reducing flickering. var wheelSamples = 0, wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we // know one. These don't have to be accurate -- the result of them // being wrong would just be a slight flicker on the first wheel // scroll (if it is large enough). if (ie) wheelPixelsPerUnit = -.53; else if (gecko) wheelPixelsPerUnit = 15; else if (chrome) wheelPixelsPerUnit = -.7; else if (safari) wheelPixelsPerUnit = -1/3; var wheelEventDelta = function(e) { var dx = e.wheelDeltaX, dy = e.wheelDeltaY; if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; else if (dy == null) dy = e.wheelDelta; return {x: dx, y: dy}; }; CodeMirror.wheelEventPixels = function(e) { var delta = wheelEventDelta(e); delta.x *= wheelPixelsPerUnit; delta.y *= wheelPixelsPerUnit; return delta; }; function onScrollWheel(cm, e) { var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; var display = cm.display, scroll = display.scroller; // Quit if there's nothing to scroll here if (!(dx && scroll.scrollWidth > scroll.clientWidth || dy && scroll.scrollHeight > scroll.clientHeight)) return; // Webkit browsers on OS X abort momentum scrolls when the target // of the scroll event is removed from the scrollable element. // This hack (see related code in patchDisplay) makes sure the // element is kept around. if (dy && mac && webkit) { outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { for (var i = 0; i < view.length; i++) { if (view[i].node == cur) { cm.display.currentWheelTarget = cur; break outer; } } } } // On some browsers, horizontal scrolling will cause redraws to // happen before the gutter has been realigned, causing it to // wriggle around in a most unseemly way. When we have an // estimated pixels/delta value, we just handle horizontal // scrolling entirely here. It'll be slightly off from native, but // better than glitching out. if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { if (dy) setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); e_preventDefault(e); display.wheelStartX = null; // Abort measurement, if in progress return; } // 'Project' the visible viewport to cover the area that is being // scrolled into view (if we know enough to estimate it). if (dy && wheelPixelsPerUnit != null) { var pixels = dy * wheelPixelsPerUnit; var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; if (pixels < 0) top = Math.max(0, top + pixels - 50); else bot = Math.min(cm.doc.height, bot + pixels + 50); updateDisplaySimple(cm, {top: top, bottom: bot}); } if (wheelSamples < 20) { if (display.wheelStartX == null) { display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; display.wheelDX = dx; display.wheelDY = dy; setTimeout(function() { if (display.wheelStartX == null) return; var movedX = scroll.scrollLeft - display.wheelStartX; var movedY = scroll.scrollTop - display.wheelStartY; var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || (movedX && display.wheelDX && movedX / display.wheelDX); display.wheelStartX = display.wheelStartY = null; if (!sample) return; wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); ++wheelSamples; }, 200); } else { display.wheelDX += dx; display.wheelDY += dy; } } } // KEY EVENTS // Run a handler that was bound to a key. function doHandleBinding(cm, bound, dropShift) { if (typeof bound == "string") { bound = commands[bound]; if (!bound) return false; } // Ensure previous input has been read, so that the handler sees a // consistent view of the document cm.display.input.ensurePolled(); var prevShift = cm.display.shift, done = false; try { if (isReadOnly(cm)) cm.state.suppressEdits = true; if (dropShift) cm.display.shift = false; done = bound(cm) != Pass; } finally { cm.display.shift = prevShift; cm.state.suppressEdits = false; } return done; } function lookupKeyForEditor(cm, name, handle) { for (var i = 0; i < cm.state.keyMaps.length; i++) { var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); if (result) return result; } return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) || lookupKey(name, cm.options.keyMap, handle, cm); } var stopSeq = new Delayed; function dispatchKey(cm, name, e, handle) { var seq = cm.state.keySeq; if (seq) { if (isModifierKey(name)) return "handled"; stopSeq.set(50, function() { if (cm.state.keySeq == seq) { cm.state.keySeq = null; cm.display.input.reset(); } }); name = seq + " " + name; } var result = lookupKeyForEditor(cm, name, handle); if (result == "multi") cm.state.keySeq = name; if (result == "handled") signalLater(cm, "keyHandled", cm, name, e); if (result == "handled" || result == "multi") { e_preventDefault(e); restartBlink(cm); } if (seq && !result && /\'$/.test(name)) { e_preventDefault(e); return true; } return !!result; } // Handle a key from the keydown event. function handleKeyBinding(cm, e) { var name = keyName(e, true); if (!name) return false; if (e.shiftKey && !cm.state.keySeq) { // First try to resolve full name (including 'Shift-'). Failing // that, see if there is a cursor-motion command (starting with // 'go') bound to the keyname without 'Shift-'. return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) || dispatchKey(cm, name, e, function(b) { if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) return doHandleBinding(cm, b); }); } else { return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); } } // Handle a key from the keypress event function handleCharBinding(cm, e, ch) { return dispatchKey(cm, "'" + ch + "'", e, function(b) { return doHandleBinding(cm, b, true); }); } var lastStoppedKey = null; function onKeyDown(e) { var cm = this; cm.curOp.focus = activeElt(); if (signalDOMEvent(cm, e)) return; // IE does strange things with escape. if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; var code = e.keyCode; cm.display.shift = code == 16 || e.shiftKey; var handled = handleKeyBinding(cm, e); if (presto) { lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) cm.replaceSelection("", null, "cut"); } // Turn mouse into crosshair when Alt is held on Mac. if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) showCrossHair(cm); } function showCrossHair(cm) { var lineDiv = cm.display.lineDiv; addClass(lineDiv, "CodeMirror-crosshair"); function up(e) { if (e.keyCode == 18 || !e.altKey) { rmClass(lineDiv, "CodeMirror-crosshair"); off(document, "keyup", up); off(document, "mouseover", up); } } on(document, "keyup", up); on(document, "mouseover", up); } function onKeyUp(e) { if (e.keyCode == 16) this.doc.sel.shift = false; signalDOMEvent(this, e); } function onKeyPress(e) { var cm = this; if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; var keyCode = e.keyCode, charCode = e.charCode; if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; var ch = String.fromCharCode(charCode == null ? keyCode : charCode); if (handleCharBinding(cm, e, ch)) return; cm.display.input.onKeyPress(e); } // FOCUS/BLUR EVENTS function delayBlurEvent(cm) { cm.state.delayingBlurEvent = true; setTimeout(function() { if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; onBlur(cm); } }, 100); } function onFocus(cm) { if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; if (cm.options.readOnly == "nocursor") return; if (!cm.state.focused) { signal(cm, "focus", cm); cm.state.focused = true; addClass(cm.display.wrapper, "CodeMirror-focused"); // This test prevents this from firing when a context // menu is closed (since the input reset would kill the // select-all detection hack) if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { cm.display.input.reset(); if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 } cm.display.input.receivedFocus(); } restartBlink(cm); } function onBlur(cm) { if (cm.state.delayingBlurEvent) return; if (cm.state.focused) { signal(cm, "blur", cm); cm.state.focused = false; rmClass(cm.display.wrapper, "CodeMirror-focused"); } clearInterval(cm.display.blinker); setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); } // CONTEXT MENU HANDLING // To make the context menu work, we need to briefly unhide the // textarea (making it as unobtrusive as possible) to let the // right-click take effect on it. function onContextMenu(cm, e) { if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; cm.display.input.onContextMenu(e); } function contextMenuInGutter(cm, e) { if (!hasHandler(cm, "gutterContextMenu")) return false; return gutterEvent(cm, e, "gutterContextMenu", false, signal); } // UPDATING // Compute the position of the end of a change (its 'to' property // refers to the pre-change end). var changeEnd = CodeMirror.changeEnd = function(change) { if (!change.text) return change.to; return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); }; // Adjust a position to refer to the post-change position of the // same text, or the end of the change if the change covers it. function adjustForChange(pos, change) { if (cmp(pos, change.from) < 0) return pos; if (cmp(pos, change.to) <= 0) return changeEnd(change); var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; return Pos(line, ch); } function computeSelAfterChange(doc, change) { var out = []; for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change))); } return normalizeSelection(out, doc.sel.primIndex); } function offsetPos(pos, old, nw) { if (pos.line == old.line) return Pos(nw.line, pos.ch - old.ch + nw.ch); else return Pos(nw.line + (pos.line - old.line), pos.ch); } // Used by replaceSelections to allow moving the selection to the // start or around the replaced test. Hint may be "start" or "around". function computeReplacedSel(doc, changes, hint) { var out = []; var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; for (var i = 0; i < changes.length; i++) { var change = changes[i]; var from = offsetPos(change.from, oldPrev, newPrev); var to = offsetPos(changeEnd(change), oldPrev, newPrev); oldPrev = change.to; newPrev = to; if (hint == "around") { var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; out[i] = new Range(inv ? to : from, inv ? from : to); } else { out[i] = new Range(from, from); } } return new Selection(out, doc.sel.primIndex); } // Allow "beforeChange" event handlers to influence a change function filterChange(doc, change, update) { var obj = { canceled: false, from: change.from, to: change.to, text: change.text, origin: change.origin, cancel: function() { this.canceled = true; } }; if (update) obj.update = function(from, to, text, origin) { if (from) this.from = clipPos(doc, from); if (to) this.to = clipPos(doc, to); if (text) this.text = text; if (origin !== undefined) this.origin = origin; }; signal(doc, "beforeChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); if (obj.canceled) return null; return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; } // Apply a change to a document, and add it to the document's // history, and propagating it to all linked documents. function makeChange(doc, change, ignoreReadOnly) { if (doc.cm) { if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); if (doc.cm.state.suppressEdits) return; } if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { change = filterChange(doc, change, true); if (!change) return; } // Possibly split or suppress the update based on the presence // of read-only spans in its range. var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); if (split) { for (var i = split.length - 1; i >= 0; --i) makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); } else { makeChangeInner(doc, change); } } function makeChangeInner(doc, change) { if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; var selAfter = computeSelAfterChange(doc, change); addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); var rebased = []; linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); }); } // Revert a change stored in a document's history. function makeChangeFromHistory(doc, type, allowSelectionOnly) { if (doc.cm && doc.cm.state.suppressEdits) return; var hist = doc.history, event, selAfter = doc.sel; var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't // needlessly clear selection events) for (var i = 0; i < source.length; i++) { event = source[i]; if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) break; } if (i == source.length) return; hist.lastOrigin = hist.lastSelOrigin = null; for (;;) { event = source.pop(); if (event.ranges) { pushSelectionToHistory(event, dest); if (allowSelectionOnly && !event.equals(doc.sel)) { setSelection(doc, event, {clearRedo: false}); return; } selAfter = event; } else break; } // Build up a reverse change object to add to the opposite history // stack (redo when undoing, and vice versa). var antiChanges = []; pushSelectionToHistory(selAfter, dest); dest.push({changes: antiChanges, generation: hist.generation}); hist.generation = event.generation || ++hist.maxGeneration; var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); for (var i = event.changes.length - 1; i >= 0; --i) { var change = event.changes[i]; change.origin = type; if (filter && !filterChange(doc, change, false)) { source.length = 0; return; } antiChanges.push(historyChangeFromChange(doc, change)); var after = i ? computeSelAfterChange(doc, change) : lst(source); makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); var rebased = []; // Propagate to the linked documents linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); }); } } // Sub-views need their line numbers shifted when text is added // above or below them in the parent document. function shiftDoc(doc, distance) { if (distance == 0) return; doc.first += distance; doc.sel = new Selection(map(doc.sel.ranges, function(range) { return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch)); }), doc.sel.primIndex); if (doc.cm) { regChange(doc.cm, doc.first, doc.first - distance, distance); for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) regLineChange(doc.cm, l, "gutter"); } } // More lower-level change function, handling only a single document // (not linked ones). function makeChangeSingleDoc(doc, change, selAfter, spans) { if (doc.cm && !doc.cm.curOp) return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); if (change.to.line < doc.first) { shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); return; } if (change.from.line > doc.lastLine()) return; // Clip the change to the size of this doc if (change.from.line < doc.first) { var shift = change.text.length - 1 - (doc.first - change.from.line); shiftDoc(doc, shift); change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), text: [lst(change.text)], origin: change.origin}; } var last = doc.lastLine(); if (change.to.line > last) { change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), text: [change.text[0]], origin: change.origin}; } change.removed = getBetween(doc, change.from, change.to); if (!selAfter) selAfter = computeSelAfterChange(doc, change); if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); else updateDoc(doc, change, spans); setSelectionNoUndo(doc, selAfter, sel_dontScroll); } // Handle the interaction of a change to a document with the editor // that this document is part of. function makeChangeSingleDocInEditor(cm, change, spans) { var doc = cm.doc, display = cm.display, from = change.from, to = change.to; var recomputeMaxLength = false, checkWidthStart = from.line; if (!cm.options.lineWrapping) { checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); doc.iter(checkWidthStart, to.line + 1, function(line) { if (line == display.maxLine) { recomputeMaxLength = true; return true; } }); } if (doc.sel.contains(change.from, change.to) > -1) signalCursorActivity(cm); updateDoc(doc, change, spans, estimateHeight(cm)); if (!cm.options.lineWrapping) { doc.iter(checkWidthStart, from.line + change.text.length, function(line) { var len = lineLength(line); if (len > display.maxLineLength) { display.maxLine = line; display.maxLineLength = len; display.maxLineChanged = true; recomputeMaxLength = false; } }); if (recomputeMaxLength) cm.curOp.updateMaxLine = true; } // Adjust frontier, schedule worker doc.frontier = Math.min(doc.frontier, from.line); startWorker(cm, 400); var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display if (change.full) regChange(cm); else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) regLineChange(cm, from.line, "text"); else regChange(cm, from.line, to.line + 1, lendiff); var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); if (changeHandler || changesHandler) { var obj = { from: from, to: to, text: change.text, removed: change.removed, origin: change.origin }; if (changeHandler) signalLater(cm, "change", cm, obj); if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } cm.display.selForContextMenu = null; } function replaceRange(doc, code, from, to, origin) { if (!to) to = from; if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } if (typeof code == "string") code = splitLines(code); makeChange(doc, {from: from, to: to, text: code, origin: origin}); } // SCROLLING THINGS INTO VIEW // If an editor sits on the top or bottom of the window, partially // scrolled out of view, this ensures that the cursor is visible. function maybeScrollWindow(cm, coords) { if (signalDOMEvent(cm, "scrollCursorIntoView")) return; var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; if (coords.top + box.top < 0) doScroll = true; else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; if (doScroll != null && !phantom) { var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + coords.left + "px; width: 2px;"); cm.display.lineSpace.appendChild(scrollNode); scrollNode.scrollIntoView(doScroll); cm.display.lineSpace.removeChild(scrollNode); } } // Scroll a given position into view (immediately), verifying that // it actually became visible (as line heights are accurately // measured, the position of something may 'drift' during drawing). function scrollPosIntoView(cm, pos, end, margin) { if (margin == null) margin = 0; for (var limit = 0; limit < 5; limit++) { var changed = false, coords = cursorCoords(cm, pos); var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), Math.min(coords.top, endCoords.top) - margin, Math.max(coords.left, endCoords.left), Math.max(coords.bottom, endCoords.bottom) + margin); var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop); if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; } if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; } if (!changed) break; } return coords; } // Scroll a given set of coordinates into view (immediately). function scrollIntoView(cm, x1, y1, x2, y2) { var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); } // Calculate a new scroll position needed to scroll the given // rectangle into view. Returns an object with scrollTop and // scrollLeft properties. When these are undefined, the // vertical/horizontal position does not need to be adjusted. function calculateScrollPos(cm, x1, y1, x2, y2) { var display = cm.display, snapMargin = textHeight(cm.display); if (y1 < 0) y1 = 0; var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; var screen = displayHeight(cm), result = {}; if (y2 - y1 > screen) y2 = y1 + screen; var docBottom = cm.doc.height + paddingVert(display); var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; if (y1 < screentop) { result.scrollTop = atTop ? 0 : y1; } else if (y2 > screentop + screen) { var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); if (newTop != screentop) result.scrollTop = newTop; } var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); var tooWide = x2 - x1 > screenw; if (tooWide) x2 = x1 + screenw; if (x1 < 10) result.scrollLeft = 0; else if (x1 < screenleft) result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); else if (x2 > screenw + screenleft - 3) result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; return result; } // Store a relative adjustment to the scroll position in the current // operation (to be applied when the operation finishes). function addToScrollPos(cm, left, top) { if (left != null || top != null) resolveScrollToPos(cm); if (left != null) cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; if (top != null) cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; } // Make sure that at the end of the operation the current cursor is // shown. function ensureCursorVisible(cm) { resolveScrollToPos(cm); var cur = cm.getCursor(), from = cur, to = cur; if (!cm.options.lineWrapping) { from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; to = Pos(cur.line, cur.ch + 1); } cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; } // When an operation has its scrollToPos property set, and another // scroll action is applied before the end of the operation, this // 'simulates' scrolling that position into view in a cheap way, so // that the effect of intermediate scroll commands is not ignored. function resolveScrollToPos(cm) { var range = cm.curOp.scrollToPos; if (range) { cm.curOp.scrollToPos = null; var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), Math.min(from.top, to.top) - range.margin, Math.max(from.right, to.right), Math.max(from.bottom, to.bottom) + range.margin); cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); } } // API UTILITIES // Indent the given line. The how parameter can be "smart", // "add"/null, "subtract", or "prev". When aggressive is false // (typically set to true for forced single-line indents), empty // lines are not indented, and places where the mode returns Pass // are left alone. function indentLine(cm, n, how, aggressive) { var doc = cm.doc, state; if (how == null) how = "add"; if (how == "smart") { // Fall back to "prev" when the mode doesn't have an indentation // method. if (!doc.mode.indent) how = "prev"; else state = getStateBefore(cm, n); } var tabSize = cm.options.tabSize; var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); if (line.stateAfter) line.stateAfter = null; var curSpaceString = line.text.match(/^\s*/)[0], indentation; if (!aggressive && !/\S/.test(line.text)) { indentation = 0; how = "not"; } else if (how == "smart") { indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); if (indentation == Pass || indentation > 150) { if (!aggressive) return; how = "prev"; } } if (how == "prev") { if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); else indentation = 0; } else if (how == "add") { indentation = curSpace + cm.options.indentUnit; } else if (how == "subtract") { indentation = curSpace - cm.options.indentUnit; } else if (typeof how == "number") { indentation = curSpace + how; } indentation = Math.max(0, indentation); var indentString = "", pos = 0; if (cm.options.indentWithTabs) for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} if (pos < indentation) indentString += spaceStr(indentation - pos); if (indentString != curSpaceString) { replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); line.stateAfter = null; return true; } else { // Ensure that, if the cursor was in the whitespace at the start // of the line, it is moved to the end of that space. for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; if (range.head.line == n && range.head.ch < curSpaceString.length) { var pos = Pos(n, curSpaceString.length); replaceOneSelection(doc, i, new Range(pos, pos)); break; } } } } // Utility for applying a change to a line by handle or number, // returning the number and optionally registering the line as // changed. function changeLine(doc, handle, changeType, op) { var no = handle, line = handle; if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); else no = lineNo(handle); if (no == null) return null; if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); return line; } // Helper for deleting text near the selection(s), used to implement // backspace, delete, and similar functionality. function deleteNearSelection(cm, compute) { var ranges = cm.doc.sel.ranges, kill = []; // Build up a set of ranges to kill first, merging overlapping // ranges. for (var i = 0; i < ranges.length; i++) { var toKill = compute(ranges[i]); while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { var replaced = kill.pop(); if (cmp(replaced.from, toKill.from) < 0) { toKill.from = replaced.from; break; } } kill.push(toKill); } // Next, remove those actual ranges. runInOp(cm, function() { for (var i = kill.length - 1; i >= 0; i--) replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); ensureCursorVisible(cm); }); } // Used for horizontal relative motion. Dir is -1 or 1 (left or // right), unit can be "char", "column" (like char, but doesn't // cross line boundaries), "word" (across next word), or "group" (to // the start of next group of word or non-word-non-whitespace // chars). The visually param controls whether, in right-to-left // text, direction 1 means to move towards the next index in the // string, or towards the character to the right of the current // position. The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosH(doc, pos, dir, unit, visually) { var line = pos.line, ch = pos.ch, origDir = dir; var lineObj = getLine(doc, line); var possible = true; function findNextLine() { var l = line + dir; if (l < doc.first || l >= doc.first + doc.size) return (possible = false); line = l; return lineObj = getLine(doc, l); } function moveOnce(boundToLine) { var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); if (next == null) { if (!boundToLine && findNextLine()) { if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); else ch = dir < 0 ? lineObj.text.length : 0; } else return (possible = false); } else ch = next; return true; } if (unit == "char") moveOnce(); else if (unit == "column") moveOnce(true); else if (unit == "word" || unit == "group") { var sawType = null, group = unit == "group"; var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); for (var first = true;; first = false) { if (dir < 0 && !moveOnce(!first)) break; var cur = lineObj.text.charAt(ch) || "\n"; var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; if (group && !first && !type) type = "s"; if (sawType && sawType != type) { if (dir < 0) {dir = 1; moveOnce();} break; } if (type) sawType = type; if (dir > 0 && !moveOnce(!first)) break; } } var result = skipAtomic(doc, Pos(line, ch), origDir, true); if (!possible) result.hitSide = true; return result; } // For relative vertical movement. Dir may be -1 or 1. Unit can be // "page" or "line". The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosV(cm, pos, dir, unit) { var doc = cm.doc, x = pos.left, y; if (unit == "page") { var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); } else if (unit == "line") { y = dir > 0 ? pos.bottom + 3 : pos.top - 3; } for (;;) { var target = coordsChar(cm, x, y); if (!target.outside) break; if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } y += dir * 5; } return target; } // EDITOR METHODS // The publicly visible API. Note that methodOp(f) means // 'wrap f in an operation, performed on its `this` parameter'. // This is not the complete set of editor methods. Most of the // methods defined on the Doc type are also injected into // CodeMirror.prototype, for backwards compatibility and // convenience. CodeMirror.prototype = { constructor: CodeMirror, focus: function(){window.focus(); this.display.input.focus();}, setOption: function(option, value) { var options = this.options, old = options[option]; if (options[option] == value && option != "mode") return; options[option] = value; if (optionHandlers.hasOwnProperty(option)) operation(this, optionHandlers[option])(this, value, old); }, getOption: function(option) {return this.options[option];}, getDoc: function() {return this.doc;}, addKeyMap: function(map, bottom) { this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); }, removeKeyMap: function(map) { var maps = this.state.keyMaps; for (var i = 0; i < maps.length; ++i) if (maps[i] == map || maps[i].name == map) { maps.splice(i, 1); return true; } }, addOverlay: methodOp(function(spec, options) { var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); if (mode.startState) throw new Error("Overlays may not be stateful."); this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); this.state.modeGen++; regChange(this); }), removeOverlay: methodOp(function(spec) { var overlays = this.state.overlays; for (var i = 0; i < overlays.length; ++i) { var cur = overlays[i].modeSpec; if (cur == spec || typeof spec == "string" && cur.name == spec) { overlays.splice(i, 1); this.state.modeGen++; regChange(this); return; } } }), indentLine: methodOp(function(n, dir, aggressive) { if (typeof dir != "string" && typeof dir != "number") { if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; else dir = dir ? "add" : "subtract"; } if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); }), indentSelection: methodOp(function(how) { var ranges = this.doc.sel.ranges, end = -1; for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; if (!range.empty()) { var from = range.from(), to = range.to(); var start = Math.max(end, from.line); end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; for (var j = start; j < end; ++j) indentLine(this, j, how); var newRanges = this.doc.sel.ranges; if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } else if (range.head.line > end) { indentLine(this, range.head.line, how, true); end = range.head.line; if (i == this.doc.sel.primIndex) ensureCursorVisible(this); } } }), // Fetch the parser token for a given character. Useful for hacks // that want to inspect the mode state (say, for completion). getTokenAt: function(pos, precise) { return takeToken(this, pos, precise); }, getLineTokens: function(line, precise) { return takeToken(this, Pos(line), precise, true); }, getTokenTypeAt: function(pos) { pos = clipPos(this.doc, pos); var styles = getLineStyles(this, getLine(this.doc, pos.line)); var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; var type; if (ch == 0) type = styles[2]; else for (;;) { var mid = (before + after) >> 1; if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; else if (styles[mid * 2 + 1] < ch) before = mid + 1; else { type = styles[mid * 2 + 2]; break; } } var cut = type ? type.indexOf("cm-overlay ") : -1; return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); }, getModeAt: function(pos) { var mode = this.doc.mode; if (!mode.innerMode) return mode; return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; }, getHelper: function(pos, type) { return this.getHelpers(pos, type)[0]; }, getHelpers: function(pos, type) { var found = []; if (!helpers.hasOwnProperty(type)) return found; var help = helpers[type], mode = this.getModeAt(pos); if (typeof mode[type] == "string") { if (help[mode[type]]) found.push(help[mode[type]]); } else if (mode[type]) { for (var i = 0; i < mode[type].length; i++) { var val = help[mode[type][i]]; if (val) found.push(val); } } else if (mode.helperType && help[mode.helperType]) { found.push(help[mode.helperType]); } else if (help[mode.name]) { found.push(help[mode.name]); } for (var i = 0; i < help._global.length; i++) { var cur = help._global[i]; if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) found.push(cur.val); } return found; }, getStateAfter: function(line, precise) { var doc = this.doc; line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); return getStateBefore(this, line + 1, precise); }, cursorCoords: function(start, mode) { var pos, range = this.doc.sel.primary(); if (start == null) pos = range.head; else if (typeof start == "object") pos = clipPos(this.doc, start); else pos = start ? range.from() : range.to(); return cursorCoords(this, pos, mode || "page"); }, charCoords: function(pos, mode) { return charCoords(this, clipPos(this.doc, pos), mode || "page"); }, coordsChar: function(coords, mode) { coords = fromCoordSystem(this, coords, mode || "page"); return coordsChar(this, coords.left, coords.top); }, lineAtHeight: function(height, mode) { height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; return lineAtHeight(this.doc, height + this.display.viewOffset); }, heightAtLine: function(line, mode) { var end = false, lineObj; if (typeof line == "number") { var last = this.doc.first + this.doc.size - 1; if (line < this.doc.first) line = this.doc.first; else if (line > last) { line = last; end = true; } lineObj = getLine(this.doc, line); } else { lineObj = line; } return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + (end ? this.doc.height - heightAtLine(lineObj) : 0); }, defaultTextHeight: function() { return textHeight(this.display); }, defaultCharWidth: function() { return charWidth(this.display); }, setGutterMarker: methodOp(function(line, gutterID, value) { return changeLine(this.doc, line, "gutter", function(line) { var markers = line.gutterMarkers || (line.gutterMarkers = {}); markers[gutterID] = value; if (!value && isEmpty(markers)) line.gutterMarkers = null; return true; }); }), clearGutter: methodOp(function(gutterID) { var cm = this, doc = cm.doc, i = doc.first; doc.iter(function(line) { if (line.gutterMarkers && line.gutterMarkers[gutterID]) { line.gutterMarkers[gutterID] = null; regLineChange(cm, i, "gutter"); if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; } ++i; }); }), lineInfo: function(line) { if (typeof line == "number") { if (!isLine(this.doc, line)) return null; var n = line; line = getLine(this.doc, line); if (!line) return null; } else { var n = lineNo(line); if (n == null) return null; } return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, widgets: line.widgets}; }, getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, addWidget: function(pos, node, scroll, vert, horiz) { var display = this.display; pos = cursorCoords(this, clipPos(this.doc, pos)); var top = pos.bottom, left = pos.left; node.style.position = "absolute"; node.setAttribute("cm-ignore-events", "true"); this.display.input.setUneditable(node); display.sizer.appendChild(node); if (vert == "over") { top = pos.top; } else if (vert == "above" || vert == "near") { var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) top = pos.top - node.offsetHeight; else if (pos.bottom + node.offsetHeight <= vspace) top = pos.bottom; if (left + node.offsetWidth > hspace) left = hspace - node.offsetWidth; } node.style.top = top + "px"; node.style.left = node.style.right = ""; if (horiz == "right") { left = display.sizer.clientWidth - node.offsetWidth; node.style.right = "0px"; } else { if (horiz == "left") left = 0; else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; node.style.left = left + "px"; } if (scroll) scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); }, triggerOnKeyDown: methodOp(onKeyDown), triggerOnKeyPress: methodOp(onKeyPress), triggerOnKeyUp: onKeyUp, execCommand: function(cmd) { if (commands.hasOwnProperty(cmd)) return commands[cmd](this); }, findPosH: function(from, amount, unit, visually) { var dir = 1; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { cur = findPosH(this.doc, cur, dir, unit, visually); if (cur.hitSide) break; } return cur; }, moveH: methodOp(function(dir, unit) { var cm = this; cm.extendSelectionsBy(function(range) { if (cm.display.shift || cm.doc.extend || range.empty()) return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); else return dir < 0 ? range.from() : range.to(); }, sel_move); }), deleteH: methodOp(function(dir, unit) { var sel = this.doc.sel, doc = this.doc; if (sel.somethingSelected()) doc.replaceSelection("", null, "+delete"); else deleteNearSelection(this, function(range) { var other = findPosH(doc, range.head, dir, unit, false); return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; }); }), findPosV: function(from, amount, unit, goalColumn) { var dir = 1, x = goalColumn; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { var coords = cursorCoords(this, cur, "div"); if (x == null) x = coords.left; else coords.left = x; cur = findPosV(this, coords, dir, unit); if (cur.hitSide) break; } return cur; }, moveV: methodOp(function(dir, unit) { var cm = this, doc = this.doc, goals = []; var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); doc.extendSelectionsBy(function(range) { if (collapse) return dir < 0 ? range.from() : range.to(); var headPos = cursorCoords(cm, range.head, "div"); if (range.goalColumn != null) headPos.left = range.goalColumn; goals.push(headPos.left); var pos = findPosV(cm, headPos, dir, unit); if (unit == "page" && range == doc.sel.primary()) addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); return pos; }, sel_move); if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) doc.sel.ranges[i].goalColumn = goals[i]; }), // Find the word at the given position (as returned by coordsChar). findWordAt: function(pos) { var doc = this.doc, line = getLine(doc, pos.line).text; var start = pos.ch, end = pos.ch; if (line) { var helper = this.getHelper(pos, "wordChars"); if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; var startChar = line.charAt(start); var check = isWordChar(startChar, helper) ? function(ch) { return isWordChar(ch, helper); } : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; while (start > 0 && check(line.charAt(start - 1))) --start; while (end < line.length && check(line.charAt(end))) ++end; } return new Range(Pos(pos.line, start), Pos(pos.line, end)); }, toggleOverwrite: function(value) { if (value != null && value == this.state.overwrite) return; if (this.state.overwrite = !this.state.overwrite) addClass(this.display.cursorDiv, "CodeMirror-overwrite"); else rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); signal(this, "overwriteToggle", this, this.state.overwrite); }, hasFocus: function() { return this.display.input.getField() == activeElt(); }, scrollTo: methodOp(function(x, y) { if (x != null || y != null) resolveScrollToPos(this); if (x != null) this.curOp.scrollLeft = x; if (y != null) this.curOp.scrollTop = y; }), getScrollInfo: function() { var scroller = this.display.scroller; return {left: scroller.scrollLeft, top: scroller.scrollTop, height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; }, scrollIntoView: methodOp(function(range, margin) { if (range == null) { range = {from: this.doc.sel.primary().head, to: null}; if (margin == null) margin = this.options.cursorScrollMargin; } else if (typeof range == "number") { range = {from: Pos(range, 0), to: null}; } else if (range.from == null) { range = {from: range, to: null}; } if (!range.to) range.to = range.from; range.margin = margin || 0; if (range.from.line != null) { resolveScrollToPos(this); this.curOp.scrollToPos = range; } else { var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), Math.min(range.from.top, range.to.top) - range.margin, Math.max(range.from.right, range.to.right), Math.max(range.from.bottom, range.to.bottom) + range.margin); this.scrollTo(sPos.scrollLeft, sPos.scrollTop); } }), setSize: methodOp(function(width, height) { var cm = this; function interpret(val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; } if (width != null) cm.display.wrapper.style.width = interpret(width); if (height != null) cm.display.wrapper.style.height = interpret(height); if (cm.options.lineWrapping) clearLineMeasurementCache(this); var lineNo = cm.display.viewFrom; cm.doc.iter(lineNo, cm.display.viewTo, function(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; i++) if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } ++lineNo; }); cm.curOp.forceUpdate = true; signal(cm, "refresh", this); }), operation: function(f){return runInOp(this, f);}, refresh: methodOp(function() { var oldHeight = this.display.cachedTextHeight; regChange(this); this.curOp.forceUpdate = true; clearCaches(this); this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); updateGutterSpace(this); if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) estimateLineHeights(this); signal(this, "refresh", this); }), swapDoc: methodOp(function(doc) { var old = this.doc; old.cm = null; attachDoc(this, doc); clearCaches(this); this.display.input.reset(); this.scrollTo(doc.scrollLeft, doc.scrollTop); this.curOp.forceScroll = true; signalLater(this, "swapDoc", this, old); return old; }), getInputField: function(){return this.display.input.getField();}, getWrapperElement: function(){return this.display.wrapper;}, getScrollerElement: function(){return this.display.scroller;}, getGutterElement: function(){return this.display.gutters;} }; eventMixin(CodeMirror); // OPTION DEFAULTS // The default configuration options. var defaults = CodeMirror.defaults = {}; // Functions to run when options are changed. var optionHandlers = CodeMirror.optionHandlers = {}; function option(name, deflt, handle, notOnInit) { CodeMirror.defaults[name] = deflt; if (handle) optionHandlers[name] = notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; } // Passed to option handlers when there is no old value. var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; // These two are, on init, called from the constructor because they // have to be initialized before the editor can start at all. option("value", "", function(cm, val) { cm.setValue(val); }, true); option("mode", null, function(cm, val) { cm.doc.modeOption = val; loadMode(cm); }, true); option("indentUnit", 2, loadMode, true); option("indentWithTabs", false); option("smartIndent", true); option("tabSize", 4, function(cm) { resetModeState(cm); clearCaches(cm); regChange(cm); }, true); option("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); if (old != CodeMirror.Init) cm.refresh(); }); option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); option("electricChars", true); option("inputStyle", mobile ? "contenteditable" : "textarea", function() { throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME }, true); option("rtlMoveVisually", !windows); option("wholeLineUpdateBefore", true); option("theme", "default", function(cm) { themeChanged(cm); guttersChanged(cm); }, true); option("keyMap", "default", function(cm, val, old) { var next = getKeyMap(val); var prev = old != CodeMirror.Init && getKeyMap(old); if (prev && prev.detach) prev.detach(cm, next); if (next.attach) next.attach(cm, prev || null); }); option("extraKeys", null); option("lineWrapping", false, wrappingChanged, true); option("gutters", [], function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("fixedGutter", true, function(cm, val) { cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; cm.refresh(); }, true); option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); option("scrollbarStyle", "native", function(cm) { initScrollbars(cm); updateScrollbars(cm); cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); }, true); option("lineNumbers", false, function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("firstLineNumber", 1, guttersChanged, true); option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); option("showCursorWhenSelecting", false, updateSelection, true); option("resetSelectionOnContextMenu", true); option("lineWiseCopyCut", true); option("readOnly", false, function(cm, val) { if (val == "nocursor") { onBlur(cm); cm.display.input.blur(); cm.display.disabled = true; } else { cm.display.disabled = false; if (!val) cm.display.input.reset(); } }); option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); option("dragDrop", true, dragDropChanged); option("cursorBlinkRate", 530); option("cursorScrollMargin", 0); option("cursorHeight", 1, updateSelection, true); option("singleCursorHeightPerLine", true, updateSelection, true); option("workTime", 100); option("workDelay", 100); option("flattenSpans", true, resetModeState, true); option("addModeClass", false, resetModeState, true); option("pollInterval", 100); option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); option("historyEventDelay", 1250); option("viewportMargin", 10, function(cm){cm.refresh();}, true); option("maxHighlightLength", 10000, resetModeState, true); option("moveInputWithCursor", true, function(cm, val) { if (!val) cm.display.input.resetPosition(); }); option("tabindex", null, function(cm, val) { cm.display.input.getField().tabIndex = val || ""; }); option("autofocus", null); // MODE DEFINITION AND QUERYING // Known modes, by name and by MIME var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is // used by (legacy) mechanisms like loadmode.js to automatically // load a mode. (Preferred mechanism is the require/define calls.) CodeMirror.defineMode = function(name, mode) { if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; if (arguments.length > 2) mode.dependencies = Array.prototype.slice.call(arguments, 2); modes[name] = mode; }; CodeMirror.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; // Given a MIME type, a {name, ...options} config object, or a name // string, return a mode config object. CodeMirror.resolveMode = function(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { spec = mimeModes[spec]; } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { var found = mimeModes[spec.name]; if (typeof found == "string") found = {name: found}; spec = createObj(found, spec); spec.name = found.name; } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { return CodeMirror.resolveMode("application/xml"); } if (typeof spec == "string") return {name: spec}; else return spec || {name: "null"}; }; // Given a mode spec (anything that resolveMode accepts), find and // initialize an actual mode object. CodeMirror.getMode = function(options, spec) { var spec = CodeMirror.resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) return CodeMirror.getMode(options, "text/plain"); var modeObj = mfactory(options, spec); if (modeExtensions.hasOwnProperty(spec.name)) { var exts = modeExtensions[spec.name]; for (var prop in exts) { if (!exts.hasOwnProperty(prop)) continue; if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; modeObj[prop] = exts[prop]; } } modeObj.name = spec.name; if (spec.helperType) modeObj.helperType = spec.helperType; if (spec.modeProps) for (var prop in spec.modeProps) modeObj[prop] = spec.modeProps[prop]; return modeObj; }; // Minimal default mode. CodeMirror.defineMode("null", function() { return {token: function(stream) {stream.skipToEnd();}}; }); CodeMirror.defineMIME("text/plain", "null"); // This can be used to attach properties to mode objects from // outside the actual mode definition. var modeExtensions = CodeMirror.modeExtensions = {}; CodeMirror.extendMode = function(mode, properties) { var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); copyObj(properties, exts); }; // EXTENSIONS CodeMirror.defineExtension = function(name, func) { CodeMirror.prototype[name] = func; }; CodeMirror.defineDocExtension = function(name, func) { Doc.prototype[name] = func; }; CodeMirror.defineOption = option; var initHooks = []; CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; var helpers = CodeMirror.helpers = {}; CodeMirror.registerHelper = function(type, name, value) { if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; helpers[type][name] = value; }; CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { CodeMirror.registerHelper(type, name, value); helpers[type]._global.push({pred: predicate, val: value}); }; // MODE STATE HANDLING // Utility functions for working with state. Exported because nested // modes need to do this for their inner modes. var copyState = CodeMirror.copyState = function(mode, state) { if (state === true) return state; if (mode.copyState) return mode.copyState(state); var nstate = {}; for (var n in state) { var val = state[n]; if (val instanceof Array) val = val.concat([]); nstate[n] = val; } return nstate; }; var startState = CodeMirror.startState = function(mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true; }; // Given a mode and a state (for that mode), find the inner mode and // state at the position that the state refers to. CodeMirror.innerMode = function(mode, state) { while (mode.innerMode) { var info = mode.innerMode(state); if (!info || info.mode == mode) break; state = info.state; mode = info.mode; } return info || {mode: mode, state: state}; }; // STANDARD COMMANDS // Commands are parameter-less actions that can be performed on an // editor, mostly used for keybindings. var commands = CodeMirror.commands = { selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, singleSelection: function(cm) { cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, killLine: function(cm) { deleteNearSelection(cm, function(range) { if (range.empty()) { var len = getLine(cm.doc, range.head.line).text.length; if (range.head.ch == len && range.head.line < cm.lastLine()) return {from: range.head, to: Pos(range.head.line + 1, 0)}; else return {from: range.head, to: Pos(range.head.line, len)}; } else { return {from: range.from(), to: range.to()}; } }); }, deleteLine: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; }); }, delLineLeft: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: range.from()}; }); }, delWrappedLineLeft: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var leftPos = cm.coordsChar({left: 0, top: top}, "div"); return {from: leftPos, to: range.from()}; }); }, delWrappedLineRight: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); return {from: range.from(), to: rightPos }; }); }, undo: function(cm) {cm.undo();}, redo: function(cm) {cm.redo();}, undoSelection: function(cm) {cm.undoSelection();}, redoSelection: function(cm) {cm.redoSelection();}, goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, goLineStart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, {origin: "+move", bias: 1}); }, goLineStartSmart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStartSmart(cm, range.head); }, {origin: "+move", bias: 1}); }, goLineEnd: function(cm) { cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, {origin: "+move", bias: -1}); }, goLineRight: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); }, sel_move); }, goLineLeft: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: 0, top: top}, "div"); }, sel_move); }, goLineLeftSmart: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; var pos = cm.coordsChar({left: 0, top: top}, "div"); if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); return pos; }, sel_move); }, goLineUp: function(cm) {cm.moveV(-1, "line");}, goLineDown: function(cm) {cm.moveV(1, "line");}, goPageUp: function(cm) {cm.moveV(-1, "page");}, goPageDown: function(cm) {cm.moveV(1, "page");}, goCharLeft: function(cm) {cm.moveH(-1, "char");}, goCharRight: function(cm) {cm.moveH(1, "char");}, goColumnLeft: function(cm) {cm.moveH(-1, "column");}, goColumnRight: function(cm) {cm.moveH(1, "column");}, goWordLeft: function(cm) {cm.moveH(-1, "word");}, goGroupRight: function(cm) {cm.moveH(1, "group");}, goGroupLeft: function(cm) {cm.moveH(-1, "group");}, goWordRight: function(cm) {cm.moveH(1, "word");}, delCharBefore: function(cm) {cm.deleteH(-1, "char");}, delCharAfter: function(cm) {cm.deleteH(1, "char");}, delWordBefore: function(cm) {cm.deleteH(-1, "word");}, delWordAfter: function(cm) {cm.deleteH(1, "word");}, delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, delGroupAfter: function(cm) {cm.deleteH(1, "group");}, indentAuto: function(cm) {cm.indentSelection("smart");}, indentMore: function(cm) {cm.indentSelection("add");}, indentLess: function(cm) {cm.indentSelection("subtract");}, insertTab: function(cm) {cm.replaceSelection("\t");}, insertSoftTab: function(cm) { var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].from(); var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); } cm.replaceSelections(spaces); }, defaultTab: function(cm) { if (cm.somethingSelected()) cm.indentSelection("add"); else cm.execCommand("insertTab"); }, transposeChars: function(cm) { runInOp(cm, function() { var ranges = cm.listSelections(), newSel = []; for (var i = 0; i < ranges.length; i++) { var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; if (line) { if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); if (cur.ch > 0) { cur = new Pos(cur.line, cur.ch + 1); cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); } else if (cur.line > cm.doc.first) { var prev = getLine(cm.doc, cur.line - 1).text; if (prev) cm.replaceRange(line.charAt(0) + "\n" + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); } } newSel.push(new Range(cur, cur)); } cm.setSelections(newSel); }); }, newlineAndIndent: function(cm) { runInOp(cm, function() { var len = cm.listSelections().length; for (var i = 0; i < len; i++) { var range = cm.listSelections()[i]; cm.replaceRange("\n", range.anchor, range.head, "+input"); cm.indentLine(range.from().line + 1, null, true); ensureCursorVisible(cm); } }); }, toggleOverwrite: function(cm) {cm.toggleOverwrite();} }; // STANDARD KEYMAPS var keyMap = CodeMirror.keyMap = {}; keyMap.basic = { "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", "Esc": "singleSelection" }; // Note that the save and find-related commands aren't defined by // default. User code or addons can define them. Unknown commands // are simply ignored. keyMap.pcDefault = { "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", fallthrough: "basic" }; // Very basic readline/emacs-style bindings, which are standard on Mac. keyMap.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" }; keyMap.macDefault = { "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", fallthrough: ["basic", "emacsy"] }; keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH function normalizeKeyName(name) { var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; var alt, ctrl, shift, cmd; for (var i = 0; i < parts.length - 1; i++) { var mod = parts[i]; if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; else if (/^a(lt)?$/i.test(mod)) alt = true; else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; else if (/^s(hift)$/i.test(mod)) shift = true; else throw new Error("Unrecognized modifier name: " + mod); } if (alt) name = "Alt-" + name; if (ctrl) name = "Ctrl-" + name; if (cmd) name = "Cmd-" + name; if (shift) name = "Shift-" + name; return name; } // This is a kludge to keep keymaps mostly working as raw objects // (backwards compatibility) while at the same time support features // like normalization and multi-stroke key bindings. It compiles a // new normalized keymap, and then updates the old object to reflect // this. CodeMirror.normalizeKeyMap = function(keymap) { var copy = {}; for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { var value = keymap[keyname]; if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; if (value == "...") { delete keymap[keyname]; continue; } var keys = map(keyname.split(" "), normalizeKeyName); for (var i = 0; i < keys.length; i++) { var val, name; if (i == keys.length - 1) { name = keyname; val = value; } else { name = keys.slice(0, i + 1).join(" "); val = "..."; } var prev = copy[name]; if (!prev) copy[name] = val; else if (prev != val) throw new Error("Inconsistent bindings for " + name); } delete keymap[keyname]; } for (var prop in copy) keymap[prop] = copy[prop]; return keymap; }; var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { map = getKeyMap(map); var found = map.call ? map.call(key, context) : map[key]; if (found === false) return "nothing"; if (found === "...") return "multi"; if (found != null && handle(found)) return "handled"; if (map.fallthrough) { if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") return lookupKey(key, map.fallthrough, handle, context); for (var i = 0; i < map.fallthrough.length; i++) { var result = lookupKey(key, map.fallthrough[i], handle, context); if (result) return result; } } }; // Modifier key presses don't count as 'real' key presses for the // purpose of keymap fallthrough. var isModifierKey = CodeMirror.isModifierKey = function(value) { var name = typeof value == "string" ? value : keyNames[value.keyCode]; return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; }; // Look up the name of a key as indicated by an event object. var keyName = CodeMirror.keyName = function(event, noShift) { if (presto && event.keyCode == 34 && event["char"]) return false; var base = keyNames[event.keyCode], name = base; if (name == null || event.altGraphKey) return false; if (event.altKey && base != "Alt") name = "Alt-" + name; if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; return name; }; function getKeyMap(val) { return typeof val == "string" ? keyMap[val] : val; } // FROMTEXTAREA CodeMirror.fromTextArea = function(textarea, options) { options = options ? copyObj(options) : {}; options.value = textarea.value; if (!options.tabindex && textarea.tabIndex) options.tabindex = textarea.tabIndex; if (!options.placeholder && textarea.placeholder) options.placeholder = textarea.placeholder; // Set autofocus to true if this textarea is focused, or if it has // autofocus and no other element is focused. if (options.autofocus == null) { var hasFocus = activeElt(); options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; } function save() {textarea.value = cm.getValue();} if (textarea.form) { on(textarea.form, "submit", save); // Deplorable hack to make the submit method do the right thing. if (!options.leaveSubmitMethodAlone) { var form = textarea.form, realSubmit = form.submit; try { var wrappedSubmit = form.submit = function() { save(); form.submit = realSubmit; form.submit(); form.submit = wrappedSubmit; }; } catch(e) {} } } options.finishInit = function(cm) { cm.save = save; cm.getTextArea = function() { return textarea; }; cm.toTextArea = function() { cm.toTextArea = isNaN; // Prevent this from being ran twice save(); textarea.parentNode.removeChild(cm.getWrapperElement()); textarea.style.display = ""; if (textarea.form) { off(textarea.form, "submit", save); if (typeof textarea.form.submit == "function") textarea.form.submit = realSubmit; } }; }; textarea.style.display = "none"; var cm = CodeMirror(function(node) { textarea.parentNode.insertBefore(node, textarea.nextSibling); }, options); return cm; }; // STRING STREAM // Fed to the mode parsers, provides helper functions to make // parsers more succinct. var StringStream = CodeMirror.StringStream = function(string, tabSize) { this.pos = this.start = 0; this.string = string; this.tabSize = tabSize || 8; this.lastColumnPos = this.lastColumnValue = 0; this.lineStart = 0; }; StringStream.prototype = { eol: function() {return this.pos >= this.string.length;}, sol: function() {return this.pos == this.lineStart;}, peek: function() {return this.string.charAt(this.pos) || undefined;}, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }, eat: function(match) { var ch = this.string.charAt(this.pos); if (typeof match == "string") var ok = ch == match; else var ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) {++this.pos; return ch;} }, eatWhile: function(match) { var start = this.pos; while (this.eat(match)){} return this.pos > start; }, eatSpace: function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }, skipToEnd: function() {this.pos = this.string.length;}, skipTo: function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true;} }, backUp: function(n) {this.pos -= n;}, column: function() { if (this.lastColumnPos < this.start) { this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); this.lastColumnPos = this.start; } return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, indentation: function() { return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, match: function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }, current: function(){return this.string.slice(this.start, this.pos);}, hideFirstChars: function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } } }; // TEXTMARKERS // Created with markText and setBookmark methods. A TextMarker is a // handle that can be used to clear or find a marked position in the // document. Line objects hold arrays (markedSpans) containing // {from, to, marker} object pointing to such marker objects, and // indicating that such a marker is present on that line. Multiple // lines may point to the same marker when it spans across lines. // The spans will have null for their from/to properties when the // marker continues beyond the start/end of the line. Markers have // links back to the lines they currently touch. var nextMarkerId = 0; var TextMarker = CodeMirror.TextMarker = function(doc, type) { this.lines = []; this.type = type; this.doc = doc; this.id = ++nextMarkerId; }; eventMixin(TextMarker); // Clear the marker. TextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; var cm = this.doc.cm, withOp = cm && !cm.curOp; if (withOp) startOperation(cm); if (hasHandler(this, "clear")) { var found = this.find(); if (found) signalLater(this, "clear", found.from, found.to); } var min = null, max = null; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); else if (cm) { if (span.to != null) max = lineNo(line); if (span.from != null) min = lineNo(line); } line.markedSpans = removeMarkedSpan(line.markedSpans, span); if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) updateLineHeight(line, textHeight(cm.display)); } if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { var visual = visualLine(this.lines[i]), len = lineLength(visual); if (len > cm.display.maxLineLength) { cm.display.maxLine = visual; cm.display.maxLineLength = len; cm.display.maxLineChanged = true; } } if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); this.lines.length = 0; this.explicitlyCleared = true; if (this.atomic && this.doc.cantEdit) { this.doc.cantEdit = false; if (cm) reCheckSelection(cm.doc); } if (cm) signalLater(cm, "markerCleared", cm, this); if (withOp) endOperation(cm); if (this.parent) this.parent.clear(); }; // Find the position of the marker in the document. Returns a {from, // to} object by default. Side can be passed to get a specific side // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the // Pos objects returned contain a line object, rather than a line // number (used to prevent looking up the same line twice). TextMarker.prototype.find = function(side, lineObj) { if (side == null && this.type == "bookmark") side = 1; var from, to; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (span.from != null) { from = Pos(lineObj ? line : lineNo(line), span.from); if (side == -1) return from; } if (span.to != null) { to = Pos(lineObj ? line : lineNo(line), span.to); if (side == 1) return to; } } return from && {from: from, to: to}; }; // Signals that the marker's widget changed, and surrounding layout // should be recomputed. TextMarker.prototype.changed = function() { var pos = this.find(-1, true), widget = this, cm = this.doc.cm; if (!pos || !cm) return; runInOp(cm, function() { var line = pos.line, lineN = lineNo(pos.line); var view = findViewForLine(cm, lineN); if (view) { clearLineMeasurementCacheFor(view); cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; } cm.curOp.updateMaxLine = true; if (!lineIsHidden(widget.doc, line) && widget.height != null) { var oldHeight = widget.height; widget.height = null; var dHeight = widgetHeight(widget) - oldHeight; if (dHeight) updateLineHeight(line, line.height + dHeight); } }); }; TextMarker.prototype.attachLine = function(line) { if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } this.lines.push(line); }; TextMarker.prototype.detachLine = function(line) { this.lines.splice(indexOf(this.lines, line), 1); if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); } }; // Collapsed markers have unique ids, in order to be able to order // them, which is needed for uniquely determining an outer marker // when they overlap (they may nest, but not partially overlap). var nextMarkerId = 0; // Create a marker, wire it up to the right lines, and function markText(doc, from, to, options, type) { // Shared markers (across linked documents) are handled separately // (markTextShared will call out to this again, once per // document). if (options && options.shared) return markTextShared(doc, from, to, options, type); // Ensure we are in an operation. if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); var marker = new TextMarker(doc, type), diff = cmp(from, to); if (options) copyObj(options, marker, false); // Don't connect empty markers unless clearWhenEmpty is false if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) return marker; if (marker.replacedWith) { // Showing up as a widget implies collapsed (widget replaces text) marker.collapsed = true; marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); if (options.insertLeft) marker.widgetNode.insertLeft = true; } if (marker.collapsed) { if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) throw new Error("Inserting collapsed marker partially overlapping an existing one"); sawCollapsedSpans = true; } if (marker.addToHistory) addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); var curLine = from.line, cm = doc.cm, updateMaxLine; doc.iter(curLine, to.line + 1, function(line) { if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) updateMaxLine = true; if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null)); ++curLine; }); // lineIsHidden depends on the presence of the spans, so needs a second pass if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { if (lineIsHidden(doc, line)) updateLineHeight(line, 0); }); if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); if (marker.readOnly) { sawReadOnlySpans = true; if (doc.history.done.length || doc.history.undone.length) doc.clearHistory(); } if (marker.collapsed) { marker.id = ++nextMarkerId; marker.atomic = true; } if (cm) { // Sync editor state if (updateMaxLine) cm.curOp.updateMaxLine = true; if (marker.collapsed) regChange(cm, from.line, to.line + 1); else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); if (marker.atomic) reCheckSelection(cm.doc); signalLater(cm, "markerAdded", cm, marker); } return marker; } // SHARED TEXTMARKERS // A shared marker spans multiple linked documents. It is // implemented as a meta-marker-object controlling multiple normal // markers. var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { this.markers = markers; this.primary = primary; for (var i = 0; i < markers.length; ++i) markers[i].parent = this; }; eventMixin(SharedTextMarker); SharedTextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; this.explicitlyCleared = true; for (var i = 0; i < this.markers.length; ++i) this.markers[i].clear(); signalLater(this, "clear"); }; SharedTextMarker.prototype.find = function(side, lineObj) { return this.primary.find(side, lineObj); }; function markTextShared(doc, from, to, options, type) { options = copyObj(options); options.shared = false; var markers = [markText(doc, from, to, options, type)], primary = markers[0]; var widget = options.widgetNode; linkedDocs(doc, function(doc) { if (widget) options.widgetNode = widget.cloneNode(true); markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); for (var i = 0; i < doc.linked.length; ++i) if (doc.linked[i].isParent) return; primary = lst(markers); }); return new SharedTextMarker(markers, primary); } function findSharedMarkers(doc) { return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function(m) { return m.parent; }); } function copySharedMarkers(doc, markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], pos = marker.find(); var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); if (cmp(mFrom, mTo)) { var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); marker.markers.push(subMark); subMark.parent = marker; } } } function detachSharedMarkers(markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], linked = [marker.primary.doc];; linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); for (var j = 0; j < marker.markers.length; j++) { var subMarker = marker.markers[j]; if (indexOf(linked, subMarker.doc) == -1) { subMarker.parent = null; marker.markers.splice(j--, 1); } } } } // TEXTMARKER SPANS function MarkedSpan(marker, from, to) { this.marker = marker; this.from = from; this.to = to; } // Search an array of spans for a span matching the given marker. function getMarkedSpanFor(spans, marker) { if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.marker == marker) return span; } } // Remove a span from an array, returning undefined if no spans are // left (we don't store arrays for lines without spans). function removeMarkedSpan(spans, span) { for (var r, i = 0; i < spans.length; ++i) if (spans[i] != span) (r || (r = [])).push(spans[i]); return r; } // Add a span to a line. function addMarkedSpan(line, span) { line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; span.marker.attachLine(line); } // Used for the algorithm that adjusts markers for a change in the // document. These functions cut an array of spans at a given // character position, returning an array of remaining chunks (or // undefined if nothing remains). function markedSpansBefore(old, startCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); } } return nw; } function markedSpansAfter(old, endCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); } } return nw; } // Given a change object, compute the new set of marker spans that // cover the line in which the change took place. Removes spans // entirely within the change, reconnects spans belonging to the // same marker that appear on both sides of the change, and cuts off // spans partially within the change. Returns an array of span // arrays with one element for each line in (after) the change. function stretchSpansOverChange(doc, change) { if (change.full) return null; var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; if (!oldFirst && !oldLast) return null; var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides var first = markedSpansBefore(oldFirst, startCh, isInsert); var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); if (first) { // Fix up .to properties of first for (var i = 0; i < first.length; ++i) { var span = first[i]; if (span.to == null) { var found = getMarkedSpanFor(last, span.marker); if (!found) span.to = startCh; else if (sameLine) span.to = found.to == null ? null : found.to + offset; } } } if (last) { // Fix up .from in last (or move them into first in case of sameLine) for (var i = 0; i < last.length; ++i) { var span = last[i]; if (span.to != null) span.to += offset; if (span.from == null) { var found = getMarkedSpanFor(first, span.marker); if (!found) { span.from = offset; if (sameLine) (first || (first = [])).push(span); } } else { span.from += offset; if (sameLine) (first || (first = [])).push(span); } } } // Make sure we didn't create any zero-length spans if (first) first = clearEmptySpans(first); if (last && last != first) last = clearEmptySpans(last); var newMarkers = [first]; if (!sameLine) { // Fill gap with whole-line-spans var gap = change.text.length - 2, gapMarkers; if (gap > 0 && first) for (var i = 0; i < first.length; ++i) if (first[i].to == null) (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); for (var i = 0; i < gap; ++i) newMarkers.push(gapMarkers); newMarkers.push(last); } return newMarkers; } // Remove spans that are empty and don't have a clearWhenEmpty // option of false. function clearEmptySpans(spans) { for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) spans.splice(i--, 1); } if (!spans.length) return null; return spans; } // Used for un/re-doing changes from the history. Combines the // result of computing the existing spans with the set of spans that // existed in the history (so that deleting around a span and then // undoing brings back the span). function mergeOldSpans(doc, change) { var old = getOldSpans(doc, change); var stretched = stretchSpansOverChange(doc, change); if (!old) return stretched; if (!stretched) return old; for (var i = 0; i < old.length; ++i) { var oldCur = old[i], stretchCur = stretched[i]; if (oldCur && stretchCur) { spans: for (var j = 0; j < stretchCur.length; ++j) { var span = stretchCur[j]; for (var k = 0; k < oldCur.length; ++k) if (oldCur[k].marker == span.marker) continue spans; oldCur.push(span); } } else if (stretchCur) { old[i] = stretchCur; } } return old; } // Used to 'clip' out readOnly ranges when making a change. function removeReadOnlyRanges(doc, from, to) { var markers = null; doc.iter(from.line, to.line + 1, function(line) { if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { var mark = line.markedSpans[i].marker; if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) (markers || (markers = [])).push(mark); } }); if (!markers) return null; var parts = [{from: from, to: to}]; for (var i = 0; i < markers.length; ++i) { var mk = markers[i], m = mk.find(0); for (var j = 0; j < parts.length; ++j) { var p = parts[j]; if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) newParts.push({from: p.from, to: m.from}); if (dto > 0 || !mk.inclusiveRight && !dto) newParts.push({from: m.to, to: p.to}); parts.splice.apply(parts, newParts); j += newParts.length - 1; } } return parts; } // Connect or disconnect spans from a line. function detachMarkedSpans(line) { var spans = line.markedSpans; if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.detachLine(line); line.markedSpans = null; } function attachMarkedSpans(line, spans) { if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.attachLine(line); line.markedSpans = spans; } // Helpers used when computing which overlapping collapsed span // counts as the larger one. function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } // Returns a number indicating which of two overlapping collapsed // spans is larger (and thus includes the other). Falls back to // comparing ids when the spans cover exactly the same range. function compareCollapsedMarkers(a, b) { var lenDiff = a.lines.length - b.lines.length; if (lenDiff != 0) return lenDiff; var aPos = a.find(), bPos = b.find(); var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); if (fromCmp) return -fromCmp; var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); if (toCmp) return toCmp; return b.id - a.id; } // Find out whether a line ends or starts in a collapsed span. If // so, return the marker for that span. function collapsedSpanAtSide(line, start) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) found = sp.marker; } return found; } function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } // Test whether there exists a collapsed span that partially // overlaps (covers the start or end, but not both) of a new span. // Such overlap is not allowed. function conflictingCollapsedRange(doc, lineNo, from, to, marker) { var line = getLine(doc, lineNo); var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) { var sp = sps[i]; if (!sp.marker.collapsed) continue; var found = sp.marker.find(0); var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) || fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight))) return true; } } // A visual line is a line as drawn on the screen. Folding, for // example, can cause multiple logical lines to appear on the same // visual line. This finds the start of the visual line that the // given line is part of (usually that is the line itself). function visualLine(line) { var merged; while (merged = collapsedSpanAtStart(line)) line = merged.find(-1, true).line; return line; } // Returns an array of logical lines that continue the visual line // started by the argument, or undefined if there are no such lines. function visualLineContinued(line) { var merged, lines; while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; (lines || (lines = [])).push(line); } return lines; } // Get the line number of the start of the visual line that the // given line number is part of. function visualLineNo(doc, lineN) { var line = getLine(doc, lineN), vis = visualLine(line); if (line == vis) return lineN; return lineNo(vis); } // Get the line number of the start of the next visual line after // the given line. function visualLineEndNo(doc, lineN) { if (lineN > doc.lastLine()) return lineN; var line = getLine(doc, lineN), merged; if (!lineIsHidden(doc, line)) return lineN; while (merged = collapsedSpanAtEnd(line)) line = merged.find(1, true).line; return lineNo(line) + 1; } // Compute whether a line is hidden. Lines count as hidden when they // are part of a visual line that starts with another line, or when // they are entirely covered by collapsed, non-widget span. function lineIsHidden(doc, line) { var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (!sp.marker.collapsed) continue; if (sp.from == null) return true; if (sp.marker.widgetNode) continue; if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) return true; } } function lineIsHiddenInner(doc, line, span) { if (span.to == null) { var end = span.marker.find(1, true); return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); } if (span.marker.inclusiveRight && span.to == line.text.length) return true; for (var sp, i = 0; i < line.markedSpans.length; ++i) { sp = line.markedSpans[i]; if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) return true; } } // LINE WIDGETS // Line widgets are block elements displayed above or below a line. var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { if (options) for (var opt in options) if (options.hasOwnProperty(opt)) this[opt] = options[opt]; this.doc = doc; this.node = node; }; eventMixin(LineWidget); function adjustScrollWhenAboveVisible(cm, line, diff) { if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) addToScrollPos(cm, null, diff); } LineWidget.prototype.clear = function() { var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); if (no == null || !ws) return; for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); if (!ws.length) line.widgets = null; var height = widgetHeight(this); updateLineHeight(line, Math.max(0, line.height - height)); if (cm) runInOp(cm, function() { adjustScrollWhenAboveVisible(cm, line, -height); regLineChange(cm, no, "widget"); }); }; LineWidget.prototype.changed = function() { var oldH = this.height, cm = this.doc.cm, line = this.line; this.height = null; var diff = widgetHeight(this) - oldH; if (!diff) return; updateLineHeight(line, line.height + diff); if (cm) runInOp(cm, function() { cm.curOp.forceUpdate = true; adjustScrollWhenAboveVisible(cm, line, diff); }); }; function widgetHeight(widget) { if (widget.height != null) return widget.height; var cm = widget.doc.cm; if (!cm) return 0; if (!contains(document.body, widget.node)) { var parentStyle = "position: relative;"; if (widget.coverGutter) parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; if (widget.noHScroll) parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); } return widget.height = widget.node.offsetHeight; } function addLineWidget(doc, handle, node, options) { var widget = new LineWidget(doc, node, options); var cm = doc.cm; if (cm && widget.noHScroll) cm.display.alignWidgets = true; changeLine(doc, handle, "widget", function(line) { var widgets = line.widgets || (line.widgets = []); if (widget.insertAt == null) widgets.push(widget); else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); widget.line = line; if (cm && !lineIsHidden(doc, line)) { var aboveVisible = heightAtLine(line) < doc.scrollTop; updateLineHeight(line, line.height + widgetHeight(widget)); if (aboveVisible) addToScrollPos(cm, null, widget.height); cm.curOp.forceUpdate = true; } return true; }); return widget; } // LINE DATA STRUCTURE // Line objects. These hold state related to a line, including // highlighting info (the styles array). var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { this.text = text; attachMarkedSpans(this, markedSpans); this.height = estimateHeight ? estimateHeight(this) : 1; }; eventMixin(Line); Line.prototype.lineNo = function() { return lineNo(this); }; // Change the content (text, markers) of a line. Automatically // invalidates cached information and tries to re-estimate the // line's height. function updateLine(line, text, markedSpans, estimateHeight) { line.text = text; if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; if (line.order != null) line.order = null; detachMarkedSpans(line); attachMarkedSpans(line, markedSpans); var estHeight = estimateHeight ? estimateHeight(line) : 1; if (estHeight != line.height) updateLineHeight(line, estHeight); } // Detach a line from the document tree and its markers. function cleanUpLine(line) { line.parent = null; detachMarkedSpans(line); } function extractLineClasses(type, output) { if (type) for (;;) { var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!lineClass) break; type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); var prop = lineClass[1] ? "bgClass" : "textClass"; if (output[prop] == null) output[prop] = lineClass[2]; else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) output[prop] += " " + lineClass[2]; } return type; } function callBlankLine(mode, state) { if (mode.blankLine) return mode.blankLine(state); if (!mode.innerMode) return; var inner = CodeMirror.innerMode(mode, state); if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); } function readToken(mode, stream, state, inner) { for (var i = 0; i < 10; i++) { if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; var style = mode.token(stream, state); if (stream.pos > stream.start) return style; } throw new Error("Mode " + mode.name + " failed to advance stream."); } // Utility for getTokenAt and getLineTokens function takeToken(cm, pos, precise, asArray) { function getObj(copy) { return {start: stream.start, end: stream.pos, string: stream.current(), type: style || null, state: copy ? copyState(doc.mode, state) : state}; } var doc = cm.doc, mode = doc.mode, style; pos = clipPos(doc, pos); var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); var stream = new StringStream(line.text, cm.options.tabSize), tokens; if (asArray) tokens = []; while ((asArray || stream.pos < pos.ch) && !stream.eol()) { stream.start = stream.pos; style = readToken(mode, stream, state); if (asArray) tokens.push(getObj(true)); } return asArray ? tokens : getObj(); } // Run the given mode's parser over a line, calling f for each token. function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { var flattenSpans = mode.flattenSpans; if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; var curStart = 0, curStyle = null; var stream = new StringStream(text, cm.options.tabSize), style; var inner = cm.options.addModeClass && [null]; if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); while (!stream.eol()) { if (stream.pos > cm.options.maxHighlightLength) { flattenSpans = false; if (forceToEnd) processLine(cm, text, state, stream.pos); stream.pos = text.length; style = null; } else { style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); } if (inner) { var mName = inner[0].name; if (mName) style = "m-" + (style ? mName + " " + style : mName); } if (!flattenSpans || curStyle != style) { while (curStart < stream.start) { curStart = Math.min(stream.start, curStart + 50000); f(curStart, curStyle); } curStyle = style; } stream.start = stream.pos; } while (curStart < stream.pos) { // Webkit seems to refuse to render text nodes longer than 57444 characters var pos = Math.min(stream.pos, curStart + 50000); f(pos, curStyle); curStart = pos; } } // Compute a style array (an array starting with a mode generation // -- for invalidation -- followed by pairs of end positions and // style strings), which is used to highlight the tokens on the // line. function highlightLine(cm, line, state, forceToEnd) { // A styles array always starts with a number identifying the // mode/overlays that it is based on (for easy invalidation). var st = [cm.state.modeGen], lineClasses = {}; // Compute the base array of styles runMode(cm, line.text, cm.doc.mode, state, function(end, style) { st.push(end, style); }, lineClasses, forceToEnd); // Run overlays, adjust style array. for (var o = 0; o < cm.state.overlays.length; ++o) { var overlay = cm.state.overlays[o], i = 1, at = 0; runMode(cm, line.text, overlay.mode, true, function(end, style) { var start = i; // Ensure there's a token end at the current position, and that i points at it while (at < end) { var i_end = st[i]; if (i_end > end) st.splice(i, 1, end, st[i+1], i_end); i += 2; at = Math.min(end, i_end); } if (!style) return; if (overlay.opaque) { st.splice(start, i - start, end, "cm-overlay " + style); i = start + 2; } else { for (; start < i; start += 2) { var cur = st[start+1]; st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; } } }, lineClasses); } return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; } function getLineStyles(cm, line, updateFrontier) { if (!line.styles || line.styles[0] != cm.state.modeGen) { var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); line.styles = result.styles; if (result.classes) line.styleClasses = result.classes; else if (line.styleClasses) line.styleClasses = null; if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; } return line.styles; } // Lightweight form of highlight -- proceed over this line and // update state, but don't save a style array. Used for lines that // aren't currently visible. function processLine(cm, text, state, startAt) { var mode = cm.doc.mode; var stream = new StringStream(text, cm.options.tabSize); stream.start = stream.pos = startAt || 0; if (text == "") callBlankLine(mode, state); while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { readToken(mode, stream, state); stream.start = stream.pos; } } // Convert a style as returned by a mode (either null, or a string // containing one or more styles) to a CSS style. This is cached, // and also looks for line-wide styles. var styleToClassCache = {}, styleToClassCacheWithMode = {}; function interpretTokenStyle(style, options) { if (!style || /^\s*$/.test(style)) return null; var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); } // Render the DOM representation of the text of a line. Also builds // up a 'line map', which points at the DOM nodes that represent // specific stretches of text, and is used by the measuring code. // The returned object contains the DOM node, this map, and // information about line-wide styles that were set by the mode. function buildLineContent(cm, lineView) { // The padding-right forces the element to have a 'border', which // is needed on Webkit to be able to get line-level bounding // rectangles for it (in measureChar). var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); var builder = {pre: elt("pre", [content]), content: content, col: 0, pos: 0, cm: cm, splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; lineView.measure = {}; // Iterate over the logical lines that make up this visual line. for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { var line = i ? lineView.rest[i - 1] : lineView.line, order; builder.pos = 0; builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering // algorithm, to deal with browser quirks. if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) builder.addToken = buildTokenBadBidi(builder.addToken, order); builder.map = []; var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); if (line.styleClasses) { if (line.styleClasses.bgClass) builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); if (line.styleClasses.textClass) builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } // Ensure at least a single node is present, for measuring. if (builder.map.length == 0) builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); // Store the map and a cache object for the current logical line if (i == 0) { lineView.measure.map = builder.map; lineView.measure.cache = {}; } else { (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); (lineView.measure.caches || (lineView.measure.caches = [])).push({}); } } // See issue #2901 if (webkit && /\bcm-tab\b/.test(builder.content.lastChild.className)) builder.content.className = "cm-tab-wrap-hack"; signal(cm, "renderLine", cm, lineView.line, builder.pre); if (builder.pre.className) builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); return builder; } function defaultSpecialCharPlaceholder(ch) { var token = elt("span", "\u2022", "cm-invalidchar"); token.title = "\\u" + ch.charCodeAt(0).toString(16); token.setAttribute("aria-label", token.title); return token; } // Build up the DOM representation for a single token, and add it to // the line map. Takes care to render special characters separately. function buildToken(builder, text, style, startStyle, endStyle, title, css) { if (!text) return; var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text; var special = builder.cm.state.specialChars, mustWrap = false; if (!special.test(text)) { builder.col += text.length; var content = document.createTextNode(displayText); builder.map.push(builder.pos, builder.pos + text.length, content); if (ie && ie_version < 9) mustWrap = true; builder.pos += text.length; } else { var content = document.createDocumentFragment(), pos = 0; while (true) { special.lastIndex = pos; var m = special.exec(text); var skipped = m ? m.index - pos : text.length - pos; if (skipped) { var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.map.push(builder.pos, builder.pos + skipped, txt); builder.col += skipped; builder.pos += skipped; } if (!m) break; pos += skipped + 1; if (m[0] == "\t") { var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); txt.setAttribute("role", "presentation"); txt.setAttribute("cm-text", "\t"); builder.col += tabWidth; } else { var txt = builder.cm.options.specialCharPlaceholder(m[0]); txt.setAttribute("cm-text", m[0]); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.col += 1; } builder.map.push(builder.pos, builder.pos + 1, txt); builder.pos++; } } if (style || startStyle || endStyle || mustWrap || css) { var fullStyle = style || ""; if (startStyle) fullStyle += startStyle; if (endStyle) fullStyle += endStyle; var token = elt("span", [content], fullStyle, css); if (title) token.title = title; return builder.content.appendChild(token); } builder.content.appendChild(content); } function splitSpaces(old) { var out = " "; for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; out += " "; return out; } // Work around nonsense dimensions being reported for stretches of // right-to-left text. function buildTokenBadBidi(inner, order) { return function(builder, text, style, startStyle, endStyle, title, css) { style = style ? style + " cm-force-border" : "cm-force-border"; var start = builder.pos, end = start + text.length; for (;;) { // Find the part that overlaps with the start of this text for (var i = 0; i < order.length; i++) { var part = order[i]; if (part.to > start && part.from <= start) break; } if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); startStyle = null; text = text.slice(part.to - start); start = part.to; } }; } function buildCollapsedSpan(builder, size, marker, ignoreWidget) { var widget = !ignoreWidget && marker.widgetNode; if (widget) builder.map.push(builder.pos, builder.pos + size, widget); if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { if (!widget) widget = builder.content.appendChild(document.createElement("span")); widget.setAttribute("cm-marker", marker.id); } if (widget) { builder.cm.display.input.setUneditable(widget); builder.content.appendChild(widget); } builder.pos += size; } // Outputs a number of spans to make up a line, taking highlighting // and marked text into account. function insertLineContent(line, builder, styles) { var spans = line.markedSpans, allText = line.text, at = 0; if (!spans) { for (var i = 1; i < styles.length; i+=2) builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); return; } var len = allText.length, pos = 0, i = 1, text = "", style, css; var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; for (;;) { if (nextChange == pos) { // Update current marker set spanStyle = spanEndStyle = spanStartStyle = title = css = ""; collapsed = null; nextChange = Infinity; var foundBookmarks = []; for (var j = 0; j < spans.length; ++j) { var sp = spans[j], m = sp.marker; if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { foundBookmarks.push(m); } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { if (sp.to != null && sp.to != pos && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } if (m.className) spanStyle += " " + m.className; if (m.css) css = m.css; if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; if (m.title && !title) title = m.title; if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) collapsed = sp; } else if (sp.from > pos && nextChange > sp.from) { nextChange = sp.from; } } if (collapsed && (collapsed.from || 0) == pos) { buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); if (collapsed.to == null) return; if (collapsed.to == pos) collapsed = false; } if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) buildCollapsedSpan(builder, 0, foundBookmarks[j]); } if (pos >= len) break; var upto = Math.min(len, nextChange); while (true) { if (text) { var end = pos + text.length; if (!collapsed) { var tokenText = end > upto ? text.slice(0, upto - pos) : text; builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); } if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} pos = end; spanStartStyle = ""; } text = allText.slice(at, at = styles[i++]); style = interpretTokenStyle(styles[i++], builder.cm.options); } } } // DOCUMENT DATA STRUCTURE // By default, updates that start and end at the beginning of a line // are treated specially, in order to make the association of line // widgets and marker elements with the text behave more intuitive. function isWholeLineUpdate(doc, change) { return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); } // Perform a change on the document data structure. function updateDoc(doc, change, markedSpans, estimateHeight) { function spansFor(n) {return markedSpans ? markedSpans[n] : null;} function update(line, text, spans) { updateLine(line, text, spans, estimateHeight); signalLater(line, "change", line, change); } function linesFor(start, end) { for (var i = start, result = []; i < end; ++i) result.push(new Line(text[i], spansFor(i), estimateHeight)); return result; } var from = change.from, to = change.to, text = change.text; var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; // Adjust the line structure if (change.full) { doc.insert(0, linesFor(0, text.length)); doc.remove(text.length, doc.size - text.length); } else if (isWholeLineUpdate(doc, change)) { // This is a whole-line replace. Treated specially to make // sure line objects move the way they are supposed to. var added = linesFor(0, text.length - 1); update(lastLine, lastLine.text, lastSpans); if (nlines) doc.remove(from.line, nlines); if (added.length) doc.insert(from.line, added); } else if (firstLine == lastLine) { if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); } else { var added = linesFor(1, text.length - 1); added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); doc.insert(from.line + 1, added); } } else if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); doc.remove(from.line + 1, nlines); } else { update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); var added = linesFor(1, text.length - 1); if (nlines > 1) doc.remove(from.line + 1, nlines - 1); doc.insert(from.line + 1, added); } signalLater(doc, "change", doc, change); } // The document is represented as a BTree consisting of leaves, with // chunk of lines in them, and branches, with up to ten leaves or // other branch nodes below them. The top node is always a branch // node, and is the document object itself (meaning it has // additional methods and properties). // // All nodes have parent links. The tree is used both to go from // line numbers to line objects, and to go from objects to numbers. // It also indexes by height, and is used to convert between height // and line object, and to find the total height of the document. // // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html function LeafChunk(lines) { this.lines = lines; this.parent = null; for (var i = 0, height = 0; i < lines.length; ++i) { lines[i].parent = this; height += lines[i].height; } this.height = height; } LeafChunk.prototype = { chunkSize: function() { return this.lines.length; }, // Remove the n lines at offset 'at'. removeInner: function(at, n) { for (var i = at, e = at + n; i < e; ++i) { var line = this.lines[i]; this.height -= line.height; cleanUpLine(line); signalLater(line, "delete"); } this.lines.splice(at, n); }, // Helper used to collapse a small branch into a single leaf. collapse: function(lines) { lines.push.apply(lines, this.lines); }, // Insert the given array of lines at offset 'at', count them as // having the given height. insertInner: function(at, lines, height) { this.height += height; this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); for (var i = 0; i < lines.length; ++i) lines[i].parent = this; }, // Used to iterate over a part of the tree. iterN: function(at, n, op) { for (var e = at + n; at < e; ++at) if (op(this.lines[at])) return true; } }; function BranchChunk(children) { this.children = children; var size = 0, height = 0; for (var i = 0; i < children.length; ++i) { var ch = children[i]; size += ch.chunkSize(); height += ch.height; ch.parent = this; } this.size = size; this.height = height; this.parent = null; } BranchChunk.prototype = { chunkSize: function() { return this.size; }, removeInner: function(at, n) { this.size -= n; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var rm = Math.min(n, sz - at), oldHeight = child.height; child.removeInner(at, rm); this.height -= oldHeight - child.height; if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } if ((n -= rm) == 0) break; at = 0; } else at -= sz; } // If the result is smaller than 25 lines, ensure that it is a // single leaf node. if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { var lines = []; this.collapse(lines); this.children = [new LeafChunk(lines)]; this.children[0].parent = this; } }, collapse: function(lines) { for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); }, insertInner: function(at, lines, height) { this.size += lines.length; this.height += height; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at <= sz) { child.insertInner(at, lines, height); if (child.lines && child.lines.length > 50) { while (child.lines.length > 50) { var spilled = child.lines.splice(child.lines.length - 25, 25); var newleaf = new LeafChunk(spilled); child.height -= newleaf.height; this.children.splice(i + 1, 0, newleaf); newleaf.parent = this; } this.maybeSpill(); } break; } at -= sz; } }, // When a node has grown, check whether it should be split. maybeSpill: function() { if (this.children.length <= 10) return; var me = this; do { var spilled = me.children.splice(me.children.length - 5, 5); var sibling = new BranchChunk(spilled); if (!me.parent) { // Become the parent node var copy = new BranchChunk(me.children); copy.parent = me; me.children = [copy, sibling]; me = copy; } else { me.size -= sibling.size; me.height -= sibling.height; var myIndex = indexOf(me.parent.children, me); me.parent.children.splice(myIndex + 1, 0, sibling); } sibling.parent = me.parent; } while (me.children.length > 10); me.parent.maybeSpill(); }, iterN: function(at, n, op) { for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var used = Math.min(n, sz - at); if (child.iterN(at, used, op)) return true; if ((n -= used) == 0) break; at = 0; } else at -= sz; } } }; var nextDocId = 0; var Doc = CodeMirror.Doc = function(text, mode, firstLine) { if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); if (firstLine == null) firstLine = 0; BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); this.first = firstLine; this.scrollTop = this.scrollLeft = 0; this.cantEdit = false; this.cleanGeneration = 1; this.frontier = firstLine; var start = Pos(firstLine, 0); this.sel = simpleSelection(start); this.history = new History(null); this.id = ++nextDocId; this.modeOption = mode; if (typeof text == "string") text = splitLines(text); updateDoc(this, {from: start, to: start, text: text}); setSelection(this, simpleSelection(start), sel_dontScroll); }; Doc.prototype = createObj(BranchChunk.prototype, { constructor: Doc, // Iterate over the document. Supports two forms -- with only one // argument, it calls that for each line in the document. With // three, it iterates over the range given by the first two (with // the second being non-inclusive). iter: function(from, to, op) { if (op) this.iterN(from - this.first, to - from, op); else this.iterN(this.first, this.first + this.size, from); }, // Non-public interface for adding and removing lines. insert: function(at, lines) { var height = 0; for (var i = 0; i < lines.length; ++i) height += lines[i].height; this.insertInner(at - this.first, lines, height); }, remove: function(at, n) { this.removeInner(at - this.first, n); }, // From here, the methods are part of the public interface. Most // are also available from CodeMirror (editor) instances. getValue: function(lineSep) { var lines = getLines(this, this.first, this.first + this.size); if (lineSep === false) return lines; return lines.join(lineSep || "\n"); }, setValue: docMethodOp(function(code) { var top = Pos(this.first, 0), last = this.first + this.size - 1; makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), text: splitLines(code), origin: "setValue", full: true}, true); setSelection(this, simpleSelection(top)); }), replaceRange: function(code, from, to, origin) { from = clipPos(this, from); to = to ? clipPos(this, to) : from; replaceRange(this, code, from, to, origin); }, getRange: function(from, to, lineSep) { var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); if (lineSep === false) return lines; return lines.join(lineSep || "\n"); }, getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, getLineNumber: function(line) {return lineNo(line);}, getLineHandleVisualStart: function(line) { if (typeof line == "number") line = getLine(this, line); return visualLine(line); }, lineCount: function() {return this.size;}, firstLine: function() {return this.first;}, lastLine: function() {return this.first + this.size - 1;}, clipPos: function(pos) {return clipPos(this, pos);}, getCursor: function(start) { var range = this.sel.primary(), pos; if (start == null || start == "head") pos = range.head; else if (start == "anchor") pos = range.anchor; else if (start == "end" || start == "to" || start === false) pos = range.to(); else pos = range.from(); return pos; }, listSelections: function() { return this.sel.ranges; }, somethingSelected: function() {return this.sel.somethingSelected();}, setCursor: docMethodOp(function(line, ch, options) { setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); }), setSelection: docMethodOp(function(anchor, head, options) { setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); }), extendSelection: docMethodOp(function(head, other, options) { extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); }), extendSelections: docMethodOp(function(heads, options) { extendSelections(this, clipPosArray(this, heads, options)); }), extendSelectionsBy: docMethodOp(function(f, options) { extendSelections(this, map(this.sel.ranges, f), options); }), setSelections: docMethodOp(function(ranges, primary, options) { if (!ranges.length) return; for (var i = 0, out = []; i < ranges.length; i++) out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head)); if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); setSelection(this, normalizeSelection(out, primary), options); }), addSelection: docMethodOp(function(anchor, head, options) { var ranges = this.sel.ranges.slice(0); ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); }), getSelection: function(lineSep) { var ranges = this.sel.ranges, lines; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); lines = lines ? lines.concat(sel) : sel; } if (lineSep === false) return lines; else return lines.join(lineSep || "\n"); }, getSelections: function(lineSep) { var parts = [], ranges = this.sel.ranges; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); if (lineSep !== false) sel = sel.join(lineSep || "\n"); parts[i] = sel; } return parts; }, replaceSelection: function(code, collapse, origin) { var dup = []; for (var i = 0; i < this.sel.ranges.length; i++) dup[i] = code; this.replaceSelections(dup, collapse, origin || "+input"); }, replaceSelections: docMethodOp(function(code, collapse, origin) { var changes = [], sel = this.sel; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; } var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); for (var i = changes.length - 1; i >= 0; i--) makeChange(this, changes[i]); if (newSel) setSelectionReplaceHistory(this, newSel); else if (this.cm) ensureCursorVisible(this.cm); }), undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), setExtending: function(val) {this.extend = val;}, getExtending: function() {return this.extend;}, historySize: function() { var hist = this.history, done = 0, undone = 0; for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; return {undo: done, redo: undone}; }, clearHistory: function() {this.history = new History(this.history.maxGeneration);}, markClean: function() { this.cleanGeneration = this.changeGeneration(true); }, changeGeneration: function(forceSplit) { if (forceSplit) this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; return this.history.generation; }, isClean: function (gen) { return this.history.generation == (gen || this.cleanGeneration); }, getHistory: function() { return {done: copyHistoryArray(this.history.done), undone: copyHistoryArray(this.history.undone)}; }, setHistory: function(histData) { var hist = this.history = new History(this.history.maxGeneration); hist.done = copyHistoryArray(histData.done.slice(0), null, true); hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); }, addLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; if (!line[prop]) line[prop] = cls; else if (classTest(cls).test(line[prop])) return false; else line[prop] += " " + cls; return true; }); }), removeLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; var cur = line[prop]; if (!cur) return false; else if (cls == null) line[prop] = null; else { var found = cur.match(classTest(cls)); if (!found) return false; var end = found.index + found[0].length; line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; } return true; }); }), addLineWidget: docMethodOp(function(handle, node, options) { return addLineWidget(this, handle, node, options); }), removeLineWidget: function(widget) { widget.clear(); }, markText: function(from, to, options) { return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); }, setBookmark: function(pos, options) { var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), insertLeft: options && options.insertLeft, clearWhenEmpty: false, shared: options && options.shared, handleMouseEvents: options && options.handleMouseEvents}; pos = clipPos(this, pos); return markText(this, pos, pos, realOpts, "bookmark"); }, findMarksAt: function(pos) { pos = clipPos(this, pos); var markers = [], spans = getLine(this, pos.line).markedSpans; if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) markers.push(span.marker.parent || span.marker); } return markers; }, findMarks: function(from, to, filter) { from = clipPos(this, from); to = clipPos(this, to); var found = [], lineNo = from.line; this.iter(from.line, to.line + 1, function(line) { var spans = line.markedSpans; if (spans) for (var i = 0; i < spans.length; i++) { var span = spans[i]; if (!(lineNo == from.line && from.ch > span.to || span.from == null && lineNo != from.line|| lineNo == to.line && span.from > to.ch) && (!filter || filter(span.marker))) found.push(span.marker.parent || span.marker); } ++lineNo; }); return found; }, getAllMarks: function() { var markers = []; this.iter(function(line) { var sps = line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) if (sps[i].from != null) markers.push(sps[i].marker); }); return markers; }, posFromIndex: function(off) { var ch, lineNo = this.first; this.iter(function(line) { var sz = line.text.length + 1; if (sz > off) { ch = off; return true; } off -= sz; ++lineNo; }); return clipPos(this, Pos(lineNo, ch)); }, indexFromPos: function (coords) { coords = clipPos(this, coords); var index = coords.ch; if (coords.line < this.first || coords.ch < 0) return 0; this.iter(this.first, coords.line, function (line) { index += line.text.length + 1; }); return index; }, copy: function(copyHistory) { var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; doc.sel = this.sel; doc.extend = false; if (copyHistory) { doc.history.undoDepth = this.history.undoDepth; doc.setHistory(this.getHistory()); } return doc; }, linkedDoc: function(options) { if (!options) options = {}; var from = this.first, to = this.first + this.size; if (options.from != null && options.from > from) from = options.from; if (options.to != null && options.to < to) to = options.to; var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); if (options.sharedHist) copy.history = this.history; (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; copySharedMarkers(copy, findSharedMarkers(this)); return copy; }, unlinkDoc: function(other) { if (other instanceof CodeMirror) other = other.doc; if (this.linked) for (var i = 0; i < this.linked.length; ++i) { var link = this.linked[i]; if (link.doc != other) continue; this.linked.splice(i, 1); other.unlinkDoc(this); detachSharedMarkers(findSharedMarkers(this)); break; } // If the histories were shared, split them again if (other.history == this.history) { var splitIds = [other.id]; linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); other.history = new History(null); other.history.done = copyHistoryArray(this.history.done, splitIds); other.history.undone = copyHistoryArray(this.history.undone, splitIds); } }, iterLinkedDocs: function(f) {linkedDocs(this, f);}, getMode: function() {return this.mode;}, getEditor: function() {return this.cm;} }); // Public alias. Doc.prototype.eachLine = Doc.prototype.iter; // Set up methods on CodeMirror's prototype to redirect to the editor's document. var dontDelegate = "iter insert remove copy getEditor".split(" "); for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) CodeMirror.prototype[prop] = (function(method) { return function() {return method.apply(this.doc, arguments);}; })(Doc.prototype[prop]); eventMixin(Doc); // Call f for all linked documents. function linkedDocs(doc, f, sharedHistOnly) { function propagate(doc, skip, sharedHist) { if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { var rel = doc.linked[i]; if (rel.doc == skip) continue; var shared = sharedHist && rel.sharedHist; if (sharedHistOnly && !shared) continue; f(rel.doc, shared); propagate(rel.doc, doc, shared); } } propagate(doc, null, true); } // Attach a document to an editor. function attachDoc(cm, doc) { if (doc.cm) throw new Error("This document is already in use."); cm.doc = doc; doc.cm = cm; estimateLineHeights(cm); loadMode(cm); if (!cm.options.lineWrapping) findMaxLine(cm); cm.options.mode = doc.modeOption; regChange(cm); } // LINE UTILITIES // Find the line object corresponding to the given line number. function getLine(doc, n) { n -= doc.first; if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); for (var chunk = doc; !chunk.lines;) { for (var i = 0;; ++i) { var child = chunk.children[i], sz = child.chunkSize(); if (n < sz) { chunk = child; break; } n -= sz; } } return chunk.lines[n]; } // Get the part of a document between two positions, as an array of // strings. function getBetween(doc, start, end) { var out = [], n = start.line; doc.iter(start.line, end.line + 1, function(line) { var text = line.text; if (n == end.line) text = text.slice(0, end.ch); if (n == start.line) text = text.slice(start.ch); out.push(text); ++n; }); return out; } // Get the lines between from and to, as array of strings. function getLines(doc, from, to) { var out = []; doc.iter(from, to, function(line) { out.push(line.text); }); return out; } // Update the height of a line, propagating the height change // upwards to parent nodes. function updateLineHeight(line, height) { var diff = height - line.height; if (diff) for (var n = line; n; n = n.parent) n.height += diff; } // Given a line object, find its line number by walking up through // its parent links. function lineNo(line) { if (line.parent == null) return null; var cur = line.parent, no = indexOf(cur.lines, line); for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { for (var i = 0;; ++i) { if (chunk.children[i] == cur) break; no += chunk.children[i].chunkSize(); } } return no + cur.first; } // Find the line at the given vertical position, using the height // information in the document tree. function lineAtHeight(chunk, h) { var n = chunk.first; outer: do { for (var i = 0; i < chunk.children.length; ++i) { var child = chunk.children[i], ch = child.height; if (h < ch) { chunk = child; continue outer; } h -= ch; n += child.chunkSize(); } return n; } while (!chunk.lines); for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i], lh = line.height; if (h < lh) break; h -= lh; } return n + i; } // Find the height above the given line. function heightAtLine(lineObj) { lineObj = visualLine(lineObj); var h = 0, chunk = lineObj.parent; for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i]; if (line == lineObj) break; else h += line.height; } for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { for (var i = 0; i < p.children.length; ++i) { var cur = p.children[i]; if (cur == chunk) break; else h += cur.height; } } return h; } // Get the bidi ordering for the given line (and cache it). Returns // false for lines that are fully left-to-right, and an array of // BidiSpan objects otherwise. function getOrder(line) { var order = line.order; if (order == null) order = line.order = bidiOrdering(line.text); return order; } // HISTORY function History(startGen) { // Arrays of change events and selections. Doing something adds an // event to done and clears undo. Undoing moves events from done // to undone, redoing moves them in the other direction. this.done = []; this.undone = []; this.undoDepth = Infinity; // Used to track when changes can be merged into a single undo // event this.lastModTime = this.lastSelTime = 0; this.lastOp = this.lastSelOp = null; this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method this.generation = this.maxGeneration = startGen || 1; } // Create a history change event from an updateDoc-style change // object. function historyChangeFromChange(doc, change) { var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); return histChange; } // Pop all selection events off the end of a history array. Stop at // a change event. function clearSelectionEvents(array) { while (array.length) { var last = lst(array); if (last.ranges) array.pop(); else break; } } // Find the top change event in the history. Pop off selection // events that are in the way. function lastChangeEvent(hist, force) { if (force) { clearSelectionEvents(hist.done); return lst(hist.done); } else if (hist.done.length && !lst(hist.done).ranges) { return lst(hist.done); } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { hist.done.pop(); return lst(hist.done); } } // Register a change in the history. Merges changes that are within // a single operation, ore are close together with an origin that // allows merging (starting with "+") into a single event. function addChangeToHistory(doc, change, selAfter, opId) { var hist = doc.history; hist.undone.length = 0; var time = +new Date, cur; if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { // Merge this change into the last event var last = lst(cur.changes); if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { // Optimized case for simple insertion -- don't want to add // new changesets for every character typed last.to = changeEnd(change); } else { // Add new sub-event cur.changes.push(historyChangeFromChange(doc, change)); } } else { // Can not be merged, start a new event. var before = lst(hist.done); if (!before || !before.ranges) pushSelectionToHistory(doc.sel, hist.done); cur = {changes: [historyChangeFromChange(doc, change)], generation: hist.generation}; hist.done.push(cur); while (hist.done.length > hist.undoDepth) { hist.done.shift(); if (!hist.done[0].ranges) hist.done.shift(); } } hist.done.push(selAfter); hist.generation = ++hist.maxGeneration; hist.lastModTime = hist.lastSelTime = time; hist.lastOp = hist.lastSelOp = opId; hist.lastOrigin = hist.lastSelOrigin = change.origin; if (!last) signal(doc, "historyAdded"); } function selectionEventCanBeMerged(doc, origin, prev, sel) { var ch = origin.charAt(0); return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); } // Called whenever the selection changes, sets the new selection as // the pending selection in the history, and pushes the old pending // selection into the 'done' array when it was significantly // different (in number of selected ranges, emptiness, or time). function addSelectionToHistory(doc, sel, opId, options) { var hist = doc.history, origin = options && options.origin; // A new event is started when the previous origin does not match // the current, or the origins don't allow matching. Origins // starting with * are always merged, those starting with + are // merged when similar and close together in time. if (opId == hist.lastSelOp || (origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) hist.done[hist.done.length - 1] = sel; else pushSelectionToHistory(sel, hist.done); hist.lastSelTime = +new Date; hist.lastSelOrigin = origin; hist.lastSelOp = opId; if (options && options.clearRedo !== false) clearSelectionEvents(hist.undone); } function pushSelectionToHistory(sel, dest) { var top = lst(dest); if (!(top && top.ranges && top.equals(sel))) dest.push(sel); } // Used to store marked span information in the history. function attachLocalSpans(doc, change, from, to) { var existing = change["spans_" + doc.id], n = 0; doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { if (line.markedSpans) (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; ++n; }); } // When un/re-doing restores text containing marked spans, those // that have been explicitly cleared should not be restored. function removeClearedSpans(spans) { if (!spans) return null; for (var i = 0, out; i < spans.length; ++i) { if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } else if (out) out.push(spans[i]); } return !out ? spans : out.length ? out : null; } // Retrieve and filter the old marked spans stored in a change event. function getOldSpans(doc, change) { var found = change["spans_" + doc.id]; if (!found) return null; for (var i = 0, nw = []; i < change.text.length; ++i) nw.push(removeClearedSpans(found[i])); return nw; } // Used both to provide a JSON-safe object in .getHistory, and, when // detaching a document, to split the history in two function copyHistoryArray(events, newGroup, instantiateSel) { for (var i = 0, copy = []; i < events.length; ++i) { var event = events[i]; if (event.ranges) { copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); continue; } var changes = event.changes, newChanges = []; copy.push({changes: newChanges}); for (var j = 0; j < changes.length; ++j) { var change = changes[j], m; newChanges.push({from: change.from, to: change.to, text: change.text}); if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { if (indexOf(newGroup, Number(m[1])) > -1) { lst(newChanges)[prop] = change[prop]; delete change[prop]; } } } } return copy; } // Rebasing/resetting history to deal with externally-sourced changes function rebaseHistSelSingle(pos, from, to, diff) { if (to < pos.line) { pos.line += diff; } else if (from < pos.line) { pos.line = from; pos.ch = 0; } } // Tries to rebase an array of history events given a change in the // document. If the change touches the same lines as the event, the // event, and everything 'behind' it, is discarded. If the change is // before the event, the event's positions are updated. Uses a // copy-on-write scheme for the positions, to avoid having to // reallocate them all on every rebase, but also avoid problems with // shared position objects being unsafely updated. function rebaseHistArray(array, from, to, diff) { for (var i = 0; i < array.length; ++i) { var sub = array[i], ok = true; if (sub.ranges) { if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } for (var j = 0; j < sub.ranges.length; j++) { rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); } continue; } for (var j = 0; j < sub.changes.length; ++j) { var cur = sub.changes[j]; if (to < cur.from.line) { cur.from = Pos(cur.from.line + diff, cur.from.ch); cur.to = Pos(cur.to.line + diff, cur.to.ch); } else if (from <= cur.to.line) { ok = false; break; } } if (!ok) { array.splice(0, i + 1); i = 0; } } } function rebaseHist(hist, change) { var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; rebaseHistArray(hist.done, from, to, diff); rebaseHistArray(hist.undone, from, to, diff); } // EVENT UTILITIES // Due to the fact that we still support jurassic IE versions, some // compatibility wrappers are needed. var e_preventDefault = CodeMirror.e_preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; function e_defaultPrevented(e) { return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; } var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; function e_target(e) {return e.target || e.srcElement;} function e_button(e) { var b = e.which; if (b == null) { if (e.button & 1) b = 1; else if (e.button & 2) b = 3; else if (e.button & 4) b = 2; } if (mac && e.ctrlKey && b == 1) b = 3; return b; } // EVENT HANDLING // Lightweight event framework. on/off also work on DOM nodes, // registering native DOM handlers. var on = CodeMirror.on = function(emitter, type, f) { if (emitter.addEventListener) emitter.addEventListener(type, f, false); else if (emitter.attachEvent) emitter.attachEvent("on" + type, f); else { var map = emitter._handlers || (emitter._handlers = {}); var arr = map[type] || (map[type] = []); arr.push(f); } }; var off = CodeMirror.off = function(emitter, type, f) { if (emitter.removeEventListener) emitter.removeEventListener(type, f, false); else if (emitter.detachEvent) emitter.detachEvent("on" + type, f); else { var arr = emitter._handlers && emitter._handlers[type]; if (!arr) return; for (var i = 0; i < arr.length; ++i) if (arr[i] == f) { arr.splice(i, 1); break; } } }; var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { var arr = emitter._handlers && emitter._handlers[type]; if (!arr) return; var args = Array.prototype.slice.call(arguments, 2); for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); }; var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the // middle of some work, but don't want the handler to start calling // other methods on the editor, which might be in an inconsistent // state or simply not expect any other events to happen. // signalLater looks whether there are any handlers, and schedules // them to be executed when the last operation ends, or, if no // operation is active, when a timeout fires. function signalLater(emitter, type /*, values...*/) { var arr = emitter._handlers && emitter._handlers[type]; if (!arr) return; var args = Array.prototype.slice.call(arguments, 2), list; if (operationGroup) { list = operationGroup.delayedCallbacks; } else if (orphanDelayedCallbacks) { list = orphanDelayedCallbacks; } else { list = orphanDelayedCallbacks = []; setTimeout(fireOrphanDelayed, 0); } function bnd(f) {return function(){f.apply(null, args);};}; for (var i = 0; i < arr.length; ++i) list.push(bnd(arr[i])); } function fireOrphanDelayed() { var delayed = orphanDelayedCallbacks; orphanDelayedCallbacks = null; for (var i = 0; i < delayed.length; ++i) delayed[i](); } // The DOM events that CodeMirror handles can be overridden by // registering a (non-DOM) handler on the editor for the event name, // and preventDefault-ing the event in that handler. function signalDOMEvent(cm, e, override) { if (typeof e == "string") e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; signal(cm, override || e.type, cm, e); return e_defaultPrevented(e) || e.codemirrorIgnore; } function signalCursorActivity(cm) { var arr = cm._handlers && cm._handlers.cursorActivity; if (!arr) return; var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) set.push(arr[i]); } function hasHandler(emitter, type) { var arr = emitter._handlers && emitter._handlers[type]; return arr && arr.length > 0; } // Add on and off methods to a constructor's prototype, to make // registering events on such objects more convenient. function eventMixin(ctor) { ctor.prototype.on = function(type, f) {on(this, type, f);}; ctor.prototype.off = function(type, f) {off(this, type, f);}; } // MISC UTILITIES // Number of pixels added to scroller and sizer to hide scrollbar var scrollerGap = 30; // Returned or thrown by various protocols to signal 'I'm not // handling this'. var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; // Reused option objects for setSelection & friends var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; function Delayed() {this.id = null;} Delayed.prototype.set = function(ms, f) { clearTimeout(this.id); this.id = setTimeout(f, ms); }; // Counts the column offset in a string, taking tabs into account. // Used mostly to find indentation. var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { if (end == null) { end = string.search(/[^\s\u00a0]/); if (end == -1) end = string.length; } for (var i = startIndex || 0, n = startValue || 0;;) { var nextTab = string.indexOf("\t", i); if (nextTab < 0 || nextTab >= end) return n + (end - i); n += nextTab - i; n += tabSize - (n % tabSize); i = nextTab + 1; } }; // The inverse of countColumn -- find the offset that corresponds to // a particular column. function findColumn(string, goal, tabSize) { for (var pos = 0, col = 0;;) { var nextTab = string.indexOf("\t", pos); if (nextTab == -1) nextTab = string.length; var skipped = nextTab - pos; if (nextTab == string.length || col + skipped >= goal) return pos + Math.min(skipped, goal - col); col += nextTab - pos; col += tabSize - (col % tabSize); pos = nextTab + 1; if (col >= goal) return pos; } } var spaceStrs = [""]; function spaceStr(n) { while (spaceStrs.length <= n) spaceStrs.push(lst(spaceStrs) + " "); return spaceStrs[n]; } function lst(arr) { return arr[arr.length-1]; } var selectInput = function(node) { node.select(); }; if (ios) // Mobile Safari apparently has a bug where select() is broken. selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; else if (ie) // Suppress mysterious IE10 errors selectInput = function(node) { try { node.select(); } catch(_e) {} }; function indexOf(array, elt) { for (var i = 0; i < array.length; ++i) if (array[i] == elt) return i; return -1; } function map(array, f) { var out = []; for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); return out; } function nothing() {} function createObj(base, props) { var inst; if (Object.create) { inst = Object.create(base); } else { nothing.prototype = base; inst = new nothing(); } if (props) copyObj(props, inst); return inst; }; function copyObj(obj, target, overwrite) { if (!target) target = {}; for (var prop in obj) if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) target[prop] = obj[prop]; return target; } function bind(f) { var args = Array.prototype.slice.call(arguments, 1); return function(){return f.apply(null, args);}; } var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; var isWordCharBasic = CodeMirror.isWordChar = function(ch) { return /\w/.test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); }; function isWordChar(ch, helper) { if (!helper) return isWordCharBasic(ch); if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; return helper.test(ch); } function isEmpty(obj) { for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; return true; } // Extending unicode characters. A series of a non-extending char + // any number of extending chars is treated as a single unit as far // as editing and measuring is concerned. This is not fully correct, // since some scripts/fonts/browsers also treat other configurations // of code points as a group. var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } // DOM UTILITIES function elt(tag, content, className, style) { var e = document.createElement(tag); if (className) e.className = className; if (style) e.style.cssText = style; if (typeof content == "string") e.appendChild(document.createTextNode(content)); else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); return e; } var range; if (document.createRange) range = function(node, start, end, endNode) { var r = document.createRange(); r.setEnd(endNode || node, end); r.setStart(node, start); return r; }; else range = function(node, start, end) { var r = document.body.createTextRange(); try { r.moveToElementText(node.parentNode); } catch(e) { return r; } r.collapse(true); r.moveEnd("character", end); r.moveStart("character", start); return r; }; function removeChildren(e) { for (var count = e.childNodes.length; count > 0; --count) e.removeChild(e.firstChild); return e; } function removeChildrenAndAdd(parent, e) { return removeChildren(parent).appendChild(e); } var contains = CodeMirror.contains = function(parent, child) { if (child.nodeType == 3) // Android browser always returns false when child is a textnode child = child.parentNode; if (parent.contains) return parent.contains(child); do { if (child.nodeType == 11) child = child.host; if (child == parent) return true; } while (child = child.parentNode); }; function activeElt() { return document.activeElement; } // Older versions of IE throws unspecified error when touching // document.activeElement in some cases (during loading, in iframe) if (ie && ie_version < 11) activeElt = function() { try { return document.activeElement; } catch(e) { return document.body; } }; function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } var rmClass = CodeMirror.rmClass = function(node, cls) { var current = node.className; var match = classTest(cls).exec(current); if (match) { var after = current.slice(match.index + match[0].length); node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); } }; var addClass = CodeMirror.addClass = function(node, cls) { var current = node.className; if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; }; function joinClasses(a, b) { var as = a.split(" "); for (var i = 0; i < as.length; i++) if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; return b; } // WINDOW-WIDE EVENTS // These must be handled carefully, because naively registering a // handler for each editor will cause the editors to never be // garbage collected. function forEachCodeMirror(f) { if (!document.body.getElementsByClassName) return; var byClass = document.body.getElementsByClassName("CodeMirror"); for (var i = 0; i < byClass.length; i++) { var cm = byClass[i].CodeMirror; if (cm) f(cm); } } var globalsRegistered = false; function ensureGlobalHandlers() { if (globalsRegistered) return; registerGlobalHandlers(); globalsRegistered = true; } function registerGlobalHandlers() { // When the window resizes, we need to refresh active editors. var resizeTimer; on(window, "resize", function() { if (resizeTimer == null) resizeTimer = setTimeout(function() { resizeTimer = null; forEachCodeMirror(onResize); }, 100); }); // When the window loses focus, we want to show the editor as blurred on(window, "blur", function() { forEachCodeMirror(onBlur); }); } // FEATURE DETECTION // Detect drag-and-drop var dragAndDrop = function() { // There is *some* kind of drag-and-drop support in IE6-8, but I // couldn't get it to work yet. if (ie && ie_version < 9) return false; var div = elt('div'); return "draggable" in div || "dragDrop" in div; }(); var zwspSupported; function zeroWidthElement(measure) { if (zwspSupported == null) { var test = elt("span", "\u200b"); removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); if (measure.firstChild.offsetHeight != 0) zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); node.setAttribute("cm-text", ""); return node; } // Feature-detect IE's crummy client rect reporting for bidi text var badBidiRects; function hasBadBidiRects(measure) { if (badBidiRects != null) return badBidiRects; var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); var r0 = range(txt, 0, 1).getBoundingClientRect(); if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) var r1 = range(txt, 1, 2).getBoundingClientRect(); return badBidiRects = (r1.right - r0.right < 3); } // See if "".split is the broken IE version, if so, provide an // alternative way to split lines. var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { var pos = 0, result = [], l = string.length; while (pos <= l) { var nl = string.indexOf("\n", pos); if (nl == -1) nl = string.length; var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); var rt = line.indexOf("\r"); if (rt != -1) { result.push(line.slice(0, rt)); pos += rt + 1; } else { result.push(line); pos = nl + 1; } } return result; } : function(string){return string.split(/\r\n?|\n/);}; var hasSelection = window.getSelection ? function(te) { try { return te.selectionStart != te.selectionEnd; } catch(e) { return false; } } : function(te) { try {var range = te.ownerDocument.selection.createRange();} catch(e) {} if (!range || range.parentElement() != te) return false; return range.compareEndPoints("StartToEnd", range) != 0; }; var hasCopyEvent = (function() { var e = elt("div"); if ("oncopy" in e) return true; e.setAttribute("oncopy", "return;"); return typeof e.oncopy == "function"; })(); var badZoomedRects = null; function hasBadZoomedRects(measure) { if (badZoomedRects != null) return badZoomedRects; var node = removeChildrenAndAdd(measure, elt("span", "x")); var normal = node.getBoundingClientRect(); var fromRange = range(node, 0, 1).getBoundingClientRect(); return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; } // KEY NAMES var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; CodeMirror.keyNames = keyNames; (function() { // Number keys for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); // Alphabetic keys for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); // Function keys for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; })(); // BIDI HELPERS function iterateBidiSections(order, from, to, f) { if (!order) return f(from, to, "ltr"); var found = false; for (var i = 0; i < order.length; ++i) { var part = order[i]; if (part.from < to && part.to > from || from == to && part.to == from) { f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); found = true; } } if (!found) f(from, to, "ltr"); } function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } function bidiRight(part) { return part.level % 2 ? part.from : part.to; } function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } function lineRight(line) { var order = getOrder(line); if (!order) return line.text.length; return bidiRight(lst(order)); } function lineStart(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLine(line); if (visual != line) lineN = lineNo(visual); var order = getOrder(visual); var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); return Pos(lineN, ch); } function lineEnd(cm, lineN) { var merged, line = getLine(cm.doc, lineN); while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; lineN = null; } var order = getOrder(line); var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); return Pos(lineN == null ? lineNo(line) : lineN, ch); } function lineStartSmart(cm, pos) { var start = lineStart(cm, pos.line); var line = getLine(cm.doc, start.line); var order = getOrder(line); if (!order || order[0].level == 0) { var firstNonWS = Math.max(0, line.text.search(/\S/)); var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; return Pos(start.line, inWS ? 0 : firstNonWS); } return start; } function compareBidiLevel(order, a, b) { var linedir = order[0].level; if (a == linedir) return true; if (b == linedir) return false; return a < b; } var bidiOther; function getBidiPartAt(order, pos) { bidiOther = null; for (var i = 0, found; i < order.length; ++i) { var cur = order[i]; if (cur.from < pos && cur.to > pos) return i; if ((cur.from == pos || cur.to == pos)) { if (found == null) { found = i; } else if (compareBidiLevel(order, cur.level, order[found].level)) { if (cur.from != cur.to) bidiOther = found; return i; } else { if (cur.from != cur.to) bidiOther = i; return found; } } } return found; } function moveInLine(line, pos, dir, byUnit) { if (!byUnit) return pos + dir; do pos += dir; while (pos > 0 && isExtendingChar(line.text.charAt(pos))); return pos; } // This is needed in order to move 'visually' through bi-directional // text -- i.e., pressing left should make the cursor go left, even // when in RTL text. The tricky part is the 'jumps', where RTL and // LTR text touch each other. This often requires the cursor offset // to move more than one unit, in order to visually move one unit. function moveVisually(line, start, dir, byUnit) { var bidi = getOrder(line); if (!bidi) return moveLogically(line, start, dir, byUnit); var pos = getBidiPartAt(bidi, start), part = bidi[pos]; var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); for (;;) { if (target > part.from && target < part.to) return target; if (target == part.from || target == part.to) { if (getBidiPartAt(bidi, target) == pos) return target; part = bidi[pos += dir]; return (dir > 0) == part.level % 2 ? part.to : part.from; } else { part = bidi[pos += dir]; if (!part) return null; if ((dir > 0) == part.level % 2) target = moveInLine(line, part.to, -1, byUnit); else target = moveInLine(line, part.from, 1, byUnit); } } } function moveLogically(line, start, dir, byUnit) { var target = start + dir; if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; return target < 0 || target > line.text.length ? null : target; } // Bidirectional ordering algorithm // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm // that this (partially) implements. // One-char codes used for character types: // L (L): Left-to-Right // R (R): Right-to-Left // r (AL): Right-to-Left Arabic // 1 (EN): European Number // + (ES): European Number Separator // % (ET): European Number Terminator // n (AN): Arabic Number // , (CS): Common Number Separator // m (NSM): Non-Spacing Mark // b (BN): Boundary Neutral // s (B): Paragraph Separator // t (S): Segment Separator // w (WS): Whitespace // N (ON): Other Neutrals // Returns null if characters are ordered as they appear // (left-to-right), or an array of sections ({from, to, level} // objects) in the order in which they occur visually. var bidiOrdering = (function() { // Character types for codepoints 0 to 0xff var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; // Character types for codepoints 0x600 to 0x6ff var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; function charType(code) { if (code <= 0xf7) return lowTypes.charAt(code); else if (0x590 <= code && code <= 0x5f4) return "R"; else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); else if (0x6ee <= code && code <= 0x8ac) return "r"; else if (0x2000 <= code && code <= 0x200b) return "w"; else if (code == 0x200c) return "b"; else return "L"; } var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; // Browsers seem to always treat the boundaries of block elements as being L. var outerType = "L"; function BidiSpan(level, from, to) { this.level = level; this.from = from; this.to = to; } return function(str) { if (!bidiRE.test(str)) return false; var len = str.length, types = []; for (var i = 0, type; i < len; ++i) types.push(type = charType(str.charCodeAt(i))); // W1. Examine each non-spacing mark (NSM) in the level run, and // change the type of the NSM to the type of the previous // character. If the NSM is at the start of the level run, it will // get the type of sor. for (var i = 0, prev = outerType; i < len; ++i) { var type = types[i]; if (type == "m") types[i] = prev; else prev = type; } // W2. Search backwards from each instance of a European number // until the first strong type (R, L, AL, or sor) is found. If an // AL is found, change the type of the European number to Arabic // number. // W3. Change all ALs to R. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (type == "1" && cur == "r") types[i] = "n"; else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } } // W4. A single European separator between two European numbers // changes to a European number. A single common separator between // two numbers of the same type changes to that type. for (var i = 1, prev = types[0]; i < len - 1; ++i) { var type = types[i]; if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; else if (type == "," && prev == types[i+1] && (prev == "1" || prev == "n")) types[i] = prev; prev = type; } // W5. A sequence of European terminators adjacent to European // numbers changes to all European numbers. // W6. Otherwise, separators and terminators change to Other // Neutral. for (var i = 0; i < len; ++i) { var type = types[i]; if (type == ",") types[i] = "N"; else if (type == "%") { for (var end = i + 1; end < len && types[end] == "%"; ++end) {} var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // W7. Search backwards from each instance of a European number // until the first strong type (R, L, or sor) is found. If an L is // found, then change the type of the European number to L. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (cur == "L" && type == "1") types[i] = "L"; else if (isStrong.test(type)) cur = type; } // N1. A sequence of neutrals takes the direction of the // surrounding strong text if the text on both sides has the same // direction. European and Arabic numbers act as if they were R in // terms of their influence on neutrals. Start-of-level-run (sor) // and end-of-level-run (eor) are used at level run boundaries. // N2. Any remaining neutrals take the embedding direction. for (var i = 0; i < len; ++i) { if (isNeutral.test(types[i])) { for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} var before = (i ? types[i-1] : outerType) == "L"; var after = (end < len ? types[end] : outerType) == "L"; var replace = before || after ? "L" : "R"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // Here we depart from the documented algorithm, in order to avoid // building up an actual levels array. Since there are only three // levels (0, 1, 2) in an implementation that doesn't take // explicit embedding into account, we can build up the order on // the fly, without following the level-based algorithm. var order = [], m; for (var i = 0; i < len;) { if (countsAsLeft.test(types[i])) { var start = i; for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} order.push(new BidiSpan(0, start, i)); } else { var pos = i, at = order.length; for (++i; i < len && types[i] != "L"; ++i) {} for (var j = pos; j < i;) { if (countsAsNum.test(types[j])) { if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); var nstart = j; for (++j; j < i && countsAsNum.test(types[j]); ++j) {} order.splice(at, 0, new BidiSpan(2, nstart, j)); pos = j; } else ++j; } if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); } } if (order[0].level == 1 && (m = str.match(/^\s+/))) { order[0].from = m[0].length; order.unshift(new BidiSpan(0, 0, m[0].length)); } if (lst(order).level == 1 && (m = str.match(/\s+$/))) { lst(order).to -= m[0].length; order.push(new BidiSpan(0, len - m[0].length, len)); } if (order[0].level == 2) order.unshift(new BidiSpan(1, order[0].to, order[0].to)); if (order[0].level != lst(order).level) order.push(new BidiSpan(order[0].level, len, len)); return order; }; })(); // THE END CodeMirror.version = "5.2.0"; return CodeMirror; }); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/LICENSE0000644000175000017500000000210613776355015027713 0ustar domdomCopyright (C) 2014 by Marijn Haverbeke and others 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. rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/lib/codemirror/neo.css0000644000175000017500000000145713776355015030211 0ustar domdom/* neo theme for codemirror */ /* Color scheme */ .cm-s-neo.CodeMirror { background-color:#ffffff; color:#2e383c; line-height:1.4375; } .cm-s-neo .cm-comment {color:#75787b} .cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} .cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} .cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} .cm-s-neo .cm-string {color:#b35e14} .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} /* Editor styling */ .cm-s-neo pre { padding:0; } .cm-s-neo .CodeMirror-gutters { border:none; border-right:10px solid transparent; background-color:transparent; } .cm-s-neo .CodeMirror-linenumber { padding:0; color:#e0e2e5; } .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/package.json0000644000175000017500000000051114006075351026244 0ustar domdom{ "name": "ckeditor-toolbarconfigurator", "version": "0.0.0", "description": "", "author": "CKSource (http://cksource.com/)", "license": "For licensing, see LICENSE.md or http://ckeditor.com/license.", "devDependencies": { "benderjs": "~0.2.1", "benderjs-chai": "~0.2.0", "benderjs-mocha": "~0.1.2" } } rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/font/0000755000175000017500000000000013776355015024742 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/font/fontello.woff0000644000175000017500000000553013776355015027452 0ustar domdomwOFF XOS/2DDV=Hcmap:Jcvt Ifpgm x;gaspglyf head46,hhea $2Vhmtx 9loca , maxp 8 (name Xw̝post /B%/prep VVxc`dcTŴB3>`0ddb``b`ef \S^0`bf2 7xc```f`Fp| ^0RDK0B#Èfxc`@F F70xUvVkBV}=$t,ϾG[g:F#*}kԡ=JI\u/ q]OI$JjP.X*Y'X' VOUg eIDD&I'g%I %PB5RաLЫq@FuXTC'5ԬF*W9F/{:1x~*?vJNTqԡV0_L*@bEt1=t:.JF((ST]q@f \JltD&RN5G\BPj~"N$FXqW B1 S9tEf]1Ja= ~ N$+gQHcugPK;2C" 3a U_4g@4K)JoLh T]6)iϚbSҞ32]}iGnV!7mi/ 7FnU:viRA4aV@֌4|i`.bDGu ri".><FݰƑ0FzYM.22L e@: `\xJCT;y_9.\wy Y rcRd-T'G+'UkC*({(^瓐=B[a#Li%^S(=RC,o)< Zĸujkz !pH)]ߴwkzr*QTFڼf2)UOQYiT49Okto8h=T|4A#U5(c45t1V~hb=OUK഻*[Fm䊟#1- ;bd ; Y&wmm?&߆ErW;yՓQ%wMvYף6GN-7r,`A1wiQetm8Wvͱtz.A #.}rv!ȹ99_C0 `;!xH9!!Hȹ '|M7FNd΢@8dFM` Fxc`d``f `FCh -nZ xuj@ҋB[Z足*Ji`7 Xtn-1$32_ЇKY(Mw9sd\đ 8Errb*,п[*n thOWrrrܳ\ƭx|BY`"RU܋ZmuFun:r*JXk*ʾqO-3bYE(}90kDJL7SlxZp׮Ku%13'&'#+#!"&'#"&=46;7>73232 $ $ $ $ $ $ H  64%0%45 ' ,,'  A  A  A d  eAS$ .DB. $ ]] s):_< DDq RjZFCh -nZ 55=DL T_ +g  j   - = M c Vs &Copyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.comCopyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.com down-bigup-bigtrash22  , `f-, d P&ZE[X!#!X PPX!@Y 8PX!8YY Ead(PX! E 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B *! C +0%QX`PaRYX#Y! @SX+!@Y#PXeY-,C+C`B-,#B# #Bab`*-, E EcEb`D`-, E +#%` E#a d PX!0PX @YY#PXeY%#aDD`-,EaD- ,` CJPX #BY CJRX #BY- , b c#a C` ` #B#- ,KTXDY$ e#x- ,KQXKSXDY!Y$e#x- , CUX CaB +YC%B %B %B# %PXC`%B #a *!#a #a *!C`%B%a *!Y CG CG`b EcEb`#DC>C`B-,ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+-,+-,+-,+-, +-,+ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+- ,+-!,+-",+-#, +-$, <`-%, ` ` C#`C%a`$*!-&,%+%*-', G EcEb`#a8# UX G EcEb`#a8!Y-(,ETX'*0"Y-),+ETX'*0"Y-*, 5`-+,EcEb+EcEb+D>#8**-,, < G EcEb`Ca8--,.<-., < G EcEb`CaCc8-/,% . G#B%IG#G#a Xb!Y#B.*-0,%%G#G#aE+e.# <8-1,%% .G#G#a #BE+ `PX @QX  &YBB# C #G#G#a#F`Cb` + a C`d#CadPXCaC`Y%ba# &#Fa8#CF%CG#G#a` Cb`# +#C`+%a%b&a %`d#%`dPX!#!Y# &#Fa8Y-2, & .G#G#a#<8-3, #B F#G+#a8-4,%%G#G#aTX. <#!%%G#G#a %%G#G#a%%I%aEc# Xb!YcEb`#.# <8#!Y-5, C .G#G#a ` `fb# <8-6,# .F%FRX ,1+!# <#B#8&+C.&+-?, G#B.,*-@, G#B.,*-A,-*-B,/*-C,E# . F#a8&+-D,#BC+-E,<+-F,<+-G,<+-H,<+-I,=+-J,=+-K,=+-L,=+-M,9+-N,9+-O,9+-P,9+-Q,;+-R,;+-S,;+-T,;+-U,>+-V,>+-W,>+-X,>+-Y,:+-Z,:+-[,:+-\,:+-],2+.&+-^,2+6+-_,2+7+-`,2+8+-a,3+.&+-b,3+6+-c,3+7+-d,3+8+-e,4+.&+-f,4+6+-g,4+7+-h,4+8+-i,5+.&+-j,5+6+-k,5+7+-l,5+8+-m,+e$Px0-KRXYc #D#p( ERD *D$QX@XD&QXXDYYYYDrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/font/fontello.ttf0000644000175000017500000001132413776355015027304 0ustar domdom`OS/2=HVcmapDJcvt Ifpgm x; gaspglyf head,6hhea2VP$hmtx9tloca maxp ( name̝post%/Bprep|Vzz1PfEd@RjZ OD( $@!BhS D5+"'&4?6246732762:):*G*;*l;)*,w*$@!BhS D5+"/#"&5"/&4762*;(G*<*k<k4*w$&*;k /;CgI@F  [[ S C S Dfda^[YTROLIGA@4555553++"&546;2+"&546;2+"&546;2!3!2>3'&'#+#!"&'#"&=46;7>73232 $ $ $ $ $ $ H  64%0%45 ' ,,'  A  A  A d  eAS$ .DB. $ ]] s):_< DDq RjZFCh -nZ 55=DL T_ +g  j   - = M c Vs &Copyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.comCopyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.com down-bigup-bigtrash22  , `f-, d P&ZE[X!#!X PPX!@Y 8PX!8YY Ead(PX! E 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B *! C +0%QX`PaRYX#Y! @SX+!@Y#PXeY-,C+C`B-,#B# #Bab`*-, E EcEb`D`-, E +#%` E#a d PX!0PX @YY#PXeY%#aDD`-,EaD- ,` CJPX #BY CJRX #BY- , b c#a C` ` #B#- ,KTXDY$ e#x- ,KQXKSXDY!Y$e#x- , CUX CaB +YC%B %B %B# %PXC`%B #a *!#a #a *!C`%B%a *!Y CG CG`b EcEb`#DC>C`B-,ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+-,+-,+-,+-, +-,+ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+- ,+-!,+-",+-#, +-$, <`-%, ` ` C#`C%a`$*!-&,%+%*-', G EcEb`#a8# UX G EcEb`#a8!Y-(,ETX'*0"Y-),+ETX'*0"Y-*, 5`-+,EcEb+EcEb+D>#8**-,, < G EcEb`Ca8--,.<-., < G EcEb`CaCc8-/,% . G#B%IG#G#a Xb!Y#B.*-0,%%G#G#aE+e.# <8-1,%% .G#G#a #BE+ `PX @QX  &YBB# C #G#G#a#F`Cb` + a C`d#CadPXCaC`Y%ba# &#Fa8#CF%CG#G#a` Cb`# +#C`+%a%b&a %`d#%`dPX!#!Y# &#Fa8Y-2, & .G#G#a#<8-3, #B F#G+#a8-4,%%G#G#aTX. <#!%%G#G#a %%G#G#a%%I%aEc# Xb!YcEb`#.# <8#!Y-5, C .G#G#a ` `fb# <8-6,# .F%FRX ,1+!# <#B#8&+C.&+-?, G#B.,*-@, G#B.,*-A,-*-B,/*-C,E# . F#a8&+-D,#BC+-E,<+-F,<+-G,<+-H,<+-I,=+-J,=+-K,=+-L,=+-M,9+-N,9+-O,9+-P,9+-Q,;+-R,;+-S,;+-T,;+-U,>+-V,>+-W,>+-X,>+-Y,:+-Z,:+-[,:+-\,:+-],2+.&+-^,2+6+-_,2+7+-`,2+8+-a,3+.&+-b,3+6+-c,3+7+-d,3+8+-e,4+.&+-f,4+6+-g,4+7+-h,4+8+-i,5+.&+-j,5+6+-k,5+7+-l,5+8+-m,+e$Px0-KRXYc #D#p( ERD *D$QX@XD&QXXDYYYYDrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/font/fontello.svg0000644000175000017500000000324513776355015027311 0ustar domdom Copyright (C) 2014 by original authors @ fontello.com rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/index.html0000644000175000017500000003523314006075351025764 0ustar domdom Toolbar Configurator

    Toolbar Configurator Help

    Select configurator type

    What Am I Doing Here?

    Arrange toolbar groups, toggle button visibility according to your needs and get your toolbar configuration.

    You can replace the content of the config.js file with the generated configuration. If you already set some configuration options you will need to merge both configurations.

    Read more about different ways of setting configuration and do not forget about clearing browser cache.

    Arranging toolbar groups is the recommended way of configuring the toolbar, but if you need more freedom you can use the advanced configurator.

    CKEditor – The text editor for the Internet – http://ckeditor.com

    Copyright © 2003-2015, CKSource – Frederico Knabben. All rights reserved.

    rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/tests/0000755000175000017500000000000013776355015025136 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/tests/one.js0000644000175000017500000000035513776355015026260 0ustar domdom/* global describe, it, expect, ToolbarConfigurator */ describe( 'Full toolbar configurator', function() { var FTE = ToolbarConfigurator.FullToolbarEditor; it( 'exists', function() { expect( FTE ).to.be.a( 'function' ); } ); } ); rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/css/0000755000175000017500000000000013776355015024564 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/css/fontello.css0000644000175000017500000000326213776355015027123 0ustar domdom@font-face { font-family: 'fontello'; src: url('../font/fontello.eot?89024372'); src: url('../font/fontello.eot?89024372#iefix') format('embedded-opentype'), url('../font/fontello.woff?89024372') format('woff'), url('../font/fontello.ttf?89024372') format('truetype'), url('../font/fontello.svg?89024372#fontello') format('svg'); font-weight: normal; font-style: normal; } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ /* @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; src: url('../font/fontello.svg?89024372#fontello') format('svg'); } } */ [class^="icon-"]:before, [class*=" icon-"]:before { font-family: "fontello"; font-style: normal; font-weight: normal; speak: none; display: inline-block; text-decoration: inherit; width: 1em; margin-right: .2em; text-align: center; /* opacity: .8; */ /* For safety - reset parent styles, that can break glyph codes*/ font-variant: normal; text-transform: none; /* fix buttons height, for twitter bootstrap */ line-height: 1em; /* Animation center compensation - margins should be symmetric */ /* remove if not needed */ margin-left: .2em; /* you can be more comfortable with increased icons size */ /* font-size: 120%; */ /* Uncomment for 3D effect */ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } .icon-trash:before { content: '\e802'; } /* '' */ .icon-down-big:before { content: '\e800'; } /* '' */ .icon-up-big:before { content: '\e801'; } /* '' */rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/bender.js0000644000175000017500000000133113776355015025567 0ustar domdom/* jshint browser: false, node: true */ 'use strict'; var config = { applications: { ckeditor: { path: '../../', files: [ 'ckeditor.js' ] }, codemirror: { path: '.', files: [ 'js/lib/codemirror/codemirror.js' ] }, toolbartool: { path: '.', files: [ 'js/fulltoolbareditor.js', 'js/abstracttoolbarmodifier.js', 'js/toolbarmodifier.js', 'js/toolbartextmodifier.js' ] } }, plugins: [ 'node_modules/benderjs-mocha', 'node_modules/benderjs-chai' ], framework: 'mocha', tests: { 'main': { applications: [ 'ckeditor', 'codemirror', 'toolbartool' ], basePath: 'tests/', paths: [ '**', '!**/_*/**' ] } } }; module.exports = config; rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/less/0000755000175000017500000000000014006075351024727 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/less/base.less0000644000175000017500000000226714006075351026540 0ustar domdom// Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. // For licensing, see LICENSE.html or http://cksource.com/ckeditor/license @base-font-size: 16px; @base-line-height: 24px; @base-line-ratio: 1.8; @sample-font-stack: Arial, Helvetica, sans-serif; @sample-font-stack-monospace: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; @sample-font-maven: "Maven Pro"; @sample-font-indie: "Indie Flower"; @sample-text-color: #575757; @sample-link-color: #cf5d4e; @sample-link-color-hover: lighten( @sample-link-color, -10% ); @sample-box-background-color: #f5f5f5; @sample-box-border-color: #ddd; @sample-top-navigation-background: #454545; // Standard gaps @sample-standard-vgap: 1.2em; @sample-standard-hgap: 1.5em; // Generic font-size/line-height mixin. .font-size( @remSize ) { @pxSize: round( @remSize * @base-font-size, 2 ); @remHeight: round( @remSize * @base-line-ratio, 2 ); @pxHeight: round( @pxSize * @base-line-ratio, 2 ); font-size: ~"@{pxSize}"; font-size: ~"@{remSize}rem"; line-height: ~"@{pxHeight}"; line-height: ~"@{remHeight}rem"; } rt-4.4.4/devel/third-party/ckeditor-src/samples/toolbarconfigurator/less/toolbarmodifier.less0000644000175000017500000002207314006075351031004 0ustar domdom// Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. // For licensing, see LICENSE.html or http://cksource.com/ckeditor/license @import "base.less"; @modifier-group-hover-color: #fffbe3; @modifier-group-active-color: #f0fafb; @modifier-active-toolbar-color: darken( @modifier-group-hover-color, 10% ); @modifier-toolbar-border-color: #ccc; @modifier-toolbar-group-border-color: #ddd; @modifier-toolbar-group-vpadding: 2px; @modifier-toolbar-hgap: 5px; @modifier-toolbar-button-color: #e7e7e7; #toolbar .cke_toolbar { pointer-events: none; .user-select( none ); cursor: default; } // Dim all but active toolbars if some is active. .some-toolbar-active .cke_toolbar { .opacity( .5 ); } .cke_toolbar.active { position: relative; // Active toolbar is always highlighted. .opacity( 1 ); &:after { content: ''; display: block; position: absolute; top: 0; right: 6px; bottom: 5px; left: 0; .border-radius( 5px ); .box-shadow( 0px 0px 15px 3px @modifier-active-toolbar-color ); } .cke_toolgroup { .box-shadow( none ); border-color: darken( @modifier-active-toolbar-color, 40% ); } .cke_combo, .cke_toolgroup { position: relative; z-index: 2; } .cke_combo_button { .box-shadow( none ); } } .unselectable { .user-select( none ); } .toolbar { padding: 5px 0; margin-bottom: 2 * @sample-standard-vgap; overflow: hidden; background: #fff; button.button-a { &.cke_button { cursor: pointer; display: inline-block; padding: 4px 6px; outline: 0; border: 1px solid #a6a6a6; } &.hidden { display: none; } &.left { float: left; margin-right: 8px; } &.right { float: right; margin-left: 8px; } .highlight { color: #ffefc1; } } } // Styles applied when configurator is hidden and code is being displayed (and vice-versa). .configContainer.hidden, .toolbarModifier.hidden, .toolbarModifier-hints.hidden { display: none; } .toolbarModifier :focus, .toolbar button:focus, .configContainer textarea.configCode:focus { outline: none; } div.toolbarModifier { padding: 0; overflow: hidden; width: 100%; position: relative; display: table; border-collapse: collapse; ::-moz-focus-inner { border: 0; } .empty { display: none; } &.empty-visible .empty { display: table-row; .opacity( 0.6 ); } // Give empty toolbar groups height similar to height of non empty groups. // Non empty groups are stretched by contained toolbar buttons. .empty > p { line-height: 31px; } // List of toolbars. & > ul { padding: 0; margin: 0; border-top: 1px solid @modifier-toolbar-border-color; width: 100%; &[data-type="table-header"] { display: table-header-group; } &[data-type="table-body"] { display: table-row-group; } // Override global margins and paddings. p { padding: 0; margin: 0; } // A single toolbar. & > li { display: table-row; &[data-type="header"] { font-weight: bold; user-select: none; cursor: default; } &[data-type="group"], &[data-type="separator"] { border-bottom: 1px solid @modifier-toolbar-border-color; } &[data-type="subgroup"] { border-top: 1px solid #eee; &:first-child { border-top: none; } } &[data-type="group"].active, &[data-type="group"]:hover, &[data-type="separator"].active, &[data-type="separator"]:hover { overflow: hidden; z-index: 2; } &[data-type="group"].active, &[data-type="separator"].active, &[data-type="group"].active:hover, &[data-type="separator"].active:hover { background: @modifier-group-active-color; } &[data-type="group"]:hover, &[data-type="separator"]:hover { background: @modifier-group-hover-color; } &[data-type="separator"] { &:after { content: ''; width: 100%; } background: #f5f5f5; & > p { padding: @modifier-toolbar-group-vpadding @modifier-toolbar-hgap; } } & > p, & > ul { display: table-cell; vertical-align: middle; } // Note: this also controls the list of toolbar groups. p { padding-left: @modifier-toolbar-hgap; min-width: 200px; span { white-space: nowrap; cursor: default; button { font-size: 12.666px; margin-right: 5px; cursor: pointer; background: #fff; .border-radius( 5px ); border: 1px solid #bbb; padding: 0 7px; line-height: 12px; height: 20px; &:not(.disabled) { &:hover, &:focus { color: #fff; background-color: @sample-top-navigation-background; border-color: transparent; } } &.move.disabled { cursor: default; .opacity( 0.2 ); } } } } // List of toolbar groups. ul { border-collapse: collapse; padding: 0; width: 100%; // A single toolbar group. li { display: table-row; list-style-type: none; // Resets slightly increased lists' lh which is bigger than button's height // so it stretches columns. line-height: 1; &[data-type="subgroup"] { border-top: 1px solid @modifier-toolbar-group-border-color; &:first-child { border-top: 0; } [data-type="button"] { .border-radius( 3px ); padding: 0 2px; &:focus { background: rgba(0, 0, 0, 0.04); } input { vertical-align: middle; } } } & > p, & > ul { display: table-cell; vertical-align: middle; } // List of buttons in a group. ul { padding: 0; // A single button in a group. li { padding: 0; display: inline-block; cursor: pointer; margin: @modifier-toolbar-group-vpadding 5px @modifier-toolbar-group-vpadding 0; // Enforce styles to save space. .cke_combo_text { cursor: pointer; white-space: nowrap; } .cke_toolgroup, .cke_combo_button { cursor: pointer; margin: 0; vertical-align: middle; border: 1px solid #ddd; .font-size( .713 ); } } } } } } } & > .codemirror-wrapper { overflow-y: auto; } // Advanced configurator: list of unused elements. &-hints { float: right; width: 350px; min-width: 150px; overflow-y: auto; margin-left: @sample-standard-hgap; h3 { .font-size( 1.13 ); padding: .3*@sample-standard-vgap @sample-standard-hgap; background: @sample-box-background-color; border-bottom: 1px solid @sample-box-border-color; margin-top: 0; margin-bottom: @sample-standard-vgap; } dl { //margin-top: 0; margin-bottom: @sample-standard-vgap; overflow: hidden; .list-header { font-weight: bold; border: 0; padding-bottom: .5*@sample-standard-vgap; } & > p { text-align: center; } dt { float: left; width: 9em; clear: both; text-align: right; border-top: 1px solid @sample-box-border-color; padding-left: @sample-standard-hgap; padding-right: .1em; .box-sizing( border-box ); code { background: none; border: none; vertical-align: middle; } } dd { margin-left: 10em; clear: right; padding-right: @sample-standard-hgap; code { line-height: 2.2em; } &:after { content: '\00a0'; display: block; clear: left; float: right; height: 0; width: 0; } } } } } .toolbarModifier-hints, .configContainer textarea.configCode, .CodeMirror { .border-radius( 3px ); border: 1px solid #ccc; .font-size( .813 ); } .configContainer textarea.configCode, .CodeMirror pre, .CodeMirror-linenumber { .font-size( .813 ); font-family: @sample-font-stack-monospace; } .CodeMirror pre { border: none; padding: 0; margin: 0; } .configContainer textarea.configCode { .box-sizing( border-box ); color: @sample-text-color; padding: 10px; width: 100%; min-height: 500px; margin: 0; resize: none; outline: none; -moz-tab-size: 4; tab-size: 4; white-space: pre; word-wrap: normal; overflow: auto; } .CodeMirror-hints.toolbar-modifier { padding: 0; color: @sample-text-color; .CodeMirror-hint-active { color: @sample-text-color; background: @modifier-group-active-color; } .font-size( .875 ); font-family: @sample-font-stack-monospace; & > li:hover { background: @modifier-group-hover-color; } } /* Text modifier */ #toolbarModifierWrapper { margin-bottom: @sample-standard-vgap; .invalid .CodeMirror { background: #fff8f8; border-color: red; } .CodeMirror { // Autogrow. http://codemirror.net/demo/resize.html height: auto; // Complementory with std's CodeMirror-lines vertical padding. // Not needed when we use lines number, but we can't due to a bug in CM. padding: 0 @sample-standard-vgap/2; } } .staticContainer { position: fixed; top: 0; width: 100%; z-index: 10; > .grid-container { max-width: 1044px + 2 * @grid-gutter-width; .inner { background: #fff; .toolbar { margin-bottom: 0; } } } } // Help button to display information about configurator. #help { position: relative; top: -15px; left: -5px; &-content { display: none; } } rt-4.4.4/devel/third-party/ckeditor-src/samples/index.html0000644000175000017500000001464414006075351021702 0ustar domdom CKEditor Sample

    Congratulations!

    If you can see CKEditor below, it means that the installation succeeded. You can now try out your new editor version, see its features, and when you are ready to move on, check some of the most useful resources recommended below.

    Hello world!

    I'm an instance of CKEditor.

    Customize Your Editor

    Modular build and numerous configuration options give you nearly endless possibilities to customize CKEditor. Replace the content of your config.js file with the following code and refresh this page (remember to clear the browser cache)!

    CKEDITOR.editorConfig = function( config ) {
    	config.language = 'es';
    	config.uiColor = '#F7B42C';
    	config.height = 300;
    	config.toolbarCanCollapse = true;
    };

    Toolbar Configuration

    If you want to reorder toolbar buttons or remove some of them, check this handy tool!

    More Samples!

    Visit the CKEditor SDK for a huge collection of samples showcasing editor features, with source code readily available to copy and use in your own implementation.

    Developer's Guide

    The most important resource for all developers working with CKEditor, integrating it with their websites and applications, and customizing to their needs. You can start from here:

    • Getting Started – Explains most crucial editor concepts and practices as well as the installation process and integration with your website.
    • Advanced Installation Concepts – Describes how to upgrade, install additional components (plugins, skins), or create a custom build.

    When you have the basics sorted out, feel free to browse some more advanced sections like:

    CKEditor JavaScript API

    CKEditor boasts a rich JavaScript API that you can use to adjust the editor to your needs and integrate it with your website or application.

    CKEditor – The text editor for the Internet – http://ckeditor.com

    Copyright © 2003-2015, CKSource – Frederico Knabben. All rights reserved.

    rt-4.4.4/devel/third-party/ckeditor-src/samples/css/0000755000175000017500000000000014006075351020464 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/css/samples.css0000644000175000017500000020212614006075351022645 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ @media (max-width: 900px) { .global-is-mobile-hidden { display: none !important; } } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section { display: block; } body, html { margin: 0; padding: 0; font: 16px / 1.8 Arial, 'Helvetica Neue', Helvetica, sans-serif; font-weight: 300; color: #575757; } .grid-width-10 { width: 10%; } .grid-width-20 { width: 20%; } .grid-width-30 { width: 30%; } .grid-width-40 { width: 40%; } .grid-width-50 { width: 50%; } .grid-width-60 { width: 60%; } .grid-width-70 { width: 70%; } .grid-width-80 { width: 80%; } .grid-width-90 { width: 90%; } .grid-width-100 { width: 100%; } @media (max-width: 900px) { .grid-width-10, .grid-width-20, .grid-width-30, .grid-width-40, .grid-width-50, .grid-width-60, .grid-width-70, .grid-width-80, .grid-width-90, .grid-width-100 { width: 100%; } } *[class*="grid-width"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 4%; padding-right: 4%; float: left; } *[class*="grid-width"]:after, .grid-container:after, *[class*="grid-width"]:before, .grid-container:before { content: ''; display: block; overflow: hidden; visibility: hidden; font-size: 0; line-height: 0; width: 0; height: 0; } *[class*="grid-width"]:after, .grid-container:after { clear: both; } .grid-container { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; margin-left: auto; margin-right: auto; } .grid-container-nested *[class*="grid-width"]:first-child { padding-left: 0; } .grid-container-nested *[class*="grid-width"]:last-child { padding-right: 0; } @media (max-width: 900px) { .grid-container-nested *[class*="grid-width"]:first-child { padding-left: 4%; } .grid-container-nested *[class*="grid-width"]:last-child { padding-right: 4%; } } .header-a { min-height: 140px; overflow: hidden; } .header-a .header-a-logo { margin: 40px 0 0; } @media (max-width: 900px) { .header-a .header-a-logo { text-align: center; } } .header-a .header-a-logo img { border: transparent; } .navigation-a { height: 30px; background: #3d3d3d; position: absolute; left: 0; right: 0; top: 0; padding: 0; overflow: hidden; } @media (max-width: 900px) { .navigation-a { text-align: center; } } .navigation-a ul { list-style: none; margin: 0; overflow: hidden; } .navigation-a ul li, .navigation-a ul li a { display: inline-block; } @media (max-width: 900px) { .navigation-a ul { width: auto; text-overflow: ellipsis; white-space: nowrap; display: inline-block; float: none; } .navigation-a ul:before, .navigation-a ul:after { display: none; } } .navigation-a ul.navigation-a-left { text-align: left; } @media (max-width: 900px) { .navigation-a ul.navigation-a-left { padding-right: 0; } } .navigation-a ul.navigation-a-right { text-align: right; } @media (max-width: 900px) { .navigation-a ul.navigation-a-right { padding-left: 23px; } } .navigation-a ul li + li { margin-left: 23px; } .navigation-a ul li a { font-size: 10px; font-size: 0.625rem; line-height: 18px; line-height: 1.13rem; line-height: 30px; float: left; color: #dddddd; font-weight: bold; text-decoration: none; text-transform: uppercase; } .navigation-a ul li a:hover { cursor: pointer; color: #ffffff; } .icon-navigation-a-github:before, .icon-navigation-a-github:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IArs4c6QAAAa9JREFUOBGNlM8rRGEUht0pDGosjKYZpUSIkuwsiCaxUEqK2VOUBcrWv2BjxUJho6wsLLDzY2fhD5iR5NeOcJvIjOfM3O927m3mmlPPnPec835nZprvjlVVJvL5fCOjMWiDCLzCLVxZlpUj/x8saYV9+IZS8UJzFWoCt2GYgk+oJG4wJUouZDANv5VsUZ47dNSzkEYHfIDEHixDWgoiB/rTHlPPwBNInPmXHRb7hdeUDFG10AN1Th1Fd5mD6BMwMVnoUyVA3t3EkjkQlDFfmwPkc7NsQTXf0bGgJWaGb16dk18+EmLYawzkC+6Q3KdK4kiZqtGdskx/kmdlCJS86RuGrDLFZJmtGi1KB0q+VhOGsDLZsiyjGsOY4qoOkrO+YUauwCDoOKWo9xk9JfM+MPdSzqZdA8UlyDO3AvKLPsIG9LsmBHUKduEHdCy6PrpJZyKXdwKMOemaissOHJ9O9xTeh57GluMYIsehWy8STW/d8ZhkI0b9PjFasA1fsAOb0KCN1PLXYyKLGNdzj2YYArnZDyDRrA3Ua4UuDzd5QM/KaoxhmAO5Om5Qt8OI2/CJP6MVa1dvltQ5AAAAAElFTkSuQmCC"); } .navigation-b { text-align: right; margin: 52px 0 0; overflow: visible; } @media (max-width: 900px) { .navigation-b { text-align: center; margin-top: 20px; padding: 0; } } .navigation-b ul { padding: 0; list-style: none; margin: 0; overflow: visible; } .navigation-b ul li, .navigation-b ul li a { display: inline-block; } @media (max-width: 900px) { .navigation-b ul { display: table; width: 100%; padding-bottom: 1.5em; } } @media (max-width: 900px) { .navigation-b ul li { display: table-row; } } .navigation-b ul li + li { margin-left: 20px; } @media (max-width: 900px) { .navigation-b ul li + li { margin-left: 0; } } .navigation-b ul li a { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; text-transform: uppercase; text-decoration: none; outline: none; } @media (max-width: 900px) { .navigation-b ul li a { width: 100%; -webkit-border-radius: 0; -webkit-background-clip: padding-box; -moz-border-radius: 0; -moz-background-clip: padding; border-radius: 0; background-clip: padding-box; } } .footer-a { font-size: 13px; font-size: 0.8125rem; line-height: 23.4px; line-height: 1.46rem; padding-top: 2.25em; padding-bottom: 2.25em; overflow: hidden; color: #8a8a8a; } .footer-a a { color: #27c0d8; text-decoration: none; border-bottom: 1px dotted #27c0d8; } .footer-a a:hover { color: #23adc2; } .footer-a p { margin: 0; display: inline-block; text-align: center; } .content { font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; overflow: hidden; padding-top: 1.5em; padding-bottom: 1.5em; } .content p { margin: 0.75em 0; } .content ul, .content ol, .content pre, .content blockquote, .content textarea:not([class^="cke"]), .content .cke { margin: 1.875em 0; } .content code, .content kbd { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; padding: 3px 4px; } .content pre, .content code, .content kbd, .content blockquote { background: #f5f5f5; } .content blockquote, .content pre { background: none; border-left: 4px solid #27c0d8; padding: 1.5em 2.25em; } .content p a, .content ul a, .content ol a, .content blockquote a, .content h1 a, .content h2 a, .content h3 a, .content h4 a, .content h5 a { color: #27c0d8; text-decoration: none; border-bottom: 1px dotted #27c0d8; } .content p a:hover, .content ul a:hover, .content ol a:hover, .content blockquote a:hover, .content h1 a:hover, .content h2 a:hover, .content h3 a:hover, .content h4 a:hover, .content h5 a:hover { color: #23adc2; } .content h1, .content h2, .content h3, .content h4, .content h5 { color: #000; font-weight: 100; } .content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h1 kbd, .content h2 kbd, .content h3 kbd, .content h4 kbd, .content h5 kbd { font-size: inherit; } .content h1 a.content-heading-anchor, .content h2 a.content-heading-anchor, .content h3 a.content-heading-anchor, .content h4 a.content-heading-anchor, .content h5 a.content-heading-anchor { font-weight: 100; vertical-align: middle; opacity: 0; border: 0; } .content h1:hover a.content-heading-anchor, .content h2:hover a.content-heading-anchor, .content h3:hover a.content-heading-anchor, .content h4:hover a.content-heading-anchor, .content h5:hover a.content-heading-anchor { opacity: 1; } .content h1:target lesshat-selector, .content h2:target lesshat-selector, .content h3:target lesshat-selector, .content h4:target lesshat-selector, .content h5:target lesshat-selector { -lh-property: 0; } @-webkit-keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }} @-moz-keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }} @-o-keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }} @keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }; } .content h1:target a, .content h2:target a, .content h3:target a, .content h4:target a, .content h5:target a { -webkit-animation: targetLinkOpacity 0.5s linear alternate; -moz-animation: targetLinkOpacity 0.5s linear alternate; -o-animation: targetLinkOpacity 0.5s linear alternate; animation: targetLinkOpacity 0.5s linear alternate; opacity: 1; } .content input, .content select, .content textarea:not([class^="cke"]) { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08); font: inherit; color: inherit; border: 1px solid #d9d9d9; padding: .2em .5em; } .content input:focus, .content select:focus, .content textarea:not([class^="cke"]):focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef; } .content abbr { border-bottom: 1px dotted #666; cursor: pointer; } .content blockquote { font-style: italic; font-family: Georgia, Times, "Times New Roman", serif; font-size: 16px; font-size: 1rem; line-height: 28.8px; line-height: 1.8rem; } .content em { font-style: italic; } .content h1 { font-size: 36px; font-size: 2.25rem; line-height: 64.8px; line-height: 4.05rem; margin: 1.125em 0 0; } .content h2 { font-size: 27.2px; font-size: 1.7rem; line-height: 48.96px; line-height: 3.06rem; margin: 0.9em 0 0; } .content h3 { font-size: 24px; font-size: 1.5rem; line-height: 43.2px; line-height: 2.7rem; font-weight: 500; margin: 0.75em 0 0; } .content h4 { font-size: 19.2px; font-size: 1.2rem; line-height: 34.56px; line-height: 2.16rem; font-weight: 500; margin: 0.75em 0 0; } .content h5 { font-size: 17.6px; font-size: 1.1rem; line-height: 31.68px; line-height: 1.98rem; font-weight: 500; margin: 0.75em 0 0; } .content hr { border: 0; border-top: 4px solid #d9d9d9; margin: 1.5em 0; } .content input[type="text"] { height: 1.8em; line-height: 1.8em; } .content input[type="button"] { -webkit-appearance: button; -moz-appearance: button; appearance: button; } .content kbd { font-size: 12px; font-size: 0.75rem; line-height: 21.6px; line-height: 1.35rem; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; padding: 2px 6px; -webkit-box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9; -moz-box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9; box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9; } .content p img { vertical-align: middle; } .content p pre { padding: 1.5em; } .content pre { padding: 0; border: 0; tab-size: 4; -o-tab-size: 4; -moz-tab-size: 4; } .content pre, .content code { font-size: 11.89px; font-size: 0.743rem; line-height: 21.4px; line-height: 1.34rem; font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; } .content pre a, .content code a { border: 0; } .content pre code { padding: 0.75em; display: block; } .content strong { color: #000; } .content ul ul, .content ol ul, .content ul ol, .content ol ol { margin: 0.75em 0; } .content ul li, .content ol li { font-size: 14px; font-size: 0.875rem; line-height: 30.24px; line-height: 1.89rem; } .content textarea:not([class^="cke"]) { width: 100%; } .content div.todo { border: 2px dotted #444; padding: 10px; margin: 60px 0 10px 0; /* Remove me some day */ } .content div.todo:before { content: "TODO"; font-weight: bold; } body a.button-a, body button.button-a, body input.button-a { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; height: 36px; line-height: 36px; padding: 0 1.1em; font-weight: 700; color: #3e3e3e; white-space: nowrap; text-decoration: none; display: inline-block; cursor: pointer; border: 0; vertical-align: middle; margin: 1px 0; background: transparent; } body a.button-a.icon-pos-left, body button.button-a.icon-pos-left, body input.button-a.icon-pos-left { padding-left: .8em; } body a.button-a.icon-pos-right, body button.button-a.icon-pos-right, body input.button-a.icon-pos-right { padding-right: .8em; } body a.button-a.button-a-no-text, body button.button-a.button-a-no-text, body input.button-a.button-a-no-text { -webkit-border-radius: 100px; -webkit-background-clip: padding-box; -moz-border-radius: 100px; -moz-background-clip: padding; border-radius: 100px; background-clip: padding-box; width: 36px; padding: 0; text-indent: -999px; overflow: hidden; position: relative; text-align: center; } body a.button-a.button-a-no-text:before, body button.button-a.button-a-no-text:before, body input.button-a.button-a-no-text:before { position: absolute; left: 50%; top: 50%; margin: -9px 0 0 -9px; } @media (max-width: 900px) { body a.button-a.button-a-mobile-collapsed, body button.button-a.button-a-mobile-collapsed, body input.button-a.button-a-mobile-collapsed { -webkit-border-radius: 100px; -webkit-background-clip: padding-box; -moz-border-radius: 100px; -moz-background-clip: padding; border-radius: 100px; background-clip: padding-box; width: 36px; padding: 0; text-indent: -999px; overflow: hidden; position: relative; text-align: center; } body a.button-a.button-a-mobile-collapsed:before, body button.button-a.button-a-mobile-collapsed:before, body input.button-a.button-a-mobile-collapsed:before { position: absolute; left: 50%; top: 50%; margin: -9px 0 0 -9px; } body a.button-a.button-a-mobile-collapsed:before, body button.button-a.button-a-mobile-collapsed:before, body input.button-a.button-a-mobile-collapsed:before { position: absolute; left: 50%; top: 50%; margin: -9px 0 0 -9px; } } body a.button-a:active, body button.button-a:active, body input.button-a:active, body a.button-a:hover, body button.button-a:hover, body input.button-a:hover { color: #fff; background: #23adc2; } body a.button-a:focus, body button.button-a:focus, body input.button-a:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef; } body a.button-a-soft, body button.button-a-soft, body input.button-a-soft { background: #e7e7e7; } body a.button-a-soft:active, body button.button-a-soft:active, body input.button-a-soft:active, body a.button-a-soft:hover, body button.button-a-soft:hover, body input.button-a-soft:hover { color: #3e3e3e; background: #cecece; } body a.button-a-background, body button.button-a-background, body input.button-a-background, body a.navigation-b ul li a:hover, body button.navigation-b ul li a:hover, body input.navigation-b ul li a:hover { color: #fff; background: #27c0d8; } body a.button-a-background:active, body button.button-a-background:active, body input.button-a-background:active, body a.button-a-background:hover, body button.button-a-background:hover, body input.button-a-background:hover, body a.navigation-b ul li a:hover:active, body button.navigation-b ul li a:hover:active, body input.navigation-b ul li a:hover:active, body a.navigation-b ul li a:hover:hover, body button.navigation-b ul li a:hover:hover, body input.navigation-b ul li a:hover:hover { color: #fff; background: #23adc2; } .balloon-a { font-size: 12px; font-size: 0.75rem; line-height: 21.6px; line-height: 1.35rem; -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; border-bottom: 3px solid #d4d4d4; background: #ebebeb; display: inline-block; white-space: nowrap; padding: .4em 1.2em .2em; font-weight: 700; position: relative; z-index: 1000; text-transform: none; color: #575757; } .balloon-a:hover { color: #575757; } .balloon-a:before { content: ''; width: 0; height: 0; border-style: solid; position: absolute; } .balloon-a-ne:before, .balloon-a-nw:before { top: -13px; border-width: 0 9px 15.6px 9px; border-color: transparent transparent #ebebeb transparent; } .balloon-a-se:before, .balloon-a-sw:before { bottom: -13px; border-width: 15.6px 9px 0 9px; border-color: #ebebeb transparent transparent transparent; } .balloon-a-nw:before, .balloon-a-sw:before { left: 20px; } .balloon-a-ne:before, .balloon-a-se:before { right: 20px; } .icon-pos-left:before, .icon-pos-right:after { content: ''; display: inline-block; width: 18px; height: 18px; vertical-align: middle; background-repeat: no-repeat; } .icon-pos-left:before { margin-right: 10px; } .icon-pos-right:after { margin-left: 10px; } .icon-download:before, .icon-download:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAQFJREFUOBGtVDESgjAQBGfobHwE/AIa/AN/8EEWfMWGZ+gDaG2ws8BdyY13SRgGcGducre3WQ5NSJIIxnGsES3ijhhcMCdXR7ZYCqIc0SGWQE1ud7sKjRLxXHJQfWpLYwaCk6wxET/u+U2GIngd8yRViINau28bBH/YAGqvSQPhRNQHqBqj3FY0NKq27TW7qhSTDaCOhkaRAj7Hmm8S4V+c6C+gUa+crsizuWmoc70MKbWCnqPy2GvcUJxE4a/sIajRaGkU+/sf4IuISQGePR/T/QMbHEhwPLVnMWPuOCwGnWg41dwVeaN3ccHch70idIRi/6WV0WC2/zMiZm661R+2DxyEdjTuST3mAAAAAElFTkSuQmCC"); } .icon-question-mark:before, .icon-question-mark:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAUhJREFUOBGllLFOAkEQhjk0WthT2JFA7Czsqc7OxFLewEeAZ/AVbO0tTLTSBKhstTBUNkYLEoVAbD2//zILe5e9uwCT/JnZmX/+m83ebq0WsCRJYnANxmBhUKxcHGjJpiC1wQBUmTjtbLetKHTAT5WCVxe3kxEjoUmKRL6pvYEZyJt6VpOxCG3nmfyx+yJxBM7BFPg2SDlkTv2sxZqi4YnUvfgswI9FuHAkzz9EUTTRmqYeTifXsvoj/s9i57oi6ljz9kviFdyBCbgHe+rCn4C8jVXQ18rshuKOiTSIXwLkRZWQTurARJrE7wERpea7kD7BkcgB+yB3CFGlPmgqCNiXhEagSGif2qU1Ln8FW/tupK3pXhXZrWNDuCoikY/rHPMT5KFr2MAPTSM90rIrUjJIeq1WV0RTwN7+0rrtILb9M+LEbLq1H7Z/Ea3+RvBddl0AAAAASUVORK5CYII="); } .icon-close:before, .icon-close:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAUlJREFUOBGllDFuwzAMRe3Cd+jYKUCzd/XkDtm9dsoVOuUqBnqBoodwgBwiW8ZsXTIWqPu+Iia0LMAoTOBbJEV+UZTkosjIMAwN6MARXCKky9dkUsYuglagB3OimNU4O1pM1OB7jsHNK7YekeFQJZ5kj/0LcnLA+RMnlHOvDMNv5wO7BFuQkn3hq0ALjKwPVeF4BSaqpLRy0T1ZIHFz75bE2BR8dBImqmBrwRplg09QmR/9GZyBSadAHauXCZkRROKURLlHEemepJIlIyhHotzLg1/N6erTxtmmvqA8muHGIbc1rTBqrEuwnqWnGbbmmz0hwaHtvM2QhWbrXZnosvnTWWPrdCY9w7cDJtf3h9VHjy5Zq9UZ08beyJh7Aicg6W/VYvgnIjJdNn9PMIOITJWcgnV9VvcnEitY/mitNFZZ/hsxsljdv39sfybRQ4R/kU0MAAAAAElFTkSuQmCC"); } .ie8 .switch > * { vertical-align: middle; } .ie8 .switch input[type="radio"] { margin: 0 0.25em; display: inline-block; } .ie8 .switch label { margin-left: 0 !important; margin-right: 0 !important; } .ie8 .switch label[data-for="1"] { float: left; } .ie8 .switch label[data-for="2"] { float: right; } .ie8 .switch .switch-inner { display: none; } .switch { font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; font-weight: bold; background-color: #27c0d8; overflow: hidden; display: inline-block; padding: 0.75em 0.25em; color: #fff; -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; position: relative; } .switch input[type="radio"] { display: none; } .switch label { position: relative; z-index: 2; float: left; cursor: pointer; padding: 0 0.75em; } .switch label:hover { text-decoration: underline; } .switch .switch-inner { float: left; background-color: #FFF; height: 1.5em; width: 4.125em; padding: 2px; margin: 0 0.25em; -webkit-border-radius: 5.5px; -webkit-background-clip: padding-box; -moz-border-radius: 5.5px; -moz-background-clip: padding; border-radius: 5.5px; background-clip: padding-box; } .switch .switch-inner .handler { overflow: hidden; position: relative; display: block; height: 1.5em; width: 1.5em; background: #25b4cb; -webkit-border-radius: 4.5px; -webkit-background-clip: padding-box; -moz-border-radius: 4.5px; -moz-background-clip: padding; border-radius: 4.5px; background-clip: padding-box; } .switch .switch-inner .handler:before { content: ''; display: block; position: absolute; top: 0; right: 0; bottom: 3px; left: 0; background-color: #34c4da; -webkit-border-bottom-left-radius: 4.5px; -moz-border-radius-bottomleft: 4.5px; border-bottom-left-radius: 4.5px; -webkit-border-bottom-right-radius: 4.5px; -webkit-background-clip: padding-box; -moz-border-radius-bottomright: 4.5px; -moz-background-clip: padding; border-bottom-right-radius: 4.5px; background-clip: padding-box; } .switch:hover .switch-inner .handler:before { background: #45c9dd; } .switch input[data-num="2"]:checked ~ .switch-inner > .handler { margin-left: auto; } .switch input[data-num="2"]:checked ~ label[data-for="1"] { padding-right: 5.125em; margin-right: -4.375em; } .switch input[data-num="1"]:checked ~ label[data-for="2"] { padding-left: 5.125em; margin-left: -4.375em; } .toggler { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .toggler label { cursor: pointer; } .toggler [data-collapse] { display: inherit; } .toggler [data-expand] { display: none; } .toggler.collapsed [data-collapse] { display: none; } .toggler.collapsed [data-expand] { display: inherit; } .toggler-container { overflow: hidden; } .toggler-container.collapsed { height: 0; } .icon-toggler-expanded:before, .icon-toggler-collapsed:before, .icon-toggler-expanded:after, .icon-toggler-collapsed:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAByCAYAAABeOoENAAAAAXNSR0IArs4c6QAAAbxJREFUaAXtmT1KBEEQhRdFQdBEMfQEBoaGopl3MfECXsFERLyBh/AUIuwJDEUQM//eB11Dz1A1uzotGFTBY2rr58306+kNpmazP7Z98V8Kj8JrAT4xcgttXRVXwofwFYAcNdS6RuJegOBTuBUOhc0CfGLkqKHWJeMuFDwJJ0Jk5Kihlp6esW4embuNkVgTNdTS09MMEbkDj76sUUsPvZ2xIwTRATsQuBuxGsTIYdSSo7cztpggwprdyKlJ8ImZUUuM3s48ol1lXwQjwydm5hINl2bF53KMCL82d2mR2GvqnBfg1+aKPbb9p+oGtYXbT1GTFxKiZkfEyHgy7x0y0clR454zSGpDMzaA3fzV30hNln4qkAqkAqlAKpAKpAKpQCqQCqQCqUAqkAqkAqlAKpAKpAKpQCrw3xWY/GGcz++TP9U3Gx40GWdEAxabXA33NBywRCOfdzFcCztDJv12Rz7REMpmIc9qPBNWK0J3COWNxegxIrs+KHZcyHpjsZUSXPaypcLtseJFS3tT84WwUZG4S4vEZkl3wl5FYK4rdrT9R9Y1uIbbT12TFxKiZkfEyCYfWojMJv+NGNGPr99GI9DP7P9TCgAAAABJRU5ErkJggg=="); } .icon-toggler-expanded.icon-light:before, .icon-toggler-collapsed.icon-light:before, .icon-toggler-expanded.icon-light:after, .icon-toggler-collapsed.icon-light:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAByCAYAAABeOoENAAAAAXNSR0IArs4c6QAAAcVJREFUaAXtmT9KA1EQxhMlASE2SkpPkCJlStHOu3gGwRPYBAm5gYfwFBKwtrARRAh26vr7ljfx7TrLChtBcAa+zOSbPy/7vcTC6fV+04qimIArsALrBMXiJq1nUzQEc/AOmkw51QzdgUqAWyD7AEswA6MExeKUk6n2+zBInSJ7BKfuaZDKpRpcMa/UQUgTfWSd1jjEmlSTatXzpRlvJKJsacVtXrVlB72bWgjdiGwmEj8FOq1u4qapRprJVvkgXbFsZCTxomSqL4ssr0uQrY3TJ/AGjeFfVJlM8diaiCuDdlLiIfmNcP1+/wnu0hoVJ84oq7XeUhNXbE4dgPuEgU2Qh3PFbrx+Gs6E2hD/+tMJ3b+QadB2fiLZsG4/2poG3f6M5MMiDgVCgVAgFAgFQoFQIBQIBUKBUCAUCAVCgVAgFAgFQoFQIBQIBf66AiwLuv1jnAH/Zb/Go5abq/qdwvsLFhJNK583ctfg0Bnmrnwq+zVrYoDZM8E52M1yP9uvqcGmZP6O+CTl3LWYHdTm9yk4aCzilLZHe6XmAuzZEGL30ZrEpr64AUc2wDycK7a7X6P42BpzD+9fv4pIxn4tWznnwm0r/gQpiG1tFshTowAAAABJRU5ErkJggg=="); } .icon-toggler-expanded:before, .icon-toggler-expanded:after { background-position: top left; } .icon-toggler-collapsed:before, .icon-toggler-collapsed:after { background-position: bottom left; } .modal { padding: 20px; border-radius: 3px; background-color: white; max-width: 700px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 80% !important; top: 50% !important; -webkit-transform: translate(-50%, -50%) !important; -moz-transform: translate(-50%, -50%) !important; -o-transform: translate(-50%, -50%) !important; -ms-transform: translate(-50%, -50%) !important; transform: translate(-50%, -50%) !important; } .modal-close { -webkit-border-radius: 100px; -webkit-background-clip: padding-box; -moz-border-radius: 100px; -moz-background-clip: padding; border-radius: 100px; background-clip: padding-box; cursor: pointer; height: 18px; width: 18px; position: absolute; top: 10px; right: 10px; font-size: 17px; text-align: center; line-height: 19px; background: #cccccc; } main .grid-container, header .grid-container, .navigation-a > div, footer > div { max-width: 968px; } .header-a { margin-top: 30px; } .footer-a { border-top: 1px solid #d9d9d9; } .adjoined-top { background-color: #27c0d8; color: #fff; } .adjoined-top .content h1, .adjoined-top .content h2, .adjoined-top .content h3, .adjoined-top .content h4, .adjoined-top .content h5 { color: #fff; } .adjoined-top .content p { font-size: 18px; font-size: 1.125rem; line-height: 32.4px; line-height: 2.02rem; font-weight: 100; } .adjoined-top .content p a { text-decoration: none; border-bottom: 1px dotted #fff; color: inherit; } .adjoined-top .content p a:hover { color: #e6e6e6; } .adjoined-top .content button { color: #fff; } .adjoined-top .content strong { color: #fff; } .adjoined-top .content code { font-size: inherit; color: #27c0d8; } .adjoined-bottom { position: relative; } .adjoined-bottom:before { z-index: -1; content: ''; background: #27c0d8; position: absolute; top: 0; left: 0; right: 0; height: 50%; } main .grid-container, header .grid-container, .navigation-a > div, footer > div { max-width: 1052px; } main .grid-container.freed-width { max-width: none; } .switch { background: #25b4cb; float: right; overflow: visible; } .switch .balloon-a { position: absolute; top: -40px; right: 50%; margin-right: -15px; background: #FFEFC1; border-bottom-color: #DCDCA4; } .switch .balloon-a:before { border-color: #FFEFC1 transparent transparent transparent; } #toolbar .editors-container { overflow: hidden; height: 0; transition: height 200ms; } #toolbar .editors-container.active { height: auto; } #main #editor { background: #FFF; padding: 2% 4%; border: dashed 5px #27c0d8; } div.cke a.cke_button, div.cke .cke_combo_button { border-bottom: none; } div.cke a.cke_button.cke_combo_button, div.cke .cke_combo_button.cke_combo_button { border-bottom: 1px solid #a6a6a6; } #main .adjoined-top:before { height: 335px; } #toolbar .adjoined-top:before { height: 219px; } #toolbar .adjoined-top .grid-container-nested { height: 147px; } .content .grid-switch-magic { margin: 3.5em 0 0; } #info-box { padding-bottom: 0; } #info-box > div { width: 100%; text-align: right; } #info-box > div .toggler { padding-right: 0; } #info-box > div .toggler:hover { background: transparent; color: #000; } #info-box > div .toggler:hover > label { text-decoration: underline; } #info-box > div h2 { float: left; margin-top: 0; } #info-box > div#instructions-container { text-align: left; } #toolbarModifierWrapper { overflow: hidden; height: 0; opacity: 0; transition: height 200ms; } #toolbarModifierWrapper.active { height: auto; opacity: 1; } header { overflow: visible; } header div.grid-container { overflow: visible; } header .navigation-b { overflow: visible; } header .navigation-b ul { overflow: visible; } header .navigation-b a { position: relative; } header .balloon-a { position: absolute; top: 48px; left: 50%; margin-left: -35px; } @media (max-width: 1140px) { header .balloon-a { left: auto; margin-left: auto; right: 50%; margin-right: -35px; } header .balloon-a:before { left: auto; right: 22px; } } @media (max-width: 900px) { header .balloon-a { display: none; } } #toolbar .cke_toolbar { pointer-events: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: default; } .some-toolbar-active .cke_toolbar { zoom: 1; filter: alpha(opacity=50); -webkit-opacity: 0.5; -moz-opacity: 0.5; opacity: 0.5; } .cke_toolbar.active { position: relative; zoom: 1; filter: alpha(opacity=100); -webkit-opacity: 1; -moz-opacity: 1; opacity: 1; } .cke_toolbar.active:after { content: ''; display: block; position: absolute; top: 0; right: 6px; bottom: 5px; left: 0; -webkit-border-radius: 5px; -webkit-background-clip: padding-box; -moz-border-radius: 5px; -moz-background-clip: padding; border-radius: 5px; background-clip: padding-box; -webkit-box-shadow: 0px 0px 15px 3px #fff4b0; -moz-box-shadow: 0px 0px 15px 3px #fff4b0; box-shadow: 0px 0px 15px 3px #fff4b0; } .cke_toolbar.active .cke_toolgroup { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; border-color: #e3c300; } .cke_toolbar.active .cke_combo, .cke_toolbar.active .cke_toolgroup { position: relative; z-index: 2; } .cke_toolbar.active .cke_combo_button { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .unselectable { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .toolbar { padding: 5px 0; margin-bottom: 2.4em; overflow: hidden; background: #fff; } .toolbar button.button-a.cke_button { cursor: pointer; display: inline-block; padding: 4px 6px; outline: 0; border: 1px solid #a6a6a6; } .toolbar button.button-a.hidden { display: none; } .toolbar button.button-a.left { float: left; margin-right: 8px; } .toolbar button.button-a.right { float: right; margin-left: 8px; } .toolbar button.button-a .highlight { color: #ffefc1; } .configContainer.hidden, .toolbarModifier.hidden, .toolbarModifier-hints.hidden { display: none; } .toolbarModifier :focus, .toolbar button:focus, .configContainer textarea.configCode:focus { outline: none; } div.toolbarModifier { padding: 0; overflow: hidden; width: 100%; position: relative; display: table; border-collapse: collapse; } div.toolbarModifier ::-moz-focus-inner { border: 0; } div.toolbarModifier .empty { display: none; } div.toolbarModifier.empty-visible .empty { display: table-row; zoom: 1; filter: alpha(opacity=60); -webkit-opacity: 0.6; -moz-opacity: 0.6; opacity: 0.6; } div.toolbarModifier .empty > p { line-height: 31px; } div.toolbarModifier > ul { padding: 0; margin: 0; border-top: 1px solid #cccccc; width: 100%; } div.toolbarModifier > ul[data-type="table-header"] { display: table-header-group; } div.toolbarModifier > ul[data-type="table-body"] { display: table-row-group; } div.toolbarModifier > ul p { padding: 0; margin: 0; } div.toolbarModifier > ul > li { display: table-row; } div.toolbarModifier > ul > li[data-type="header"] { font-weight: bold; user-select: none; cursor: default; } div.toolbarModifier > ul > li[data-type="group"], div.toolbarModifier > ul > li[data-type="separator"] { border-bottom: 1px solid #cccccc; } div.toolbarModifier > ul > li[data-type="subgroup"] { border-top: 1px solid #eee; } div.toolbarModifier > ul > li[data-type="subgroup"]:first-child { border-top: none; } div.toolbarModifier > ul > li[data-type="group"].active, div.toolbarModifier > ul > li[data-type="group"]:hover, div.toolbarModifier > ul > li[data-type="separator"].active, div.toolbarModifier > ul > li[data-type="separator"]:hover { overflow: hidden; z-index: 2; } div.toolbarModifier > ul > li[data-type="group"].active, div.toolbarModifier > ul > li[data-type="separator"].active, div.toolbarModifier > ul > li[data-type="group"].active:hover, div.toolbarModifier > ul > li[data-type="separator"].active:hover { background: #f0fafb; } div.toolbarModifier > ul > li[data-type="group"]:hover, div.toolbarModifier > ul > li[data-type="separator"]:hover { background: #fffbe3; } div.toolbarModifier > ul > li[data-type="separator"] { background: #f5f5f5; } div.toolbarModifier > ul > li[data-type="separator"]:after { content: ''; width: 100%; } div.toolbarModifier > ul > li[data-type="separator"] > p { padding: 2px 5px; } div.toolbarModifier > ul > li > p, div.toolbarModifier > ul > li > ul { display: table-cell; vertical-align: middle; } div.toolbarModifier > ul > li p { padding-left: 5px; min-width: 200px; } div.toolbarModifier > ul > li p span { white-space: nowrap; cursor: default; } div.toolbarModifier > ul > li p span button { font-size: 12.666px; margin-right: 5px; cursor: pointer; background: #fff; -webkit-border-radius: 5px; -webkit-background-clip: padding-box; -moz-border-radius: 5px; -moz-background-clip: padding; border-radius: 5px; background-clip: padding-box; border: 1px solid #bbb; padding: 0 7px; line-height: 12px; height: 20px; } div.toolbarModifier > ul > li p span button:not(.disabled):hover, div.toolbarModifier > ul > li p span button:not(.disabled):focus { color: #fff; background-color: #454545; border-color: transparent; } div.toolbarModifier > ul > li p span button.move.disabled { cursor: default; zoom: 1; filter: alpha(opacity=20); -webkit-opacity: 0.2; -moz-opacity: 0.2; opacity: 0.2; } div.toolbarModifier > ul > li ul { border-collapse: collapse; padding: 0; width: 100%; } div.toolbarModifier > ul > li ul li { display: table-row; list-style-type: none; line-height: 1; } div.toolbarModifier > ul > li ul li[data-type="subgroup"] { border-top: 1px solid #dddddd; } div.toolbarModifier > ul > li ul li[data-type="subgroup"]:first-child { border-top: 0; } div.toolbarModifier > ul > li ul li[data-type="subgroup"] [data-type="button"] { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; padding: 0 2px; } div.toolbarModifier > ul > li ul li[data-type="subgroup"] [data-type="button"]:focus { background: rgba(0, 0, 0, 0.04); } div.toolbarModifier > ul > li ul li[data-type="subgroup"] [data-type="button"] input { vertical-align: middle; } div.toolbarModifier > ul > li ul li > p, div.toolbarModifier > ul > li ul li > ul { display: table-cell; vertical-align: middle; } div.toolbarModifier > ul > li ul li ul { padding: 0; } div.toolbarModifier > ul > li ul li ul li { padding: 0; display: inline-block; cursor: pointer; margin: 2px 5px 2px 0; } div.toolbarModifier > ul > li ul li ul li .cke_combo_text { cursor: pointer; white-space: nowrap; } div.toolbarModifier > ul > li ul li ul li .cke_toolgroup, div.toolbarModifier > ul > li ul li ul li .cke_combo_button { cursor: pointer; margin: 0; vertical-align: middle; border: 1px solid #ddd; font-size: 11.41px; font-size: 0.713rem; line-height: 20.54px; line-height: 1.28rem; } div.toolbarModifier > .codemirror-wrapper { overflow-y: auto; } div.toolbarModifier-hints { float: right; width: 350px; min-width: 150px; overflow-y: auto; margin-left: 1.5em; } div.toolbarModifier-hints h3 { font-size: 18.08px; font-size: 1.13rem; line-height: 32.54px; line-height: 2.03rem; padding: 0.36em 1.5em; background: #f5f5f5; border-bottom: 1px solid #dddddd; margin-top: 0; margin-bottom: 1.2em; } div.toolbarModifier-hints dl { margin-bottom: 1.2em; overflow: hidden; } div.toolbarModifier-hints dl .list-header { font-weight: bold; border: 0; padding-bottom: 0.6em; } div.toolbarModifier-hints dl > p { text-align: center; } div.toolbarModifier-hints dl dt { float: left; width: 9em; clear: both; text-align: right; border-top: 1px solid #dddddd; padding-left: 1.5em; padding-right: .1em; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } div.toolbarModifier-hints dl dt code { background: none; border: none; vertical-align: middle; } div.toolbarModifier-hints dl dd { margin-left: 10em; clear: right; padding-right: 1.5em; } div.toolbarModifier-hints dl dd code { line-height: 2.2em; } div.toolbarModifier-hints dl dd:after { content: '\00a0'; display: block; clear: left; float: right; height: 0; width: 0; } .toolbarModifier-hints, .configContainer textarea.configCode, .CodeMirror { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; border: 1px solid #ccc; font-size: 13.01px; font-size: 0.813rem; line-height: 23.42px; line-height: 1.46rem; } .configContainer textarea.configCode, .CodeMirror pre, .CodeMirror-linenumber { font-size: 13.01px; font-size: 0.813rem; line-height: 23.42px; line-height: 1.46rem; font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; } .CodeMirror pre { border: none; padding: 0; margin: 0; } .configContainer textarea.configCode { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; color: #575757; padding: 10px; width: 100%; min-height: 500px; margin: 0; resize: none; outline: none; -moz-tab-size: 4; tab-size: 4; white-space: pre; word-wrap: normal; overflow: auto; } .CodeMirror-hints.toolbar-modifier { padding: 0; color: #575757; font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; } .CodeMirror-hints.toolbar-modifier .CodeMirror-hint-active { color: #575757; background: #f0fafb; } .CodeMirror-hints.toolbar-modifier > li:hover { background: #fffbe3; } /* Text modifier */ #toolbarModifierWrapper { margin-bottom: 1.2em; } #toolbarModifierWrapper .invalid .CodeMirror { background: #fff8f8; border-color: red; } #toolbarModifierWrapper .CodeMirror { height: auto; padding: 0 0.6em; } .staticContainer { position: fixed; top: 0; width: 100%; z-index: 10; } .staticContainer > .grid-container { max-width: 1052px; } .staticContainer > .grid-container .inner { background: #fff; } .staticContainer > .grid-container .inner .toolbar { margin-bottom: 0; } #help { position: relative; top: -15px; left: -5px; } #help-content { display: none; } /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2dsb2JhbC9nbG9iYWwubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2NvcmUvY29yZS5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvZ3JpZC9ncmlkLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xlc3NoYXQvYnVpbGQvbGVzc2hhdC5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvaGVhZGVyLWEvaGVhZGVyLWEubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL25hdmlnYXRpb24tYS9uYXZpZ2F0aW9uLWEubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL25hdmlnYXRpb24tYi9uYXZpZ2F0aW9uLWIubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Zvb3Rlci1hL2Zvb3Rlci1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2J1dHRvbi1hL2J1dHRvbi1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9iYWxsb29uLWEvYmFsbG9vbi1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9pY29uL2ljb24ubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL3N3aXRjaC9zd2l0Y2gubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL3RvZ2dsZXIvdG9nZ2xlci5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Jhc2ljc2FtcGxlL2NvcmUubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Jhc2ljc2FtcGxlL2Fkam9pbmVkLmxlc3MiLCIuLi8uLi9zYW1wbGVzL2xlc3MvY3VzdG9tLmxlc3MiLCIuLi8uLi9zYW1wbGVzL3Rvb2xiYXJjb25maWd1cmF0b3IvbGVzcy90b29sYmFybW9kaWZpZXIubGVzcyIsIi4uLy4uL3NhbXBsZXMvdG9vbGJhcmNvbmZpZ3VyYXRvci9sZXNzL2Jhc2UubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBc0RBLFFBSGlDO0VBeUNoQztJQUNDLHdCQUFBOzs7QUMxRkY7QUFBUztBQUFPO0FBQVM7QUFBWTtBQUFRO0FBQVE7QUFBUTtBQUFRO0FBQU07QUFBTTtBQUFLO0VBQ3JGLGNBQUE7O0FBR0Q7QUFBTTtFQUNMLFNBQUE7RUFDQSxVQUFBO0VBQ0Esd0JETitCLHVDQ00vQjtFQUNBLGdCQUFBO0VBQ0EsY0FBQTs7QUNIQSxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsV0FBQTs7QUY0Q0YsUUFIaUM7RUVqQ2hDO0VBS0MsWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0VBQVosWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0VBQVosWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0lBSlosV0FBQTs7O0FBYUYsQ0FBQztFQ3FSQyw4QkFBQTtFQUNBLDJCQUFBO0VBQ0Esc0JBQUE7RURyUkQsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7O0FBSUEsQ0FEQSxxQkFDQztBQUFELGVBQUM7QUFBUSxDQURULHFCQUNVO0FBQUQsZUFBQztFQUNULFNBQVMsRUFBVDtFQUNBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGNBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTs7QUFLRCxDQURBLHFCQUNDO0FBQUQsZUFBQztFQUNBLFdBQUE7O0FBSUY7RUMyUEUsOEJBQUE7RUFDQSwyQkFBQTtFQUNBLHNCQUFBO0VEM1BELGlCQUFBO0VBQ0Esa0JBQUE7O0FBS0Msc0JBREQsRUFBQyxxQkFDQztFQUNBLGVBQUE7O0FBR0Qsc0JBTEQsRUFBQyxxQkFLQztFQUNBLGdCQUFBOztBRmpCSCxRQUhpQztFRTBCOUIsc0JBREQsRUFBQyxxQkFDQztJQUNBLGdCQUFBOztFQUdELHNCQUxELEVBQUMscUJBS0M7SUFDQSxpQkFBQTs7O0FFN0VKO0VBQ0MsaUJBQUE7RUFHQSxnQkFBQTs7QUFKRCxTQU1DO0VBQ0MsZ0JBQUE7O0FKMENGLFFBSGlDO0VBR2pDLFNJM0NDO0lBSUUsa0JBQUE7OztBQVZILFNBTUMsZUFPQztFQUNDLG1CQUFBOztBQ1ZIO0VBQ0MsWUFBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLE1BQUE7RUFDQSxVQUFBO0VBQ0EsZ0JBQUE7O0FMcUNELFFBSGlDO0VBR2pDO0lLbENFLGtCQUFBOzs7QUFYRixhQWNDO0VBQ0MsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsZ0JBQUE7O0FBakJGLGFBY0MsR0FLQztBQW5CRixhQWNDLEdBS0ssR0FBRztFQUNOLHFCQUFBOztBTHlCSCxRQUhpQztFQUdqQyxhSy9CQztJQVVFLFdBQUE7SUFDQSx1QkFBQTtJQUNBLG1CQUFBO0lBQ0EscUJBQUE7SUFDQSxXQUFBOztFQUVBLGFBaEJGLEdBZ0JHO0VBQVMsYUFoQlosR0FnQmE7SUFDVixhQUFBOzs7QUFLRCxhQXRCRixHQXFCRSxhQUNDO0VBQ0EsZ0JBQUE7O0FMUUosUUFIaUM7RUFHakMsYUsvQkMsR0FxQkUsYUFDQztJQUlDLGdCQUFBOzs7QUFJRixhQTlCRixHQXFCRSxhQVNDO0VBQ0EsaUJBQUE7O0FMQUosUUFIaUM7RUFHakMsYUsvQkMsR0FxQkUsYUFTQztJQUlDLGtCQUFBOzs7QUFNRixhQXhDRixHQXVDQyxHQUNHO0VBQ0QsaUJBQUE7O0FBdkRKLGFBY0MsR0F1Q0MsR0FLQztFTHhDRixlQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VLdUNHLGlCQUFBO0VBQ0EsV0FBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLHFCQUFBO0VBQ0EseUJBQUE7O0FBRUEsYUFyREgsR0F1Q0MsR0FLQyxFQVNFO0VBQ0EsZUFBQTtFQUNBLGNBQUE7O0FBUUoseUJBQUM7QUFBUyx5QkFBQztFQUNWLHNCQUFrQixxckJBQWxCOztBQ3BGRjtFQUNDLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTs7QU5nREQsUUFIaUM7RUFHakM7SU03Q0Usa0JBQUE7SUFDQSxnQkFBQTtJQUdBLFVBQUE7OztBQVZGLGFBYUM7RUFDQyxVQUFBO0VBQ0EsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsaUJBQUE7O0FBakJGLGFBYUMsR0FNQztBQW5CRixhQWFDLEdBTUssR0FBRztFQUNOLHFCQUFBOztBTitCSCxRQUhpQztFQUdqQyxhTXRDQztJQVdFLGNBQUE7SUFDQSxXQUFBO0lBQ0EscUJBQUE7OztBTnlCSCxRQUhpQztFQUdqQyxhTXRDQyxHQWdCQztJQUVFLGtCQUFBOzs7QUFHRCxhQXJCRixHQWdCQyxHQUtHO0VBQ0QsaUJBQUE7O0FOZ0JKLFFBSGlDO0VBR2pDLGFNdENDLEdBZ0JDLEdBS0c7SUFJQSxjQUFBOzs7QUF0Q0wsYUFhQyxHQWdCQyxHQWFDO0VId1FELDhCQUFBO0VBQ0EsMkJBQUE7RUFDQSxzQkFBQTtFR3hRRSx5QkFBQTtFQUNBLHFCQUFBO0VBQ0EsYUFBQTs7QU5LSixRQUhpQztFQUdqQyxhTXRDQyxHQWdCQyxHQWFDO0lBT0UsV0FBQTtJSHFPSCx3QkFBQTtJQUFpQyxvQ0FBQTtJQUNqQyxxQkFBQTtJQUE4Qiw2QkFBQTtJQUM5QixnQkFBQTtJQUF5Qiw0QkFBQTs7O0FJeFIzQjtFUHdCQyxlQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VPeEJBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7O0FBTkQsU1A0RUM7RUFDQyxjQUFBO0VBQ0EscUJBQUE7RUFFQSxpQ0FBQTs7QUFFQSxTQU5ELEVBTUU7RUFDQSxjQUFBOztBT25GSCxTQVFDO0VBQ0MsU0FBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7O0FDWEY7RVJ3QkMsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUXpCQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EscUJBQUE7O0FBSkQsUUFTQztFQUNDLGdCQUFBOztBQVZGLFFBYUM7QUFiRCxRQWFLO0FBYkwsUUFhUztBQWJULFFBYWM7QUFiZCxRQWEwQixTQUFRLElBQUk7QUFidEMsUUFhd0Q7RUFDdEQsaUJBQUE7O0FBZEYsUUFpQkM7QUFqQkQsUUFpQk87RUxxUUwsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RUtyUXpCLGdCQUFBOztBQW5CRixRQXNCQztBQXRCRCxRQXNCTTtBQXRCTixRQXNCWTtBQXRCWixRQXNCaUI7RUFDZixtQkFBQTs7QUF2QkYsUUEwQkM7QUExQkQsUUEwQmE7RUFDWCxnQkFBQTtFQUNBLDhCQUFBO0VBQ0EscUJBQUE7O0FBN0JGLFFBb0NDLEVSd0NBO0FRNUVELFFBb0NJLEdSd0NIO0FRNUVELFFBb0NRLEdSd0NQO0FRNUVELFFBb0NZLFdSd0NYO0FRNUVELFFBb0N3QixHUndDdkI7QVE1RUQsUUFvQzRCLEdSd0MzQjtBUTVFRCxRQW9DZ0MsR1J3Qy9CO0FRNUVELFFBb0NvQyxHUndDbkM7QVE1RUQsUUFvQ3dDLEdSd0N2QztFQUNDLGNBQUE7RUFDQSxxQkFBQTtFQUVBLGlDQUFBOztBQUVBLFFROUNELEVSd0NBLEVBTUU7QUFBRCxRUTlDRSxHUndDSCxFQU1FO0FBQUQsUVE5Q00sR1J3Q1AsRUFNRTtBQUFELFFROUNVLFdSd0NYLEVBTUU7QUFBRCxRUTlDc0IsR1J3Q3ZCLEVBTUU7QUFBRCxRUTlDMEIsR1J3QzNCLEVBTUU7QUFBRCxRUTlDOEIsR1J3Qy9CLEVBTUU7QUFBRCxRUTlDa0MsR1J3Q25DLEVBTUU7QUFBRCxRUTlDc0MsR1J3Q3ZDLEVBTUU7RUFDQSxjQUFBOztBUW5GSCxRQXdDQztBQXhDRCxRQXdDSztBQXhDTCxRQXdDUztBQXhDVCxRQXdDYTtBQXhDYixRQXdDaUI7RUFDZixXQUFBO0VBQ0EsZ0JBQUE7O0FBMUNGLFFBd0NDLEdBS0M7QUE3Q0YsUUF3Q0ssR0FLSDtBQTdDRixRQXdDUyxHQUtQO0FBN0NGLFFBd0NhLEdBS1g7QUE3Q0YsUUF3Q2lCLEdBS2Y7QUE3Q0YsUUF3Q0MsR0FLTztBQTdDUixRQXdDSyxHQUtHO0FBN0NSLFFBd0NTLEdBS0Q7QUE3Q1IsUUF3Q2EsR0FLTDtBQTdDUixRQXdDaUIsR0FLVDtFQUNMLGtCQUFBOztBQTlDSCxRQXdDQyxHQVVDLEVBQUM7QUFsREgsUUF3Q0ssR0FVSCxFQUFDO0FBbERILFFBd0NTLEdBVVAsRUFBQztBQWxESCxRQXdDYSxHQVVYLEVBQUM7QUFsREgsUUF3Q2lCLEdBVWYsRUFBQztFQUNBLGdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTs7QUFHRCxRQWpCRCxHQWlCRSxNQUNBLEVBQUM7QUFERixRQWpCRyxHQWlCRixNQUNBLEVBQUM7QUFERixRQWpCTyxHQWlCTixNQUNBLEVBQUM7QUFERixRQWpCVyxHQWlCVixNQUNBLEVBQUM7QUFERixRQWpCZSxHQWlCZCxNQUNBLEVBQUM7RUFDQSxVQUFBOztBQUlGLFFBdkJELEdBdUJFLE9MMGJVO0FLMWJYLFFBdkJHLEdBdUJGLE9MMGJVO0FLMWJYLFFBdkJPLEdBdUJOLE9MMGJVO0FLMWJYLFFBdkJXLEdBdUJWLE9MMGJVO0FLMWJYLFFBdkJlLEdBdUJkLE9MMGJVO0VBQW1COzs7O2lFQUFBOztBSzFiOUIsUUF2QkQsR0F1QkUsT0FHQTtBQUhELFFBdkJHLEdBdUJGLE9BR0E7QUFIRCxRQXZCTyxHQXVCTixPQUdBO0FBSEQsUUF2QlcsR0F1QlYsT0FHQTtBQUhELFFBdkJlLEdBdUJkLE9BR0E7RUw0REQsMERBQUE7RUFDQSx1REFBQTtFQUNBLHFEQUFBO0VBQ0Esa0RBQUE7RUs3REUsVUFBQTs7QUFwRUosUUF5RUM7QUF6RUQsUUF5RVE7QUF6RVIsUUF5RWdCLFNBQVEsSUFBSTtFTDZNMUIsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RUFtQnpCLHVEQUFBO0VBQ0Esb0RBQUE7RUFDQSwrQ0FBQTtFS2hPQSxhQUFBO0VBQ0EsY0FBQTtFQUVBLHlCQUFBO0VBQ0Esa0JBQUE7O0FBRUEsUUFWRCxNQVVFO0FBQUQsUUFWTSxPQVVMO0FBQUQsUUFWYyxTQUFRLElBQUksZ0JBVXpCO0VBQ0EscUJBQUE7RUFDQSxVQUFBO0VMc05ELHdFQUFBO0VBQ0EscUVBQUE7RUFDQSxnRUFBQTs7QUs3U0YsUUFnR0M7RUFDQyw4QkFBQTtFQUNBLGVBQUE7O0FBbEdGLFFBcUdDO0VBQ0Msa0JBQUE7RUFDQSw2QlJyRzJDLHdCUXFHM0M7RVIvRUQsZUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBOztBUTNCRCxRQTJHQztFQUNDLGtCQUFBOztBQTVHRixRQStHQztFUnZGQSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VRc0ZDLG1CQUFBOztBQWpIRixRQW9IQztFUjVGQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFUTJGQyxpQkFBQTs7QUF0SEYsUUF5SEM7RVJqR0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFUWdHQyxnQkFBQTtFQUNBLGtCQUFBOztBQTVIRixRQStIQztFUnZHQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFUXNHQyxnQkFBQTtFQUNBLGtCQUFBOztBQWxJRixRQXFJQztFUjdHQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFUTRHQyxnQkFBQTtFQUNBLGtCQUFBOztBQXhJRixRQTJJQztFQUNDLFNBQUE7RUFDQSw2QkFBQTtFQUNBLGVBQUE7O0FBSUEsUUFERCxNQUNFO0VBQ0EsYUFBQTtFQUNBLGtCQUFBOztBQUdELFFBTkQsTUFNRTtFTCtDRCwwQkFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7O0FLeE1GLFFBOEpDO0VSdElBLGVBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RVFxSUMsb0JSL0o4Qix1Q1ErSjlCO0VBQ0EsZ0JBQUE7RUwwSUEsMERBQUE7RUFDQSx1REFBQTtFQUNBLGtEQUFBOztBSzdTRixRQXlLQyxFQUNDO0VBQ0Msc0JBQUE7O0FBM0tILFFBeUtDLEVBS0M7RUFDQyxjQUFBOztBQS9LSCxRQW1MQztFQUNDLFVBQUE7RUFDQSxTQUFBO0VBRUEsV0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTs7QUF6TEYsUUE0TEM7QUE1TEQsUUE0TE07RVJwS0wsa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RVFvS0MsZ0pBQUE7O0FBL0xGLFFBNExDLElBS0M7QUFqTUYsUUE0TE0sS0FLSjtFQUNDLFNBQUE7O0FBbE1ILFFBdU1DLElBQUk7RUFDSCxlQUFBO0VBQ0EsY0FBQTs7QUF6TUYsUUE0TUM7RUFDQyxXQUFBOztBQTdNRixRQWdOQyxHQUVDO0FBbE5GLFFBZ05LLEdBRUg7QUFsTkYsUUFnTkMsR0FFSztBQWxOTixRQWdOSyxHQUVDO0VBQ0gsZ0JBQUE7O0FBbk5ILFFBZ05DLEdBTUM7QUF0TkYsUUFnTkssR0FNSDtFUjlMRCxlQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLG9CQUFBOztBUTNCRCxRQTROQyxTQUFRLElBQUk7RUFDWCxXQUFBOztBQTdORixRQWdPQyxJQUFHO0VBQ0YsdUJBQUE7RUFDQSxhQUFBO0VBQ0EscUJBQUE7OztBQUdBLFFBTkQsSUFBRyxLQU1EO0VBQ0EsU0FBUyxNQUFUO0VBQ0EsaUJBQUE7O0FDbk9ELElBREQsRUFDRTtBQUFELElBREUsT0FDRDtBQUFELElBRFUsTUFDVDtFTmlSRCwwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFSGhRMUIsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFU25CRSxZQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLG1CQUFBO0VBQ0EscUJBQUE7RUFDQSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxTQUFBO0VBQ0Esc0JBQUE7RUFJQSxhQUFBO0VBR0EsdUJBQUE7O0FBRUEsSUF2QkYsRUFDRSxTQXNCQztBQUFELElBdkJDLE9BQ0QsU0FzQkM7QUFBRCxJQXZCUyxNQUNULFNBc0JDO0VBQ0Esa0JBQUE7O0FBR0QsSUEzQkYsRUFDRSxTQTBCQztBQUFELElBM0JDLE9BQ0QsU0EwQkM7QUFBRCxJQTNCUyxNQUNULFNBMEJDO0VBQ0EsbUJBQUE7O0FBb0JELElBaERGLEVBQ0UsU0ErQ0M7QUFBRCxJQWhEQyxPQUNELFNBK0NDO0FBQUQsSUFoRFMsTUFDVCxTQStDQztFTmtPRiw0QkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx5QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixvQkFBQTtFQUF5Qiw0QkFBQTtFTW5QdkIsV0FBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTs7QUFFQSxJQXhDSCxFQUNFLFNBK0NDLGlCQVJDO0FBQUQsSUF4Q0EsT0FDRCxTQStDQyxpQkFSQztBQUFELElBeENRLE1BQ1QsU0ErQ0MsaUJBUkM7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxRQUFBO0VBQ0EscUJBQUE7O0FUR0wsUUFIaUM7RUFHakMsSVMvQ0MsRUFDRSxTQW1EQztFVExKLElTL0NJLE9BQ0QsU0FtREM7RVRMSixJUy9DWSxNQUNULFNBbURDO0lOOE5GLDRCQUFBO0lBQWlDLG9DQUFBO0lBQ2pDLHlCQUFBO0lBQThCLDZCQUFBO0lBQzlCLG9CQUFBO0lBQXlCLDRCQUFBO0lNblB2QixXQUFBO0lBQ0EsVUFBQTtJQUNBLG1CQUFBO0lBQ0EsZ0JBQUE7SUFDQSxrQkFBQTtJQUNBLGtCQUFBOztFQUVBLElBeENILEVBQ0UsU0FtREMsMEJBWkM7RUFBRCxJQXhDQSxPQUNELFNBbURDLDBCQVpDO0VBQUQsSUF4Q1EsTUFDVCxTQW1EQywwQkFaQztJQUNBLGtCQUFBO0lBQ0EsU0FBQTtJQUNBLFFBQUE7SUFDQSxxQkFBQTs7RUFKRCxJQXhDSCxFQUNFLFNBbURDLDBCQVpDO0VBQUQsSUF4Q0EsT0FDRCxTQW1EQywwQkFaQztFQUFELElBeENRLE1BQ1QsU0FtREMsMEJBWkM7SUFDQSxrQkFBQTtJQUNBLFNBQUE7SUFDQSxRQUFBO0lBQ0EscUJBQUE7OztBQWNGLElBMURGLEVBQ0UsU0F5REM7QUFBRCxJQTFEQyxPQUNELFNBeURDO0FBQUQsSUExRFMsTUFDVCxTQXlEQztBQUNELElBM0RGLEVBQ0UsU0EwREM7QUFBRCxJQTNEQyxPQUNELFNBMERDO0FBQUQsSUEzRFMsTUFDVCxTQTBEQztFQUNBLFdBQUE7RUFDQSxtQkFBQTs7QUFHRCxJQWhFRixFQUNFLFNBK0RDO0FBQUQsSUFoRUMsT0FDRCxTQStEQztBQUFELElBaEVTLE1BQ1QsU0ErREM7RUFDQSxxQkFBQTtFQUNBLFVBQUE7RU5xT0YseUVBQUE7RUFDQSxzRUFBQTtFQUNBLGlFQUFBOztBTTVOQSxJQTdFRCxFQTZFRTtBQUFELElBN0VFLE9BNkVEO0FBQUQsSUE3RVUsTUE2RVQ7RUFDQSxtQkFBQTs7QUFFQSxJQWhGRixFQTZFRSxjQUdDO0FBQUQsSUFoRkMsT0E2RUQsY0FHQztBQUFELElBaEZTLE1BNkVULGNBR0M7QUFDRCxJQWpGRixFQTZFRSxjQUlDO0FBQUQsSUFqRkMsT0E2RUQsY0FJQztBQUFELElBakZTLE1BNkVULGNBSUM7RUFDQSxjQUFBO0VBQ0EsbUJBQUE7O0FBSUYsSUF2RkQsRUF1RkU7QUFBRCxJQXZGRSxPQXVGRDtBQUFELElBdkZVLE1BdUZUO0FBQUQsSUF2RkQsRUhpREcsYUF4Q0gsR0FnQkMsR0FhQyxFQVdFO0FHc0NILElBdkZFLE9IaURBLGFBeENILEdBZ0JDLEdBYUMsRUFXRTtBR3NDSCxJQXZGVSxNSGlEUixhQXhDSCxHQWdCQyxHQWFDLEVBV0U7RUd1Q0YsV0FBQTtFQUNBLG1CQUFBOztBQUVBLElBM0ZGLEVBdUZFLG9CQUlDO0FBQUQsSUEzRkMsT0F1RkQsb0JBSUM7QUFBRCxJQTNGUyxNQXVGVCxvQkFJQztBQUNELElBNUZGLEVBdUZFLG9CQUtDO0FBQUQsSUE1RkMsT0F1RkQsb0JBS0M7QUFBRCxJQTVGUyxNQXVGVCxvQkFLQztBQURELElBM0ZGLEVIaURHLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzBDRDtBQUFELElBM0ZDLE9IaURBLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzBDRDtBQUFELElBM0ZTLE1IaURSLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzBDRDtBQUNELElBNUZGLEVIaURHLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzJDRDtBQUFELElBNUZDLE9IaURBLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzJDRDtBQUFELElBNUZTLE1IaURSLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzJDRDtFQUNBLFdBQUE7RUFDQSxtQkFBQTs7QUNoR0o7RVZzQkMsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFRzJQQywwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFT25SMUIsZ0NBQUE7RUFFQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSx3QkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0VBQ0Esb0JBQUE7RUFDQSxjQUFBOztBQUVBLFVBQUM7RUFDQSxjQUFBOztBQUdELFVBQUM7RUFDQSxTQUFTLEVBQVQ7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7O0FBTUQsYUFBQztBQUFELGFBQUM7RUFDQSxVQUFBO0VBQ0EsOEJBQUE7RUFDQSx5REFBQTs7QUFNRCxhQUFDO0FBQUQsYUFBQztFQUNBLGFBQUE7RUFDQSw4QkFBQTtFQUNBLHlEQUFBOztBQU1ELGFBQUM7QUFBRCxhQUFDO0VBQ0EsVUFBQTs7QUFNRCxhQUFDO0FBQUQsYUFBQztFQUNBLFdBQUE7O0FDdkRGLGNBQWM7QUFDZCxlQUFlO0VBQ2QsU0FBUyxFQUFUO0VBQ0EscUJBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsNEJBQUE7O0FBR0QsY0FBYztFQUNiLGtCQUFBOztBQUdELGVBQWU7RUFDZCxpQkFBQTs7QUFJQSxjQUFDO0FBQVMsY0FBQztFQUNWLHNCQUFrQiw2Y0FBbEI7O0FBS0QsbUJBQUM7QUFBUyxtQkFBQztFQUNWLHNCQUFrQiw2aUJBQWxCOztBQUtELFdBQUM7QUFBUyxXQUFDO0VBQ1Ysc0JBQWtCLDZpQkFBbEI7O0FDNUJGLElBQUssUUFFSjtFQUNDLHNCQUFBOztBQUhGLElBQUssUUFNSixNQUFLO0VBQ0osZ0JBQUE7RUFDQSxxQkFBQTs7QUFSRixJQUFLLFFBV0o7RUFDQyx5QkFBQTtFQUNBLDBCQUFBOztBQUVBLElBZkcsUUFXSixNQUlFO0VBQ0EsV0FBQTs7QUFHRCxJQW5CRyxRQVdKLE1BUUU7RUFDQSxZQUFBOztBQXBCSCxJQUFLLFFBd0JKO0VBQ0MsYUFBQTs7QUFJRjtFWlpDLGVBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RVlXQSxpQkFBQTtFQUNBLHlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFVDJPQywwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFUzNPMUIsa0JBQUE7O0FBVEQsT0FXQyxNQUFLO0VBQ0osYUFBQTs7QUFaRixPQWVDO0VBQ0Msa0JBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTs7QUFFQSxPQVBELE1BT0U7RUFDQSwwQkFBQTs7QUF2QkgsT0EyQkM7RUFDQyxXQUFBO0VBQ0Esc0JBQUE7RUFDQSxhQUFBO0VBQ0EsY0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFVGlOQSw0QkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx5QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixvQkFBQTtFQUF5Qiw0QkFBQTs7QVNwUDNCLE9BMkJDLGNBU0M7RUFDQyxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsY0FBQTtFQUNBLGFBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RVR3TUQsNEJBQUE7RUFBaUMsb0NBQUE7RUFDakMseUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsb0JBQUE7RUFBeUIsNEJBQUE7O0FTdk14QixPQWxCRixjQVNDLFNBU0U7RUFDQSxTQUFTLEVBQVQ7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsUUFBQTtFQUNBLFdBQUE7RUFDQSxPQUFBO0VBRUEseUJBQUE7RVRzS0Ysd0NBQUE7RUFDQSxvQ0FBQTtFQUNBLGdDQUFBO0VBS0EseUNBQUE7RUFBOEMsb0NBQUE7RUFDOUMscUNBQUE7RUFBMEMsNkJBQUE7RUFDMUMsaUNBQUE7RUFBc0MsNEJBQUE7O0FTdkt2QyxPQUFDLE1BQ0EsY0FBYyxTQUFRO0VBQ3JCLG1CQUFBOztBQWhFSCxPQW9FQyxNQUFLLGNBQWdCLFFBRXBCLGdCQUFnQjtFQUNmLGlCQUFBOztBQXZFSCxPQW9FQyxNQUFLLGNBQWdCLFFBU3BCLFFBQU87RUFDTixzQkFBQTtFQUNBLHNCQUFBOztBQS9FSCxPQW1GQyxNQUFLLGNBQWdCLFFBQVMsUUFBTztFQUNwQyxxQkFBQTtFQUNBLHFCQUFBOztBQ3pIRjtFVmszQkUseUJBQUE7RUFDQSxzQkFBQTtFQUNBLHFCQUFBO0VBQ0EsaUJBQUE7O0FVcjNCRixRQUdDO0VBQ0MsZUFBQTs7QUFKRixRQU1DO0VBQ0MsZ0JBQUE7O0FBUEYsUUFVQztFQUNDLGFBQUE7O0FBR0QsUUFBQyxVQUNBO0VBQ0MsYUFBQTs7QUFGRixRQUFDLFVBS0E7RUFDQyxnQkFBQTs7QUFLSDtFQUNDLGdCQUFBOztBQUVBLGtCQUFDO0VBQ0EsU0FBQTs7QUFNRCxzQkFBQztBQUFELHVCQUFDO0FBQVMsc0JBQUM7QUFBRCx1QkFBQztFQUNWLHNCQUFrQix5c0JBQWxCOztBQUlBLHNCQURBLFdBQ0M7QUFBRCx1QkFEQSxXQUNDO0FBQVMsc0JBRFYsV0FDVztBQUFELHVCQURWLFdBQ1c7RUFDVixzQkFBa0IscXRCQUFsQjs7QUFNRixzQkFBQztBQUNELHNCQUFDO0VBQ0EsNkJBQUE7O0FBS0QsdUJBQUM7QUFDRCx1QkFBQztFQUNBLGdDQUFBOztBQ3RERjtFQUNDLGFBQUE7RUFDQSxrQkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0JBQUE7RVg0U0MsOEJBQUE7RUFDQSwyQkFBQTtFQUNBLHNCQUFBO0VXelNELHFCQUFBO0VBQ0EsbUJBQUE7RVhndkJDLHdDQUFBO0VBQ0EscUNBQUE7RUFDQSxtQ0FBQTtFQUNBLG9DQUFBO0VBQ0EsZ0NBQUE7O0FXanZCRCxNQUFDO0VYdVFBLDRCQUFBO0VBQWlDLG9DQUFBO0VBQ2pDLHlCQUFBO0VBQThCLDZCQUFBO0VBQzlCLG9CQUFBO0VBQXlCLDRCQUFBO0VXdlF6QixlQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTs7QUN6QkYsSUFBSztBQUNMLE1BQU87QUFDUCxhQUFjO0FBQ2QsTUFBTztFQUNOLGdCQUFBOztBQUlEO0VBQ0MsZ0JBQUE7O0FBR0Q7RUFDQyw2QkFBQTs7QUNYQSxTQUFDO0VBQ0EseUJBQUE7RUFDQSxXQUFBOztBQUZELFNBQUMsSUFJQSxTQUNDO0FBTEYsU0FBQyxJQUlBLFNBQ0s7QUFMTixTQUFDLElBSUEsU0FDUztBQUxWLFNBQUMsSUFJQSxTQUNhO0FBTGQsU0FBQyxJQUlBLFNBQ2lCO0VBQ2YsV0FBQTs7QUFOSCxTQUFDLElBSUEsU0FLQztFaEJZRixlQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VnQmJHLGdCQUFBOztBQVhILFNBQUMsSUFJQSxTQUtDLEVBSUM7RUFDQyxxQkFBQTtFQUNBLDhCQUFBO0VBQ0EsY0FBQTs7QUFFQSxTQWxCSCxJQUlBLFNBS0MsRUFJQyxFQUtFO0VBQ0EsY0FBQTs7QUFuQkwsU0FBQyxJQUlBLFNBb0JDO0VBQ0MsV0FBQTs7QUF6QkgsU0FBQyxJQUlBLFNBd0JDO0VBQ0MsV0FBQTs7QUE3QkgsU0FBQyxJQUlBLFNBNEJDO0VBQ0Msa0JBQUE7RUFDQSxjQUFBOztBQUtILFNBQUM7RUFDQSxrQkFBQTs7QUFFQSxTQUhBLE9BR0M7RUFDQSxXQUFBO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFdBQUE7O0FDeERILElBQUs7QUFDTCxNQUFPO0FBQ1AsYUFBYztBQUNkLE1BQU87RUFDTixpQkFBQTs7QUFHRCxJQUFLLGdCQUFlO0VBQ25CLGVBQUE7O0FBR0Q7RUFDQyxtQkFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTs7QUFIRCxPQU1DO0VBRUMsa0JBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtFQUNBLG1CQUFBO0VBR0EsbUJBQUE7RUFDQSw0QkFBQTs7QUFFQSxPQVhELFdBV0U7RUFDQSx5REFBQTs7QUFLSCxRQUFTO0VBQ1IsZ0JBQUE7RUFDQSxTQUFBO0VBQ0Esd0JBQUE7O0FBRUEsUUFMUSxtQkFLUDtFQUNBLFlBQUE7O0FBS0YsS0FBTTtFQUNMLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLDBCQUFBOztBQUlELEdBQUcsSUFBSyxFQUFDO0FBQ1QsR0FBRyxJQUFLO0VBQ1AsbUJBQUE7O0FBRUEsR0FKRSxJQUFLLEVBQUMsV0FJUDtBQUFELEdBSEUsSUFBSyxrQkFHTjtFQUNBLGdDQUFBOztBQUlGLEtBQU0sY0FBYTtFQUNsQixhQUFBOztBQUlBLFFBRFEsY0FDUDtFQUNBLGFBQUE7O0FBRkYsUUFBUyxjQUtSO0VBQ0MsYUFBQTs7QUFJRixRQUNDO0VBQ0MsaUJBQUE7O0FBSUY7RUFDQyxpQkFBQTs7QUFERCxTQUdDO0VBQ0MsV0FBQTtFQUNBLGlCQUFBOztBQUxGLFNBR0MsTUFJQztFQUNDLGdCQUFBOztBQUVBLFNBUEYsTUFJQyxTQUdFO0VBQ0EsdUJBQUE7RUFDQSxXQUFBOztBQUZELFNBUEYsTUFJQyxTQUdFLE1BSUE7RUFDQywwQkFBQTs7QUFmTCxTQUdDLE1BaUJDO0VBQ0MsV0FBQTtFQUNBLGFBQUE7O0FBR0QsU0F0QkQsTUFzQkU7RUFDQSxnQkFBQTs7QUFLSDtFQUNDLGdCQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSx3QkFBQTs7QUFFQSx1QkFBQztFQUNBLFlBQUE7RUFDQSxVQUFBOztBQUtGO0VBQ0MsaUJBQUE7O0FBREQsTUFHQyxJQUFHO0VBQ0YsaUJBQUE7O0FBSkYsTUFPQztFQUNDLGlCQUFBOztBQVJGLE1BT0MsY0FHQztFQUNDLGlCQUFBOztBQVhILE1BT0MsY0FPQztFQUVDLGtCQUFBOztBQWhCSCxNQW9CQztFQUNDLGtCQUFBO0VBQ0EsU0FBQTtFQUVBLFNBQUE7RUFDQSxrQkFBQTs7QWpCaEdGLFFBSGlDO0VBR2pDLE1pQjJGQztJQVVFLFVBQUE7SUFDQSxpQkFBQTtJQUVBLFVBQUE7SUFDQSxtQkFBQTs7RUFFQSxNQWhCRixXQWdCRztJQUNBLFVBQUE7SUFDQSxXQUFBOzs7QWpCN0dKLFFBSGlDO0VBR2pDLE1pQjJGQztJQXdCRSxhQUFBOzs7QUN4SkgsUUFBUztFQUNSLG9CQUFBO0VmbTJCQyx5QkFBQTtFQUNBLHNCQUFBO0VBQ0EscUJBQUE7RUFDQSxpQkFBQTtFZXAyQkQsZUFBQTs7QUFJRCxvQkFBcUI7RWY2ZWxCLE9BQUE7RUFBUyx5QkFBQTtFQUNWLG9CQUFBO0VBQ0EsaUJBQUE7RUFDQSxZQUFBOztBZTVlRixZQUFZO0VBQ1gsa0JBQUE7RWZ3ZUUsT0FBQTtFQUFTLDBCQUFBO0VBQ1Ysa0JBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTs7QWV0ZUQsWUFOVyxPQU1WO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsY0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsT0FBQTtFZmdQQSwwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFQW1CekIsNENBQUE7RUFDQSx5Q0FBQTtFQUNBLG9DQUFBOztBZXBSRixZQUFZLE9Ba0JYO0VmZ1FDLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxnQkFBQTtFZWhRQSxxQkFBQTs7QUFwQkYsWUFBWSxPQXVCWDtBQXZCRCxZQUFZLE9Bd0JYO0VBQ0Msa0JBQUE7RUFDQSxVQUFBOztBQTFCRixZQUFZLE9BNkJYO0VmcVBDLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxnQkFBQTs7QWVsUEY7RWZ1ekJFLHlCQUFBO0VBQ0Esc0JBQUE7RUFDQSxxQkFBQTtFQUNBLGlCQUFBOztBZXZ6QkY7RUFDQyxjQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBOztBQUdDLFFBREQsT0FBTSxTQUNKO0VBQ0EsZUFBQTtFQUVBLHFCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxVQUFBO0VBQ0EseUJBQUE7O0FBR0QsUUFWRCxPQUFNLFNBVUo7RUFDQSxhQUFBOztBQUdELFFBZEQsT0FBTSxTQWNKO0VBQ0EsV0FBQTtFQUNBLGlCQUFBOztBQUdELFFBbkJELE9BQU0sU0FtQko7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7O0FBM0JILFFBTUMsT0FBTSxTQXdCTDtFQUNDLGNBQUE7O0FBTUgsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixzQkFBc0I7RUFDckIsYUFBQTs7QUFHRCxnQkFBaUI7QUFDakIsUUFBUyxPQUFNO0FBQ2YsZ0JBQWlCLFNBQVEsV0FBVztFQUNuQyxhQUFBOztBQUdELEdBQUc7RUFDRixVQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBO0VBQ0EseUJBQUE7O0FBTkQsR0FBRyxnQkFRRjtFQUNDLFNBQUE7O0FBVEYsR0FBRyxnQkFZRjtFQUNDLGFBQUE7O0FBR0QsR0FoQkUsZ0JBZ0JELGNBQWU7RUFDZixrQkFBQTtFZmtZQyxPQUFBO0VBQVMseUJBQUE7RUFDVixvQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTs7QWV0WkYsR0FBRyxnQkF1QkYsT0FBTztFQUNOLGlCQUFBOztBQUlELEdBNUJFLGdCQTRCQTtFQUNELFVBQUE7RUFDQSxTQUFBO0VBQ0EsNkJBQUE7RUFDQSxXQUFBOztBQUVBLEdBbENDLGdCQTRCQSxLQU1BO0VBQ0EsMkJBQUE7O0FBR0QsR0F0Q0MsZ0JBNEJBLEtBVUE7RUFDQSx3QkFBQTs7QUFYRixHQTVCRSxnQkE0QkEsS0FlRDtFQUNDLFVBQUE7RUFDQSxTQUFBOztBQUlELEdBakRDLGdCQTRCQSxLQXFCQztFQUNELGtCQUFBOztBQUVBLEdBcERBLGdCQTRCQSxLQXFCQyxLQUdBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7O0FBR0QsR0ExREEsZ0JBNEJBLEtBcUJDLEtBU0E7QUFDRCxHQTNEQSxnQkE0QkEsS0FxQkMsS0FVQTtFQUNBLGdDQUFBOztBQUdELEdBL0RBLGdCQTRCQSxLQXFCQyxLQWNBO0VBQ0EsMEJBQUE7O0FBRUEsR0FsRUQsZ0JBNEJBLEtBcUJDLEtBY0Esc0JBR0M7RUFDQSxnQkFBQTs7QUFJRixHQXZFQSxnQkE0QkEsS0FxQkMsS0FzQkEsbUJBQW1CO0FBQ3BCLEdBeEVBLGdCQTRCQSxLQXFCQyxLQXVCQSxtQkFBbUI7QUFDcEIsR0F6RUEsZ0JBNEJBLEtBcUJDLEtBd0JBLHVCQUF1QjtBQUN4QixHQTFFQSxnQkE0QkEsS0FxQkMsS0F5QkEsdUJBQXVCO0VBQ3ZCLGdCQUFBO0VBQ0EsVUFBQTs7QUFHRCxHQS9FQSxnQkE0QkEsS0FxQkMsS0E4QkEsbUJBQW1CO0FBQ3BCLEdBaEZBLGdCQTRCQSxLQXFCQyxLQStCQSx1QkFBdUI7QUFDeEIsR0FqRkEsZ0JBNEJBLEtBcUJDLEtBZ0NBLG1CQUFtQixPQUFPO0FBQzNCLEdBbEZBLGdCQTRCQSxLQXFCQyxLQWlDQSx1QkFBdUIsT0FBTztFQUM5QixtQkFBQTs7QUFHRCxHQXRGQSxnQkE0QkEsS0FxQkMsS0FxQ0EsbUJBQW1CO0FBQ3BCLEdBdkZBLGdCQTRCQSxLQXFCQyxLQXNDQSx1QkFBdUI7RUFDdkIsbUJBQUE7O0FBR0QsR0EzRkEsZ0JBNEJBLEtBcUJDLEtBMENBO0VBTUEsbUJBQUE7O0FBTEEsR0E1RkQsZ0JBNEJBLEtBcUJDLEtBMENBLHVCQUNDO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsV0FBQTs7QUFLRCxHQW5HRCxnQkE0QkEsS0FxQkMsS0EwQ0EsdUJBUUU7RUFDRCxnQkFBQTs7QUFJRixHQXhHQSxnQkE0QkEsS0FxQkMsS0F1REM7QUFBSyxHQXhHUCxnQkE0QkEsS0FxQkMsS0F1RFE7RUFDUixtQkFBQTtFQUNBLHNCQUFBOztBQXpERixHQWpEQyxnQkE0QkEsS0FxQkMsS0E2REQ7RUFDQyxpQkFBQTtFQUNBLGdCQUFBOztBQS9ERixHQWpEQyxnQkE0QkEsS0FxQkMsS0E2REQsRUFJQztFQUNDLG1CQUFBO0VBQ0EsZUFBQTs7QUFuRUgsR0FqREMsZ0JBNEJBLEtBcUJDLEtBNkRELEVBSUMsS0FJQztFQUNDLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RWY2Q0osMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RWU3Q3JCLHNCQUFBO0VBQ0EsY0FBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTs7QUFHQyxHQWxJSixnQkE0QkEsS0FxQkMsS0E2REQsRUFJQyxLQUlDLE9BV0UsSUFBSSxXQUNIO0FBQ0QsR0FuSUosZ0JBNEJBLEtBcUJDLEtBNkRELEVBSUMsS0FJQyxPQVdFLElBQUksV0FFSDtFQUNBLFdBQUE7RUFDQSx5QkFBQTtFQUNBLHlCQUFBOztBQUlGLEdBMUlILGdCQTRCQSxLQXFCQyxLQTZERCxFQUlDLEtBSUMsT0FvQkUsS0FBSztFQUNMLGVBQUE7RWZ3UUosT0FBQTtFQUFTLHlCQUFBO0VBQ1Ysb0JBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7O0FlcldBLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRDtFQUNDLHlCQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7O0FBckdGLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DO0VBQ0Msa0JBQUE7RUFDQSxxQkFBQTtFQUdBLGNBQUE7O0FBRUEsR0FoS0YsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FPRTtFQUNBLDZCQUFBOztBQUVBLEdBbktILGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBT0Usc0JBR0M7RUFDQSxhQUFBOztBQUpGLEdBaEtGLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBT0Usc0JBT0E7RWZBSiwwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFZUFwQixjQUFBOztBQUVBLEdBM0tKLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBT0Usc0JBT0EscUJBSUU7RUFDQSwrQkFBQTs7QUFaSCxHQWhLRixnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQU9FLHNCQU9BLHFCQVFDO0VBQ0Msc0JBQUE7O0FBS0gsR0FyTEYsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0E0Qkc7QUFBSyxHQXJMVCxnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQTRCVTtFQUNSLG1CQUFBO0VBQ0Esc0JBQUE7O0FBdElKLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBa0NDO0VBQ0MsVUFBQTs7QUEzSUosR0FqREMsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FrQ0MsR0FJQztFQUNDLFVBQUE7RUFDQSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxxQkFBQTs7QUFsSkwsR0FqREMsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FrQ0MsR0FJQyxHQU9DO0VBQ0MsZUFBQTtFQUNBLG1CQUFBOztBQXZKTixHQWpEQyxnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQWtDQyxHQUlDLEdBWUM7QUExSkwsR0FqREMsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FrQ0MsR0FJQyxHQWFDO0VBQ0MsZUFBQTtFQUNBLFNBQUE7RUFDQSxzQkFBQTtFQUNBLHNCQUFBO0VDbFNQLGtCQUFBO0VBQ0EsbUJBQUE7RUFFQSxvQkFBQTtFQUNBLG9CQUFBOztBRHdTQSxHQTFORSxnQkEwTkE7RUFDRCxnQkFBQTs7QUFJRCxHQS9ORSxnQkErTkQ7RUFDQSxZQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTs7QUFMRCxHQS9ORSxnQkErTkQsTUFPQTtFQ3hURCxrQkFBQTtFQUNBLGtCQUFBO0VBRUEsb0JBQUE7RUFDQSxvQkFBQTtFRHNURSxxQkFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0NBQUE7RUFDQSxhQUFBO0VBQ0Esb0JBQUE7O0FBYkYsR0EvTkUsZ0JBK05ELE1BZ0JBO0VBRUMsb0JBQUE7RUFDQSxnQkFBQTs7QUFuQkYsR0EvTkUsZ0JBK05ELE1BZ0JBLEdBS0M7RUFDQyxpQkFBQTtFQUNBLFNBQUE7RUFDQSxxQkFBQTs7QUFHRCxHQTFQQSxnQkErTkQsTUFnQkEsR0FXRztFQUNELGtCQUFBOztBQTVCSCxHQS9ORSxnQkErTkQsTUFnQkEsR0FlQztFQUNDLFdBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsNkJBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0VmbEVGLDhCQUFBO0VBQ0EsMkJBQUE7RUFDQSxzQkFBQTs7QWUwQkQsR0EvTkUsZ0JBK05ELE1BZ0JBLEdBZUMsR0FVQztFQUNDLGdCQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBOztBQTVDSixHQS9ORSxnQkErTkQsTUFnQkEsR0FnQ0M7RUFDQyxpQkFBQTtFQUNBLFlBQUE7RUFDQSxvQkFBQTs7QUFuREgsR0EvTkUsZ0JBK05ELE1BZ0JBLEdBZ0NDLEdBS0M7RUFDQyxrQkFBQTs7QUFHRCxHQXhSRCxnQkErTkQsTUFnQkEsR0FnQ0MsR0FTRTtFQUNBLFNBQVMsT0FBVDtFQUNBLGNBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLFNBQUE7RUFDQSxRQUFBOztBQU9MO0FBQ0EsZ0JBQWlCLFNBQVE7QUFDekI7RWZoSUUsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RWVnSTFCLHNCQUFBO0VDM1hBLGtCQUFBO0VBQ0EsbUJBQUE7RUFFQSxvQkFBQTtFQUNBLG9CQUFBOztBRDJYRCxnQkFBaUIsU0FBUTtBQUN6QixXQUFZO0FBQ1o7RUNqWUMsa0JBQUE7RUFDQSxtQkFBQTtFQUVBLG9CQUFBO0VBQ0Esb0JBQUE7RUQrWEEsZ0pBQUE7O0FBR0QsV0FBWTtFQUNYLFlBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTs7QUFHRCxnQkFBaUIsU0FBUTtFZnZIdkIsOEJBQUE7RUFDQSwyQkFBQTtFQUNBLHNCQUFBO0VldUhELGNBQUE7RUFDQSxhQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsU0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGNBQUE7O0FBR0QsaUJBQWlCO0VBQ2hCLFVBQUE7RUFDQSxjQUFBO0VDOVpBLGVBQUE7RUFDQSxtQkFBQTtFQUVBLG1CQUFBO0VBQ0Esb0JBQUE7RURrYUEsZ0pBQUE7O0FBVkQsaUJBQWlCLGlCQUloQjtFQUNDLGNBQUE7RUFDQSxtQkFBQTs7QUFNRCxpQkFaZ0IsaUJBWWQsS0FBSTtFQUNMLG1CQUFBOzs7QUFLRjtFQUNDLG9CQUFBOztBQURELHVCQUdDLFNBQVM7RUFDUixtQkFBQTtFQUNBLGlCQUFBOztBQUxGLHVCQVFDO0VBRUMsWUFBQTtFQUdBLGdCQUFBOztBQUlGO0VBQ0MsZUFBQTtFQUNBLE1BQUE7RUFDQSxXQUFBO0VBQ0EsV0FBQTs7QUFKRCxnQkFNQztFQUNDLGlCQUFBOztBQVBGLGdCQU1DLGtCQUdDO0VBQ0MsZ0JBQUE7O0FBVkgsZ0JBTUMsa0JBR0MsT0FHQztFQUNDLGdCQUFBOztBQU9KO0VBQ0Msa0JBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTs7QUFFQSxLQUFDO0VBQ0EsYUFBQSJ9 */rt-4.4.4/devel/third-party/ckeditor-src/samples/less/0000755000175000017500000000000014006075351020642 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/samples/less/custom.less0000644000175000017500000000501314006075351023043 0ustar domdommain .grid-container, header .grid-container, .navigation-a > div, footer > div { max-width: 1044px + 2 * @grid-gutter-width; } main .grid-container.freed-width { max-width: none; } .switch { background: darken( @global-link-font-color, 3% ); float: right; overflow: visible; // Switch balloon tooltip. .balloon-a { // Custom position relative to the switch. position: absolute; top: -40px; right: 50%; margin-right: -15px; // Customize balloon colors. background: #FFEFC1; border-bottom-color: #DCDCA4; &:before { border-color: #FFEFC1 transparent transparent transparent; } } } #toolbar .editors-container { overflow: hidden; height: 0; transition: height 200ms; &.active { height: auto; } } // Style the inline editor which is enabled when wysiwygarea is not available. #main #editor { background: #FFF; padding: @grid-gutter-width / 2 @grid-gutter-width; border: dashed 5px @global-link-font-color; } // There were some inherited styles for links. div.cke a.cke_button, div.cke .cke_combo_button { border-bottom: none; &.cke_combo_button { border-bottom: 1px solid #a6a6a6; } } #main .adjoined-top:before { height: 335px; } #toolbar .adjoined-top { &:before { height: 219px; } .grid-container-nested { height: 147px; } } .content { .grid-switch-magic { margin: 3.5em 0 0; } } #info-box { padding-bottom: 0; > div { width: 100%; text-align: right; .toggler { padding-right: 0; &:hover { background: transparent; color: #000; > label { text-decoration: underline; } } } h2 { float: left; margin-top: 0; } &#instructions-container { text-align: left; } } } #toolbarModifierWrapper { overflow: hidden; height: 0; opacity: 0; transition: height 200ms; &.active { height: auto; opacity: 1; } } // Styles that allow .balloon-a to be absolutely positioned. header { overflow: visible; div.grid-container { overflow: visible; } .navigation-b { overflow: visible; ul { overflow: visible; } a { // Tip is relative to the anchor. position: relative; } } .balloon-a { position: absolute; top: 48px; left: 50%; margin-left: -35px; // Switch the balloon arrow and position on narrow screen // to make it fully visible. .global-is-max-width( 1140px, { left: auto; margin-left: auto; right: 50%; margin-right: -35px; &:before { left: auto; right: 22px; } } ); // Don't display the balloon on mobile. .global-is-mobile( { display: none; } ); } }rt-4.4.4/devel/third-party/ckeditor-src/samples/less/samples.less0000644000175000017500000000230314006075351023174 0ustar domdom// Path to samples-framework components. @components-dir: "../../node_modules/cksource-samples-framework/components"; // Good 'ol Lesshat. @import "../../node_modules/cksource-samples-framework/node_modules/lesshat/build/lesshat"; // Generic components of the page. @import "@{components-dir}/global/global"; @import "@{components-dir}/core/core"; @import "@{components-dir}/grid/grid"; @import "@{components-dir}/header-a/header-a"; @import "@{components-dir}/navigation-a/navigation-a"; @import "@{components-dir}/navigation-b/navigation-b"; @import "@{components-dir}/footer-a/footer-a"; @import "@{components-dir}/content/content"; @import "@{components-dir}/button-a/button-a"; @import "@{components-dir}/balloon-a/balloon-a"; @import "@{components-dir}/icon/icon"; @import "@{components-dir}/switch/switch"; @import "@{components-dir}/toggler/toggler"; @import "@{components-dir}/modal/modal"; // Some shared application-specific components and extensions. @import "@{components-dir}/basicsample/core"; @import "@{components-dir}/basicsample/adjoined"; // Custom components that do not belong to samples-framework. @import "custom"; // Toolbar modifier. @import "../toolbarconfigurator/less/toolbarmodifier";rt-4.4.4/devel/third-party/ckeditor-src/.mailmap0000644000175000017500000000367313776355015017675 0ustar domdomAleksander Nowodzinski Alfonso Martínez de Lizarrondo Alfonso Martínez de Lizarrondo Anna Anna Tomanek Artur Formella Brooks Guo CKSource Robot Frederico Knabben fredck Frederico Knabben Garry Yao Garry Yao Jakub Swiderski Jakub Swiderski Maciej Guzek Maciej Guzek mani Marek Lewandowski Marek Lewandowski Martin Kou Nguyen Ming paho Piotr Jasiun Piotr Jasiun Piotrek Reinmar Koszuliński Piotrek Reinmar Koszuliński Ryunosuke Sato Saare Sebastian Stefanov Tobiasz Cudnik Wiktor Walc rt-4.4.4/devel/third-party/ckeditor-src/ckeditor.js0000644000175000017500000000622414006075350020375 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ // Compressed version of core/ckeditor_base.js. See original for instructions. /* jshint ignore:start */ /* jscs:disable */ window.CKEDITOR||(window.CKEDITOR=function(){var e=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,b={timestamp:"",version:"%VERSION%",revision:"%REV%",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:e},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var b=document.getElementsByTagName("script"),c=0;c' ); } } /** * The skin to load for all created instances, it may be the name of the skin * folder inside the editor installation path, or the name and the path separated * by a comma. * * **Note:** This is a global configuration that applies to all instances. * * CKEDITOR.skinName = 'moono'; * * CKEDITOR.skinName = 'myskin,/customstuff/myskin/'; * * @cfg {String} [skinName='moono'] * @member CKEDITOR */ CKEDITOR.skinName = 'moono'; rt-4.4.4/devel/third-party/ckeditor-src/package.json0000644000175000017500000000202614006075350020515 0ustar domdom{ "name": "ckeditor-dev", "version": "4.5.3", "description": "The development version of CKEditor - JavaScript WYSIWYG web text editor.", "devDependencies": { "benderjs-coverage": "~0.2.0", "benderjs": "~0.3.0", "benderjs-jquery": "~0.3.0", "benderjs-sinon": "~0.2.1", "benderjs-yui": "~0.2.4", "grunt": "~0.4.5", "grunt-contrib-imagemin": "~0.9.0", "grunt-jscs": "~2.0.0", "grunt-contrib-jshint": "~0.11.0", "grunt-contrib-less": "~1.0.0", "grunt-contrib-watch": "~0.6.1", "grunt-contrib-concat": "~0.5.1", "grunt-jsduck": "~1.0.1", "grunt-githooks": "~0.3.1", "less": "~2.5.0", "shelljs": "~0.5.0", "cksource-samples-framework": "~1.0.0" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "CKSource (http://cksource.com/)", "license": "For licensing, see LICENSE.md or http://ckeditor.com/license.", "bugs": "http://dev.ckeditor.com", "homepage": "http://ckeditor.com", "repository": { "type": "git", "url": "https://github.com/ckeditor/ckeditor-dev.git" } } rt-4.4.4/devel/third-party/ckeditor-src/.editorconfig0000644000175000017500000000033313776355015020717 0ustar domdom# Configurations to normalize the IDE behavior. # http://editorconfig.org/ root = true [*] indent_style = tab tab_width = 4 charset = utf-8 end_of_line = lf trim_trailing_whitespace = true insert_final_newline = true rt-4.4.4/devel/third-party/ckeditor-src/contents.css0000644000175000017500000000345314006075350020603 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ body { /* Font */ font-family: sans-serif, Arial, Verdana, "Trebuchet MS"; font-size: 12px; /* Text color */ color: #333; /* Remove the background color to make it transparent */ background-color: #fff; margin: 20px; } .cke_editable { font-size: 13px; line-height: 1.6; } blockquote { font-style: italic; font-family: Georgia, Times, "Times New Roman", serif; padding: 2px 0; border-style: solid; border-color: #ccc; border-width: 0; } .cke_contents_ltr blockquote { padding-left: 20px; padding-right: 8px; border-left-width: 5px; } .cke_contents_rtl blockquote { padding-left: 8px; padding-right: 20px; border-right-width: 5px; } a { color: #0782C1; } ol,ul,dl { /* IE7: reset rtl list margin. (#7334) */ *margin-right: 0px; /* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/ padding: 0 40px; } h1,h2,h3,h4,h5,h6 { font-weight: normal; line-height: 1.2; } hr { border: 0px; border-top: 1px solid #ccc; } img.right { border: 1px solid #ccc; float: right; margin-left: 15px; padding: 5px; } img.left { border: 1px solid #ccc; float: left; margin-right: 15px; padding: 5px; } pre { white-space: pre-wrap; /* CSS 2.1 */ word-wrap: break-word; /* IE7 */ -moz-tab-size: 4; tab-size: 4; } .marker { background-color: Yellow; } span[lang] { font-style: italic; } figure { text-align: center; border: solid 1px #ccc; border-radius: 2px; background: rgba(0,0,0,0.05); padding: 10px; margin: 10px 20px; display: inline-block; } figure > figcaption { text-align: center; display: block; /* For IE8 */ } a > img { padding: 1px; margin: 1px; border: none; outline: 1px solid #0782C1; } rt-4.4.4/devel/third-party/ckeditor-src/README.md0000644000175000017500000000613114006075350017507 0ustar domdom# CKEditor 4 - The best browser-based WYSIWYG editor [![devDependency Status](https://david-dm.org/ckeditor/ckeditor-dev/dev-status.svg)](https://david-dm.org/ckeditor/ckeditor-dev#info=devDependencies) This repository contains the development version of CKEditor. **Attention:** The code in this repository should be used locally and for development purposes only. We do not recommend using it in production environment because the user experience will be very limited. For that purpose, you should either build the editor (see below) or use an official release available on the [CKEditor website](http://ckeditor.com). ## Code Installation There is no special installation procedure to install the development code. Simply clone it to any local directory and you are set. ## Available Branches This repository contains the following branches: - **master** – Development of the upcoming minor release. - **major** – Development of the upcoming major release. - **stable** – Latest stable release tag point (non-beta). - **latest** – Latest release tag point (including betas). - **release/A.B.x** (e.g. 4.0.x, 4.1.x) – Release freeze, tests and tagging. Hotfixing. Note that both **master** and **major** are under heavy development. Their code did not pass the release testing phase, though, so it may be unstable. Additionally, all releases have their respective tags in the following form: 4.4.0, 4.4.1, etc. ## Samples The `samples/` folder contains some examples that can be used to test your installation. Visit [CKEditor SDK](http://sdk.ckeditor.com/) for plenty of samples showcasing numerous editor features, with source code readily available to view, copy and use in your own solution. ## Code Structure The development code contains the following main elements: - Main coding folders: - `core/` – The core API of CKEditor. Alone, it does nothing, but it provides the entire JavaScript API that makes the magic happen. - `plugins/` – Contains most of the plugins maintained by the CKEditor core team. - `skin/` – Contains the official default skin of CKEditor. - `dev/` – Contains some developer tools. - `tests/` – Contains the CKEditor tests suite. ## Building a Release A release-optimized version of the development code can be easily created locally. The `dev/builder/build.sh` script can be used for that purpose: > ./dev/builder/build.sh A "release ready" working copy of your development code will be built in the new `dev/builder/release/` folder. An Internet connection is necessary to run the builder, for its first time at least. ## Testing Environment Read more on how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. ## Reporting Issues Please use the [CKEditor Developer Center](https://dev.ckeditor.com/) to report bugs and feature requests. ## License Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or [http://ckeditor.com/license](http://ckeditor.com/license) rt-4.4.4/devel/third-party/ckeditor-src/adapters/0000755000175000017500000000000014006075350020032 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/adapters/jquery.js0000644000175000017500000002747514006075350021726 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview Defines the {@link CKEDITOR_Adapters.jQuery jQuery Adapter}. */ /** * @class CKEDITOR_Adapters.jQuery * @singleton * * The jQuery Adapter allows for easy use of basic CKEditor functions and access to the internal API. * To find more information about the jQuery Adapter, go to the [jQuery Adapter section](#!/guide/dev_jquery) * of the Developer's Guide or see the "Create Editors with jQuery" sample. * * @aside guide dev_jquery */ ( function( $ ) { if ( typeof $ == 'undefined' ) { throw new Error( 'jQuery should be loaded before CKEditor jQuery adapter.' ); } if ( typeof CKEDITOR == 'undefined' ) { throw new Error( 'CKEditor should be loaded before CKEditor jQuery adapter.' ); } /** * Allows CKEditor to override `jQuery.fn.val()`. When set to `true`, the `val()` function * used on textarea elements replaced with CKEditor uses the CKEditor API. * * This configuration option is global and is executed during the loading of the jQuery Adapter. * It cannot be customized across editor instances. * * * * * * * * * @cfg {Boolean} [jqueryOverrideVal=true] * @member CKEDITOR.config */ CKEDITOR.config.jqueryOverrideVal = typeof CKEDITOR.config.jqueryOverrideVal == 'undefined' ? true : CKEDITOR.config.jqueryOverrideVal; // jQuery object methods. $.extend( $.fn, { /** * Returns an existing CKEditor instance for the first matched element. * Allows to easily use the internal API. Does not return a jQuery object. * * Raises an exception if the editor does not exist or is not ready yet. * * @returns CKEDITOR.editor * @deprecated Use {@link #editor editor property} instead. */ ckeditorGet: function() { var instance = this.eq( 0 ).data( 'ckeditorInstance' ); if ( !instance ) throw 'CKEditor is not initialized yet, use ckeditor() with a callback.'; return instance; }, /** * A jQuery function which triggers the creation of CKEditor with `

    rt-4.4.4/devel/third-party/ckeditor-src/plugins/enterkey/plugin.js0000644000175000017500000004621414006075351023402 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { CKEDITOR.plugins.add( 'enterkey', { init: function( editor ) { editor.addCommand( 'enter', { modes: { wysiwyg: 1 }, editorFocus: false, exec: function( editor ) { enter( editor ); } } ); editor.addCommand( 'shiftEnter', { modes: { wysiwyg: 1 }, editorFocus: false, exec: function( editor ) { shiftEnter( editor ); } } ); editor.setKeystroke( [ [ 13, 'enter' ], [ CKEDITOR.SHIFT + 13, 'shiftEnter' ] ] ); } } ); var whitespaces = CKEDITOR.dom.walker.whitespaces(), bookmark = CKEDITOR.dom.walker.bookmark(); CKEDITOR.plugins.enterkey = { enterBlock: function( editor, mode, range, forceMode ) { // Get the range for the current selection. range = range || getRange( editor ); // We may not have valid ranges to work on, like when inside a // contenteditable=false element. if ( !range ) return; // When range is in nested editable, we have to replace range with this one, // which have root property set to closest editable, to make auto paragraphing work. (#12162) range = replaceRangeWithClosestEditableRoot( range ); var doc = range.document; var atBlockStart = range.checkStartOfBlock(), atBlockEnd = range.checkEndOfBlock(), path = editor.elementPath( range.startContainer ), block = path.block, // Determine the block element to be used. blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ), newBlock; // Exit the list when we're inside an empty list item block. (#5376) if ( atBlockStart && atBlockEnd ) { // Exit the list when we're inside an empty list item block. (#5376) if ( block && ( block.is( 'li' ) || block.getParent().is( 'li' ) ) ) { // Make sure to point to the li when dealing with empty list item. if ( !block.is( 'li' ) ) block = block.getParent(); var blockParent = block.getParent(), blockGrandParent = blockParent.getParent(), firstChild = !block.hasPrevious(), lastChild = !block.hasNext(), selection = editor.getSelection(), bookmarks = selection.createBookmarks(), orgDir = block.getDirection( 1 ), className = block.getAttribute( 'class' ), style = block.getAttribute( 'style' ), dirLoose = blockGrandParent.getDirection( 1 ) != orgDir, enterMode = editor.enterMode, needsBlock = enterMode != CKEDITOR.ENTER_BR || dirLoose || style || className, child; if ( blockGrandParent.is( 'li' ) ) { // If block is the first or the last child of the parent // list, degrade it and move to the outer list: // before the parent list if block is first child and after // the parent list if block is the last child, respectively. // //
      =>
        //
      • =>
      • //
          =>
            //
          • x
          • =>
          • x
          • //
          • ^
          • =>
          //
        =>
      • // =>
      • ^
      • //
      =>
    // // AND // //
      =>
        //
      • =>
      • ^
      • //
          =>
        • //
        • ^
        • =>
            //
          • x
          • =>
          • x
          • //
          =>
        // => //
      =>
    if ( firstChild || lastChild ) { // If it's only child, we don't want to keep perent ul anymore. if ( firstChild && lastChild ) { blockParent.remove(); } block[lastChild ? 'insertAfter' : 'insertBefore']( blockGrandParent ); // If the empty block is neither first nor last child // then split the list and the block as an element // of outer list. // // =>
      // =>
    • //
        =>
          //
        • =>
        • x
        • //
            =>
          //
        • x
        • => //
        • ^
        • =>
        • ^
        • //
        • y
        • =>
        • //
        =>
          // =>
        • y
        • //
        =>
      // =>
    • // =>
    } else { block.breakParent( blockGrandParent ); } } else if ( !needsBlock ) { block.appendBogus( true ); // If block is the first or last child of the parent // list, move all block's children out of the list: // before the list if block is first child and after the list // if block is the last child, respectively. // //
      =>
        //
      • x
      • =>
      • x
      • //
      • ^
      • =>
      //
    => ^ // // AND // //
      => ^ //
    • ^
    • =>
        //
      • x
      • =>
      • x
      • //
      =>
    if ( firstChild || lastChild ) { while ( ( child = block[ firstChild ? 'getFirst' : 'getLast' ]() ) ) child[ firstChild ? 'insertBefore' : 'insertAfter' ]( blockParent ); } // If the empty block is neither first nor last child // then split the list and put all the block contents // between two lists. // //
      =>
        //
      • x
      • =>
      • x
      • //
      • ^
      • =>
      //
    • y
    • => ^ //
    =>
      // =>
    • y
    • // =>
    else { block.breakParent( blockParent ); while ( ( child = block.getLast() ) ) child.insertAfter( blockParent ); } block.remove(); } else { // Original path block is the list item, create new block for the list item content. if ( path.block.is( 'li' ) ) { // Use
    block for ENTER_BR and ENTER_DIV. newBlock = doc.createElement( mode == CKEDITOR.ENTER_P ? 'p' : 'div' ); if ( dirLoose ) newBlock.setAttribute( 'dir', orgDir ); style && newBlock.setAttribute( 'style', style ); className && newBlock.setAttribute( 'class', className ); // Move all the child nodes to the new block. block.moveChildren( newBlock ); } // The original path block is not a list item, just copy the block to out side of the list. else { newBlock = path.block; } // If block is the first or last child of the parent // list, move it out of the list: // before the list if block is first child and after the list // if block is the last child, respectively. // //
      =>
        //
      • x
      • =>
      • x
      • //
      • ^
      • =>
      //
    =>

    ^

    // // AND // //
      =>

      ^

      //
    • ^
    • =>
        //
      • x
      • =>
      • x
      • //
      =>
    if ( firstChild || lastChild ) newBlock[ firstChild ? 'insertBefore' : 'insertAfter' ]( blockParent ); // If the empty block is neither first nor last child // then split the list and put the new block between // two lists. // // =>
      //
        =>
      • x
      • //
      • x
      • =>
      //
    • ^
    • =>

      ^

      //
    • y
    • =>
        //
      =>
    • y
    • // =>
    else { block.breakParent( blockParent ); newBlock.insertAfter( blockParent ); } block.remove(); } selection.selectBookmarks( bookmarks ); return; } if ( block && block.getParent().is( 'blockquote' ) ) { block.breakParent( block.getParent() ); // If we were at the start of
    , there will be an empty element before it now. if ( !block.getPrevious().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) ) block.getPrevious().remove(); // If we were at the end of
    , there will be an empty element after it now. if ( !block.getNext().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) ) block.getNext().remove(); range.moveToElementEditStart( block ); range.select(); return; } } // Don't split
     if we're in the middle of it, act as shift enter key.
    			else if ( block && block.is( 'pre' ) ) {
    				if ( !atBlockEnd ) {
    					enterBr( editor, mode, range, forceMode );
    					return;
    				}
    			}
    
    			// Split the range.
    			var splitInfo = range.splitBlock( blockTag );
    
    			if ( !splitInfo )
    				return;
    
    			// Get the current blocks.
    			var previousBlock = splitInfo.previousBlock,
    				nextBlock = splitInfo.nextBlock;
    
    			var isStartOfBlock = splitInfo.wasStartOfBlock,
    				isEndOfBlock = splitInfo.wasEndOfBlock;
    
    			var node;
    
    			// If this is a block under a list item, split it as well. (#1647)
    			if ( nextBlock ) {
    				node = nextBlock.getParent();
    				if ( node.is( 'li' ) ) {
    					nextBlock.breakParent( node );
    					nextBlock.move( nextBlock.getNext(), 1 );
    				}
    			} else if ( previousBlock && ( node = previousBlock.getParent() ) && node.is( 'li' ) ) {
    				previousBlock.breakParent( node );
    				node = previousBlock.getNext();
    				range.moveToElementEditStart( node );
    				previousBlock.move( previousBlock.getPrevious() );
    			}
    
    			// If we have both the previous and next blocks, it means that the
    			// boundaries were on separated blocks, or none of them where on the
    			// block limits (start/end).
    			if ( !isStartOfBlock && !isEndOfBlock ) {
    				// If the next block is an 
  • with another list tree as the first // child, we'll need to append a filler (
    /NBSP) or the list item // wouldn't be editable. (#1420) if ( nextBlock.is( 'li' ) ) { var walkerRange = range.clone(); walkerRange.selectNodeContents( nextBlock ); var walker = new CKEDITOR.dom.walker( walkerRange ); walker.evaluator = function( node ) { return !( bookmark( node ) || whitespaces( node ) || node.type == CKEDITOR.NODE_ELEMENT && node.getName() in CKEDITOR.dtd.$inline && !( node.getName() in CKEDITOR.dtd.$empty ) ); }; node = walker.next(); if ( node && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'ul', 'ol' ) ) ( CKEDITOR.env.needsBrFiller ? doc.createElement( 'br' ) : doc.createText( '\xa0' ) ).insertBefore( node ); } // Move the selection to the end block. if ( nextBlock ) range.moveToElementEditStart( nextBlock ); } else { var newBlockDir; if ( previousBlock ) { // Do not enter this block if it's a header tag, or we are in // a Shift+Enter (#77). Create a new block element instead // (later in the code). if ( previousBlock.is( 'li' ) || !( headerTagRegex.test( previousBlock.getName() ) || previousBlock.is( 'pre' ) ) ) { // Otherwise, duplicate the previous block. newBlock = previousBlock.clone(); } } else if ( nextBlock ) { newBlock = nextBlock.clone(); } if ( !newBlock ) { // We have already created a new list item. (#6849) if ( node && node.is( 'li' ) ) newBlock = node; else { newBlock = doc.createElement( blockTag ); if ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) ) newBlock.setAttribute( 'dir', newBlockDir ); } } // Force the enter block unless we're talking of a list item. else if ( forceMode && !newBlock.is( 'li' ) ) { newBlock.renameNode( blockTag ); } // Recreate the inline elements tree, which was available // before hitting enter, so the same styles will be available in // the new block. var elementPath = splitInfo.elementPath; if ( elementPath ) { for ( var i = 0, len = elementPath.elements.length; i < len; i++ ) { var element = elementPath.elements[ i ]; if ( element.equals( elementPath.block ) || element.equals( elementPath.blockLimit ) ) break; if ( CKEDITOR.dtd.$removeEmpty[ element.getName() ] ) { element = element.clone(); newBlock.moveChildren( element ); newBlock.append( element ); } } } newBlock.appendBogus(); if ( !newBlock.getParent() ) range.insertNode( newBlock ); // list item start number should not be duplicated (#7330), but we need // to remove the attribute after it's onto the DOM tree because of old IEs (#7581). newBlock.is( 'li' ) && newBlock.removeAttribute( 'value' ); // This is tricky, but to make the new block visible correctly // we must select it. // The previousBlock check has been included because it may be // empty if we have fixed a block-less space (like ENTER into an // empty table cell). if ( CKEDITOR.env.ie && isStartOfBlock && ( !isEndOfBlock || !previousBlock.getChildCount() ) ) { // Move the selection to the new block. range.moveToElementEditStart( isEndOfBlock ? previousBlock : newBlock ); range.select(); } // Move the selection to the new block. range.moveToElementEditStart( isStartOfBlock && !isEndOfBlock ? nextBlock : newBlock ); } range.select(); range.scrollIntoView(); }, enterBr: function( editor, mode, range, forceMode ) { // Get the range for the current selection. range = range || getRange( editor ); // We may not have valid ranges to work on, like when inside a // contenteditable=false element. if ( !range ) return; var doc = range.document; var isEndOfBlock = range.checkEndOfBlock(); var elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() ); var startBlock = elementPath.block, startBlockTag = startBlock && elementPath.block.getName(); if ( !forceMode && startBlockTag == 'li' ) { enterBlock( editor, mode, range, forceMode ); return; } // If we are at the end of a header block. if ( !forceMode && isEndOfBlock && headerTagRegex.test( startBlockTag ) ) { var newBlock, newBlockDir; if ( ( newBlockDir = startBlock.getDirection() ) ) { newBlock = doc.createElement( 'div' ); newBlock.setAttribute( 'dir', newBlockDir ); newBlock.insertAfter( startBlock ); range.setStart( newBlock, 0 ); } else { // Insert a
    after the current paragraph. doc.createElement( 'br' ).insertAfter( startBlock ); // A text node is required by Gecko only to make the cursor blink. if ( CKEDITOR.env.gecko ) doc.createText( '' ).insertAfter( startBlock ); // IE has different behaviors regarding position. range.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START ); } } else { var lineBreak; // IE<8 prefers text node as line-break inside of
     (#4711).
    				if ( startBlockTag == 'pre' && CKEDITOR.env.ie && CKEDITOR.env.version < 8 )
    					lineBreak = doc.createText( '\r' );
    				else
    					lineBreak = doc.createElement( 'br' );
    
    				range.deleteContents();
    				range.insertNode( lineBreak );
    
    				// Old IEs have different behavior regarding position.
    				if ( !CKEDITOR.env.needsBrFiller )
    					range.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END );
    				else {
    					// A text node is required by Gecko only to make the cursor blink.
    					// We need some text inside of it, so the bogus 
    is properly // created. doc.createText( '\ufeff' ).insertAfter( lineBreak ); // If we are at the end of a block, we must be sure the bogus node is available in that block. if ( isEndOfBlock ) { // In most situations we've got an elementPath.block (e.g.

    ), but in a // blockless editor or when autoP is false that needs to be a block limit. ( startBlock || elementPath.blockLimit ).appendBogus(); } // Now we can remove the text node contents, so the caret doesn't // stop on it. lineBreak.getNext().$.nodeValue = ''; range.setStartAt( lineBreak.getNext(), CKEDITOR.POSITION_AFTER_START ); } } // This collapse guarantees the cursor will be blinking. range.collapse( true ); range.select(); range.scrollIntoView(); } }; var plugin = CKEDITOR.plugins.enterkey, enterBr = plugin.enterBr, enterBlock = plugin.enterBlock, headerTagRegex = /^h[1-6]$/; function shiftEnter( editor ) { // On SHIFT+ENTER: // 1. We want to enforce the mode to be respected, instead // of cloning the current block. (#77) return enter( editor, editor.activeShiftEnterMode, 1 ); } function enter( editor, mode, forceMode ) { forceMode = editor.config.forceEnterMode || forceMode; // Only effective within document. if ( editor.mode != 'wysiwyg' ) return; if ( !mode ) mode = editor.activeEnterMode; // TODO this should be handled by setting editor.activeEnterMode on selection change. // Check path block specialities: // 1. Cannot be a un-splittable element, e.g. table caption; var path = editor.elementPath(); if ( !path.isContextFor( 'p' ) ) { mode = CKEDITOR.ENTER_BR; forceMode = 1; } editor.fire( 'saveSnapshot' ); // Save undo step. if ( mode == CKEDITOR.ENTER_BR ) enterBr( editor, mode, null, forceMode ); else enterBlock( editor, mode, null, forceMode ); editor.fire( 'saveSnapshot' ); } function getRange( editor ) { // Get the selection ranges. var ranges = editor.getSelection().getRanges( true ); // Delete the contents of all ranges except the first one. for ( var i = ranges.length - 1; i > 0; i-- ) { ranges[ i ].deleteContents(); } // Return the first range. return ranges[ 0 ]; } function replaceRangeWithClosestEditableRoot( range ) { var closestEditable = range.startContainer.getAscendant( function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.getAttribute( 'contenteditable' ) == 'true'; }, true ); if ( range.root.equals( closestEditable ) ) { return range; } else { var newRange = new CKEDITOR.dom.range( closestEditable ); newRange.moveToRange( range ); return newRange; } } } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/ajax/0000755000175000017500000000000014006075350020633 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/ajax/plugin.js0000644000175000017500000001236014006075350022471 0ustar domdom/* global ActiveXObject */ /** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview Defines the {@link CKEDITOR.ajax} object, which stores Ajax methods for * data loading. */ ( function() { CKEDITOR.plugins.add( 'ajax', { requires: 'xml' } ); /** * Ajax methods for data loading. * * @class * @singleton */ CKEDITOR.ajax = ( function() { function createXMLHttpRequest() { // In IE, using the native XMLHttpRequest for local files may throw // "Access is Denied" errors. if ( !CKEDITOR.env.ie || location.protocol != 'file:' ) { try { return new XMLHttpRequest(); } catch ( e ) { } } try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch ( e ) {} try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch ( e ) {} return null; } function checkStatus( xhr ) { // HTTP Status Codes: // 2xx : Success // 304 : Not Modified // 0 : Returned when running locally (file://) // 1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450) return ( xhr.readyState == 4 && ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status === 0 || xhr.status == 1223 ) ); } function getResponseText( xhr ) { if ( checkStatus( xhr ) ) return xhr.responseText; return null; } function getResponseXml( xhr ) { if ( checkStatus( xhr ) ) { var xml = xhr.responseXML; return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText ); } return null; } function load( url, callback, getResponseFn ) { var async = !!callback; var xhr = createXMLHttpRequest(); if ( !xhr ) return null; xhr.open( 'GET', url, async ); if ( async ) { // TODO: perform leak checks on this closure. xhr.onreadystatechange = function() { if ( xhr.readyState == 4 ) { callback( getResponseFn( xhr ) ); xhr = null; } }; } xhr.send( null ); return async ? '' : getResponseFn( xhr ); } function post( url, data, contentType, callback, getResponseFn ) { var xhr = createXMLHttpRequest(); if ( !xhr ) return null; xhr.open( 'POST', url, true ); xhr.onreadystatechange = function() { if ( xhr.readyState == 4 ) { callback( getResponseFn( xhr ) ); xhr = null; } }; xhr.setRequestHeader( 'Content-type', contentType || 'application/x-www-form-urlencoded; charset=UTF-8' ); xhr.send( data ); } return { /** * Loads data from a URL as plain text. * * // Load data synchronously. * var data = CKEDITOR.ajax.load( 'somedata.txt' ); * alert( data ); * * // Load data asynchronously. * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data ) { * alert( data ); * } ); * * @param {String} url The URL from which the data is loaded. * @param {Function} [callback] A callback function to be called on * data load. If not provided, the data will be loaded * synchronously. * @returns {String} The loaded data. For asynchronous requests, an * empty string. For invalid requests, `null`. */ load: function( url, callback ) { return load( url, callback, getResponseText ); }, /** * Creates an asynchronous POST `XMLHttpRequest` of the given `url`, `data` and optional `contentType`. * Once the request is done, regardless if it is successful or not, the `callback` is called * with `XMLHttpRequest#responseText` or `null` as an argument. * * CKEDITOR.ajax.post( 'url/post.php', 'foo=bar', null, function( data ) { * console.log( data ); * } ); * * CKEDITOR.ajax.post( 'url/post.php', JSON.stringify( { foo: 'bar' } ), 'application/json', function( data ) { * console.log( data ); * } ); * * @since 4.4 * @param {String} url The URL of the request. * @param {String/Object/Array} data Data passed to `XMLHttpRequest#send`. * @param {String} [contentType='application/x-www-form-urlencoded; charset=UTF-8'] The value of the `Content-type` header. * @param {Function} callback A callback executed asynchronously with `XMLHttpRequest#responseText` or `null` as an argument, * depending on the `status` of the request. */ post: function( url, data, contentType, callback ) { return post( url, data, contentType, callback, getResponseText ); }, /** * Loads data from a URL as XML. * * // Load XML synchronously. * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' ); * alert( xml.getInnerXml( '//' ) ); * * // Load XML asynchronously. * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml ) { * alert( xml.getInnerXml( '//' ) ); * } ); * * @param {String} url The URL from which the data is loaded. * @param {Function} [callback] A callback function to be called on * data load. If not provided, the data will be loaded synchronously. * @returns {CKEDITOR.xml} An XML object storing the loaded data. For asynchronous requests, an * empty string. For invalid requests, `null`. */ loadXml: function( url, callback ) { return load( url, callback, getResponseXml ); } }; } )(); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/menubutton/0000755000175000017500000000000014006075351022111 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/menubutton/plugin.js0000644000175000017500000000451214006075351023747 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.add( 'menubutton', { requires: 'button,menu', onLoad: function() { var clickFn = function( editor ) { var _ = this._, menu = _.menu; // Do nothing if this button is disabled. if ( _.state === CKEDITOR.TRISTATE_DISABLED ) return; if ( _.on && menu ) { menu.hide(); return; } _.previousState = _.state; // Check if we already have a menu for it, otherwise just create it. if ( !menu ) { menu = _.menu = new CKEDITOR.menu( editor, { panel: { className: 'cke_menu_panel', attributes: { 'aria-label': editor.lang.common.options } } } ); menu.onHide = CKEDITOR.tools.bind( function() { var modes = this.command ? editor.getCommand( this.command ).modes : this.modes; this.setState( !modes || modes[ editor.mode ] ? _.previousState : CKEDITOR.TRISTATE_DISABLED ); _.on = 0; }, this ); // Initialize the menu items at this point. if ( this.onMenu ) menu.addListener( this.onMenu ); } this.setState( CKEDITOR.TRISTATE_ON ); _.on = 1; // This timeout is needed to give time for the panel get focus // when JAWS is running. (#9842) setTimeout( function() { menu.show( CKEDITOR.document.getById( _.id ), 4 ); }, 0 ); }; /** * @class * @extends CKEDITOR.ui.button * @todo */ CKEDITOR.ui.menuButton = CKEDITOR.tools.createClass( { base: CKEDITOR.ui.button, /** * Creates a menuButton class instance. * * @constructor * @param Object definition * @todo */ $: function( definition ) { // We don't want the panel definition in this object. delete definition.panel; this.base( definition ); this.hasArrow = true; this.click = clickFn; }, statics: { handler: { create: function( definition ) { return new CKEDITOR.ui.menuButton( definition ); } } } } ); }, beforeInit: function( editor ) { editor.ui.addHandler( CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler ); } } ); /** * Button UI element. * * @readonly * @property {String} [='menubutton'] * @member CKEDITOR */ CKEDITOR.UI_MENUBUTTON = 'menubutton'; rt-4.4.4/devel/third-party/ckeditor-src/plugins/listblock/0000755000175000017500000000000014006075351021677 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/listblock/plugin.js0000644000175000017500000001523614006075351023542 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.add( 'listblock', { requires: 'panel', onLoad: function() { var list = CKEDITOR.addTemplate( 'panel-list', '

    ' ), listItem = CKEDITOR.addTemplate( 'panel-list-item', '' ), listGroup = CKEDITOR.addTemplate( 'panel-list-group', '

    {label}

    ' ), reSingleQuote = /\'/g, escapeSingleQuotes = function( str ) { return str.replace( reSingleQuote, '\\\'' ); }; CKEDITOR.ui.panel.prototype.addListBlock = function( name, definition ) { return this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), definition ) ); }; CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass( { base: CKEDITOR.ui.panel.block, $: function( blockHolder, blockDefinition ) { blockDefinition = blockDefinition || {}; var attribs = blockDefinition.attributes || ( blockDefinition.attributes = {} ); ( this.multiSelect = !!blockDefinition.multiSelect ) && ( attribs[ 'aria-multiselectable' ] = true ); // Provide default role of 'listbox'. !attribs.role && ( attribs.role = 'listbox' ); // Call the base contructor. this.base.apply( this, arguments ); // Set the proper a11y attributes. this.element.setAttribute( 'role', attribs.role ); var keys = this.keys; keys[ 40 ] = 'next'; // ARROW-DOWN keys[ 9 ] = 'next'; // TAB keys[ 38 ] = 'prev'; // ARROW-UP keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). this._.pendingHtml = []; this._.pendingList = []; this._.items = {}; this._.groups = {}; }, _: { close: function() { if ( this._.started ) { var output = list.output( { items: this._.pendingList.join( '' ) } ); this._.pendingList = []; this._.pendingHtml.push( output ); delete this._.started; } }, getClick: function() { if ( !this._.click ) { this._.click = CKEDITOR.tools.addFunction( function( value ) { var marked = this.toggle( value ); if ( this.onClick ) this.onClick( value, marked ); }, this ); } return this._.click; } }, proto: { add: function( value, html, title ) { var id = CKEDITOR.tools.getNextId(); if ( !this._.started ) { this._.started = 1; this._.size = this._.size || 0; } this._.items[ value ] = id; var data = { id: id, val: escapeSingleQuotes( CKEDITOR.tools.htmlEncodeAttr( value ) ), onclick: CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick', clickFn: this._.getClick(), title: CKEDITOR.tools.htmlEncodeAttr( title || value ), text: html || value }; this._.pendingList.push( listItem.output( data ) ); }, startGroup: function( title ) { this._.close(); var id = CKEDITOR.tools.getNextId(); this._.groups[ title ] = id; this._.pendingHtml.push( listGroup.output( { id: id, label: title } ) ); }, commit: function() { this._.close(); this.element.appendHtml( this._.pendingHtml.join( '' ) ); delete this._.size; this._.pendingHtml = []; }, toggle: function( value ) { var isMarked = this.isMarked( value ); if ( isMarked ) this.unmark( value ); else this.mark( value ); return !isMarked; }, hideGroup: function( groupTitle ) { var group = this.element.getDocument().getById( this._.groups[ groupTitle ] ), list = group && group.getNext(); if ( group ) { group.setStyle( 'display', 'none' ); if ( list && list.getName() == 'ul' ) list.setStyle( 'display', 'none' ); } }, hideItem: function( value ) { this.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' ); }, showAll: function() { var items = this._.items, groups = this._.groups, doc = this.element.getDocument(); for ( var value in items ) { doc.getById( items[ value ] ).setStyle( 'display', '' ); } for ( var title in groups ) { var group = doc.getById( groups[ title ] ), list = group.getNext(); group.setStyle( 'display', '' ); if ( list && list.getName() == 'ul' ) list.setStyle( 'display', '' ); } }, mark: function( value ) { if ( !this.multiSelect ) this.unmarkAll(); var itemId = this._.items[ value ], item = this.element.getDocument().getById( itemId ); item.addClass( 'cke_selected' ); this.element.getDocument().getById( itemId + '_option' ).setAttribute( 'aria-selected', true ); this.onMark && this.onMark( item ); }, unmark: function( value ) { var doc = this.element.getDocument(), itemId = this._.items[ value ], item = doc.getById( itemId ); item.removeClass( 'cke_selected' ); doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); this.onUnmark && this.onUnmark( item ); }, unmarkAll: function() { var items = this._.items, doc = this.element.getDocument(); for ( var value in items ) { var itemId = items[ value ]; doc.getById( itemId ).removeClass( 'cke_selected' ); doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); } this.onUnmark && this.onUnmark(); }, isMarked: function( value ) { return this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' ); }, focus: function( value ) { this._.focusIndex = -1; var links = this.element.getElementsByTag( 'a' ), link, selected, i = -1; if ( value ) { selected = this.element.getDocument().getById( this._.items[ value ] ).getFirst(); while ( ( link = links.getItem( ++i ) ) ) { if ( link.equals( selected ) ) { this._.focusIndex = i; break; } } } else { this.element.focus(); } selected && setTimeout( function() { selected.focus(); }, 0 ); } } } ); } } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/0000755000175000017500000000000014006075351021641 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/samples/0000755000175000017500000000000014006075351023305 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/samples/magicline.html0000644000175000017500000001775314006075351026140 0ustar domdom Using Magicline plugin — CKEditor Sample

    CKEditor Samples » Using Magicline plugin

    This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

    This sample shows the advantages of Magicline plugin which is to enhance the editing process. Thanks to this plugin, a number of difficult focus spaces which are inaccessible due to browser issues can now be focused.

    Magicline plugin shows a red line with a handler which, when clicked, inserts a paragraph and allows typing. To see this, focus an editor and move your mouse above the focus space you want to access. The plugin is enabled by default so no additional configuration is necessary.

    This editor uses a default Magicline setup.


    This editor is using a blue line.

    CKEDITOR.replace( 'editor2', {
    	magicline_color: 'blue'
    });
    rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/plugin.js0000644000175000017500000020030214006075351023472 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview The Magic Line plugin that makes it easier to access some document areas that * are difficult to focus. */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'magicline', { lang: 'af,ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% init: initPlugin } ); // Activates the box inside of an editor. function initPlugin( editor ) { // Configurables var config = editor.config, triggerOffset = config.magicline_triggerOffset || 30, enterMode = config.enterMode, that = { // Global stuff is being initialized here. editor: editor, enterMode: enterMode, triggerOffset: triggerOffset, holdDistance: 0 | triggerOffset * ( config.magicline_holdDistance || 0.5 ), boxColor: config.magicline_color || '#ff0000', rtl: config.contentsLangDirection == 'rtl', tabuList: [ 'data-cke-hidden-sel' ].concat( config.magicline_tabuList || [] ), triggers: config.magicline_everywhere ? DTD_BLOCK : { table: 1, hr: 1, div: 1, ul: 1, ol: 1, dl: 1, form: 1, blockquote: 1 } }, scrollTimeout, checkMouseTimeoutPending, checkMouseTimer; // %REMOVE_START% // Internal DEBUG uses tools located in the topmost window. // (#9701) Due to security limitations some browsers may throw // errors when accessing window.top object. Do it safely first then. try { that.debug = window.top.DEBUG; } catch ( e ) {} that.debug = that.debug || { groupEnd: function() {}, groupStart: function() {}, log: function() {}, logElements: function() {}, logElementsEnd: function() {}, logEnd: function() {}, mousePos: function() {}, showHidden: function() {}, showTrigger: function() {}, startTimer: function() {}, stopTimer: function() {} }; // %REMOVE_END% // Simple irrelevant elements filter. that.isRelevant = function( node ) { return isHtml( node ) && // -> Node must be an existing HTML element. !isLine( that, node ) && // -> Node can be neither the box nor its child. !isFlowBreaker( node ); // -> Node can be neither floated nor positioned nor aligned. }; editor.on( 'contentDom', addListeners, this ); function addListeners() { var editable = editor.editable(), doc = editor.document, win = editor.window; // Global stuff is being initialized here. extend( that, { editable: editable, inInlineMode: editable.isInline(), doc: doc, win: win, hotNode: null }, true ); // This is the boundary of the editor. For inline the boundary is editable itself. // For classic (`iframe`-based) editor, the HTML element is a real boundary. that.boundary = that.inInlineMode ? that.editable : that.doc.getDocumentElement(); // Enabling the box inside of inline editable is pointless. // There's no need to access spaces inside paragraphs, links, spans, etc. if ( editable.is( dtd.$inline ) ) return; // Handle in-line editing by setting appropriate position. // If current position is static, make it relative and clear top/left coordinates. if ( that.inInlineMode && !isPositioned( editable ) ) { editable.setStyles( { position: 'relative', top: null, left: null } ); } // Enable the box. Let it produce children elements, initialize // event handlers and own methods. initLine.call( this, that ); // Get view dimensions and scroll positions. // At this stage (before any checkMouse call) it is used mostly // by tests. Nevertheless it a crucial thing. updateWindowSize( that ); // Remove the box before an undo image is created. // This is important. If we didn't do that, the *undo thing* would revert the box into an editor. // Thanks to that, undo doesn't even know about the existence of the box. editable.attachListener( editor, 'beforeUndoImage', function() { that.line.detach(); } ); // Removes the box HTML from editor data string if getData is called. // Thanks to that, an editor never yields data polluted by the box. // Listen with very high priority, so line will be removed before other // listeners will see it. editable.attachListener( editor, 'beforeGetData', function() { // If the box is in editable, remove it. if ( that.line.wrap.getParent() ) { that.line.detach(); // Restore line in the last listener for 'getData'. editor.once( 'getData', function() { that.line.attach(); }, null, null, 1000 ); } }, null, null, 0 ); // Hide the box on mouseout if mouse leaves document. editable.attachListener( that.inInlineMode ? doc : doc.getWindow().getFrame(), 'mouseout', function( event ) { if ( editor.mode != 'wysiwyg' ) return; // Check for inline-mode editor. If so, check mouse position // and remove the box if mouse outside of an editor. if ( that.inInlineMode ) { var mouse = { x: event.data.$.clientX, y: event.data.$.clientY }; updateWindowSize( that ); updateEditableSize( that, true ); var size = that.view.editable, scroll = that.view.scroll; // If outside of an editor... if ( !inBetween( mouse.x, size.left - scroll.x, size.right - scroll.x ) || !inBetween( mouse.y, size.top - scroll.y, size.bottom - scroll.y ) ) { clearTimeout( checkMouseTimer ); checkMouseTimer = null; that.line.detach(); } } else { clearTimeout( checkMouseTimer ); checkMouseTimer = null; that.line.detach(); } } ); // This one deactivates hidden mode of an editor which // prevents the box from being shown. editable.attachListener( editable, 'keyup', function() { that.hiddenMode = 0; that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% } ); editable.attachListener( editable, 'keydown', function( event ) { if ( editor.mode != 'wysiwyg' ) return; var keyStroke = event.data.getKeystroke(); switch ( keyStroke ) { // Shift pressed case 2228240: // IE case 16: that.hiddenMode = 1; that.line.detach(); } that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% } ); // This method ensures that checkMouse aren't executed // in parallel and no more frequently than specified in timeout function. // In classic (`iframe`-based) editor, document is used as a trigger, to provide magicline // functionality when mouse is below the body (short content, short body). editable.attachListener( that.inInlineMode ? editable : doc, 'mousemove', function( event ) { checkMouseTimeoutPending = true; if ( editor.mode != 'wysiwyg' || editor.readOnly || checkMouseTimer ) return; // IE<9 requires this event-driven object to be created // outside of the setTimeout statement. // Otherwise it loses the event object with its properties. var mouse = { x: event.data.$.clientX, y: event.data.$.clientY }; checkMouseTimer = setTimeout( function() { checkMouse( mouse ); }, 30 ); // balances performance and accessibility } ); // This one removes box on scroll event. // It is to avoid box displacement. editable.attachListener( win, 'scroll', function() { if ( editor.mode != 'wysiwyg' ) return; that.line.detach(); // To figure this out just look at the mouseup // event handler below. if ( env.webkit ) { that.hiddenMode = 1; clearTimeout( scrollTimeout ); scrollTimeout = setTimeout( function() { // Don't leave hidden mode until mouse remains pressed and // scroll is being used, i.e. when dragging something. if ( !that.mouseDown ) that.hiddenMode = 0; that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% }, 50 ); that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% } } ); // Those event handlers remove the box on mousedown // and don't reveal it until the mouse is released. // It is to prevent box insertion e.g. while scrolling // (w/ scrollbar), selecting and so on. editable.attachListener( env_ie8 ? doc : win, 'mousedown', function() { if ( editor.mode != 'wysiwyg' ) return; that.line.detach(); that.hiddenMode = 1; that.mouseDown = 1; that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% } ); // Google Chrome doesn't trigger this on the scrollbar (since 2009...) // so it is totally useless to check for scroll finish // see: http://code.google.com/p/chromium/issues/detail?id=14204 editable.attachListener( env_ie8 ? doc : win, 'mouseup', function() { that.hiddenMode = 0; that.mouseDown = 0; that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% } ); // Editor commands for accessing difficult focus spaces. editor.addCommand( 'accessPreviousSpace', accessFocusSpaceCmd( that ) ); editor.addCommand( 'accessNextSpace', accessFocusSpaceCmd( that, true ) ); editor.setKeystroke( [ [ config.magicline_keystrokePrevious, 'accessPreviousSpace' ], [ config.magicline_keystrokeNext, 'accessNextSpace' ] ] ); // Revert magicline hot node on undo/redo. editor.on( 'loadSnapshot', function() { var elements, element, i; for ( var t in { p: 1, br: 1, div: 1 } ) { // document.find is not available in QM (#11149). elements = editor.document.getElementsByTag( t ); for ( i = elements.count(); i--; ) { if ( ( element = elements.getItem( i ) ).data( 'cke-magicline-hot' ) ) { // Restore hotNode that.hotNode = element; // Restore last access direction that.lastCmdDirection = element.data( 'cke-magicline-dir' ) === 'true' ? true : false; return; } } } } ); // This method handles mousemove mouse for box toggling. // It uses mouse position to determine underlying element, then // it tries to use different trigger type in order to place the box // in correct place. The following procedure is executed periodically. function checkMouse( mouse ) { that.debug.groupStart( 'CheckMouse' ); // %REMOVE_LINE% that.debug.startTimer(); // %REMOVE_LINE% that.mouse = mouse; that.trigger = null; checkMouseTimer = null; updateWindowSize( that ); if ( checkMouseTimeoutPending && // There must be an event pending. !that.hiddenMode && // Can't be in hidden mode. editor.focusManager.hasFocus && // Editor must have focus. !that.line.mouseNear() && // Mouse pointer can't be close to the box. ( that.element = elementFromMouse( that, true ) ) // There must be valid element. ) { // If trigger exists, and trigger is correct -> show the box. // Don't show the line if trigger is a descendant of some tabu-list element. if ( ( that.trigger = triggerEditable( that ) || triggerEdge( that ) || triggerExpand( that ) ) && !isInTabu( that, that.trigger.upper || that.trigger.lower ) ) { that.line.attach().place(); } // Otherwise remove the box else { that.trigger = null; that.line.detach(); } that.debug.showTrigger( that.trigger ); // %REMOVE_LINE% that.debug.mousePos( mouse.y, that.element ); // %REMOVE_LINE% checkMouseTimeoutPending = false; } that.debug.stopTimer(); // %REMOVE_LINE% that.debug.groupEnd(); // %REMOVE_LINE% } // This one allows testing and debugging. It reveals some // inner methods to the world. this.backdoor = { accessFocusSpace: accessFocusSpace, boxTrigger: boxTrigger, isLine: isLine, getAscendantTrigger: getAscendantTrigger, getNonEmptyNeighbour: getNonEmptyNeighbour, getSize: getSize, that: that, triggerEdge: triggerEdge, triggerEditable: triggerEditable, triggerExpand: triggerExpand }; } } // Some shorthands for common methods to save bytes var extend = CKEDITOR.tools.extend, newElement = CKEDITOR.dom.element, newElementFromHtml = newElement.createFromHtml, env = CKEDITOR.env, env_ie8 = CKEDITOR.env.ie && CKEDITOR.env.version < 9, dtd = CKEDITOR.dtd, // Global object associating enter modes with elements. enterElements = {}, // Constant values, types and so on. EDGE_TOP = 128, EDGE_BOTTOM = 64, EDGE_MIDDLE = 32, TYPE_EDGE = 16, TYPE_EXPAND = 8, LOOK_TOP = 4, LOOK_BOTTOM = 2, LOOK_NORMAL = 1, WHITE_SPACE = '\u00A0', DTD_LISTITEM = dtd.$listItem, DTD_TABLECONTENT = dtd.$tableContent, DTD_NONACCESSIBLE = extend( {}, dtd.$nonEditable, dtd.$empty ), DTD_BLOCK = dtd.$block, // Minimum time that must elapse between two update*Size calls. // It prevents constant getComuptedStyle calls and improves performance. CACHE_TIME = 100, // Shared CSS stuff for box elements CSS_COMMON = 'width:0px;height:0px;padding:0px;margin:0px;display:block;' + 'z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;', CSS_TRIANGLE = CSS_COMMON + 'border-color:transparent;display:block;border-style:solid;', TRIANGLE_HTML = '' + WHITE_SPACE + ''; enterElements[ CKEDITOR.ENTER_BR ] = 'br'; enterElements[ CKEDITOR.ENTER_P ] = 'p'; enterElements[ CKEDITOR.ENTER_DIV ] = 'div'; function areSiblings( that, upper, lower ) { return isHtml( upper ) && isHtml( lower ) && lower.equals( upper.getNext( function( node ) { return !( isEmptyTextNode( node ) || isComment( node ) || isFlowBreaker( node ) ); } ) ); } // boxTrigger is an abstract type which describes // the relationship between elements that may result // in showing the box. // // The following type is used by numerous methods // to share information about the hypothetical box placement // and look by referring to boxTrigger properties. function boxTrigger( triggerSetup ) { this.upper = triggerSetup[ 0 ]; this.lower = triggerSetup[ 1 ]; this.set.apply( this, triggerSetup.slice( 2 ) ); } boxTrigger.prototype = { set: function( edge, type, look ) { this.properties = edge + type + ( look || LOOK_NORMAL ); return this; }, is: function( property ) { return ( this.properties & property ) == property; } }; var elementFromMouse = ( function() { function elementFromPoint( doc, mouse ) { var pointedElement = doc.$.elementFromPoint( mouse.x, mouse.y ); // IE9QM: from times to times it will return an empty object on scroll bar hover. (#12185) return pointedElement && pointedElement.nodeType ? new CKEDITOR.dom.element( pointedElement ) : null; } return function( that, ignoreBox, forceMouse ) { if ( !that.mouse ) return null; var doc = that.doc, lineWrap = that.line.wrap, mouse = forceMouse || that.mouse, // Note: element might be null. element = elementFromPoint( doc, mouse ); // If ignoreBox is set and element is the box, it means that we // need to hide the box for a while, repeat elementFromPoint // and show it again. if ( ignoreBox && isLine( that, element ) ) { lineWrap.hide(); element = elementFromPoint( doc, mouse ); lineWrap.show(); } // Return nothing if: // \-> Element is not HTML. if ( !( element && element.type == CKEDITOR.NODE_ELEMENT && element.$ ) ) return null; // Also return nothing if: // \-> We're IE<9 and element is out of the top-level element (editable for inline and HTML for classic (`iframe`-based)). // This is due to the bug which allows IE<9 firing mouse events on element // with contenteditable=true while doing selection out (far, away) of the element. // Thus we must always be sure that we stay in editable or HTML. if ( env.ie && env.version < 9 ) { if ( !( that.boundary.equals( element ) || that.boundary.contains( element ) ) ) return null; } return element; }; } )(); // Gets the closest parent node that belongs to triggers group. function getAscendantTrigger( that ) { var node = that.element, trigger; if ( node && isHtml( node ) ) { trigger = node.getAscendant( that.triggers, true ); // If trigger is an element, neither editable nor editable's ascendant. if ( trigger && that.editable.contains( trigger ) ) { // Check for closest editable limit. // Don't consider trigger as a limit as it may be nested editable (includeSelf=false) (#12009). var limit = getClosestEditableLimit( trigger ); // Trigger in nested editable area. if ( limit.getAttribute( 'contenteditable' ) == 'true' ) return trigger; // Trigger in non-editable area. else if ( limit.is( that.triggers ) ) return limit; else return null; return trigger; } else { return null; } } return null; } function getMidpoint( that, upper, lower ) { updateSize( that, upper ); updateSize( that, lower ); var upperSizeBottom = upper.size.bottom, lowerSizeTop = lower.size.top; return upperSizeBottom && lowerSizeTop ? 0 | ( upperSizeBottom + lowerSizeTop ) / 2 : upperSizeBottom || lowerSizeTop; } // Get nearest node (either text or HTML), but: // \-> Omit all empty text nodes (containing white characters only). // \-> Omit BR elements // \-> Omit flow breakers. function getNonEmptyNeighbour( that, node, goBack ) { node = node[ goBack ? 'getPrevious' : 'getNext' ]( function( node ) { return ( isTextNode( node ) && !isEmptyTextNode( node ) ) || ( isHtml( node ) && !isFlowBreaker( node ) && !isLine( that, node ) ); } ); return node; } function inBetween( val, lower, upper ) { return val > lower && val < upper; } // Returns the closest ancestor that has contenteditable attribute. // Such ancestor is the limit of (non-)editable DOM branch that element // belongs to. This method omits editor editable. function getClosestEditableLimit( element, includeSelf ) { if ( element.data( 'cke-editable' ) ) return null; if ( !includeSelf ) element = element.getParent(); while ( element ) { if ( element.data( 'cke-editable' ) ) return null; if ( element.hasAttribute( 'contenteditable' ) ) return element; element = element.getParent(); } return null; } // Access space line consists of a few elements (spans): // \-> Line wrapper. // \-> Line. // \-> Line triangles: left triangle (LT), right triangle (RT). // \-> Button handler (BTN). // // +--------------------------------------------------- line.wrap (span) -----+ // | +---------------------------------------------------- line (span) -----+ | // | | +- LT \ +- BTN -+ / RT -+ | | // | | | \ | | | / | | | // | | | / | <__| | \ | | | // | | +-----/ +-------+ \-----+ | | // | +----------------------------------------------------------------------+ | // +--------------------------------------------------------------------------+ // function initLine( that ) { var doc = that.doc, // This the main box element that holds triangles and the insertion button line = newElementFromHtml( '', doc ), iconPath = CKEDITOR.getUrl( this.path + 'images/' + ( env.hidpi ? 'hidpi/' : '' ) + 'icon' + ( that.rtl ? '-rtl' : '' ) + '.png' ); extend( line, { attach: function() { // Only if not already attached if ( !this.wrap.getParent() ) this.wrap.appendTo( that.editable, true ); return this; }, // Looks are as follows: [ LOOK_TOP, LOOK_BOTTOM, LOOK_NORMAL ]. lineChildren: [ extend( newElementFromHtml( '', doc ), { base: CSS_COMMON + 'height:17px;width:17px;' + ( that.rtl ? 'left' : 'right' ) + ':17px;' + 'background:url(' + iconPath + ') center no-repeat ' + that.boxColor + ';cursor:pointer;' + ( env.hc ? 'font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;' : '' ) + ( env.hidpi ? 'background-size: 9px 10px;' : '' ), looks: [ 'top:-8px; border-radius: 2px;', 'top:-17px; border-radius: 2px 2px 0px 0px;', 'top:-1px; border-radius: 0px 0px 2px 2px;' ] } ), extend( newElementFromHtml( TRIANGLE_HTML, doc ), { base: CSS_TRIANGLE + 'left:0px;border-left-color:' + that.boxColor + ';', looks: [ 'border-width:8px 0 8px 8px;top:-8px', 'border-width:8px 0 0 8px;top:-8px', 'border-width:0 0 8px 8px;top:0px' ] } ), extend( newElementFromHtml( TRIANGLE_HTML, doc ), { base: CSS_TRIANGLE + 'right:0px;border-right-color:' + that.boxColor + ';', looks: [ 'border-width:8px 8px 8px 0;top:-8px', 'border-width:8px 8px 0 0;top:-8px', 'border-width:0 8px 8px 0;top:0px' ] } ) ], detach: function() { // Detach only if already attached. if ( this.wrap.getParent() ) this.wrap.remove(); return this; }, // Checks whether mouseY is around an element by comparing boundaries and considering // an offset distance. mouseNear: function() { that.debug.groupStart( 'mouseNear' ); // %REMOVE_LINE% updateSize( that, this ); var offset = that.holdDistance, size = this.size; // Determine neighborhood by element dimensions and offsets. if ( size && inBetween( that.mouse.y, size.top - offset, size.bottom + offset ) && inBetween( that.mouse.x, size.left - offset, size.right + offset ) ) { that.debug.logEnd( 'Mouse is near.' ); // %REMOVE_LINE% return true; } that.debug.logEnd( 'Mouse isn\'t near.' ); // %REMOVE_LINE% return false; }, // Adjusts position of the box according to the trigger properties. // If also affects look of the box depending on the type of the trigger. place: function() { var view = that.view, editable = that.editable, trigger = that.trigger, upper = trigger.upper, lower = trigger.lower, any = upper || lower, parent = any.getParent(), styleSet = {}; // Save recent trigger for further insertion. // It is necessary due to the fact, that that.trigger may // contain different boxTrigger at the moment of insertion // or may be even null. this.trigger = trigger; upper && updateSize( that, upper, true ); lower && updateSize( that, lower, true ); updateSize( that, parent, true ); // Yeah, that's gonna be useful in inline-mode case. if ( that.inInlineMode ) updateEditableSize( that, true ); // Set X coordinate (left, right, width). if ( parent.equals( editable ) ) { styleSet.left = view.scroll.x; styleSet.right = -view.scroll.x; styleSet.width = ''; } else { styleSet.left = any.size.left - any.size.margin.left + view.scroll.x - ( that.inInlineMode ? view.editable.left + view.editable.border.left : 0 ); styleSet.width = any.size.outerWidth + any.size.margin.left + any.size.margin.right + view.scroll.x; styleSet.right = ''; } // Set Y coordinate (top) for trigger consisting of two elements. if ( upper && lower ) { // No margins at all or they're equal. Place box right between. if ( upper.size.margin.bottom === lower.size.margin.top ) styleSet.top = 0 | ( upper.size.bottom + upper.size.margin.bottom / 2 ); else { // Upper margin < lower margin. Place at lower margin. if ( upper.size.margin.bottom < lower.size.margin.top ) styleSet.top = upper.size.bottom + upper.size.margin.bottom; // Upper margin > lower margin. Place at upper margin - lower margin. else styleSet.top = upper.size.bottom + upper.size.margin.bottom - lower.size.margin.top; } } // Set Y coordinate (top) for single-edge trigger. else if ( !upper ) styleSet.top = lower.size.top - lower.size.margin.top; else if ( !lower ) { styleSet.top = upper.size.bottom + upper.size.margin.bottom; } // Set box button modes if close to the viewport horizontal edge // or look forced by the trigger. if ( trigger.is( LOOK_TOP ) || inBetween( styleSet.top, view.scroll.y - 15, view.scroll.y + 5 ) ) { styleSet.top = that.inInlineMode ? 0 : view.scroll.y; this.look( LOOK_TOP ); } else if ( trigger.is( LOOK_BOTTOM ) || inBetween( styleSet.top, view.pane.bottom - 5, view.pane.bottom + 15 ) ) { styleSet.top = that.inInlineMode ? ( view.editable.height + view.editable.padding.top + view.editable.padding.bottom ) : ( view.pane.bottom - 1 ); this.look( LOOK_BOTTOM ); } else { if ( that.inInlineMode ) styleSet.top -= view.editable.top + view.editable.border.top; this.look( LOOK_NORMAL ); } if ( that.inInlineMode ) { // 1px bug here... styleSet.top--; // Consider the editable to be an element with overflow:scroll // and non-zero scrollTop/scrollLeft value. // For example: divarea editable. (#9383) styleSet.top += view.editable.scroll.top; styleSet.left += view.editable.scroll.left; } // Append `px` prefixes. for ( var style in styleSet ) styleSet[ style ] = CKEDITOR.tools.cssLength( styleSet[ style ] ); this.setStyles( styleSet ); }, // Changes look of the box according to current needs. // Three different styles are available: [ LOOK_TOP, LOOK_BOTTOM, LOOK_NORMAL ]. look: function( look ) { if ( this.oldLook == look ) return; for ( var i = this.lineChildren.length, child; i--; ) ( child = this.lineChildren[ i ] ).setAttribute( 'style', child.base + child.looks[ 0 | look / 2 ] ); this.oldLook = look; }, wrap: new newElement( 'span', that.doc ) } ); // Insert children into the box. for ( var i = line.lineChildren.length; i--; ) line.lineChildren[ i ].appendTo( line ); // Set default look of the box. line.look( LOOK_NORMAL ); // Using that wrapper prevents IE (8,9) from resizing editable area at the moment // of box insertion. This works thanks to the fact, that positioned box is wrapped by // an inline element. So much tricky. line.appendTo( line.wrap ); // Make the box unselectable. line.unselectable(); // Handle accessSpace node insertion. line.lineChildren[ 0 ].on( 'mouseup', function( event ) { line.detach(); accessFocusSpace( that, function( accessNode ) { // Use old trigger that was saved by 'place' method. Look: line.place var trigger = that.line.trigger; accessNode[ trigger.is( EDGE_TOP ) ? 'insertBefore' : 'insertAfter' ]( trigger.is( EDGE_TOP ) ? trigger.lower : trigger.upper ); }, true ); that.editor.focus(); if ( !env.ie && that.enterMode != CKEDITOR.ENTER_BR ) that.hotNode.scrollIntoView(); event.data.preventDefault( true ); } ); // Prevents IE9 from displaying the resize box and disables drag'n'drop functionality. line.on( 'mousedown', function( event ) { event.data.preventDefault( true ); } ); that.line = line; } // This function allows accessing any focus space according to the insert function: // * For enterMode ENTER_P it creates P element filled with dummy white-space. // * For enterMode ENTER_DIV it creates DIV element filled with dummy white-space. // * For enterMode ENTER_BR it creates BR element or   in IE. // // The node is being inserted according to insertFunction. Finally the method // selects the non-breaking space making the node ready for typing. function accessFocusSpace( that, insertFunction, doSave ) { var range = new CKEDITOR.dom.range( that.doc ), editor = that.editor, accessNode; // IE requires text node of   in ENTER_BR mode. if ( env.ie && that.enterMode == CKEDITOR.ENTER_BR ) accessNode = that.doc.createText( WHITE_SPACE ); // In other cases a regular element is used. else { // Use the enterMode of editable's limit or editor's // enter mode if not in nested editable. var limit = getClosestEditableLimit( that.element, true ), // This is an enter mode for the context. We cannot use // editor.activeEnterMode because the focused nested editable will // have a different enterMode as editor but magicline will be inserted // directly into editor's editable. enterMode = limit && limit.data( 'cke-enter-mode' ) || that.enterMode; accessNode = new newElement( enterElements[ enterMode ], that.doc ); if ( !accessNode.is( 'br' ) ) { var dummy = that.doc.createText( WHITE_SPACE ); dummy.appendTo( accessNode ); } } doSave && editor.fire( 'saveSnapshot' ); insertFunction( accessNode ); //dummy.appendTo( accessNode ); range.moveToPosition( accessNode, CKEDITOR.POSITION_AFTER_START ); editor.getSelection().selectRanges( [ range ] ); that.hotNode = accessNode; doSave && editor.fire( 'saveSnapshot' ); } // Access focus space on demand by taking an element under the caret as a reference. // The space is accessed provided the element under the caret is trigger AND: // // 1. First/last-child of its parent: // +----------------------- Parent element -+ // | +------------------------------ DIV -+ | <-- Access before // | | Foo^ | | // | | | | // | +------------------------------------+ | <-- Access after // +----------------------------------------+ // // OR // // 2. It has a direct sibling element, which is also a trigger: // +-------------------------------- DIV#1 -+ // | Foo^ | // | | // +----------------------------------------+ // <-- Access here // +-------------------------------- DIV#2 -+ // | Bar | // | | // +----------------------------------------+ // // OR // // 3. It has a direct sibling, which is a trigger and has a valid neighbour trigger, // but belongs to dtd.$.empty/nonEditable: // +------------------------------------ P -+ // | Foo^ | // | | // +----------------------------------------+ // +----------------------------------- HR -+ // <-- Access here // +-------------------------------- DIV#2 -+ // | Bar | // | | // +----------------------------------------+ // function accessFocusSpaceCmd( that, insertAfter ) { return { canUndo: true, modes: { wysiwyg: 1 }, exec: ( function() { // Inserts line (accessNode) at the position by taking target node as a reference. function doAccess( target ) { // Remove old hotNode under certain circumstances. var hotNodeChar = ( env.ie && env.version < 9 ? ' ' : WHITE_SPACE ), removeOld = that.hotNode && // Old hotNode must exist. that.hotNode.getText() == hotNodeChar && // Old hotNode hasn't been changed. that.element.equals( that.hotNode ) && // Caret is inside old hotNode. // Command is executed in the same direction. that.lastCmdDirection === !!insertAfter; // jshint ignore:line accessFocusSpace( that, function( accessNode ) { if ( removeOld && that.hotNode ) that.hotNode.remove(); accessNode[ insertAfter ? 'insertAfter' : 'insertBefore' ]( target ); // Make this element distinguishable. Also remember the direction // it's been inserted into document. accessNode.setAttributes( { 'data-cke-magicline-hot': 1, 'data-cke-magicline-dir': !!insertAfter } ); // Save last direction of the command (is insertAfter?). that.lastCmdDirection = !!insertAfter; } ); if ( !env.ie && that.enterMode != CKEDITOR.ENTER_BR ) that.hotNode.scrollIntoView(); // Detach the line if was visible (previously triggered by mouse). that.line.detach(); } return function( editor ) { var selected = editor.getSelection().getStartElement(), limit; // (#9833) Go down to the closest non-inline element in DOM structure // since inline elements don't participate in in magicline. selected = selected.getAscendant( DTD_BLOCK, 1 ); // Stop if selected is a child of a tabu-list element. if ( isInTabu( that, selected ) ) return; // Sometimes it may happen that there's no parent block below selected element // or, for example, getAscendant reaches editable or editable parent. // We must avoid such pathological cases. if ( !selected || selected.equals( that.editable ) || selected.contains( that.editable ) ) return; // Executing the command directly in nested editable should // access space before/after it. if ( ( limit = getClosestEditableLimit( selected ) ) && limit.getAttribute( 'contenteditable' ) == 'false' ) selected = limit; // That holds element from mouse. Replace it with the // element under the caret. that.element = selected; // (3.) Handle the following cases where selected neighbour // is a trigger inaccessible for the caret AND: // - Is first/last-child // OR // - Has a sibling, which is also a trigger. var neighbor = getNonEmptyNeighbour( that, selected, !insertAfter ), neighborSibling; // Check for a neighbour that belongs to triggers. // Consider only non-accessible elements (they cannot have any children) // since they cannot be given a caret inside, to run the command // the regular way (1. & 2.). if ( isHtml( neighbor ) && neighbor.is( that.triggers ) && neighbor.is( DTD_NONACCESSIBLE ) && ( // Check whether neighbor is first/last-child. !getNonEmptyNeighbour( that, neighbor, !insertAfter ) || // Check for a sibling of a neighbour that also is a trigger. ( ( neighborSibling = getNonEmptyNeighbour( that, neighbor, !insertAfter ) ) && isHtml( neighborSibling ) && neighborSibling.is( that.triggers ) ) ) ) { doAccess( neighbor ); return; } // Look for possible target element DOWN "selected" DOM branch (towards editable) // that belong to that.triggers var target = getAscendantTrigger( that, selected ); // No HTML target -> no access. if ( !isHtml( target ) ) return; // (1.) Target is first/last child -> access. if ( !getNonEmptyNeighbour( that, target, !insertAfter ) ) { doAccess( target ); return; } var sibling = getNonEmptyNeighbour( that, target, !insertAfter ); // (2.) Target has a sibling that belongs to that.triggers -> access. if ( sibling && isHtml( sibling ) && sibling.is( that.triggers ) ) { doAccess( target ); return; } }; } )() }; } function isLine( that, node ) { if ( !( node && node.type == CKEDITOR.NODE_ELEMENT && node.$ ) ) return false; var line = that.line; return line.wrap.equals( node ) || line.wrap.contains( node ); } // Is text node containing white-spaces only? var isEmptyTextNode = CKEDITOR.dom.walker.whitespaces(); // Is fully visible HTML node? function isHtml( node ) { return node && node.type == CKEDITOR.NODE_ELEMENT && node.$; // IE requires that } function isFloated( element ) { if ( !isHtml( element ) ) return false; var options = { left: 1, right: 1, center: 1 }; return !!( options[ element.getComputedStyle( 'float' ) ] || options[ element.getAttribute( 'align' ) ] ); } function isFlowBreaker( element ) { if ( !isHtml( element ) ) return false; return isPositioned( element ) || isFloated( element ); } // Isn't node of NODE_COMMENT type? var isComment = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_COMMENT ); function isPositioned( element ) { return !!{ absolute: 1, fixed: 1 }[ element.getComputedStyle( 'position' ) ]; } // Is text node? function isTextNode( node ) { return node && node.type == CKEDITOR.NODE_TEXT; } function isTrigger( that, element ) { return isHtml( element ) ? element.is( that.triggers ) : null; } function isInTabu( that, element ) { if ( !element ) return false; var parents = element.getParents( 1 ); for ( var i = parents.length ; i-- ; ) { for ( var j = that.tabuList.length ; j-- ; ) { if ( parents[ i ].hasAttribute( that.tabuList[ j ] ) ) return true; } } return false; } // This function checks vertically is there's a relevant child between element's edge // and the pointer. // \-> Table contents are omitted. function isChildBetweenPointerAndEdge( that, parent, edgeBottom ) { var edgeChild = parent[ edgeBottom ? 'getLast' : 'getFirst' ]( function( node ) { return that.isRelevant( node ) && !node.is( DTD_TABLECONTENT ); } ); if ( !edgeChild ) return false; updateSize( that, edgeChild ); return edgeBottom ? edgeChild.size.top > that.mouse.y : edgeChild.size.bottom < that.mouse.y; } // This method handles edge cases: // \-> Mouse is around upper or lower edge of view pane. // \-> Also scroll position is either minimal or maximal. // \-> It's OK to show LOOK_TOP(BOTTOM) type line. // // This trigger doesn't need additional post-filtering. // // +----------------------------- Editable -+ /-- // | +---------------------- First child -+ | | <-- Top edge (first child) // | | | | | // | | | | | * Mouse activation area * // | | | | | // | | ... | | \-- Top edge + trigger offset // | . . | // | | // | . . | // | | ... | | /-- Bottom edge - trigger offset // | | | | | // | | | | | * Mouse activation area * // | | | | | // | +----------------------- Last child -+ | | <-- Bottom edge (last child) // +----------------------------------------+ \-- // function triggerEditable( that ) { that.debug.groupStart( 'triggerEditable' ); // %REMOVE_LINE% var editable = that.editable, mouse = that.mouse, view = that.view, triggerOffset = that.triggerOffset, triggerLook; // Update editable dimensions. updateEditableSize( that ); // This flag determines whether checking bottom trigger. var bottomTrigger = mouse.y > ( that.inInlineMode ? ( view.editable.top + view.editable.height / 2 ) : ( // This is to handle case when editable.height / 2 <<< pane.height. Math.min( view.editable.height, view.pane.height ) / 2 ) ), // Edge node according to bottomTrigger. edgeNode = editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( function( node ) { return !( isEmptyTextNode( node ) || isComment( node ) ); } ); // There's no edge node. Abort. if ( !edgeNode ) { that.debug.logEnd( 'ABORT. No edge node found.' ); // %REMOVE_LINE% return null; } // If the edgeNode in editable is ML, get the next one. if ( isLine( that, edgeNode ) ) { edgeNode = that.line.wrap[ bottomTrigger ? 'getPrevious' : 'getNext' ]( function( node ) { return !( isEmptyTextNode( node ) || isComment( node ) ); } ); } // Exclude bad nodes (no ML needed then): // \-> Edge node is text. // \-> Edge node is floated, etc. // // Edge node *must be* a valid trigger at this stage as well. if ( !isHtml( edgeNode ) || isFlowBreaker( edgeNode ) || !isTrigger( that, edgeNode ) ) { that.debug.logEnd( 'ABORT. Invalid edge node.' ); // %REMOVE_LINE% return null; } // Update size of edge node. Dimensions will be necessary. updateSize( that, edgeNode ); // Return appropriate trigger according to bottomTrigger. // \-> Top edge trigger case first. if ( !bottomTrigger && // Top trigger case. edgeNode.size.top >= 0 && // Check if the first element is fully visible. inBetween( mouse.y, 0, edgeNode.size.top + triggerOffset ) ) { // Check if mouse in [0, edgeNode.top + triggerOffset]. // Determine trigger look. triggerLook = that.inInlineMode || view.scroll.y === 0 ? LOOK_TOP : LOOK_NORMAL; that.debug.logEnd( 'SUCCESS. Created box trigger. EDGE_TOP.' ); // %REMOVE_LINE% return new boxTrigger( [ null, edgeNode, EDGE_TOP, TYPE_EDGE, triggerLook ] ); } // \-> Bottom case. else if ( bottomTrigger && edgeNode.size.bottom <= view.pane.height && // Check if the last element is fully visible inBetween( mouse.y, // Check if mouse in... edgeNode.size.bottom - triggerOffset, view.pane.height ) ) { // [ edgeNode.bottom - triggerOffset, paneHeight ] // Determine trigger look. triggerLook = that.inInlineMode || inBetween( edgeNode.size.bottom, view.pane.height - triggerOffset, view.pane.height ) ? LOOK_BOTTOM : LOOK_NORMAL; that.debug.logEnd( 'SUCCESS. Created box trigger. EDGE_BOTTOM.' ); // %REMOVE_LINE% return new boxTrigger( [ edgeNode, null, EDGE_BOTTOM, TYPE_EDGE, triggerLook ] ); } that.debug.logEnd( 'ABORT. No trigger created.' ); // %REMOVE_LINE% return null; } // This method covers cases *inside* of an element: // \-> The pointer is in the top (bottom) area of an element and there's // HTML node before (after) this element. // \-> An element being the first or last child of its parent. // // +----------------------- Parent element -+ // | +----------------------- Element #1 -+ | /-- // | | | | | * Mouse activation area (as first child) * // | | | | \-- // | | | | /-- // | | | | | * Mouse activation area (Element #2) * // | +------------------------------------+ | \-- // | | // | +----------------------- Element #2 -+ | /-- // | | | | | * Mouse activation area (Element #1) * // | | | | \-- // | | | | // | +------------------------------------+ | // | | // | Text node is here. | // | | // | +----------------------- Element #3 -+ | // | | | | // | | | | // | | | | /-- // | | | | | * Mouse activation area (as last child) * // | +------------------------------------+ | \-- // +----------------------------------------+ // function triggerEdge( that ) { that.debug.groupStart( 'triggerEdge' ); // %REMOVE_LINE% var mouse = that.mouse, view = that.view, triggerOffset = that.triggerOffset; // Get the ascendant trigger basing on elementFromMouse. var element = getAscendantTrigger( that ); that.debug.logElements( [ element ], [ 'Ascendant trigger' ], 'First stage' ); // %REMOVE_LINE% // Abort if there's no appropriate element. if ( !element ) { that.debug.logEnd( 'ABORT. No element, element is editable or element contains editable.' ); // %REMOVE_LINE% return null; } // Dimensions will be necessary. updateSize( that, element ); // If triggerOffset is larger than a half of element's height, // use an offset of 1/2 of element's height. If the offset wasn't reduced, // top area would cover most (all) cases. var fixedOffset = Math.min( triggerOffset, 0 | ( element.size.outerHeight / 2 ) ), // This variable will hold the trigger to be returned. triggerSetup = [], triggerLook, // This flag determines whether dealing with a bottom trigger. bottomTrigger; // \-> Top trigger. if ( inBetween( mouse.y, element.size.top - 1, element.size.top + fixedOffset ) ) bottomTrigger = false; // \-> Bottom trigger. else if ( inBetween( mouse.y, element.size.bottom - fixedOffset, element.size.bottom + 1 ) ) bottomTrigger = true; // \-> Abort. Not in a valid trigger space. else { that.debug.logEnd( 'ABORT. Not around of any edge.' ); // %REMOVE_LINE% return null; } // Reject wrong elements. // \-> Reject an element which is a flow breaker. // \-> Reject an element which has a child above/below the mouse pointer. // \-> Reject an element which belongs to list items. if ( isFlowBreaker( element ) || isChildBetweenPointerAndEdge( that, element, bottomTrigger ) || element.getParent().is( DTD_LISTITEM ) ) { that.debug.logEnd( 'ABORT. element is wrong', element ); // %REMOVE_LINE% return null; } // Get sibling according to bottomTrigger. var elementSibling = getNonEmptyNeighbour( that, element, !bottomTrigger ); // No sibling element. // This is a first or last child case. if ( !elementSibling ) { // No need to reject the element as it has already been done before. // Prepare a trigger. // Determine trigger look. if ( element.equals( that.editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( that.isRelevant ) ) ) { updateEditableSize( that ); if ( bottomTrigger && inBetween( mouse.y, element.size.bottom - fixedOffset, view.pane.height ) && inBetween( element.size.bottom, view.pane.height - fixedOffset, view.pane.height ) ) { triggerLook = LOOK_BOTTOM; } else if ( inBetween( mouse.y, 0, element.size.top + fixedOffset ) ) { triggerLook = LOOK_TOP; } } else { triggerLook = LOOK_NORMAL; } triggerSetup = [ null, element ][ bottomTrigger ? 'reverse' : 'concat' ]().concat( [ bottomTrigger ? EDGE_BOTTOM : EDGE_TOP, TYPE_EDGE, triggerLook, element.equals( that.editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( that.isRelevant ) ) ? ( bottomTrigger ? LOOK_BOTTOM : LOOK_TOP ) : LOOK_NORMAL ] ); that.debug.log( 'Configured edge trigger of ' + ( bottomTrigger ? 'EDGE_BOTTOM' : 'EDGE_TOP' ) ); // %REMOVE_LINE% } // Abort. Sibling is a text element. else if ( isTextNode( elementSibling ) ) { that.debug.logEnd( 'ABORT. Sibling is non-empty text element' ); // %REMOVE_LINE% return null; } // Check if the sibling is a HTML element. // If so, create an TYPE_EDGE, EDGE_MIDDLE trigger. else if ( isHtml( elementSibling ) ) { // Reject wrong elementSiblings. // \-> Reject an elementSibling which is a flow breaker. // \-> Reject an elementSibling which isn't a trigger. // \-> Reject an elementSibling which belongs to list items. if ( isFlowBreaker( elementSibling ) || !isTrigger( that, elementSibling ) || elementSibling.getParent().is( DTD_LISTITEM ) ) { that.debug.logEnd( 'ABORT. elementSibling is wrong', elementSibling ); // %REMOVE_LINE% return null; } // Prepare a trigger. triggerSetup = [ elementSibling, element ][ bottomTrigger ? 'reverse' : 'concat' ]().concat( [ EDGE_MIDDLE, TYPE_EDGE ] ); that.debug.log( 'Configured edge trigger of EDGE_MIDDLE' ); // %REMOVE_LINE% } if ( 0 in triggerSetup ) { that.debug.logEnd( 'SUCCESS. Returning a trigger.' ); // %REMOVE_LINE% return new boxTrigger( triggerSetup ); } that.debug.logEnd( 'ABORT. No trigger generated.' ); // %REMOVE_LINE% return null; } // Checks iteratively up and down in search for elements using elementFromMouse method. // Useful if between two triggers. // // +----------------------- Parent element -+ // | +----------------------- Element #1 -+ | // | | | | // | | | | // | | | | // | +------------------------------------+ | // | | /-- // | . | | // | . +-- Floated -+ | | // | | | | | | * Mouse activation area * // | | | IGNORE | | | // | X | | | | Method searches vertically for sibling elements. // | | +------------+ | | Start point is X (mouse-y coordinate). // | | | | Floated elements, comments and empty text nodes are omitted. // | . | | // | . | | // | | \-- // | +----------------------- Element #2 -+ | // | | | | // | | | | // | | | | // | | | | // | +------------------------------------+ | // +----------------------------------------+ // var triggerExpand = ( function() { // The heart of the procedure. This method creates triggers that are // filtered by expandFilter method. function expandEngine( that ) { that.debug.groupStart( 'expandEngine' ); // %REMOVE_LINE% var startElement = that.element, upper, lower, trigger; if ( !isHtml( startElement ) || startElement.contains( that.editable ) ) { that.debug.logEnd( 'ABORT. No start element, or start element contains editable.' ); // %REMOVE_LINE% return null; } // Stop searching if element is in non-editable branch of DOM. if ( startElement.isReadOnly() ) return null; trigger = verticalSearch( that, function( current, startElement ) { return !startElement.equals( current ); // stop when start element and the current one differ }, function( that, mouse ) { return elementFromMouse( that, true, mouse ); }, startElement ), upper = trigger.upper, lower = trigger.lower; that.debug.logElements( [ upper, lower ], [ 'Upper', 'Lower' ], 'Pair found' ); // %REMOVE_LINE% // Success: two siblings have been found if ( areSiblings( that, upper, lower ) ) { that.debug.logEnd( 'SUCCESS. Expand trigger created.' ); // %REMOVE_LINE% return trigger.set( EDGE_MIDDLE, TYPE_EXPAND ); } that.debug.logElements( [ startElement, upper, lower ], // %REMOVE_LINE% [ 'Start', 'Upper', 'Lower' ], 'Post-processing' ); // %REMOVE_LINE% // Danger. Dragons ahead. // No siblings have been found during previous phase, post-processing may be necessary. // We can traverse DOM until a valid pair of elements around the pointer is found. // Prepare for post-processing: // 1. Determine if upper and lower are children of startElement. // 1.1. If so, find their ascendants that are closest to startElement (one level deeper than startElement). // 1.2. Otherwise use first/last-child of the startElement as upper/lower. Why?: // a) upper/lower belongs to another branch of the DOM tree. // b) verticalSearch encountered an edge of the viewport and failed. // 1.3. Make sure upper and lower still exist. Why?: // a) Upper and lower may be not belong to the branch of the startElement (may not exist at all) and // startElement has no children. // 2. Perform the post-processing. // 2.1. Gather dimensions of an upper element. // 2.2. Abort if lower edge of upper is already under the mouse pointer. Why?: // a) We expect upper to be above and lower below the mouse pointer. // 3. Perform iterative search while upper != lower. // 3.1. Find the upper-next element. If there's no such element, break current search. Why?: // a) There's no point in further search if there are only text nodes ahead. // 3.2. Calculate the distance between the middle point of ( upper, upperNext ) and mouse-y. // 3.3. If the distance is shorter than the previous best, save it (save upper, upperNext as well). // 3.4. If the optimal pair is found, assign it back to the trigger. // 1.1., 1.2. if ( upper && startElement.contains( upper ) ) { while ( !upper.getParent().equals( startElement ) ) upper = upper.getParent(); } else { upper = startElement.getFirst( function( node ) { return expandSelector( that, node ); } ); } if ( lower && startElement.contains( lower ) ) { while ( !lower.getParent().equals( startElement ) ) lower = lower.getParent(); } else { lower = startElement.getLast( function( node ) { return expandSelector( that, node ); } ); } // 1.3. if ( !upper || !lower ) { that.debug.logEnd( 'ABORT. There is no upper or no lower element.' ); // %REMOVE_LINE% return null; } // 2.1. updateSize( that, upper ); updateSize( that, lower ); if ( !checkMouseBetweenElements( that, upper, lower ) ) { that.debug.logEnd( 'ABORT. Mouse is already above upper or below lower.' ); // %REMOVE_LINE% return null; } var minDistance = Number.MAX_VALUE, currentDistance, upperNext, minElement, minElementNext; while ( lower && !lower.equals( upper ) ) { // 3.1. if ( !( upperNext = upper.getNext( that.isRelevant ) ) ) break; // 3.2. currentDistance = Math.abs( getMidpoint( that, upper, upperNext ) - that.mouse.y ); // 3.3. if ( currentDistance < minDistance ) { minDistance = currentDistance; minElement = upper; minElementNext = upperNext; } upper = upperNext; updateSize( that, upper ); } that.debug.logElements( [ minElement, minElementNext ], // %REMOVE_LINE% [ 'Min', 'MinNext' ], 'Post-processing results' ); // %REMOVE_LINE% // 3.4. if ( !minElement || !minElementNext ) { that.debug.logEnd( 'ABORT. No Min or MinNext' ); // %REMOVE_LINE% return null; } if ( !checkMouseBetweenElements( that, minElement, minElementNext ) ) { that.debug.logEnd( 'ABORT. Mouse is already above minElement or below minElementNext.' ); // %REMOVE_LINE% return null; } // An element of minimal distance has been found. Assign it to the trigger. trigger.upper = minElement; trigger.lower = minElementNext; // Success: post-processing revealed a pair of elements. that.debug.logEnd( 'SUCCESSFUL post-processing. Trigger created.' ); // %REMOVE_LINE% return trigger.set( EDGE_MIDDLE, TYPE_EXPAND ); } // This is default element selector used by the engine. function expandSelector( that, node ) { return !( isTextNode( node ) || isComment( node ) || isFlowBreaker( node ) || isLine( that, node ) || ( node.type == CKEDITOR.NODE_ELEMENT && node.$ && node.is( 'br' ) ) ); } // This method checks whether mouse-y is between the top edge of upper // and bottom edge of lower. // // NOTE: This method assumes that updateSize has already been called // for the elements and is up-to-date. // // +---------------------------- Upper -+ /-- // | | | // +------------------------------------+ | // | // ... | // | // X | * Return true for mouse-y in this range * // | // ... | // | // +---------------------------- Lower -+ | // | | | // +------------------------------------+ \-- // function checkMouseBetweenElements( that, upper, lower ) { return inBetween( that.mouse.y, upper.size.top, lower.size.bottom ); } // A method for trigger filtering. Accepts or rejects trigger pairs // by their location in DOM etc. function expandFilter( that, trigger ) { that.debug.groupStart( 'expandFilter' ); // %REMOVE_LINE% var upper = trigger.upper, lower = trigger.lower; if ( !upper || !lower || // NOT: EDGE_MIDDLE trigger ALWAYS has two elements. isFlowBreaker( lower ) || isFlowBreaker( upper ) || // NOT: one of the elements is floated or positioned lower.equals( upper ) || upper.equals( lower ) || // NOT: two trigger elements, one equals another. lower.contains( upper ) || upper.contains( lower ) ) { // NOT: two trigger elements, one contains another. that.debug.logEnd( 'REJECTED. No upper or no lower or they contain each other.' ); // %REMOVE_LINE% return false; } // YES: two trigger elements, pure siblings. else if ( isTrigger( that, upper ) && isTrigger( that, lower ) && areSiblings( that, upper, lower ) ) { that.debug.logElementsEnd( [ upper, lower ], // %REMOVE_LINE% [ 'upper', 'lower' ], 'APPROVED EDGE_MIDDLE' ); // %REMOVE_LINE% return true; } that.debug.logElementsEnd( [ upper, lower ], // %REMOVE_LINE% [ 'upper', 'lower' ], 'Rejected unknown pair' ); // %REMOVE_LINE% return false; } // Simple wrapper for expandEngine and expandFilter. return function( that ) { that.debug.groupStart( 'triggerExpand' ); // %REMOVE_LINE% var trigger = expandEngine( that ); that.debug.groupEnd(); // %REMOVE_LINE% return trigger && expandFilter( that, trigger ) ? trigger : null; }; } )(); // Collects dimensions of an element. var sizePrefixes = [ 'top', 'left', 'right', 'bottom' ]; function getSize( that, element, ignoreScroll, force ) { var docPosition = element.getDocumentPosition(), border = {}, margin = {}, padding = {}, box = {}; for ( var i = sizePrefixes.length; i--; ) { border[ sizePrefixes[ i ] ] = parseInt( getStyle( 'border-' + sizePrefixes[ i ] + '-width' ), 10 ) || 0; padding[ sizePrefixes[ i ] ] = parseInt( getStyle( 'padding-' + sizePrefixes[ i ] ), 10 ) || 0; margin[ sizePrefixes[ i ] ] = parseInt( getStyle( 'margin-' + sizePrefixes[ i ] ), 10 ) || 0; } // updateWindowSize if forced to do so OR NOT ignoring scroll. if ( !ignoreScroll || force ) updateWindowSize( that, force ); box.top = docPosition.y - ( ignoreScroll ? 0 : that.view.scroll.y ), box.left = docPosition.x - ( ignoreScroll ? 0 : that.view.scroll.x ), // w/ borders and paddings. box.outerWidth = element.$.offsetWidth, box.outerHeight = element.$.offsetHeight, // w/o borders and paddings. box.height = box.outerHeight - ( padding.top + padding.bottom + border.top + border.bottom ), box.width = box.outerWidth - ( padding.left + padding.right + border.left + border.right ), box.bottom = box.top + box.outerHeight, box.right = box.left + box.outerWidth; if ( that.inInlineMode ) { box.scroll = { top: element.$.scrollTop, left: element.$.scrollLeft }; } return extend( { border: border, padding: padding, margin: margin, ignoreScroll: ignoreScroll }, box, true ); function getStyle( propertyName ) { return element.getComputedStyle.call( element, propertyName ); } } function updateSize( that, element, ignoreScroll ) { if ( !isHtml( element ) ) // i.e. an element is hidden return ( element.size = null ); // -> reset size to make it useless for other methods if ( !element.size ) element.size = {}; // Abort if there was a similar query performed recently. // This kind of caching provides great performance improvement. else if ( element.size.ignoreScroll == ignoreScroll && element.size.date > new Date() - CACHE_TIME ) { that.debug.log( 'element.size: get from cache' ); // %REMOVE_LINE% return null; } that.debug.log( 'element.size: capture' ); // %REMOVE_LINE% return extend( element.size, getSize( that, element, ignoreScroll ), { date: +new Date() }, true ); } // Updates that.view.editable object. // This one must be called separately outside of updateWindowSize // to prevent cyclic dependency getSize<->updateWindowSize. // It calls getSize with force flag to avoid getWindowSize cache (look: getSize). function updateEditableSize( that, ignoreScroll ) { that.view.editable = getSize( that, that.editable, ignoreScroll, true ); } function updateWindowSize( that, force ) { if ( !that.view ) that.view = {}; var view = that.view; if ( !force && view && view.date > new Date() - CACHE_TIME ) { that.debug.log( 'win.size: get from cache' ); // %REMOVE_LINE% return; } that.debug.log( 'win.size: capturing' ); // %REMOVE_LINE% var win = that.win, scroll = win.getScrollPosition(), paneSize = win.getViewPaneSize(); extend( that.view, { scroll: { x: scroll.x, y: scroll.y, width: that.doc.$.documentElement.scrollWidth - paneSize.width, height: that.doc.$.documentElement.scrollHeight - paneSize.height }, pane: { width: paneSize.width, height: paneSize.height, bottom: paneSize.height + scroll.y }, date: +new Date() }, true ); } // This method searches document vertically using given // select criterion until stop criterion is fulfilled. function verticalSearch( that, stopCondition, selectCriterion, startElement ) { var upper = startElement, lower = startElement, mouseStep = 0, upperFound = false, lowerFound = false, viewPaneHeight = that.view.pane.height, mouse = that.mouse; while ( mouse.y + mouseStep < viewPaneHeight && mouse.y - mouseStep > 0 ) { if ( !upperFound ) upperFound = stopCondition( upper, startElement ); if ( !lowerFound ) lowerFound = stopCondition( lower, startElement ); // Still not found... if ( !upperFound && mouse.y - mouseStep > 0 ) upper = selectCriterion( that, { x: mouse.x, y: mouse.y - mouseStep } ); if ( !lowerFound && mouse.y + mouseStep < viewPaneHeight ) lower = selectCriterion( that, { x: mouse.x, y: mouse.y + mouseStep } ); if ( upperFound && lowerFound ) break; // Instead of ++ to reduce the number of invocations by half. // It's trades off accuracy in some edge cases for improved performance. mouseStep += 2; } return new boxTrigger( [ upper, lower, null, null ] ); } } )(); /** * Sets the default vertical distance between the edge of the element and the mouse pointer that * causes the magic line to appear. This option accepts a value in pixels, without the unit (for example: * `15` for 15 pixels). * * // Changes the offset to 15px. * CKEDITOR.config.magicline_triggerOffset = 15; * * @cfg {Number} [magicline_triggerOffset=30] * @member CKEDITOR.config * @see CKEDITOR.config#magicline_holdDistance */ /** * Defines the distance between the mouse pointer and the box, within * which the magic line stays revealed and no other focus space is offered to be accessed. * This value is relative to {@link #magicline_triggerOffset}. * * // Increases the distance to 80% of CKEDITOR.config.magicline_triggerOffset. * CKEDITOR.config.magicline_holdDistance = .8; * * @cfg {Number} [magicline_holdDistance=0.5] * @member CKEDITOR.config * @see CKEDITOR.config#magicline_triggerOffset */ /** * Defines the default keystroke that access the closest unreachable focus space **before** * the caret (start of the selection). If there's no any focus space, selection remains. * * // Changes the default keystroke to "Ctrl + ,". * CKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + 188; * * @cfg {Number} [magicline_keystrokePrevious=CKEDITOR.CTRL + CKEDITOR.SHIFT + 51 (CTRL + SHIFT + 3)] * @member CKEDITOR.config */ CKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + CKEDITOR.SHIFT + 51; // CTRL + SHIFT + 3 /** * Defines the default keystroke that access the closest unreachable focus space **after** * the caret (start of the selection). If there's no any focus space, selection remains. * * // Changes keystroke to "Ctrl + .". * CKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + 190; * * @cfg {Number} [magicline_keystrokeNext=CKEDITOR.CTRL + CKEDITOR.SHIFT + 52 (CTRL + SHIFT + 4)] * @member CKEDITOR.config */ CKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + CKEDITOR.SHIFT + 52; // CTRL + SHIFT + 4 /** * Defines a list of attributes that, if assigned to some elements, prevent the magic line from being * used within these elements. * * // Adds the "data-tabu" attribute to the magic line tabu list. * CKEDITOR.config.magicline_tabuList = [ 'data-tabu' ]; * * @cfg {Number} [magicline_tabuList=[ 'data-widget-wrapper' ]] * @member CKEDITOR.config */ /** * Defines the color of the magic line. The color may be adjusted to enhance readability. * * // Changes magic line color to blue. * CKEDITOR.config.magicline_color = '#0000FF'; * * @cfg {String} [magicline_color='#FF0000'] * @member CKEDITOR.config */ /** * Activates the special all-encompassing mode that considers all focus spaces between * {@link CKEDITOR.dtd#$block} elements as accessible by the magic line. * * // Enables the greedy "put everywhere" mode. * CKEDITOR.config.magicline_everywhere = true; * * @cfg {Boolean} [magicline_everywhere=false] * @member CKEDITOR.config */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/0000755000175000017500000000000014006075351022562 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/bg.js0000644000175000017500000000041014006075351023503 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'bg', { title: 'Вмъкнете параграф тук' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/cy.js0000644000175000017500000000036614006075351023540 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'cy', { title: 'Mewnosod paragraff yma' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/no.js0000644000175000017500000000037114006075351023535 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'no', { title: 'Sett inn nytt avsnitt her' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/hr.js0000644000175000017500000000036414006075351023534 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'hr', { title: 'Ubaci paragraf ovdje' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/ar.js0000644000175000017500000000037214006075351023524 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'ar', { title: 'إدراج فقرة هنا' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/sk.js0000644000175000017500000000036414006075351023540 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'sk', { title: 'Sem vložte paragraf' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/ug.js0000644000175000017500000000041114006075351023527 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'ug', { title: 'بۇ جايغا ئابزاس قىستۇر' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/el.js0000644000175000017500000000041214006075351023515 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'el', { title: 'Εισάγετε παράγραφο εδώ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/de.js0000644000175000017500000000036514006075351023514 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'de', { title: 'Absatz hier einfügen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/uk.js0000644000175000017500000000037314006075351023542 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'uk', { title: 'Вставити абзац' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/km.js0000644000175000017500000000044514006075351023532 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'km', { title: 'បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/eu.js0000644000175000017500000000037114006075351023532 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'eu', { title: 'Txertatu paragrafoa hemen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/fa.js0000644000175000017500000000041014006075351023501 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'fa', { title: 'قرار دادن بند در اینجا' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/si.js0000644000175000017500000000041714006075351023535 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'si', { title: 'චේදය ඇතුලත් කරන්න' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/en.js0000644000175000017500000000036514006075351023526 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'en', { title: 'Insert paragraph here' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/he.js0000644000175000017500000000037014006075351023514 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'he', { title: 'הכנס פסקה כאן' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/lv.js0000644000175000017500000000036714006075351023547 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'lv', { title: 'Ievietot šeit rindkopu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/eo.js0000644000175000017500000000037214006075351023525 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'eo', { title: 'Enmeti paragrafon ĉi-tien' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/ca.js0000644000175000017500000000037314006075351023506 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'ca', { title: 'Insereix el paràgraf aquí' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/gl.js0000644000175000017500000000037214006075351023524 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'gl', { title: 'Inserir aquí o parágrafo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/ko.js0000644000175000017500000000036714006075351023537 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'ko', { title: '여기에 단락 삽입' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/zh.js0000644000175000017500000000036214006075351023542 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'zh', { title: '在此插入段落' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/es.js0000644000175000017500000000036714006075351023535 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'es', { title: 'Insertar párrafo aquí' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/tt.js0000644000175000017500000000041014006075351023542 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'tt', { title: 'Бирегә параграф өстәү' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/it.js0000644000175000017500000000036714006075351023542 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'it', { title: 'Inserisci paragrafo qui' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/sv.js0000644000175000017500000000036414006075351023553 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'sv', { title: 'Infoga paragraf här' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/tr.js0000644000175000017500000000036714006075351023553 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'tr', { title: 'Parağrafı buraya ekle' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/pl.js0000644000175000017500000000036114006075351023533 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'pl', { title: 'Wstaw nowy akapit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/nb.js0000644000175000017500000000037114006075351023520 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'nb', { title: 'Sett inn nytt avsnitt her' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/sl.js0000644000175000017500000000036714006075351023544 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'sl', { title: 'Vstavite odstavek tukaj' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/fi.js0000644000175000017500000000037014006075351023516 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'fi', { title: 'Lisää kappale tähän.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/fr-ca.js0000644000175000017500000000037514006075351024115 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'fr-ca', { title: 'Insérer le paragraphe ici' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/ru.js0000644000175000017500000000041414006075351023545 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'ru', { title: 'Вставить здесь параграф' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/zh-cn.js0000644000175000017500000000036514006075351024143 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'zh-cn', { title: '在这插入段落' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/cs.js0000644000175000017500000000036414006075351023530 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'cs', { title: 'zde vložit odstavec' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/pt.js0000644000175000017500000000037014006075351023543 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'pt', { title: 'Insira aqui o parágrafo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/pt-br.js0000644000175000017500000000037414006075351024150 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'pt-br', { title: 'Insera um parágrafo aqui' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/et.js0000644000175000017500000000037114006075351023531 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'et', { title: 'Sisesta siia lõigu tekst' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/da.js0000644000175000017500000000035614006075351023510 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'da', { title: 'Indsæt afsnit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/af.js0000644000175000017500000000036614006075351023513 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'af', { title: 'Voeg paragraaf hier in' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/hu.js0000644000175000017500000000037314006075351023537 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'hu', { title: 'Szúrja be a bekezdést ide' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/nl.js0000644000175000017500000000036714006075351023537 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'nl', { title: 'Hier paragraaf invoeren' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/vi.js0000644000175000017500000000037014006075351023536 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'vi', { title: 'Chèn đoạn vào đây' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/ja.js0000644000175000017500000000037014006075351023512 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'ja', { title: 'ここに段落を挿入' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/id.js0000644000175000017500000000037014006075351023514 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'id', { title: 'Masukkan paragraf disini' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/en-gb.js0000644000175000017500000000037014006075351024110 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'en-gb', { title: 'Insert paragraph here' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/sq.js0000644000175000017500000000036514006075351023547 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'sq', { title: 'Vendos paragraf këtu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/ku.js0000644000175000017500000000037414006075351023543 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'ku', { title: 'بڕگە لێرە دابنێ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/lang/fr.js0000644000175000017500000000037214006075351023531 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'magicline', 'fr', { title: 'Insérez un paragraphe ici' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/dev/0000755000175000017500000000000014006075351022417 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/dev/magicline.html0000644000175000017500000055411414006075351025247 0ustar domdom Magicline muddy trenches – CKEditor Sample

    CKEditor Sample — magicline muddy trenches

    Various cases

    Odd case: first (last) element at the very beginning, short editable

    Large document, put everywhere

    Deeply nested divs

    Line custom look

    Little Red Riding Hood

    "Little Red Riding Hood" is a famous fairy tale about a young girl's encounter with a wolf. The story has been changed considerably in its history and subject to numerous modern adaptations and readings.

    International Names
    Chinese 小紅帽
    Italian Cappuccetto Rosso
    Spanish Caperucita Roja


    The version most widely known today is based on the Brothers Grimm variant. It is about a girl called Little Red Riding Hood, after the red hooded cape or cloak she wears. The girl walks through the woods to deliver food to her sick grandmother.

    A wolf wants to eat the girl but is afraid to do so in public. He approaches the girl, and she naïvely tells him where she is going. He suggests the girl pick some flowers, which she does. In the meantime, he goes to the grandmother's house and gains entry by pretending to be the girl. He swallows the grandmother whole, and waits for the girl, disguised as the grandmother.

    When the girl arrives, she notices he looks very strange to be her grandma. In most retellings, this eventually culminates with Little Red Riding Hood saying, "My, what big teeth you have!"
    To which the wolf replies, "The better to eat you with," and swallows her whole, too.

    A hunter, however, comes to the rescue and cuts the wolf open. Little Red Riding Hood and her grandmother emerge unharmed. They fill the wolf's body with heavy stones, which drown him when he falls into a well. Other versions of the story have had the grandmother shut in the closet instead of eaten, and some have Little Red Riding Hood saved by the hunter as the wolf advances on her rather than after she is eaten.

    The tale makes the clearest contrast between the safe world of the village and the dangers of the forest, conventional antitheses that are essentially medieval, though no written versions are as old as that.

    Extreme inline editing

    Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim.
    Position static
    foo
    Key
    Value
    Whatever

    Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies



    Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies

    foo

    Enter mode: BR

    Mouse over: Mouse Y-pos.:

    Time:

    Hidden state:

    rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/images/0000755000175000017500000000000013776355015023121 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/images/icon.png0000644000175000017500000000020513776355015024554 0ustar domdomPNG  IHDR ftLIDATӅ10UڬBzb8 Qv X 0bܴI Punm줁vcB7/'ܸIENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/images/icon-rtl.png0000644000175000017500000000021213776355015025351 0ustar domdomPNG  IHDR ftQIDATA 5a!& k4NAee% ALHgNzmPs]lu=b& #3IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/images/hidpi/0000755000175000017500000000000013776355015024216 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/images/hidpi/icon.png0000644000175000017500000000030713776355015025654 0ustar domdomPNG  IHDRrpyPLTE#~_tRNSWIDAT}0 ߕZ1>~ [)CC !!٭ mTXO!fg|-1%I?b }%NIENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/magicline/images/hidpi/icon-rtl.png0000644000175000017500000000026013776355015026451 0ustar domdomPNG  IHDRrpyPLTEHmtRNSoDIDATcPQa4+4 ÔBכMff0}iPD@&L & 3j'_S~R.IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/tab/0000755000175000017500000000000014006075351020457 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/tab/plugin.js0000644000175000017500000002177514006075351022327 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { var meta = { editorFocus: false, modes: { wysiwyg: 1, source: 1 } }; var blurCommand = { exec: function( editor ) { editor.container.focusNext( true, editor.tabIndex ); } }; var blurBackCommand = { exec: function( editor ) { editor.container.focusPrevious( true, editor.tabIndex ); } }; function selectNextCellCommand( backward ) { return { editorFocus: false, canUndo: false, modes: { wysiwyg: 1 }, exec: function( editor ) { if ( editor.editable().hasFocus ) { var sel = editor.getSelection(), path = new CKEDITOR.dom.elementPath( sel.getCommonAncestor(), sel.root ), cell; if ( ( cell = path.contains( { td: 1, th: 1 }, 1 ) ) ) { var resultRange = editor.createRange(), next = CKEDITOR.tools.tryThese( function() { var row = cell.getParent(), next = row.$.cells[ cell.$.cellIndex + ( backward ? -1 : 1 ) ]; // Invalid any empty value. next.parentNode.parentNode; return next; }, function() { var row = cell.getParent(), table = row.getAscendant( 'table' ), nextRow = table.$.rows[ row.$.rowIndex + ( backward ? -1 : 1 ) ]; return nextRow.cells[ backward ? nextRow.cells.length - 1 : 0 ]; } ); // Clone one more row at the end of table and select the first newly established cell. if ( !( next || backward ) ) { var table = cell.getAscendant( 'table' ).$, cells = cell.getParent().$.cells; var newRow = new CKEDITOR.dom.element( table.insertRow( -1 ), editor.document ); for ( var i = 0, count = cells.length; i < count; i++ ) { var newCell = newRow.append( new CKEDITOR.dom.element( cells[ i ], editor.document ).clone( false, false ) ); newCell.appendBogus(); } resultRange.moveToElementEditStart( newRow ); } else if ( next ) { next = new CKEDITOR.dom.element( next ); resultRange.moveToElementEditStart( next ); // Avoid selecting empty block makes the cursor blind. if ( !( resultRange.checkStartOfBlock() && resultRange.checkEndOfBlock() ) ) resultRange.selectNodeContents( next ); } else { return true; } resultRange.select( true ); return true; } } return false; } }; } CKEDITOR.plugins.add( 'tab', { init: function( editor ) { var tabTools = editor.config.enableTabKeyTools !== false, tabSpaces = editor.config.tabSpaces || 0, tabText = ''; while ( tabSpaces-- ) tabText += '\xa0'; if ( tabText ) { editor.on( 'key', function( ev ) { // TAB. if ( ev.data.keyCode == 9 ) { editor.insertText( tabText ); ev.cancel(); } } ); } if ( tabTools ) { editor.on( 'key', function( ev ) { if ( ev.data.keyCode == 9 && editor.execCommand( 'selectNextCell' ) || // TAB ev.data.keyCode == ( CKEDITOR.SHIFT + 9 ) && editor.execCommand( 'selectPreviousCell' ) ) // SHIFT+TAB ev.cancel(); } ); } editor.addCommand( 'blur', CKEDITOR.tools.extend( blurCommand, meta ) ); editor.addCommand( 'blurBack', CKEDITOR.tools.extend( blurBackCommand, meta ) ); editor.addCommand( 'selectNextCell', selectNextCellCommand() ); editor.addCommand( 'selectPreviousCell', selectNextCellCommand( true ) ); } } ); } )(); /** * Moves the UI focus to the element following this element in the tabindex order. * * var element = CKEDITOR.document.getById( 'example' ); * element.focusNext(); * * @param {Boolean} [ignoreChildren=false] * @param {Number} [indexToUse] * @member CKEDITOR.dom.element */ CKEDITOR.dom.element.prototype.focusNext = function( ignoreChildren, indexToUse ) { var curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ), passedCurrent, enteredCurrent, elected, electedTabIndex, element, elementTabIndex; if ( curTabIndex <= 0 ) { // If this element has tabindex <= 0 then we must simply look for any // element following it containing tabindex=0. element = this.getNextSourceNode( ignoreChildren, CKEDITOR.NODE_ELEMENT ); while ( element ) { if ( element.isVisible() && element.getTabIndex() === 0 ) { elected = element; break; } element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ); } } else { // If this element has tabindex > 0 then we must look for: // 1. An element following this element with the same tabindex. // 2. The first element in source other with the lowest tabindex // that is higher than this element tabindex. // 3. The first element with tabindex=0. element = this.getDocument().getBody().getFirst(); while ( ( element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) ) { if ( !passedCurrent ) { if ( !enteredCurrent && element.equals( this ) ) { enteredCurrent = true; // Ignore this element, if required. if ( ignoreChildren ) { if ( !( element = element.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) ) break; passedCurrent = 1; } } else if ( enteredCurrent && !this.contains( element ) ) { passedCurrent = 1; } } if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 ) continue; if ( passedCurrent && elementTabIndex == curTabIndex ) { elected = element; break; } if ( elementTabIndex > curTabIndex && ( !elected || !electedTabIndex || elementTabIndex < electedTabIndex ) ) { elected = element; electedTabIndex = elementTabIndex; } else if ( !elected && elementTabIndex === 0 ) { elected = element; electedTabIndex = elementTabIndex; } } } if ( elected ) elected.focus(); }; /** * Moves the UI focus to the element before this element in the tabindex order. * * var element = CKEDITOR.document.getById( 'example' ); * element.focusPrevious(); * * @param {Boolean} [ignoreChildren=false] * @param {Number} [indexToUse] * @member CKEDITOR.dom.element */ CKEDITOR.dom.element.prototype.focusPrevious = function( ignoreChildren, indexToUse ) { var curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ), passedCurrent, enteredCurrent, elected, electedTabIndex = 0, elementTabIndex; var element = this.getDocument().getBody().getLast(); while ( ( element = element.getPreviousSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) ) { if ( !passedCurrent ) { if ( !enteredCurrent && element.equals( this ) ) { enteredCurrent = true; // Ignore this element, if required. if ( ignoreChildren ) { if ( !( element = element.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) ) break; passedCurrent = 1; } } else if ( enteredCurrent && !this.contains( element ) ) { passedCurrent = 1; } } if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 ) continue; if ( curTabIndex <= 0 ) { // If this element has tabindex <= 0 then we must look for: // 1. An element before this one containing tabindex=0. // 2. The last element with the highest tabindex. if ( passedCurrent && elementTabIndex === 0 ) { elected = element; break; } if ( elementTabIndex > electedTabIndex ) { elected = element; electedTabIndex = elementTabIndex; } } else { // If this element has tabindex > 0 we must look for: // 1. An element preceeding this one, with the same tabindex. // 2. The last element in source other with the highest tabindex // that is lower than this element tabindex. if ( passedCurrent && elementTabIndex == curTabIndex ) { elected = element; break; } if ( elementTabIndex < curTabIndex && ( !elected || elementTabIndex > electedTabIndex ) ) { elected = element; electedTabIndex = elementTabIndex; } } } if ( elected ) elected.focus(); }; /** * Intructs the editor to add a number of spaces (` `) to the text when * hitting the *TAB* key. If set to zero, the *TAB* key will be used to move the * cursor focus to the next element in the page, out of the editor focus. * * config.tabSpaces = 4; * * @cfg {Number} [tabSpaces=0] * @member CKEDITOR.config */ /** * Allow context-sensitive tab key behaviors, including the following scenarios: * * When selection is anchored inside **table cells**: * * * If *TAB* is pressed, select the contents of the "next" cell. If in the last * cell in the table, add a new row to it and focus its first cell. * * If *SHIFT+TAB* is pressed, select the contents of the "previous" cell. * Do nothing when it's in the first cell. * * Example: * * config.enableTabKeyTools = false; * * @cfg {Boolean} [enableTabKeyTools=true] * @member CKEDITOR.config */ // If the TAB key is not supposed to be enabled for navigation, the following // settings could be used alternatively: // config.keystrokes.push( // [ CKEDITOR.ALT + 38 /*Arrow Up*/, 'selectPreviousCell' ], // [ CKEDITOR.ALT + 40 /*Arrow Down*/, 'selectNextCell' ] // ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/0000755000175000017500000000000014006075351021406 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/plugin.js0000755000175000017500000001672314006075351023256 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview Justify commands. */ ( function() { function getAlignment( element, useComputedState ) { useComputedState = useComputedState === undefined || useComputedState; var align; if ( useComputedState ) align = element.getComputedStyle( 'text-align' ); else { while ( !element.hasAttribute || !( element.hasAttribute( 'align' ) || element.getStyle( 'text-align' ) ) ) { var parent = element.getParent(); if ( !parent ) break; element = parent; } align = element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || ''; } // Sometimes computed values doesn't tell. align && ( align = align.replace( /(?:-(?:moz|webkit)-)?(?:start|auto)/i, '' ) ); !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' ); return align; } function justifyCommand( editor, name, value ) { this.editor = editor; this.name = name; this.value = value; this.context = 'p'; var classes = editor.config.justifyClasses, blockTag = editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div'; if ( classes ) { switch ( value ) { case 'left': this.cssClassName = classes[ 0 ]; break; case 'center': this.cssClassName = classes[ 1 ]; break; case 'right': this.cssClassName = classes[ 2 ]; break; case 'justify': this.cssClassName = classes[ 3 ]; break; } this.cssClassRegex = new RegExp( '(?:^|\\s+)(?:' + classes.join( '|' ) + ')(?=$|\\s)' ); this.requiredContent = blockTag + '(' + this.cssClassName + ')'; } else { this.requiredContent = blockTag + '{text-align}'; } this.allowedContent = { 'caption div h1 h2 h3 h4 h5 h6 p pre td th li': { // Do not add elements, but only text-align style if element is validated by other rule. propertiesOnly: true, styles: this.cssClassName ? null : 'text-align', classes: this.cssClassName || null } }; // In enter mode BR we need to allow here for div, because when non other // feature allows div justify is the only plugin that uses it. if ( editor.config.enterMode == CKEDITOR.ENTER_BR ) this.allowedContent.div = true; } function onDirChanged( e ) { var editor = e.editor; var range = editor.createRange(); range.setStartBefore( e.data.node ); range.setEndAfter( e.data.node ); var walker = new CKEDITOR.dom.walker( range ), node; while ( ( node = walker.next() ) ) { if ( node.type == CKEDITOR.NODE_ELEMENT ) { // A child with the defined dir is to be ignored. if ( !node.equals( e.data.node ) && node.getDirection() ) { range.setStartAfter( node ); walker = new CKEDITOR.dom.walker( range ); continue; } // Switch the alignment. var classes = editor.config.justifyClasses; if ( classes ) { // The left align class. if ( node.hasClass( classes[ 0 ] ) ) { node.removeClass( classes[ 0 ] ); node.addClass( classes[ 2 ] ); } // The right align class. else if ( node.hasClass( classes[ 2 ] ) ) { node.removeClass( classes[ 2 ] ); node.addClass( classes[ 0 ] ); } } // Always switch CSS margins. var style = 'text-align'; var align = node.getStyle( style ); if ( align == 'left' ) node.setStyle( style, 'right' ); else if ( align == 'right' ) node.setStyle( style, 'left' ); } } } justifyCommand.prototype = { exec: function( editor ) { var selection = editor.getSelection(), enterMode = editor.config.enterMode; if ( !selection ) return; var bookmarks = selection.createBookmarks(), ranges = selection.getRanges(); var cssClassName = this.cssClassName, iterator, block; var useComputedState = editor.config.useComputedState; useComputedState = useComputedState === undefined || useComputedState; for ( var i = ranges.length - 1; i >= 0; i-- ) { iterator = ranges[ i ].createIterator(); iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) { if ( block.isReadOnly() ) continue; block.removeAttribute( 'align' ); block.removeStyle( 'text-align' ); // Remove any of the alignment classes from the className. var className = cssClassName && ( block.$.className = CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) ); var apply = ( this.state == CKEDITOR.TRISTATE_OFF ) && ( !useComputedState || ( getAlignment( block, true ) != this.value ) ); if ( cssClassName ) { // Append the desired class name. if ( apply ) block.addClass( cssClassName ); else if ( !className ) block.removeAttribute( 'class' ); } else if ( apply ) { block.setStyle( 'text-align', this.value ); } } } editor.focus(); editor.forceNextSelectionCheck(); selection.selectBookmarks( bookmarks ); }, refresh: function( editor, path ) { var firstBlock = path.block || path.blockLimit; this.setState( firstBlock.getName() != 'body' && getAlignment( firstBlock, this.editor.config.useComputedState ) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); } }; CKEDITOR.plugins.add( 'justify', { // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'justifyblock,justifycenter,justifyleft,justifyright', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { if ( editor.blockless ) return; var left = new justifyCommand( editor, 'justifyleft', 'left' ), center = new justifyCommand( editor, 'justifycenter', 'center' ), right = new justifyCommand( editor, 'justifyright', 'right' ), justify = new justifyCommand( editor, 'justifyblock', 'justify' ); editor.addCommand( 'justifyleft', left ); editor.addCommand( 'justifycenter', center ); editor.addCommand( 'justifyright', right ); editor.addCommand( 'justifyblock', justify ); if ( editor.ui.addButton ) { editor.ui.addButton( 'JustifyLeft', { label: editor.lang.justify.left, command: 'justifyleft', toolbar: 'align,10' } ); editor.ui.addButton( 'JustifyCenter', { label: editor.lang.justify.center, command: 'justifycenter', toolbar: 'align,20' } ); editor.ui.addButton( 'JustifyRight', { label: editor.lang.justify.right, command: 'justifyright', toolbar: 'align,30' } ); editor.ui.addButton( 'JustifyBlock', { label: editor.lang.justify.block, command: 'justifyblock', toolbar: 'align,40' } ); } editor.on( 'dirChanged', onDirChanged ); } } ); } )(); /** * List of classes to use for aligning the contents. If it's `null`, no classes will be used * and instead the corresponding CSS values will be used. * * The array should contain 4 members, in the following order: left, center, right, justify. * * // Use the classes 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' * config.justifyClasses = [ 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' ]; * * @cfg {Array} [justifyClasses=null] * @member CKEDITOR.config */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/0000755000175000017500000000000014006075351022327 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/bg.js0000644000175000017500000000054614006075351023262 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'bg', { block: 'Двустранно подравняване', center: 'Център', left: 'Подравни в ляво', right: 'Подравни в дясно' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/cy.js0000644000175000017500000000045314006075351023302 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'cy', { block: 'Unioni', center: 'Alinio i\'r Canol', left: 'Alinio i\'r Chwith', right: 'Alinio i\'r Dde' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/no.js0000644000175000017500000000044014006075351023277 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'no', { block: 'Blokkjuster', center: 'Midtstill', left: 'Venstrejuster', right: 'Høyrejuster' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/hr.js0000644000175000017500000000047014006075351023277 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'hr', { block: 'Blok poravnanje', center: 'Središnje poravnanje', left: 'Lijevo poravnanje', right: 'Desno poravnanje' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/th.js0000644000175000017500000000060014006075351023274 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'th', { block: 'จัดพอดีหน้ากระดาษ', center: 'จัดกึ่งกลาง', left: 'จัดชิดซ้าย', right: 'จัดชิดขวา' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ar.js0000644000175000017500000000050314006075351023265 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ar', { block: 'ضبط', center: 'توسيط', left: 'محاذاة إلى اليسار', right: 'محاذاة إلى اليمين' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/sk.js0000644000175000017500000000046714006075351023311 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'sk', { block: 'Zarovnať do bloku', center: 'Zarovnať na stred', left: 'Zarovnať vľavo', right: 'Zarovnať vpravo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ro.js0000644000175000017500000000051414006075351023305 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ro', { block: 'Aliniere în bloc (Block Justify)', center: 'Aliniere centrală', left: 'Aliniere la stânga', right: 'Aliniere la dreapta' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/en-ca.js0000644000175000017500000000043014006075351023645 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'en-ca', { block: 'Justify', center: 'Centre', left: 'Align Left', right: 'Align Right' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ug.js0000644000175000017500000000056014006075351023301 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ug', { block: 'ئىككى تەرەپتىن توغرىلا', center: 'ئوتتۇرىغا توغرىلا', left: 'سولغا توغرىلا', right: 'ئوڭغا توغرىلا' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/el.js0000644000175000017500000000053714006075351023272 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'el', { block: 'Πλήρης Στοίχιση', center: 'Στο Κέντρο', left: 'Στοίχιση Αριστερά', right: 'Στοίχιση Δεξιά' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/de.js0000644000175000017500000000043614006075351023260 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'de', { block: 'Blocksatz', center: 'Zentriert', left: 'Linksbündig', right: 'Rechtsbündig' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/uk.js0000644000175000017500000000051314006075351023303 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'uk', { block: 'По ширині', center: 'По центру', left: 'По лівому краю', right: 'По правому краю' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/sr-latn.js0000644000175000017500000000046414006075351024251 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'sr-latn', { block: 'Obostrano ravnanje', center: 'Centriran tekst', left: 'Levo ravnanje', right: 'Desno ravnanje' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/km.js0000644000175000017500000000055314006075351023277 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'km', { block: 'តម្រឹម​ពេញ', center: 'កណ្ដាល', left: 'តម្រឹម​ឆ្វេង', right: 'តម្រឹម​ស្ដាំ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/eu.js0000644000175000017500000000046214006075351023300 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'eu', { block: 'Justifikatu', center: 'Lerrokatu Erdian', left: 'Lerrokatu Ezkerrean', right: 'Lerrokatu Eskuman' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/fa.js0000644000175000017500000000045314006075351023255 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'fa', { block: 'بلوک چین', center: 'میان چین', left: 'چپ چین', right: 'راست چین' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/si.js0000644000175000017500000000047714006075351023310 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'si', { block: 'Justify', // MISSING center: 'මධ්‍ය', left: 'Align Left', // MISSING right: 'Align Right' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/en.js0000644000175000017500000000042514006075351023270 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'en', { block: 'Justify', center: 'Center', left: 'Align Left', right: 'Align Right' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/he.js0000644000175000017500000000050014006075351023254 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'he', { block: 'יישור לשוליים', center: 'מרכוז', left: 'יישור לשמאל', right: 'יישור לימין' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/lt.js0000644000175000017500000000045614006075351023311 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'lt', { block: 'Lygiuoti abi puses', center: 'Centruoti', left: 'Lygiuoti kairę', right: 'Lygiuoti dešinę' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/lv.js0000644000175000017500000000050714006075351023310 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'lv', { block: 'Izlīdzināt malas', center: 'Izlīdzināt pret centru', left: 'Izlīdzināt pa kreisi', right: 'Izlīdzināt pa labi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/eo.js0000644000175000017500000000047614006075351023277 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'eo', { block: 'Ĝisrandigi Ambaŭflanke', center: 'Centrigi', left: 'Ĝisrandigi maldekstren', right: 'Ĝisrandigi dekstren' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ca.js0000644000175000017500000000045114006075351023250 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ca', { block: 'Justificat', center: 'Centrat', left: 'Alinea a l\'esquerra', right: 'Alinea a la dreta' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/hi.js0000644000175000017500000000054014006075351023264 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'hi', { block: 'ब्लॉक जस्टीफ़ाई', center: 'बीच में', left: 'बायीं तरफ', right: 'दायीं तरफ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/mk.js0000644000175000017500000000050114006075351023270 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'mk', { block: 'Justify', // MISSING center: 'Center', // MISSING left: 'Align Left', // MISSING right: 'Align Right' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/mn.js0000644000175000017500000000052314006075351023277 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'mn', { block: 'Тэгшлэх', center: 'Голлуулах', left: 'Зүүн талд тулгах', right: 'Баруун талд тулгах' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/gl.js0000644000175000017500000000045314006075351023271 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'gl', { block: 'Xustificado', center: 'Centrado', left: 'Aliñar á esquerda', right: 'Aliñar á dereita' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ko.js0000644000175000017500000000045514006075351023302 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ko', { block: '양쪽 맞춤', center: '가운데 정렬', left: '왼쪽 정렬', right: '오른쪽 정렬' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/zh.js0000644000175000017500000000043514006075351023310 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'zh', { block: '左右對齊', center: '置中', left: '靠左對齊', right: '靠右對齊' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/es.js0000644000175000017500000000045114006075351023274 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'es', { block: 'Justificado', center: 'Centrar', left: 'Alinear a Izquierda', right: 'Alinear a Derecha' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/is.js0000644000175000017500000000045514006075351023304 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'is', { block: 'Jafna báðum megin', center: 'Miðja texta', left: 'Vinstrijöfnun', right: 'Hægrijöfnun' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/fo.js0000644000175000017500000000044214006075351023271 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'fo', { block: 'Javnir tekstkantar', center: 'Miðsett', left: 'Vinstrasett', right: 'Høgrasett' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/tt.js0000644000175000017500000000062414006075351023316 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'tt', { block: 'Киңлеккә карап тигезләү', center: 'Үзәккә тигезләү', left: 'Сул як кырыйдан тигезләү', right: 'Уң як кырыйдан тигезләү' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/it.js0000644000175000017500000000044514006075351023304 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'it', { block: 'Giustifica', center: 'Centra', left: 'Allinea a sinistra', right: 'Allinea a destra' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/sv.js0000644000175000017500000000045614006075351023322 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'sv', { block: 'Justera till marginaler', center: 'Centrera', left: 'Vänsterjustera', right: 'Högerjustera' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/gu.js0000644000175000017500000000071114006075351023277 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'gu', { block: 'બ્લૉક, અંતરાય જસ્ટિફાઇ', center: 'સંકેંદ્રણ/સેંટરિંગ', left: 'ડાબી બાજુએ/બાજુ તરફ', right: 'જમણી બાજુએ/બાજુ તરફ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/tr.js0000644000175000017500000000045714006075351023320 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'tr', { block: 'İki Kenara Yaslanmış', center: 'Ortalanmış', left: 'Sola Dayalı', right: 'Sağa Dayalı' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/pl.js0000644000175000017500000000045214006075351023301 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'pl', { block: 'Wyjustuj', center: 'Wyśrodkuj', left: 'Wyrównaj do lewej', right: 'Wyrównaj do prawej' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/nb.js0000644000175000017500000000044014006075351023262 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'nb', { block: 'Blokkjuster', center: 'Midtstill', left: 'Venstrejuster', right: 'Høyrejuster' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/sl.js0000644000175000017500000000047214006075351023306 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'sl', { block: 'Obojestranska poravnava', center: 'Sredinska poravnava', left: 'Leva poravnava', right: 'Desna poravnava' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/fi.js0000644000175000017500000000047014006075351023264 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'fi', { block: 'Tasaa molemmat reunat', center: 'Keskitä', left: 'Tasaa vasemmat reunat', right: 'Tasaa oikeat reunat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/fr-ca.js0000644000175000017500000000045014006075351023654 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'fr-ca', { block: 'Justifié', center: 'Centré', left: 'Aligner à gauche', right: 'Aligner à Droite' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ru.js0000644000175000017500000000051314006075351023312 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ru', { block: 'По ширине', center: 'По центру', left: 'По левому краю', right: 'По правому краю' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ka.js0000644000175000017500000000062514006075351023263 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ka', { block: 'გადასწორება', center: 'შუაში სწორება', left: 'მარცხნივ სწორება', right: 'მარჯვნივ სწორება' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/zh-cn.js0000644000175000017500000000043214006075351023703 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'zh-cn', { block: '两端对齐', center: '居中', left: '左对齐', right: '右对齐' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/cs.js0000644000175000017500000000046314006075351023275 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'cs', { block: 'Zarovnat do bloku', center: 'Zarovnat na střed', left: 'Zarovnat vlevo', right: 'Zarovnat vpravo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/pt.js0000644000175000017500000000046414006075351023314 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'pt', { block: 'Justificado', center: 'Alinhar ao Centro', left: 'Alinhar à esquerda', right: 'Alinhar à direita' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/pt-br.js0000644000175000017500000000045314006075351023713 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'pt-br', { block: 'Justificado', center: 'Centralizar', left: 'Alinhar Esquerda', right: 'Alinhar Direita' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/et.js0000644000175000017500000000044314006075351023276 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'et', { block: 'Rööpjoondus', center: 'Keskjoondus', left: 'Vasakjoondus', right: 'Paremjoondus' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/da.js0000644000175000017500000000044414006075351023253 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'da', { block: 'Lige margener', center: 'Centreret', left: 'Venstrestillet', right: 'Højrestillet' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/af.js0000644000175000017500000000042614006075351023255 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'af', { block: 'Uitvul', center: 'Sentreer', left: 'Links oplyn', right: 'Regs oplyn' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/hu.js0000644000175000017500000000042114006075351023276 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'hu', { block: 'Sorkizárt', center: 'Középre', left: 'Balra', right: 'Jobbra' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/sr.js0000644000175000017500000000054114006075351023311 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'sr', { block: 'Обострано равнање', center: 'Центриран текст', left: 'Лево равнање', right: 'Десно равнање' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/nl.js0000644000175000017500000000044414006075351023300 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'nl', { block: 'Uitvullen', center: 'Centreren', left: 'Links uitlijnen', right: 'Rechts uitlijnen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/vi.js0000644000175000017500000000043614006075351023306 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'vi', { block: 'Canh đều', center: 'Canh giữa', left: 'Canh trái', right: 'Canh phải' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ja.js0000644000175000017500000000043514006075351023261 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ja', { block: '両端揃え', center: '中央揃え', left: '左揃え', right: '右揃え' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/id.js0000644000175000017500000000046214006075351023263 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'id', { block: 'Rata kiri-kanan', center: 'Pusat', left: 'Align Left', // MISSING right: 'Align Right' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/en-gb.js0000644000175000017500000000043014006075351023652 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'en-gb', { block: 'Justify', center: 'Centre', left: 'Align Left', right: 'Align Right' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/sq.js0000644000175000017500000000043614006075351023313 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'sq', { block: 'Zgjero', center: 'Qendër', left: 'Rreshto majtas', right: 'Rreshto Djathtas' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/bn.js0000644000175000017500000000061214006075351023263 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'bn', { block: 'ব্লক জাস্টিফাই', center: 'মাঝ বরাবর ঘেষা', left: 'বা দিকে ঘেঁষা', right: 'ডান দিকে ঘেঁষা' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/en-au.js0000644000175000017500000000043014006075351023667 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'en-au', { block: 'Justify', center: 'Centre', left: 'Align Left', right: 'Align Right' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ku.js0000644000175000017500000000051714006075351023307 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ku', { block: 'هاوستوونی', center: 'ناوەڕاست', left: 'بەهێڵ کردنی چەپ', right: 'بەهێڵ کردنی ڕاست' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/ms.js0000644000175000017500000000044614006075351023310 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'ms', { block: 'Jajaran Blok', center: 'Jajaran Tengah', left: 'Jajaran Kiri', right: 'Jajaran Kanan' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/fr.js0000644000175000017500000000044514006075351023277 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'fr', { block: 'Justifier', center: 'Centrer', left: 'Aligner à gauche', right: 'Aligner à droite' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/lang/bs.js0000644000175000017500000000046714006075351023300 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'justify', 'bs', { block: 'Puno poravnanje', center: 'Centralno poravnanje', left: 'Lijevo poravnanje', right: 'Desno poravnanje' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/0000755000175000017500000000000014006075351022521 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/justifyblock.png0000644000175000017500000000076014006075351025742 0ustar domdomPNG  IHDRabKGD pHYs B(x IDAT8˥j@l6+H.9% NK)g~r@DH39,#˲eaYBxՊnt:Gڜ8!B D)RA#)tr x<1P%Z=sm[RJH ~gZcd2A)$N,3)%wb@QMӼ:nz~C^s!=3{c9Ͻ]łf1x>rPEoG֎Bno&r4Wm klB7!n1BJyDRk_s4*%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/justifyright.png0000644000175000017500000000105214006075351025760 0ustar domdomPNG  IHDRabKGD pHYs B(xCIDAT8˕Mn0?۱@"o $.$U:+KG)<謭V+9XEQbmO)%Y=@}ɦ.,qεsEAv9>wZ֚OW-++%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/justifycenter.png0000644000175000017500000000114114006075351026122 0ustar domdomPNG  IHDRabKGD pHYs B(xzIDAT8˕@EϫA$#h?$f1@bUfqlIぷ)ޫzfBkR =98g@)EEqWN'm"֚8zs}?R `hDdЏwO;i @(pΡGɤ@#H( 1fߣs,IrQ5átQxKHk-*_|Z}ȰJnaH$a8_,;'{1dYac9مC l6 ֤\.i[`x<%9Dρ*o\H_q!2ڶEet:\p> ?̬.e%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/hidpi/0000755000175000017500000000000014006075351023616 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/hidpi/justifyblock.png0000644000175000017500000000156214006075351027040 0ustar domdomPNG  IHDR szzbKGD pHYs B(xIDATX͗N@%h%Rz<R*@&DT !]>1 dCFdYgwqz{.Y%p/B4kb.n6SRnlmn^0Α9Ʉ(0֮ CMKkxvUj@JJa{_j]<1R@5W.2MFb~5bein<,$  P Sc$/R0޶JR)*"q>q R!_vw4Hʪc)_(u/( ܺ1kipA[8˘& f.[ODf]"֒ede0Ŀc,y)Kpx Cn!IߧşR.LؿԽM5 .C%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/hidpi/justifyleft.png0000644000175000017500000000202214006075351026670 0ustar domdomPNG  IHDR szzbKGD pHYs B(x+IDATX͗nF)FI؈MVv~yh h븩˲(3sDlKZH=s=C!_v?0>TJVAhj$̓{Bkihv:>|H7MVpHQ6'd7o"[כPњ_^ǏIY@1ZjsGэgexY_ Eki k@DP%-po<8 tjGDuIMm1.jFZ "mcA)/p{߾lU]M@)EBM_̍*8>;kDu .>᝛|6E1@KD%y,AwzEH;DpMuMX Dưwm\?I ǘ4] hHg~oĘ5 S<=>C8C L)Lhcj9TaQ e̍yrA>͂lз"ϑ.j\ m ''[q_IUp%fY2̈́ᰕ m{)Eb*zI89rc0I2QLl[ף(u@I#=?'Իub=,#IS H1deydeYP,wRP Es2 h!]H(?,h&%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/justify/icons/hidpi/justifycenter.png0000644000175000017500000000216614006075351027227 0ustar domdomPNG  IHDR szzbKGD pHYs B(xIDATX͗KoWsK)u%MWU6aVxɦ+]TE5"R.38ml≉+ycomC@b+{_@RJRH!A ͝Xkqͅ V.QSTP+`'JZ`u8ZBSjz,+ -%qs}^]FJCOn9LtyO5dvv }njqlҫVѲ؉2({b&`R">y?/3+:xAP.y*FRJj TK^V A$}$5wE T&k~4@˭M=Efڔ@ ?Aj B 8e=r!f>1\; Cw`@ݕ4_`m\9iJ!?iGor\6M`:(q@7`cBe _M|+BJj?>\;|)½ge;:eytDj 2Q/@Jy Z%58YVh1֢WVll 7 8JoNf4?*`$IK,lOÇK@hK%֋ef>,8fgU;;ך7o`: yT滻w7sL\&!BJYƻcZ3|ZcÐZ](_dA>9$(8clBIrs?xguϟcKYp(`NxH9Km4Ҕ,qYv[< oFY KT_cT ]%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/0000755000175000017500000000000014006075351021000 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/table/plugin.js0000755000175000017500000000643614006075351022650 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.add( 'table', { requires: 'dialog', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'table', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { if ( editor.blockless ) return; var lang = editor.lang.table; editor.addCommand( 'table', new CKEDITOR.dialogCommand( 'table', { context: 'table', allowedContent: 'table{width,height}[align,border,cellpadding,cellspacing,summary];' + 'caption tbody thead tfoot;' + 'th td tr[scope];' + ( editor.plugins.dialogadvtab ? 'table' + editor.plugins.dialogadvtab.allowedContent() : '' ), requiredContent: 'table', contentTransformations: [ [ 'table{width}: sizeToStyle', 'table[width]: sizeToAttribute' ] ] } ) ); function createDef( def ) { return CKEDITOR.tools.extend( def || {}, { contextSensitive: 1, refresh: function( editor, path ) { this.setState( path.contains( 'table', 1 ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); } } ); } editor.addCommand( 'tableProperties', new CKEDITOR.dialogCommand( 'tableProperties', createDef() ) ); editor.addCommand( 'tableDelete', createDef( { exec: function( editor ) { var path = editor.elementPath(), table = path.contains( 'table', 1 ); if ( !table ) return; // If the table's parent has only one child remove it as well (unless it's a table cell, or the editable element) (#5416, #6289, #12110) var parent = table.getParent(), editable = editor.editable(); if ( parent.getChildCount() == 1 && !parent.is( 'td', 'th' ) && !parent.equals( editable ) ) table = parent; var range = editor.createRange(); range.moveToPosition( table, CKEDITOR.POSITION_BEFORE_START ); table.remove(); range.select(); } } ) ); editor.ui.addButton && editor.ui.addButton( 'Table', { label: lang.toolbar, command: 'table', toolbar: 'insert,30' } ); CKEDITOR.dialog.add( 'table', this.path + 'dialogs/table.js' ); CKEDITOR.dialog.add( 'tableProperties', this.path + 'dialogs/table.js' ); // If the "menu" plugin is loaded, register the menu items. if ( editor.addMenuItems ) { editor.addMenuItems( { table: { label: lang.menu, command: 'tableProperties', group: 'table', order: 5 }, tabledelete: { label: lang.deleteTable, command: 'tableDelete', group: 'table', order: 1 } } ); } editor.on( 'doubleclick', function( evt ) { var element = evt.data.element; if ( element.is( 'table' ) ) evt.data.dialog = 'tableProperties'; } ); // If the "contextmenu" plugin is loaded, register the listeners. if ( editor.contextMenu ) { editor.contextMenu.addListener( function() { // menu item state is resolved on commands. return { tabledelete: CKEDITOR.TRISTATE_OFF, table: CKEDITOR.TRISTATE_OFF }; } ); } } } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/dialogs/0000755000175000017500000000000014006075351022422 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/table/dialogs/table.js0000755000175000017500000004236014006075351024057 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { var defaultToPixel = CKEDITOR.tools.cssLength; var commitValue = function( data ) { var id = this.id; if ( !data.info ) data.info = {}; data.info[ id ] = this.getValue(); }; function tableColumns( table ) { var cols = 0, maxCols = 0; for ( var i = 0, row, rows = table.$.rows.length; i < rows; i++ ) { row = table.$.rows[ i ], cols = 0; for ( var j = 0, cell, cells = row.cells.length; j < cells; j++ ) { cell = row.cells[ j ]; cols += cell.colSpan; } cols > maxCols && ( maxCols = cols ); } return maxCols; } // Whole-positive-integer validator. function validatorNum( msg ) { return function() { var value = this.getValue(), pass = !!( CKEDITOR.dialog.validate.integer()( value ) && value > 0 ); if ( !pass ) { alert( msg ); // jshint ignore:line this.select(); } return pass; }; } function tableDialog( editor, command ) { var makeElement = function( name ) { return new CKEDITOR.dom.element( name, editor.document ); }; var editable = editor.editable(); var dialogadvtab = editor.plugins.dialogadvtab; return { title: editor.lang.table.title, minWidth: 310, minHeight: CKEDITOR.env.ie ? 310 : 280, onLoad: function() { var dialog = this; var styles = dialog.getContentElement( 'advanced', 'advStyles' ); if ( styles ) { styles.on( 'change', function() { // Synchronize width value. var width = this.getStyle( 'width', '' ), txtWidth = dialog.getContentElement( 'info', 'txtWidth' ); txtWidth && txtWidth.setValue( width, true ); // Synchronize height value. var height = this.getStyle( 'height', '' ), txtHeight = dialog.getContentElement( 'info', 'txtHeight' ); txtHeight && txtHeight.setValue( height, true ); } ); } }, onShow: function() { // Detect if there's a selected table. var selection = editor.getSelection(), ranges = selection.getRanges(), table; var rowsInput = this.getContentElement( 'info', 'txtRows' ), colsInput = this.getContentElement( 'info', 'txtCols' ), widthInput = this.getContentElement( 'info', 'txtWidth' ), heightInput = this.getContentElement( 'info', 'txtHeight' ); if ( command == 'tableProperties' ) { var selected = selection.getSelectedElement(); if ( selected && selected.is( 'table' ) ) table = selected; else if ( ranges.length > 0 ) { // Webkit could report the following range on cell selection (#4948): //
    ] if ( CKEDITOR.env.webkit ) ranges[ 0 ].shrink( CKEDITOR.NODE_ELEMENT ); table = editor.elementPath( ranges[ 0 ].getCommonAncestor( true ) ).contains( 'table', 1 ); } // Save a reference to the selected table, and push a new set of default values. this._.selectedElement = table; } // Enable or disable the row, cols, width fields. if ( table ) { this.setupContent( table ); rowsInput && rowsInput.disable(); colsInput && colsInput.disable(); } else { rowsInput && rowsInput.enable(); colsInput && colsInput.enable(); } // Call the onChange method for the widht and height fields so // they get reflected into the Advanced tab. widthInput && widthInput.onChange(); heightInput && heightInput.onChange(); }, onOk: function() { var selection = editor.getSelection(), bms = this._.selectedElement && selection.createBookmarks(); var table = this._.selectedElement || makeElement( 'table' ), data = {}; this.commitContent( data, table ); if ( data.info ) { var info = data.info; // Generate the rows and cols. if ( !this._.selectedElement ) { var tbody = table.append( makeElement( 'tbody' ) ), rows = parseInt( info.txtRows, 10 ) || 0, cols = parseInt( info.txtCols, 10 ) || 0; for ( var i = 0; i < rows; i++ ) { var row = tbody.append( makeElement( 'tr' ) ); for ( var j = 0; j < cols; j++ ) { var cell = row.append( makeElement( 'td' ) ); cell.appendBogus(); } } } // Modify the table headers. Depends on having rows and cols generated // correctly so it can't be done in commit functions. // Should we make a ? var headers = info.selHeaders; if ( !table.$.tHead && ( headers == 'row' || headers == 'both' ) ) { var thead = new CKEDITOR.dom.element( table.$.createTHead() ); tbody = table.getElementsByTag( 'tbody' ).getItem( 0 ); var theRow = tbody.getElementsByTag( 'tr' ).getItem( 0 ); // Change TD to TH: for ( i = 0; i < theRow.getChildCount(); i++ ) { var th = theRow.getChild( i ); // Skip bookmark nodes. (#6155) if ( th.type == CKEDITOR.NODE_ELEMENT && !th.data( 'cke-bookmark' ) ) { th.renameNode( 'th' ); th.setAttribute( 'scope', 'col' ); } } thead.append( theRow.remove() ); } if ( table.$.tHead !== null && !( headers == 'row' || headers == 'both' ) ) { // Move the row out of the THead and put it in the TBody: thead = new CKEDITOR.dom.element( table.$.tHead ); tbody = table.getElementsByTag( 'tbody' ).getItem( 0 ); var previousFirstRow = tbody.getFirst(); while ( thead.getChildCount() > 0 ) { theRow = thead.getFirst(); for ( i = 0; i < theRow.getChildCount(); i++ ) { var newCell = theRow.getChild( i ); if ( newCell.type == CKEDITOR.NODE_ELEMENT ) { newCell.renameNode( 'td' ); newCell.removeAttribute( 'scope' ); } } theRow.insertBefore( previousFirstRow ); } thead.remove(); } // Should we make all first cells in a row TH? if ( !this.hasColumnHeaders && ( headers == 'col' || headers == 'both' ) ) { for ( row = 0; row < table.$.rows.length; row++ ) { newCell = new CKEDITOR.dom.element( table.$.rows[ row ].cells[ 0 ] ); newCell.renameNode( 'th' ); newCell.setAttribute( 'scope', 'row' ); } } // Should we make all first TH-cells in a row make TD? If 'yes' we do it the other way round :-) if ( ( this.hasColumnHeaders ) && !( headers == 'col' || headers == 'both' ) ) { for ( i = 0; i < table.$.rows.length; i++ ) { row = new CKEDITOR.dom.element( table.$.rows[ i ] ); if ( row.getParent().getName() == 'tbody' ) { newCell = new CKEDITOR.dom.element( row.$.cells[ 0 ] ); newCell.renameNode( 'td' ); newCell.removeAttribute( 'scope' ); } } } // Set the width and height. info.txtHeight ? table.setStyle( 'height', info.txtHeight ) : table.removeStyle( 'height' ); info.txtWidth ? table.setStyle( 'width', info.txtWidth ) : table.removeStyle( 'width' ); if ( !table.getAttribute( 'style' ) ) table.removeAttribute( 'style' ); } // Insert the table element if we're creating one. if ( !this._.selectedElement ) { editor.insertElement( table ); // Override the default cursor position after insertElement to place // cursor inside the first cell (#7959), IE needs a while. setTimeout( function() { var firstCell = new CKEDITOR.dom.element( table.$.rows[ 0 ].cells[ 0 ] ); var range = editor.createRange(); range.moveToPosition( firstCell, CKEDITOR.POSITION_AFTER_START ); range.select(); }, 0 ); } // Properly restore the selection, (#4822) but don't break // because of this, e.g. updated table caption. else { try { selection.selectBookmarks( bms ); } catch ( er ) { } } }, contents: [ { id: 'info', label: editor.lang.table.title, elements: [ { type: 'hbox', widths: [ null, null ], styles: [ 'vertical-align:top' ], children: [ { type: 'vbox', padding: 0, children: [ { type: 'text', id: 'txtRows', 'default': 3, label: editor.lang.table.rows, required: true, controlStyle: 'width:5em', validate: validatorNum( editor.lang.table.invalidRows ), setup: function( selectedElement ) { this.setValue( selectedElement.$.rows.length ); }, commit: commitValue }, { type: 'text', id: 'txtCols', 'default': 2, label: editor.lang.table.columns, required: true, controlStyle: 'width:5em', validate: validatorNum( editor.lang.table.invalidCols ), setup: function( selectedTable ) { this.setValue( tableColumns( selectedTable ) ); }, commit: commitValue }, { type: 'html', html: ' ' }, { type: 'select', id: 'selHeaders', requiredContent: 'th', 'default': '', label: editor.lang.table.headers, items: [ [ editor.lang.table.headersNone, '' ], [ editor.lang.table.headersRow, 'row' ], [ editor.lang.table.headersColumn, 'col' ], [ editor.lang.table.headersBoth, 'both' ] ], setup: function( selectedTable ) { // Fill in the headers field. var dialog = this.getDialog(); dialog.hasColumnHeaders = true; // Check if all the first cells in every row are TH for ( var row = 0; row < selectedTable.$.rows.length; row++ ) { // If just one cell isn't a TH then it isn't a header column var headCell = selectedTable.$.rows[ row ].cells[ 0 ]; if ( headCell && headCell.nodeName.toLowerCase() != 'th' ) { dialog.hasColumnHeaders = false; break; } } // Check if the table contains . if ( ( selectedTable.$.tHead !== null ) ) this.setValue( dialog.hasColumnHeaders ? 'both' : 'row' ); else this.setValue( dialog.hasColumnHeaders ? 'col' : '' ); }, commit: commitValue }, { type: 'text', id: 'txtBorder', requiredContent: 'table[border]', // Avoid setting border which will then disappear. 'default': editor.filter.check( 'table[border]' ) ? 1 : 0, label: editor.lang.table.border, controlStyle: 'width:3em', validate: CKEDITOR.dialog.validate.number( editor.lang.table.invalidBorder ), setup: function( selectedTable ) { this.setValue( selectedTable.getAttribute( 'border' ) || '' ); }, commit: function( data, selectedTable ) { if ( this.getValue() ) selectedTable.setAttribute( 'border', this.getValue() ); else selectedTable.removeAttribute( 'border' ); } }, { id: 'cmbAlign', type: 'select', requiredContent: 'table[align]', 'default': '', label: editor.lang.common.align, items: [ [ editor.lang.common.notSet, '' ], [ editor.lang.common.alignLeft, 'left' ], [ editor.lang.common.alignCenter, 'center' ], [ editor.lang.common.alignRight, 'right' ] ], setup: function( selectedTable ) { this.setValue( selectedTable.getAttribute( 'align' ) || '' ); }, commit: function( data, selectedTable ) { if ( this.getValue() ) selectedTable.setAttribute( 'align', this.getValue() ); else selectedTable.removeAttribute( 'align' ); } } ] }, { type: 'vbox', padding: 0, children: [ { type: 'hbox', widths: [ '5em' ], children: [ { type: 'text', id: 'txtWidth', requiredContent: 'table{width}', controlStyle: 'width:5em', label: editor.lang.common.width, title: editor.lang.common.cssLengthTooltip, // Smarter default table width. (#9600) 'default': editor.filter.check( 'table{width}' ) ? ( editable.getSize( 'width' ) < 500 ? '100%' : 500 ) : 0, getValue: defaultToPixel, validate: CKEDITOR.dialog.validate.cssLength( editor.lang.common.invalidCssLength.replace( '%1', editor.lang.common.width ) ), onChange: function() { var styles = this.getDialog().getContentElement( 'advanced', 'advStyles' ); styles && styles.updateStyle( 'width', this.getValue() ); }, setup: function( selectedTable ) { var val = selectedTable.getStyle( 'width' ); this.setValue( val ); }, commit: commitValue } ] }, { type: 'hbox', widths: [ '5em' ], children: [ { type: 'text', id: 'txtHeight', requiredContent: 'table{height}', controlStyle: 'width:5em', label: editor.lang.common.height, title: editor.lang.common.cssLengthTooltip, 'default': '', getValue: defaultToPixel, validate: CKEDITOR.dialog.validate.cssLength( editor.lang.common.invalidCssLength.replace( '%1', editor.lang.common.height ) ), onChange: function() { var styles = this.getDialog().getContentElement( 'advanced', 'advStyles' ); styles && styles.updateStyle( 'height', this.getValue() ); }, setup: function( selectedTable ) { var val = selectedTable.getStyle( 'height' ); val && this.setValue( val ); }, commit: commitValue } ] }, { type: 'html', html: ' ' }, { type: 'text', id: 'txtCellSpace', requiredContent: 'table[cellspacing]', controlStyle: 'width:3em', label: editor.lang.table.cellSpace, 'default': editor.filter.check( 'table[cellspacing]' ) ? 1 : 0, validate: CKEDITOR.dialog.validate.number( editor.lang.table.invalidCellSpacing ), setup: function( selectedTable ) { this.setValue( selectedTable.getAttribute( 'cellSpacing' ) || '' ); }, commit: function( data, selectedTable ) { if ( this.getValue() ) selectedTable.setAttribute( 'cellSpacing', this.getValue() ); else selectedTable.removeAttribute( 'cellSpacing' ); } }, { type: 'text', id: 'txtCellPad', requiredContent: 'table[cellpadding]', controlStyle: 'width:3em', label: editor.lang.table.cellPad, 'default': editor.filter.check( 'table[cellpadding]' ) ? 1 : 0, validate: CKEDITOR.dialog.validate.number( editor.lang.table.invalidCellPadding ), setup: function( selectedTable ) { this.setValue( selectedTable.getAttribute( 'cellPadding' ) || '' ); }, commit: function( data, selectedTable ) { if ( this.getValue() ) selectedTable.setAttribute( 'cellPadding', this.getValue() ); else selectedTable.removeAttribute( 'cellPadding' ); } } ] } ] }, { type: 'html', align: 'right', html: '' }, { type: 'vbox', padding: 0, children: [ { type: 'text', id: 'txtCaption', requiredContent: 'caption', label: editor.lang.table.caption, setup: function( selectedTable ) { this.enable(); var nodeList = selectedTable.getElementsByTag( 'caption' ); if ( nodeList.count() > 0 ) { var caption = nodeList.getItem( 0 ); var firstElementChild = caption.getFirst( CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT ) ); if ( firstElementChild && !firstElementChild.equals( caption.getBogus() ) ) { this.disable(); this.setValue( caption.getText() ); return; } caption = CKEDITOR.tools.trim( caption.getText() ); this.setValue( caption ); } }, commit: function( data, table ) { if ( !this.isEnabled() ) return; var caption = this.getValue(), captionElement = table.getElementsByTag( 'caption' ); if ( caption ) { if ( captionElement.count() > 0 ) { captionElement = captionElement.getItem( 0 ); captionElement.setHtml( '' ); } else { captionElement = new CKEDITOR.dom.element( 'caption', editor.document ); if ( table.getChildCount() ) captionElement.insertBefore( table.getFirst() ); else captionElement.appendTo( table ); } captionElement.append( new CKEDITOR.dom.text( caption, editor.document ) ); } else if ( captionElement.count() > 0 ) { for ( var i = captionElement.count() - 1; i >= 0; i-- ) captionElement.getItem( i ).remove(); } } }, { type: 'text', id: 'txtSummary', bidi: true, requiredContent: 'table[summary]', label: editor.lang.table.summary, setup: function( selectedTable ) { this.setValue( selectedTable.getAttribute( 'summary' ) || '' ); }, commit: function( data, selectedTable ) { if ( this.getValue() ) selectedTable.setAttribute( 'summary', this.getValue() ); else selectedTable.removeAttribute( 'summary' ); } } ] } ] }, dialogadvtab && dialogadvtab.createAdvancedTab( editor, null, 'table' ) ] }; } CKEDITOR.dialog.add( 'table', function( editor ) { return tableDialog( editor, 'table' ); } ); CKEDITOR.dialog.add( 'tableProperties', function( editor ) { return tableDialog( editor, 'tableProperties' ); } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/0000755000175000017500000000000014006075351021721 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/bg.js0000644000175000017500000000617414006075351022657 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'bg', { border: 'Размер на рамката', caption: 'Заглавие', cell: { menu: 'Клетка', insertBefore: 'Вмъкване на клетка преди', insertAfter: 'Вмъкване на клетка след', deleteCell: 'Изтриване на клетки', merge: 'Сливане на клетки', mergeRight: 'Сливане в дясно', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Настройки на клетката', cellType: 'Тип на клетката', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Авто. пренос', hAlign: 'Хоризонтално подравняване', vAlign: 'Вертикално подравняване', alignBaseline: 'Базова линия', bgColor: 'Фон', borderColor: 'Цвят на рамката', data: 'Данни', header: 'Хедър', yes: 'Да', no: 'Не', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Изберете' }, cellPad: 'Отделяне на клетките', cellSpace: 'Разтояние между клетките', column: { menu: 'Колона', insertBefore: 'Вмъкване на колона преди', insertAfter: 'Вмъкване на колона след', deleteColumn: 'Изтриване на колони' }, columns: 'Колони', deleteTable: 'Изтриване на таблица', headers: 'Хедъри', headersBoth: 'Заедно', headersColumn: 'Първа колона', headersNone: 'Няма', headersRow: 'Първи ред', invalidBorder: 'Размерът на рамката трябва да е число.', invalidCellPadding: 'Отстоянието на клетките трябва да е позитивно число.', invalidCellSpacing: 'Интервала в клетките трябва да е позитивно число.', invalidCols: 'Броят колони трябва да е по-голям от 0.', invalidHeight: 'Височината на таблицата трябва да е число.', invalidRows: 'Броят редове трябва да е по-голям от 0.', invalidWidth: 'Ширината на таблицата трябва да е число.', menu: 'Настройки на таблицата', row: { menu: 'Ред', insertBefore: 'Вмъкване на ред преди', insertAfter: 'Вмъкване на ред след', deleteRow: 'Изтриване на редове' }, rows: 'Редове', summary: 'Обща информация', title: 'Настройки на таблицата', toolbar: 'Таблица', widthPc: 'процент', widthPx: 'пиксела', widthUnit: 'единица за ширина' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/cy.js0000644000175000017500000000444414006075351022700 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'cy', { border: 'Maint yr Ymyl', caption: 'Pennawd', cell: { menu: 'Cell', insertBefore: 'Mewnosod Cell Cyn', insertAfter: 'Mewnosod Cell Ar Ôl', deleteCell: 'Dileu Celloedd', merge: 'Cyfuno Celloedd', mergeRight: 'Cyfuno i\'r Dde', mergeDown: 'Cyfuno i Lawr', splitHorizontal: 'Hollti\'r Gell yn Lorweddol', splitVertical: 'Hollti\'r Gell yn Fertigol', title: 'Priodweddau\'r Gell', cellType: 'Math y Gell', rowSpan: 'Rhychwant Rhesi', colSpan: 'Rhychwant Colofnau', wordWrap: 'Lapio Geiriau', hAlign: 'Aliniad Llorweddol', vAlign: 'Aliniad Fertigol', alignBaseline: 'Baslinell', bgColor: 'Lliw Cefndir', borderColor: 'Lliw Ymyl', data: 'Data', header: 'Pennyn', yes: 'Ie', no: 'Na', invalidWidth: 'Mae\'n rhaid i led y gell fod yn rhif.', invalidHeight: 'Mae\'n rhaid i uchder y gell fod yn rhif.', invalidRowSpan: 'Mae\'n rhaid i rychwant y rhesi fod yn gyfanrif.', invalidColSpan: 'Mae\'n rhaid i rychwant y colofnau fod yn gyfanrif.', chooseColor: 'Dewis' }, cellPad: 'Padio\'r gell', cellSpace: 'Bylchiad y gell', column: { menu: 'Colofn', insertBefore: 'Mewnosod Colofn Cyn', insertAfter: 'Mewnosod Colofn Ar Ôl', deleteColumn: 'Dileu Colofnau' }, columns: 'Colofnau', deleteTable: 'Dileu Tabl', headers: 'Penynnau', headersBoth: 'Y Ddau', headersColumn: 'Colofn gyntaf', headersNone: 'Dim', headersRow: 'Rhes gyntaf', invalidBorder: 'Mae\'n rhaid i faint yr ymyl fod yn rhif.', invalidCellPadding: 'Mae\'n rhaid i badiad y gell fod yn rhif positif.', invalidCellSpacing: 'Mae\'n rhaid i fylchiad y gell fod yn rhif positif.', invalidCols: 'Mae\'n rhaid cael o leiaf un golofn.', invalidHeight: 'Mae\'n rhaid i uchder y tabl fod yn rhif.', invalidRows: 'Mae\'n rhaid cael o leiaf un rhes.', invalidWidth: 'Mae\'n rhaid i led y tabl fod yn rhif.', menu: 'Priodweddau\'r Tabl', row: { menu: 'Rhes', insertBefore: 'Mewnosod Rhes Cyn', insertAfter: 'Mewnosod Rhes Ar Ôl', deleteRow: 'Dileu Rhesi' }, rows: 'Rhesi', summary: 'Crynodeb', title: 'Priodweddau\'r Tabl', toolbar: 'Tabl', widthPc: 'y cant', widthPx: 'picsel', widthUnit: 'uned lled' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/no.js0000644000175000017500000000434114006075351022675 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'no', { border: 'Rammestørrelse', caption: 'Tittel', cell: { menu: 'Celle', insertBefore: 'Sett inn celle før', insertAfter: 'Sett inn celle etter', deleteCell: 'Slett celler', merge: 'Slå sammen celler', mergeRight: 'Slå sammen høyre', mergeDown: 'Slå sammen ned', splitHorizontal: 'Del celle horisontalt', splitVertical: 'Del celle vertikalt', title: 'Celleegenskaper', cellType: 'Celletype', rowSpan: 'Radspenn', colSpan: 'Kolonnespenn', wordWrap: 'Tekstbrytning', hAlign: 'Horisontal justering', vAlign: 'Vertikal justering', alignBaseline: 'Grunnlinje', bgColor: 'Bakgrunnsfarge', borderColor: 'Rammefarge', data: 'Data', header: 'Overskrift', yes: 'Ja', no: 'Nei', invalidWidth: 'Cellebredde må være et tall.', invalidHeight: 'Cellehøyde må være et tall.', invalidRowSpan: 'Radspenn må være et heltall.', invalidColSpan: 'Kolonnespenn må være et heltall.', chooseColor: 'Velg' }, cellPad: 'Cellepolstring', cellSpace: 'Cellemarg', column: { menu: 'Kolonne', insertBefore: 'Sett inn kolonne før', insertAfter: 'Sett inn kolonne etter', deleteColumn: 'Slett kolonner' }, columns: 'Kolonner', deleteTable: 'Slett tabell', headers: 'Overskrifter', headersBoth: 'Begge', headersColumn: 'Første kolonne', headersNone: 'Ingen', headersRow: 'Første rad', invalidBorder: 'Rammestørrelse må være et tall.', invalidCellPadding: 'Cellepolstring må være et positivt tall.', invalidCellSpacing: 'Cellemarg må være et positivt tall.', invalidCols: 'Antall kolonner må være et tall større enn 0.', invalidHeight: 'Tabellhøyde må være et tall.', invalidRows: 'Antall rader må være et tall større enn 0.', invalidWidth: 'Tabellbredde må være et tall.', menu: 'Egenskaper for tabell', row: { menu: 'Rader', insertBefore: 'Sett inn rad før', insertAfter: 'Sett inn rad etter', deleteRow: 'Slett rader' }, rows: 'Rader', summary: 'Sammendrag', title: 'Egenskaper for tabell', toolbar: 'Tabell', widthPc: 'prosent', widthPx: 'piksler', widthUnit: 'Bredde-enhet' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/hr.js0000644000175000017500000000431314006075351022671 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'hr', { border: 'Veličina okvira', caption: 'Naslov', cell: { menu: 'Ćelija', insertBefore: 'Ubaci ćeliju prije', insertAfter: 'Ubaci ćeliju poslije', deleteCell: 'Izbriši ćelije', merge: 'Spoji ćelije', mergeRight: 'Spoji desno', mergeDown: 'Spoji dolje', splitHorizontal: 'Podijeli ćeliju vodoravno', splitVertical: 'Podijeli ćeliju okomito', title: 'Svojstva ćelije', cellType: 'Vrsta ćelije', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Prelazak u novi red', hAlign: 'Vodoravno poravnanje', vAlign: 'Okomito poravnanje', alignBaseline: 'Osnovna linija', bgColor: 'Boja pozadine', borderColor: 'Boja ruba', data: 'Podatak', header: 'Zaglavlje', yes: 'Da', no: 'ne', invalidWidth: 'Širina ćelije mora biti broj.', invalidHeight: 'Visina ćelije mora biti broj.', invalidRowSpan: 'Rows span mora biti cijeli broj.', invalidColSpan: 'Columns span mora biti cijeli broj.', chooseColor: 'Odaberi' }, cellPad: 'Razmak ćelija', cellSpace: 'Prostornost ćelija', column: { menu: 'Kolona', insertBefore: 'Ubaci kolonu prije', insertAfter: 'Ubaci kolonu poslije', deleteColumn: 'Izbriši kolone' }, columns: 'Kolona', deleteTable: 'Izbriši tablicu', headers: 'Zaglavlje', headersBoth: 'Oba', headersColumn: 'Prva kolona', headersNone: 'Ništa', headersRow: 'Prvi red', invalidBorder: 'Debljina ruba mora biti broj.', invalidCellPadding: 'Razmak ćelija mora biti broj.', invalidCellSpacing: 'Prostornost ćelija mora biti broj.', invalidCols: 'Broj kolona mora biti broj veći od 0.', invalidHeight: 'Visina tablice mora biti broj.', invalidRows: 'Broj redova mora biti broj veći od 0.', invalidWidth: 'Širina tablice mora biti broj.', menu: 'Svojstva tablice', row: { menu: 'Red', insertBefore: 'Ubaci red prije', insertAfter: 'Ubaci red poslije', deleteRow: 'Izbriši redove' }, rows: 'Redova', summary: 'Sažetak', title: 'Svojstva tablice', toolbar: 'Tablica', widthPc: 'postotaka', widthPx: 'piksela', widthUnit: 'jedinica širine' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/th.js0000644000175000017500000000574614006075351022706 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'th', { border: 'ขนาดเส้นขอบ', caption: 'หัวเรื่องของตาราง', cell: { menu: 'ช่องตาราง', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'ลบช่อง', merge: 'ผสานช่อง', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'ระยะแนวตั้ง', cellSpace: 'ระยะแนวนอนน', column: { menu: 'คอลัมน์', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'ลบสดมน์' }, columns: 'สดมน์', deleteTable: 'ลบตาราง', headers: 'ส่วนหัว', headersBoth: 'ทั้งสองอย่าง', headersColumn: 'คอลัมน์แรก', headersNone: 'None', headersRow: 'แถวแรก', invalidBorder: 'ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข', invalidCellPadding: 'ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก', invalidCellSpacing: 'ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก', invalidCols: 'จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0', invalidHeight: 'ส่วนสูงของตารางต้องเป็นตัวเลข', invalidRows: 'จำนวนของแถวต้องเป็นจำนวนมากกว่า 0', invalidWidth: 'ความกว้างตารางต้องเป็นตัวเลข', menu: 'คุณสมบัติของ ตาราง', row: { menu: 'แถว', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'ลบแถว' }, rows: 'แถว', summary: 'สรุปความ', title: 'คุณสมบัติของ ตาราง', toolbar: 'ตาราง', widthPc: 'เปอร์เซ็น', widthPx: 'จุดสี', widthUnit: 'หน่วยความกว้าง' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ar.js0000644000175000017500000000545214006075351022667 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ar', { border: 'الحدود', caption: 'الوصف', cell: { menu: 'خلية', insertBefore: 'إدراج خلية قبل', insertAfter: 'إدراج خلية بعد', deleteCell: 'حذف خلية', merge: 'دمج خلايا', mergeRight: 'دمج لليمين', mergeDown: 'دمج للأسفل', splitHorizontal: 'تقسيم الخلية أفقياً', splitVertical: 'تقسيم الخلية عمودياً', title: 'خصائص الخلية', cellType: 'نوع الخلية', rowSpan: 'امتداد الصفوف', colSpan: 'امتداد الأعمدة', wordWrap: 'التفاف النص', hAlign: 'محاذاة أفقية', vAlign: 'محاذاة رأسية', alignBaseline: 'خط القاعدة', bgColor: 'لون الخلفية', borderColor: 'لون الحدود', data: 'بيانات', header: 'عنوان', yes: 'نعم', no: 'لا', invalidWidth: 'عرض الخلية يجب أن يكون عدداً.', invalidHeight: 'ارتفاع الخلية يجب أن يكون عدداً.', invalidRowSpan: 'امتداد الصفوف يجب أن يكون عدداً صحيحاً.', invalidColSpan: 'امتداد الأعمدة يجب أن يكون عدداً صحيحاً.', chooseColor: 'اختر' }, cellPad: 'المسافة البادئة', cellSpace: 'تباعد الخلايا', column: { menu: 'عمود', insertBefore: 'إدراج عمود قبل', insertAfter: 'إدراج عمود بعد', deleteColumn: 'حذف أعمدة' }, columns: 'أعمدة', deleteTable: 'حذف الجدول', headers: 'العناوين', headersBoth: 'كلاهما', headersColumn: 'العمود الأول', headersNone: 'بدون', headersRow: 'الصف الأول', invalidBorder: 'حجم الحد يجب أن يكون عدداً.', invalidCellPadding: 'المسافة البادئة يجب أن تكون عدداً', invalidCellSpacing: 'المسافة بين الخلايا يجب أن تكون عدداً.', invalidCols: 'عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.', invalidHeight: 'ارتفاع الجدول يجب أن يكون عدداً.', invalidRows: 'عدد الصفوف يجب أن يكون عدداً أكبر من صفر.', invalidWidth: 'عرض الجدول يجب أن يكون عدداً.', menu: 'خصائص الجدول', row: { menu: 'صف', insertBefore: 'إدراج صف قبل', insertAfter: 'إدراج صف بعد', deleteRow: 'حذف صفوف' }, rows: 'صفوف', summary: 'الخلاصة', title: 'خصائص الجدول', toolbar: 'جدول', widthPc: 'بالمئة', widthPx: 'بكسل', widthUnit: 'وحدة العرض' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/sk.js0000644000175000017500000000465014006075351022701 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'sk', { border: 'Šírka rámu (border)', caption: 'Popis', cell: { menu: 'Bunka', insertBefore: 'Vložiť bunku pred', insertAfter: 'Vložiť bunku za', deleteCell: 'Vymazať bunky', merge: 'Zlúčiť bunky', mergeRight: 'Zlúčiť doprava', mergeDown: 'Zlúčiť dole', splitHorizontal: 'Rozdeliť bunky horizontálne', splitVertical: 'Rozdeliť bunky vertikálne', title: 'Vlastnosti bunky', cellType: 'Typ bunky', rowSpan: 'Rozsah riadkov', colSpan: 'Rozsah stĺpcov', wordWrap: 'Zalomovanie riadkov', hAlign: 'Horizontálne zarovnanie', vAlign: 'Vertikálne zarovnanie', alignBaseline: 'Základná čiara (baseline)', bgColor: 'Farba pozadia', borderColor: 'Farba rámu', data: 'Dáta', header: 'Hlavička', yes: 'Áno', no: 'Nie', invalidWidth: 'Šírka bunky musí byť číslo.', invalidHeight: 'Výška bunky musí byť číslo.', invalidRowSpan: 'Rozsah riadkov musí byť celé číslo.', invalidColSpan: 'Rozsah stĺpcov musí byť celé číslo.', chooseColor: 'Vybrať' }, cellPad: 'Odsadenie obsahu (cell padding)', cellSpace: 'Vzdialenosť buniek (cell spacing)', column: { menu: 'Stĺpec', insertBefore: 'Vložiť stĺpec pred', insertAfter: 'Vložiť stĺpec po', deleteColumn: 'Zmazať stĺpce' }, columns: 'Stĺpce', deleteTable: 'Vymazať tabuľku', headers: 'Hlavička', headersBoth: 'Obe', headersColumn: 'Prvý stĺpec', headersNone: 'Žiadne', headersRow: 'Prvý riadok', invalidBorder: 'Širka rámu musí byť číslo.', invalidCellPadding: 'Odsadenie v bunkách (cell padding) musí byť kladné číslo.', invalidCellSpacing: 'Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.', invalidCols: 'Počet stĺpcov musí byť číslo väčšie ako 0.', invalidHeight: 'Výška tabuľky musí byť číslo.', invalidRows: 'Počet riadkov musí byť číslo väčšie ako 0.', invalidWidth: 'Širka tabuľky musí byť číslo.', menu: 'Vlastnosti tabuľky', row: { menu: 'Riadok', insertBefore: 'Vložiť riadok pred', insertAfter: 'Vložiť riadok po', deleteRow: 'Vymazať riadky' }, rows: 'Riadky', summary: 'Prehľad', title: 'Vlastnosti tabuľky', toolbar: 'Tabuľka', widthPc: 'percent', widthPx: 'pixelov', widthUnit: 'jednotka šírky' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ro.js0000644000175000017500000000467614006075351022714 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ro', { border: 'Mărimea marginii', caption: 'Titlu (Caption)', cell: { menu: 'Celulă', insertBefore: 'Inserează celulă înainte', insertAfter: 'Inserează celulă după', deleteCell: 'Şterge celule', merge: 'Uneşte celule', mergeRight: 'Uneşte la dreapta', mergeDown: 'Uneşte jos', splitHorizontal: 'Împarte celula pe orizontală', splitVertical: 'Împarte celula pe verticală', title: 'Proprietăți celulă', cellType: 'Tipul celulei', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Aliniament orizontal', vAlign: 'Aliniament vertical', alignBaseline: 'Baseline', bgColor: 'Culoare fundal', borderColor: 'Culoare bordură', data: 'Data', header: 'Antet', yes: 'Da', no: 'Nu', invalidWidth: 'Lățimea celulei trebuie să fie un număr.', invalidHeight: 'Înălțimea celulei trebuie să fie un număr.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Alege' }, cellPad: 'Spaţiu în cadrul celulei', cellSpace: 'Spaţiu între celule', column: { menu: 'Coloană', insertBefore: 'Inserează coloană înainte', insertAfter: 'Inserează coloană după', deleteColumn: 'Şterge celule' }, columns: 'Coloane', deleteTable: 'Şterge tabel', headers: 'Antente', headersBoth: 'Ambele', headersColumn: 'Prima coloană', headersNone: 'Nimic', headersRow: 'Primul rând', invalidBorder: 'Dimensiunea bordurii trebuie să aibe un număr.', invalidCellPadding: 'Spațierea celulei trebuie sa fie un număr pozitiv', invalidCellSpacing: 'Spațierea celului trebuie să fie un număr pozitiv.', invalidCols: 'Numărul coloanelor trebuie să fie mai mare decât 0.', invalidHeight: 'Inaltimea celulei trebuie sa fie un numar.', invalidRows: 'Numărul rândurilor trebuie să fie mai mare decât 0.', invalidWidth: 'Lățimea tabelului trebuie să fie un număr.', menu: 'Proprietăţile tabelului', row: { menu: 'Rând', insertBefore: 'Inserează rând înainte', insertAfter: 'Inserează rând după', deleteRow: 'Şterge rânduri' }, rows: 'Rânduri', summary: 'Rezumat', title: 'Proprietăţile tabelului', toolbar: 'Tabel', widthPc: 'procente', widthPx: 'pixeli', widthUnit: 'unitate lățime' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/en-ca.js0000644000175000017500000000423114006075351023242 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'en-ca', { border: 'Border size', caption: 'Caption', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Delete Cells', merge: 'Merge Cells', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Cell padding', cellSpace: 'Cell spacing', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Delete Columns' }, columns: 'Columns', deleteTable: 'Delete Table', headers: 'Headers', headersBoth: 'Both', headersColumn: 'First column', headersNone: 'None', headersRow: 'First Row', invalidBorder: 'Border size must be a number.', invalidCellPadding: 'Cell padding must be a number.', invalidCellSpacing: 'Cell spacing must be a number.', invalidCols: 'Number of columns must be a number greater than 0.', invalidHeight: 'Table height must be a number.', invalidRows: 'Number of rows must be a number greater than 0.', invalidWidth: 'Table width must be a number.', menu: 'Table Properties', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Delete Rows' }, rows: 'Rows', summary: 'Summary', title: 'Table Properties', toolbar: 'Table', widthPc: 'percent', widthPx: 'pixels', widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ug.js0000644000175000017500000000641314006075351022676 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ug', { border: 'گىرۋەك', caption: 'ماۋزۇ', cell: { menu: 'كاتەكچە', insertBefore: 'سولغا كاتەكچە قىستۇر', insertAfter: 'ئوڭغا كاتەكچە قىستۇر', deleteCell: 'كەتەكچە ئۆچۈر', merge: 'كاتەكچە بىرلەشتۈر', mergeRight: 'كاتەكچىنى ئوڭغا بىرلەشتۈر', mergeDown: 'كاتەكچىنى ئاستىغا بىرلەشتۈر', splitHorizontal: 'كاتەكچىنى توغرىسىغا بىرلەشتۈر', splitVertical: 'كاتەكچىنى بويىغا بىرلەشتۈر', title: 'كاتەكچە خاسلىقى', cellType: 'كاتەكچە تىپى', rowSpan: 'بويىغا چات ئارىسى قۇر سانى', colSpan: 'توغرىسىغا چات ئارىسى ئىستون سانى', wordWrap: 'ئۆزلۈكىدىن قۇر قاتلا', hAlign: 'توغرىسىغا توغرىلا', vAlign: 'بويىغا توغرىلا', alignBaseline: 'ئاساسىي سىزىق', bgColor: 'تەگلىك رەڭگى', borderColor: 'گىرۋەك رەڭگى', data: 'سانلىق مەلۇمات', header: 'جەدۋەل باشى', yes: 'ھەئە', no: 'ياق', invalidWidth: 'كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ', invalidHeight: 'كاتەكچە ئېگىزلىكى چوقۇم سان بولىدۇ', invalidRowSpan: 'قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ', invalidColSpan: 'ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ', chooseColor: 'تاللاڭ' }, cellPad: 'يان ئارىلىق', cellSpace: 'ئارىلىق', column: { menu: 'ئىستون', insertBefore: 'سولغا ئىستون قىستۇر', insertAfter: 'ئوڭغا ئىستون قىستۇر', deleteColumn: 'ئىستون ئۆچۈر' }, columns: 'ئىستون سانى', deleteTable: 'جەدۋەل ئۆچۈر', headers: 'ماۋزۇ كاتەكچە', headersBoth: 'بىرىنچى ئىستون ۋە بىرىنچى قۇر', headersColumn: 'بىرىنچى ئىستون', headersNone: 'يوق', headersRow: 'بىرىنچى قۇر', invalidBorder: 'گىرۋەك توملۇقى چوقۇم سان بولىدۇ', invalidCellPadding: 'كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ', invalidCellSpacing: 'كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ', invalidCols: 'بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ', invalidHeight: 'جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ', invalidRows: 'بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ', invalidWidth: 'جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ', menu: 'جەدۋەل خاسلىقى', row: { menu: 'قۇر', insertBefore: 'ئۈستىگە قۇر قىستۇر', insertAfter: 'ئاستىغا قۇر قىستۇر', deleteRow: 'قۇر ئۆچۈر' }, rows: 'قۇر سانى', summary: 'ئۈزۈندە', title: 'جەدۋەل خاسلىقى', toolbar: 'جەدۋەل', widthPc: 'پىرسەنت', widthPx: 'پىكسېل', widthUnit: 'كەڭلىك بىرلىكى' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/el.js0000644000175000017500000000703314006075351022662 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'el', { border: 'Πάχος Περιγράμματος', caption: 'Λεζάντα', cell: { menu: 'Κελί', insertBefore: 'Εισαγωγή Κελιού Πριν', insertAfter: 'Εισαγωγή Κελιού Μετά', deleteCell: 'Διαγραφή Κελιών', merge: 'Ενοποίηση Κελιών', mergeRight: 'Συγχώνευση Με Δεξιά', mergeDown: 'Συγχώνευση Με Κάτω', splitHorizontal: 'Οριζόντια Διαίρεση Κελιού', splitVertical: 'Κατακόρυφη Διαίρεση Κελιού', title: 'Ιδιότητες Κελιού', cellType: 'Τύπος Κελιού', rowSpan: 'Εύρος Γραμμών', colSpan: 'Εύρος Στηλών', wordWrap: 'Αναδίπλωση Λέξεων', hAlign: 'Οριζόντια Στοίχιση', vAlign: 'Κάθετη Στοίχιση', alignBaseline: 'Γραμμή Βάσης', bgColor: 'Χρώμα Φόντου', borderColor: 'Χρώμα Περιγράμματος', data: 'Δεδομένα', header: 'Κεφαλίδα', yes: 'Ναι', no: 'Όχι', invalidWidth: 'Το πλάτος του κελιού πρέπει να είναι αριθμός.', invalidHeight: 'Το ύψος του κελιού πρέπει να είναι αριθμός.', invalidRowSpan: 'Το εύρος των γραμμών πρέπει να είναι ακέραιος αριθμός.', invalidColSpan: 'Το εύρος των στηλών πρέπει να είναι ακέραιος αριθμός.', chooseColor: 'Επιλέξτε' }, cellPad: 'Αναπλήρωση κελιών', cellSpace: 'Απόσταση κελιών', column: { menu: 'Στήλη', insertBefore: 'Εισαγωγή Στήλης Πριν', insertAfter: 'Εισαγωγή Στήλης Μετά', deleteColumn: 'Διαγραφή Στηλών' }, columns: 'Στήλες', deleteTable: 'Διαγραφή Πίνακα', headers: 'Κεφαλίδες', headersBoth: 'Και τα δύο', headersColumn: 'Πρώτη στήλη', headersNone: 'Κανένα', headersRow: 'Πρώτη Γραμμή', invalidBorder: 'Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.', invalidCellPadding: 'Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.', invalidCellSpacing: 'Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.', invalidCols: 'Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.', invalidHeight: 'Το ύψος του πίνακα πρέπει να είναι αριθμός.', invalidRows: 'Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.', invalidWidth: 'Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.', menu: 'Ιδιότητες Πίνακα', row: { menu: 'Γραμμή', insertBefore: 'Εισαγωγή Γραμμής Πριν', insertAfter: 'Εισαγωγή Γραμμής Μετά', deleteRow: 'Διαγραφή Γραμμών' }, rows: 'Γραμμές', summary: 'Περίληψη', title: 'Ιδιότητες Πίνακα', toolbar: 'Πίνακας', widthPc: 'τοις εκατό', widthPx: 'pixel', widthUnit: 'μονάδα πλάτους' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/de.js0000644000175000017500000000465714006075351022663 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'de', { border: 'Rahmengröße', caption: 'Überschrift', cell: { menu: 'Zelle', insertBefore: 'Zelle davor einfügen', insertAfter: 'Zelle danach einfügen', deleteCell: 'Zelle löschen', merge: 'Zellen verbinden', mergeRight: 'Nach rechts verbinden', mergeDown: 'Nach unten verbinden', splitHorizontal: 'Zelle horizontal teilen', splitVertical: 'Zelle vertikal teilen', title: 'Zelleneigenschaften', cellType: 'Zellart', rowSpan: 'Anzahl Zeilen verbinden', colSpan: 'Anzahl Spalten verbinden', wordWrap: 'Zeilenumbruch', hAlign: 'Horizontale Ausrichtung', vAlign: 'Vertikale Ausrichtung', alignBaseline: 'Grundlinie', bgColor: 'Hintergrundfarbe', borderColor: 'Rahmenfarbe', data: 'Daten', header: 'Überschrift', yes: 'Ja', no: 'Nein', invalidWidth: 'Zellenbreite muss eine Zahl sein.', invalidHeight: 'Zellenhöhe muss eine Zahl sein.', invalidRowSpan: '"Anzahl Zeilen verbinden" muss eine Ganzzahl sein.', invalidColSpan: '"Anzahl Spalten verbinden" muss eine Ganzzahl sein.', chooseColor: 'Wählen' }, cellPad: 'Zellenabstand innen', cellSpace: 'Zellenabstand außen', column: { menu: 'Spalte', insertBefore: 'Spalte links davor einfügen', insertAfter: 'Spalte rechts danach einfügen', deleteColumn: 'Spalte löschen' }, columns: 'Spalte', deleteTable: 'Tabelle löschen', headers: 'Kopfzeile', headersBoth: 'Beide', headersColumn: 'Erste Spalte', headersNone: 'Keine', headersRow: 'Erste Zeile', invalidBorder: 'Die Rahmenbreite muß eine Zahl sein.', invalidCellPadding: 'Der Zellenabstand innen muß eine positive Zahl sein.', invalidCellSpacing: 'Der Zellenabstand außen muß eine positive Zahl sein.', invalidCols: 'Die Anzahl der Spalten muß größer als 0 sein..', invalidHeight: 'Die Tabellenbreite muß eine Zahl sein.', invalidRows: 'Die Anzahl der Zeilen muß größer als 0 sein.', invalidWidth: 'Die Tabellenbreite muss eine Zahl sein.', menu: 'Tabellen-Eigenschaften', row: { menu: 'Zeile', insertBefore: 'Zeile oberhalb einfügen', insertAfter: 'Zeile unterhalb einfügen', deleteRow: 'Zeile entfernen' }, rows: 'Zeile', summary: 'Inhaltsübersicht', title: 'Tabellen-Eigenschaften', toolbar: 'Tabelle', widthPc: '%', widthPx: 'Pixel', widthUnit: 'Breite Einheit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/uk.js0000644000175000017500000000704714006075351022706 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'uk', { border: 'Розмір рамки', caption: 'Заголовок таблиці', cell: { menu: 'Комірки', insertBefore: 'Вставити комірку перед', insertAfter: 'Вставити комірку після', deleteCell: 'Видалити комірки', merge: 'Об\'єднати комірки', mergeRight: 'Об\'єднати справа', mergeDown: 'Об\'єднати донизу', splitHorizontal: 'Розділити комірку по горизонталі', splitVertical: 'Розділити комірку по вертикалі', title: 'Властивості комірки', cellType: 'Тип комірки', rowSpan: 'Об\'єднання рядків', colSpan: 'Об\'єднання стовпців', wordWrap: 'Автоперенесення тексту', hAlign: 'Гориз. вирівнювання', vAlign: 'Верт. вирівнювання', alignBaseline: 'По базовій лінії', bgColor: 'Колір фону', borderColor: 'Колір рамки', data: 'Дані', header: 'Заголовок', yes: 'Так', no: 'Ні', invalidWidth: 'Ширина комірки повинна бути цілим числом.', invalidHeight: 'Висота комірки повинна бути цілим числом.', invalidRowSpan: 'Кількість об\'єднуваних рядків повинна бути цілим числом.', invalidColSpan: 'Кількість об\'єднуваних стовбців повинна бути цілим числом.', chooseColor: 'Обрати' }, cellPad: 'Внутр. відступ', cellSpace: 'Проміжок', column: { menu: 'Стовбці', insertBefore: 'Вставити стовбець перед', insertAfter: 'Вставити стовбець після', deleteColumn: 'Видалити стовбці' }, columns: 'Стовбці', deleteTable: 'Видалити таблицю', headers: 'Заголовки стовбців/рядків', headersBoth: 'Стовбці і рядки', headersColumn: 'Стовбці', headersNone: 'Без заголовків', headersRow: 'Рядки', invalidBorder: 'Розмір рамки повинен бути цілим числом.', invalidCellPadding: 'Внутр. відступ комірки повинен бути цілим числом.', invalidCellSpacing: 'Проміжок між комірками повинен бути цілим числом.', invalidCols: 'Кількість стовбців повинна бути більшою 0.', invalidHeight: 'Висота таблиці повинна бути цілим числом.', invalidRows: 'Кількість рядків повинна бути більшою 0.', invalidWidth: 'Ширина таблиці повинна бути цілим числом.', menu: 'Властивості таблиці', row: { menu: 'Рядки', insertBefore: 'Вставити рядок перед', insertAfter: 'Вставити рядок після', deleteRow: 'Видалити рядки' }, rows: 'Рядки', summary: 'Детальний опис заголовку таблиці', title: 'Властивості таблиці', toolbar: 'Таблиця', widthPc: 'відсотків', widthPx: 'пікселів', widthUnit: 'Одиниці вимір.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/sr-latn.js0000644000175000017500000000427114006075351023643 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'sr-latn', { border: 'Veličina okvira', caption: 'Naslov tabele', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Obriši ćelije', merge: 'Spoj celije', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Razmak ćelija', cellSpace: 'Ćelijski prostor', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Obriši kolone' }, columns: 'Kolona', deleteTable: 'Izbriši tabelu', headers: 'Zaglavlja', headersBoth: 'Oba', headersColumn: 'Prva kolona', headersNone: 'None', headersRow: 'Prvi red', invalidBorder: 'Veličina okvira mora biti broj.', invalidCellPadding: 'Padding polja mora biti pozitivan broj.', invalidCellSpacing: 'Razmak između ćelija mora biti pozitivan broj.', invalidCols: 'Broj kolona mora biti broj veći od 0.', invalidHeight: 'Visina tabele mora biti broj.', invalidRows: 'Broj redova mora biti veći od 0.', invalidWidth: 'Širina tabele mora biti broj.', menu: 'Osobine tabele', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Obriši redove' }, rows: 'Redova', summary: 'Sažetak', title: 'Osobine tabele', toolbar: 'Tabela', widthPc: 'procenata', widthPx: 'piksela', widthUnit: 'jedinica za širinu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/km.js0000644000175000017500000001035514006075351022672 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'km', { border: 'ទំហំ​បន្ទាត់​ស៊ុម', caption: 'ចំណងជើង', cell: { menu: 'ក្រឡា', insertBefore: 'បញ្ចូល​ក្រឡា​ពីមុខ', insertAfter: 'បញ្ចូល​ក្រឡា​ពី​ក្រោយ', deleteCell: 'លុប​ក្រឡា', merge: 'បញ្ចូល​ក្រឡា​ចូល​គ្នា', mergeRight: 'បញ្ចូល​គ្នា​ខាង​ស្ដាំ', mergeDown: 'បញ្ចូល​គ្នា​ចុះ​ក្រោម', splitHorizontal: 'ពុះ​ក្រឡា​ផ្ដេក', splitVertical: 'ពុះ​ក្រឡា​បញ្ឈរ', title: 'លក្ខណៈ​ក្រឡា', cellType: 'ប្រភេទ​ក្រឡា', rowSpan: 'ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា', colSpan: 'ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា', wordWrap: 'រុំ​ពាក្យ', hAlign: 'ការ​តម្រឹម​ផ្ដេក', vAlign: 'ការ​តម្រឹម​បញ្ឈរ', alignBaseline: 'ខ្សែ​បន្ទាត់​គោល', bgColor: 'ពណ៌​ផ្ទៃ​ក្រោយ', borderColor: 'ពណ៌​បន្ទាត់​ស៊ុម', data: 'ទិន្នន័យ', header: 'ក្បាល', yes: 'ព្រម', no: 'ទេ', invalidWidth: 'ទទឹង​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។', invalidHeight: 'កម្ពស់​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។', invalidRowSpan: 'ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។', invalidColSpan: 'ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។', chooseColor: 'រើស' }, cellPad: 'ចន្លោះ​ក្រឡា', cellSpace: 'គម្លាត​ក្រឡា', column: { menu: 'ជួរ​ឈរ', insertBefore: 'បញ្ចូល​ជួរ​ឈរ​ពីមុខ', insertAfter: 'បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ', deleteColumn: 'លុប​ជួរ​ឈរ' }, columns: 'ជួរឈរ', deleteTable: 'លុប​តារាង', headers: 'ក្បាល', headersBoth: 'ទាំង​ពីរ', headersColumn: 'ជួរ​ឈរ​ដំបូង', headersNone: 'មិន​មាន', headersRow: 'ជួរ​ដេក​ដំបូង', invalidBorder: 'ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។', invalidCellPadding: 'ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។', invalidCellSpacing: 'គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។', invalidCols: 'ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។', invalidHeight: 'កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ', invalidRows: 'ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។', invalidWidth: 'ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។', menu: 'លក្ខណៈ​តារាង', row: { menu: 'ជួរ​ដេក', insertBefore: 'បញ្ចូល​ជួរ​ដេក​ពីមុខ', insertAfter: 'បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ', deleteRow: 'លុប​ជួរ​ដេក' }, rows: 'ជួរ​ដេក', summary: 'សេចក្តី​សង្ខេប', title: 'លក្ខណៈ​តារាង', toolbar: 'តារាង', widthPc: 'ភាគរយ', widthPx: 'ភីកសែល', widthUnit: 'ឯកតា​ទទឹង' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/eu.js0000644000175000017500000000471514006075351022677 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'eu', { border: 'Ertzaren Zabalera', caption: 'Epigrafea', cell: { menu: 'Gelaxka', insertBefore: 'Txertatu Gelaxka Aurretik', insertAfter: 'Txertatu Gelaxka Ostean', deleteCell: 'Kendu Gelaxkak', merge: 'Batu Gelaxkak', mergeRight: 'Elkartu Eskumara', mergeDown: 'Elkartu Behera', splitHorizontal: 'Banatu Gelaxkak Horizontalki', splitVertical: 'Banatu Gelaxkak Bertikalki', title: 'Gelaxken Ezaugarriak', cellType: 'Gelaxka Mota', rowSpan: 'Hedatutako Lerroak', colSpan: 'Hedatutako Zutabeak', wordWrap: 'Itzulbira', hAlign: 'Lerrokatze Horizontala', vAlign: 'Lerrokatze Bertikala', alignBaseline: 'Oinarri-lerroan', bgColor: 'Fondoaren Kolorea', borderColor: 'Ertzaren Kolorea', data: 'Data', header: 'Goiburua', yes: 'Bai', no: 'Ez', invalidWidth: 'Gelaxkaren zabalera zenbaki bat izan behar da.', invalidHeight: 'Gelaxkaren altuera zenbaki bat izan behar da.', invalidRowSpan: 'Lerroen hedapena zenbaki osoa izan behar da.', invalidColSpan: 'Zutabeen hedapena zenbaki osoa izan behar da.', chooseColor: 'Choose' }, cellPad: 'Gelaxken betegarria', cellSpace: 'Gelaxka arteko tartea', column: { menu: 'Zutabea', insertBefore: 'Txertatu Zutabea Aurretik', insertAfter: 'Txertatu Zutabea Ostean', deleteColumn: 'Ezabatu Zutabeak' }, columns: 'Zutabeak', deleteTable: 'Ezabatu Taula', headers: 'Goiburuak', headersBoth: 'Biak', headersColumn: 'Lehen zutabea', headersNone: 'Bat ere ez', headersRow: 'Lehen lerroa', invalidBorder: 'Ertzaren tamaina zenbaki bat izan behar da.', invalidCellPadding: 'Gelaxken betegarria zenbaki bat izan behar da.', invalidCellSpacing: 'Gelaxka arteko tartea zenbaki bat izan behar da.', invalidCols: 'Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.', invalidHeight: 'Taularen altuera zenbaki bat izan behar da.', invalidRows: 'Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.', invalidWidth: 'Taularen zabalera zenbaki bat izan behar da.', menu: 'Taularen Ezaugarriak', row: { menu: 'Lerroa', insertBefore: 'Txertatu Lerroa Aurretik', insertAfter: 'Txertatu Lerroa Ostean', deleteRow: 'Ezabatu Lerroak' }, rows: 'Lerroak', summary: 'Laburpena', title: 'Taularen Ezaugarriak', toolbar: 'Taula', widthPc: 'ehuneko', widthPx: 'pixel', widthUnit: 'zabalera unitatea' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/fa.js0000644000175000017500000000555314006075351022655 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'fa', { border: 'اندازهٴ لبه', caption: 'عنوان', cell: { menu: 'سلول', insertBefore: 'افزودن سلول قبل از', insertAfter: 'افزودن سلول بعد از', deleteCell: 'حذف سلولها', merge: 'ادغام سلولها', mergeRight: 'ادغام به راست', mergeDown: 'ادغام به پایین', splitHorizontal: 'جدا کردن افقی سلول', splitVertical: 'جدا کردن عمودی سلول', title: 'ویژگیهای سلول', cellType: 'نوع سلول', rowSpan: 'محدوده ردیفها', colSpan: 'محدوده ستونها', wordWrap: 'شکستن کلمه', hAlign: 'چینش افقی', vAlign: 'چینش عمودی', alignBaseline: 'خط مبنا', bgColor: 'رنگ زمینه', borderColor: 'رنگ خطوط', data: 'اطلاعات', header: 'سرنویس', yes: 'بله', no: 'خیر', invalidWidth: 'عرض سلول باید یک عدد باشد.', invalidHeight: 'ارتفاع سلول باید عدد باشد.', invalidRowSpan: 'مقدار محدوده ردیفها باید یک عدد باشد.', invalidColSpan: 'مقدار محدوده ستونها باید یک عدد باشد.', chooseColor: 'انتخاب' }, cellPad: 'فاصلهٴ پرشده در سلول', cellSpace: 'فاصلهٴ میان سلولها', column: { menu: 'ستون', insertBefore: 'افزودن ستون قبل از', insertAfter: 'افزودن ستون بعد از', deleteColumn: 'حذف ستونها' }, columns: 'ستونها', deleteTable: 'پاک کردن جدول', headers: 'سرنویسها', headersBoth: 'هردو', headersColumn: 'اولین ستون', headersNone: 'هیچ', headersRow: 'اولین ردیف', invalidBorder: 'مقدار اندازه خطوط باید یک عدد باشد.', invalidCellPadding: 'بالشتک سلول باید یک عدد باشد.', invalidCellSpacing: 'مقدار فاصلهگذاری سلول باید یک عدد باشد.', invalidCols: 'تعداد ستونها باید یک عدد بزرگتر از 0 باشد.', invalidHeight: 'مقدار ارتفاع جدول باید یک عدد باشد.', invalidRows: 'تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.', invalidWidth: 'مقدار پهنای جدول باید یک عدد باشد.', menu: 'ویژگیهای جدول', row: { menu: 'سطر', insertBefore: 'افزودن سطر قبل از', insertAfter: 'افزودن سطر بعد از', deleteRow: 'حذف سطرها' }, rows: 'سطرها', summary: 'خلاصه', title: 'ویژگیهای جدول', toolbar: 'جدول', widthPc: 'درصد', widthPx: 'پیکسل', widthUnit: 'واحد پهنا' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/si.js0000644000175000017500000000621014006075351022671 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'si', { border: 'සීමාවවල විශාලත්වය', caption: 'Caption', // MISSING cell: { menu: 'කොටුව', insertBefore: 'පෙර කොටුවක් ඇතුල්කිරිම', insertAfter: 'පසුව කොටුවක් ඇතුලත් ', deleteCell: 'කොටුව මැකීම', merge: 'කොටු එකට යාකිරිම', mergeRight: 'දකුණට ', mergeDown: 'පහලට ', splitHorizontal: 'තිරස්ව කොටු පැතිරීම', splitVertical: 'සිරස්ව කොටු පැතිරීම', title: 'කොටු ', cellType: 'කොටු වර්ගය', rowSpan: 'පේළි පළල', colSpan: 'සිරස් පළල', wordWrap: 'වචන ගැලපුම', hAlign: 'තිරස්ව ', vAlign: 'සිරස්ව ', alignBaseline: 'පාද රේඛාව', bgColor: 'පසුබිම් වර්ණය', borderColor: 'මායිම් ', data: 'Data', // MISSING header: 'ශීර්ෂක', yes: 'ඔව්', no: 'නැත', invalidWidth: 'කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය', invalidHeight: 'කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය', invalidRowSpan: 'Rows span must be a whole number.', // MISSING invalidColSpan: 'Columns span must be a whole number.', // MISSING chooseColor: 'තෝරන්න' }, cellPad: 'Cell padding', // MISSING cellSpace: 'Cell spacing', // MISSING column: { menu: 'Column', // MISSING insertBefore: 'Insert Column Before', // MISSING insertAfter: 'Insert Column After', // MISSING deleteColumn: 'Delete Columns' // MISSING }, columns: 'සිරස් ', deleteTable: 'වගුව මකන්න', headers: 'ශීර්ෂක', headersBoth: 'දෙකම', headersColumn: 'පළමූ සිරස් තීරුව', headersNone: 'කිසිවක්ම නොවේ', headersRow: 'පළමූ පේළිය', invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Table width must be a number.', // MISSING menu: 'Table Properties', // MISSING row: { menu: 'Row', // MISSING insertBefore: 'Insert Row Before', // MISSING insertAfter: 'Insert Row After', // MISSING deleteRow: 'Delete Rows' // MISSING }, rows: 'Rows', // MISSING summary: 'Summary', // MISSING title: 'Table Properties', // MISSING toolbar: 'Table', // MISSING widthPc: 'percent', // MISSING widthPx: 'pixels', // MISSING widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/en.js0000644000175000017500000000423514006075351022665 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'en', { border: 'Border size', caption: 'Caption', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Delete Cells', merge: 'Merge Cells', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Cell padding', cellSpace: 'Cell spacing', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Delete Columns' }, columns: 'Columns', deleteTable: 'Delete Table', headers: 'Headers', headersBoth: 'Both', headersColumn: 'First column', headersNone: 'None', headersRow: 'First Row', invalidBorder: 'Border size must be a number.', invalidCellPadding: 'Cell padding must be a positive number.', invalidCellSpacing: 'Cell spacing must be a positive number.', invalidCols: 'Number of columns must be a number greater than 0.', invalidHeight: 'Table height must be a number.', invalidRows: 'Number of rows must be a number greater than 0.', invalidWidth: 'Table width must be a number.', menu: 'Table Properties', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Delete Rows' }, rows: 'Rows', summary: 'Summary', title: 'Table Properties', toolbar: 'Table', widthPc: 'percent', widthPx: 'pixels', widthUnit: 'width unit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/he.js0000644000175000017500000000541514006075351022660 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'he', { border: 'גודל מסגרת', caption: 'כיתוב', cell: { menu: 'מאפייני תא', insertBefore: 'הוספת תא לפני', insertAfter: 'הוספת תא אחרי', deleteCell: 'מחיקת תאים', merge: 'מיזוג תאים', mergeRight: 'מזג ימינה', mergeDown: 'מזג למטה', splitHorizontal: 'פיצול תא אופקית', splitVertical: 'פיצול תא אנכית', title: 'תכונות התא', cellType: 'סוג התא', rowSpan: 'מתיחת השורות', colSpan: 'מתיחת התאים', wordWrap: 'מניעת גלישת שורות', hAlign: 'יישור אופקי', vAlign: 'יישור אנכי', alignBaseline: 'שורת בסיס', bgColor: 'צבע רקע', borderColor: 'צבע מסגרת', data: 'מידע', header: 'כותרת', yes: 'כן', no: 'לא', invalidWidth: 'שדה רוחב התא חייב להיות מספר.', invalidHeight: 'שדה גובה התא חייב להיות מספר.', invalidRowSpan: 'שדה מתיחת השורות חייב להיות מספר שלם.', invalidColSpan: 'שדה מתיחת העמודות חייב להיות מספר שלם.', chooseColor: 'בחר' }, cellPad: 'ריפוד תא', cellSpace: 'מרווח תא', column: { menu: 'עמודה', insertBefore: 'הוספת עמודה לפני', insertAfter: 'הוספת עמודה אחרי', deleteColumn: 'מחיקת עמודות' }, columns: 'עמודות', deleteTable: 'מחק טבלה', headers: 'כותרות', headersBoth: 'שניהם', headersColumn: 'עמודה ראשונה', headersNone: 'אין', headersRow: 'שורה ראשונה', invalidBorder: 'שדה גודל המסגרת חייב להיות מספר.', invalidCellPadding: 'שדה ריפוד התאים חייב להיות מספר חיובי.', invalidCellSpacing: 'שדה ריווח התאים חייב להיות מספר חיובי.', invalidCols: 'שדה מספר העמודות חייב להיות מספר גדול מ 0.', invalidHeight: 'שדה גובה הטבלה חייב להיות מספר.', invalidRows: 'שדה מספר השורות חייב להיות מספר גדול מ 0.', invalidWidth: 'שדה רוחב הטבלה חייב להיות מספר.', menu: 'מאפייני טבלה', row: { menu: 'שורה', insertBefore: 'הוספת שורה לפני', insertAfter: 'הוספת שורה אחרי', deleteRow: 'מחיקת שורות' }, rows: 'שורות', summary: 'תקציר', title: 'מאפייני טבלה', toolbar: 'טבלה', widthPc: 'אחוז', widthPx: 'פיקסלים', widthUnit: 'יחידת רוחב' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/lt.js0000644000175000017500000000457714006075351022713 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'lt', { border: 'Rėmelio dydis', caption: 'Antraštė', cell: { menu: 'Langelis', insertBefore: 'Įterpti langelį prieš', insertAfter: 'Įterpti langelį po', deleteCell: 'Šalinti langelius', merge: 'Sujungti langelius', mergeRight: 'Sujungti su dešine', mergeDown: 'Sujungti su apačia', splitHorizontal: 'Skaidyti langelį horizontaliai', splitVertical: 'Skaidyti langelį vertikaliai', title: 'Cell nustatymai', cellType: 'Cell rūšis', rowSpan: 'Eilučių Span', colSpan: 'Stulpelių Span', wordWrap: 'Sutraukti raides', hAlign: 'Horizontalus lygiavimas', vAlign: 'Vertikalus lygiavimas', alignBaseline: 'Apatinė linija', bgColor: 'Fono spalva', borderColor: 'Rėmelio spalva', data: 'Data', header: 'Antraštė', yes: 'Taip', no: 'Ne', invalidWidth: 'Reikšmė turi būti skaičius.', invalidHeight: 'Reikšmė turi būti skaičius.', invalidRowSpan: 'Reikšmė turi būti skaičius.', invalidColSpan: 'Reikšmė turi būti skaičius.', chooseColor: 'Pasirinkite' }, cellPad: 'Tarpas nuo langelio rėmo iki teksto', cellSpace: 'Tarpas tarp langelių', column: { menu: 'Stulpelis', insertBefore: 'Įterpti stulpelį prieš', insertAfter: 'Įterpti stulpelį po', deleteColumn: 'Šalinti stulpelius' }, columns: 'Stulpeliai', deleteTable: 'Šalinti lentelę', headers: 'Antraštės', headersBoth: 'Abu', headersColumn: 'Pirmas stulpelis', headersNone: 'Nėra', headersRow: 'Pirma eilutė', invalidBorder: 'Reikšmė turi būti nurodyta skaičiumi.', invalidCellPadding: 'Reikšmė turi būti nurodyta skaičiumi.', invalidCellSpacing: 'Reikšmė turi būti nurodyta skaičiumi.', invalidCols: 'Skaičius turi būti didesnis nei 0.', invalidHeight: 'Reikšmė turi būti nurodyta skaičiumi.', invalidRows: 'Skaičius turi būti didesnis nei 0.', invalidWidth: 'Reikšmė turi būti nurodyta skaičiumi.', menu: 'Lentelės savybės', row: { menu: 'Eilutė', insertBefore: 'Įterpti eilutę prieš', insertAfter: 'Įterpti eilutę po', deleteRow: 'Šalinti eilutes' }, rows: 'Eilutės', summary: 'Santrauka', title: 'Lentelės savybės', toolbar: 'Lentelė', widthPc: 'procentais', widthPx: 'taškais', widthUnit: 'pločio vienetas' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/lv.js0000644000175000017500000000454414006075351022707 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'lv', { border: 'Rāmja izmērs', caption: 'Leģenda', cell: { menu: 'Šūna', insertBefore: 'Pievienot šūnu pirms', insertAfter: 'Pievienot šūnu pēc', deleteCell: 'Dzēst rūtiņas', merge: 'Apvienot rūtiņas', mergeRight: 'Apvieno pa labi', mergeDown: 'Apvienot uz leju', splitHorizontal: 'Sadalīt šūnu horizontāli', splitVertical: 'Sadalīt šūnu vertikāli', title: 'Šūnas uzstādījumi', cellType: 'Šūnas tips', rowSpan: 'Apvienotas rindas', colSpan: 'Apvienotas kolonas', wordWrap: 'Vārdu pārnese', hAlign: 'Horizontālais novietojums', vAlign: 'Vertikālais novietojums', alignBaseline: 'Pamatrinda', bgColor: 'Fona krāsa', borderColor: 'Rāmja krāsa', data: 'Dati', header: 'Virsraksts', yes: 'Jā', no: 'Nē', invalidWidth: 'Šūnas platumam jābūt skaitlim', invalidHeight: 'Šūnas augstumam jābūt skaitlim', invalidRowSpan: 'Apvienojamo rindu skaitam jābūt veselam skaitlim', invalidColSpan: 'Apvienojamo kolonu skaitam jābūt veselam skaitlim', chooseColor: 'Izvēlēties' }, cellPad: 'Rūtiņu nobīde', cellSpace: 'Rūtiņu atstatums', column: { menu: 'Kolonna', insertBefore: 'Ievietot kolonu pirms', insertAfter: 'Ievieto kolonu pēc', deleteColumn: 'Dzēst kolonnas' }, columns: 'Kolonnas', deleteTable: 'Dzēst tabulu', headers: 'Virsraksti', headersBoth: 'Abi', headersColumn: 'Pirmā kolona', headersNone: 'Nekas', headersRow: 'Pirmā rinda', invalidBorder: 'Rāmju izmēram jābūt skaitlim', invalidCellPadding: 'Šūnu atkāpēm jābūt pozitīvam skaitlim', invalidCellSpacing: 'Šūnu atstarpēm jābūt pozitīvam skaitlim', invalidCols: 'Kolonu skaitam jābūt lielākam par 0', invalidHeight: 'Tabulas augstumam jābūt skaitlim', invalidRows: 'Rindu skaitam jābūt lielākam par 0', invalidWidth: 'Tabulas platumam jābūt skaitlim', menu: 'Tabulas īpašības', row: { menu: 'Rinda', insertBefore: 'Ievietot rindu pirms', insertAfter: 'Ievietot rindu pēc', deleteRow: 'Dzēst rindas' }, rows: 'Rindas', summary: 'Anotācija', title: 'Tabulas īpašības', toolbar: 'Tabula', widthPc: 'procentuāli', widthPx: 'pikseļos', widthUnit: 'platuma mērvienība' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/eo.js0000644000175000017500000000452614006075351022671 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'eo', { border: 'Bordero', caption: 'Tabeltitolo', cell: { menu: 'Ĉelo', insertBefore: 'Enmeti Ĉelon Antaŭ', insertAfter: 'Enmeti Ĉelon Post', deleteCell: 'Forigi la Ĉelojn', merge: 'Kunfandi la Ĉelojn', mergeRight: 'Kunfandi dekstren', mergeDown: 'Kunfandi malsupren ', splitHorizontal: 'Horizontale dividi', splitVertical: 'Vertikale dividi', title: 'Ĉelatributoj', cellType: 'Ĉeltipo', rowSpan: 'Kunfando de linioj', colSpan: 'Kunfando de kolumnoj', wordWrap: 'Cezuro', hAlign: 'Horizontala ĝisrandigo', vAlign: 'Vertikala ĝisrandigo', alignBaseline: 'Malsupro de la teksto', bgColor: 'Fonkoloro', borderColor: 'Borderkoloro', data: 'Datenoj', header: 'Supra paĝotitolo', yes: 'Jes', no: 'No', invalidWidth: 'Ĉellarĝo devas esti nombro.', invalidHeight: 'Ĉelalto devas esti nombro.', invalidRowSpan: 'Kunfando de linioj devas esti entjera nombro.', invalidColSpan: 'Kunfando de kolumnoj devas esti entjera nombro.', chooseColor: 'Elektu' }, cellPad: 'Interna Marĝeno de la ĉeloj', cellSpace: 'Spaco inter la Ĉeloj', column: { menu: 'Kolumno', insertBefore: 'Enmeti kolumnon antaŭ', insertAfter: 'Enmeti kolumnon post', deleteColumn: 'Forigi Kolumnojn' }, columns: 'Kolumnoj', deleteTable: 'Forigi Tabelon', headers: 'Supraj Paĝotitoloj', headersBoth: 'Ambaŭ', headersColumn: 'Unua kolumno', headersNone: 'Neniu', headersRow: 'Unua linio', invalidBorder: 'La bordergrando devas esti nombro.', invalidCellPadding: 'La interna marĝeno en la ĉeloj devas esti pozitiva nombro.', invalidCellSpacing: 'La spaco inter la ĉeloj devas esti pozitiva nombro.', invalidCols: 'La nombro de la kolumnoj devas superi 0.', invalidHeight: 'La tabelalto devas esti nombro.', invalidRows: 'La nombro de la linioj devas superi 0.', invalidWidth: 'La tabellarĝo devas esti nombro.', menu: 'Atributoj de Tabelo', row: { menu: 'Linio', insertBefore: 'Enmeti linion antaŭ', insertAfter: 'Enmeti linion post', deleteRow: 'Forigi Liniojn' }, rows: 'Linioj', summary: 'Resumo', title: 'Atributoj de Tabelo', toolbar: 'Tabelo', widthPc: 'elcentoj', widthPx: 'Rastrumeroj', widthUnit: 'unuo de larĝo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ca.js0000644000175000017500000000466214006075351022652 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ca', { border: 'Mida vora', caption: 'Títol', cell: { menu: 'Cel·la', insertBefore: 'Insereix abans', insertAfter: 'Insereix després', deleteCell: 'Suprimeix', merge: 'Fusiona', mergeRight: 'Fusiona a la dreta', mergeDown: 'Fusiona avall', splitHorizontal: 'Divideix horitzontalment', splitVertical: 'Divideix verticalment', title: 'Propietats de la cel·la', cellType: 'Tipus de cel·la', rowSpan: 'Expansió de files', colSpan: 'Expansió de columnes', wordWrap: 'Ajustar al contingut', hAlign: 'Alineació Horizontal', vAlign: 'Alineació Vertical', alignBaseline: 'A la línia base', bgColor: 'Color de fons', borderColor: 'Color de la vora', data: 'Dades', header: 'Capçalera', yes: 'Sí', no: 'No', invalidWidth: 'L\'amplada de cel·la ha de ser un nombre.', invalidHeight: 'L\'alçada de cel·la ha de ser un nombre.', invalidRowSpan: 'L\'expansió de files ha de ser un nombre enter.', invalidColSpan: 'L\'expansió de columnes ha de ser un nombre enter.', chooseColor: 'Trieu' }, cellPad: 'Encoixinament de cel·les', cellSpace: 'Espaiat de cel·les', column: { menu: 'Columna', insertBefore: 'Insereix columna abans de', insertAfter: 'Insereix columna darrera', deleteColumn: 'Suprimeix una columna' }, columns: 'Columnes', deleteTable: 'Suprimeix la taula', headers: 'Capçaleres', headersBoth: 'Ambdues', headersColumn: 'Primera columna', headersNone: 'Cap', headersRow: 'Primera fila', invalidBorder: 'El gruix de la vora ha de ser un nombre.', invalidCellPadding: 'L\'encoixinament de cel·la ha de ser un nombre.', invalidCellSpacing: 'L\'espaiat de cel·la ha de ser un nombre.', invalidCols: 'El nombre de columnes ha de ser un nombre major que 0.', invalidHeight: 'L\'alçada de la taula ha de ser un nombre.', invalidRows: 'El nombre de files ha de ser un nombre major que 0.', invalidWidth: 'L\'amplada de la taula ha de ser un nombre.', menu: 'Propietats de la taula', row: { menu: 'Fila', insertBefore: 'Insereix fila abans de', insertAfter: 'Insereix fila darrera', deleteRow: 'Suprimeix una fila' }, rows: 'Files', summary: 'Resum', title: 'Propietats de la taula', toolbar: 'Taula', widthPc: 'percentatge', widthPx: 'píxels', widthUnit: 'unitat d\'amplada' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/hi.js0000644000175000017500000000575614006075351022674 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'hi', { border: 'बॉर्डर साइज़', caption: 'शीर्षक', cell: { menu: 'खाना', insertBefore: 'पहले सैल डालें', insertAfter: 'बाद में सैल डालें', deleteCell: 'सैल डिलीट करें', merge: 'सैल मिलायें', mergeRight: 'बाँया विलय', mergeDown: 'नीचे विलय करें', splitHorizontal: 'सैल को क्षैतिज स्थिति में विभाजित करें', splitVertical: 'सैल को लम्बाकार में विभाजित करें', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'सैल पैडिंग', cellSpace: 'सैल अंतर', column: { menu: 'कालम', insertBefore: 'पहले कालम डालें', insertAfter: 'बाद में कालम डालें', deleteColumn: 'कालम डिलीट करें' }, columns: 'कालम', deleteTable: 'टेबल डिलीट करें', headers: 'Headers', // MISSING headersBoth: 'Both', // MISSING headersColumn: 'First column', // MISSING headersNone: 'None', headersRow: 'First Row', // MISSING invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Table width must be a number.', // MISSING menu: 'टेबल प्रॉपर्टीज़', row: { menu: 'पंक्ति', insertBefore: 'पहले पंक्ति डालें', insertAfter: 'बाद में पंक्ति डालें', deleteRow: 'पंक्तियाँ डिलीट करें' }, rows: 'पंक्तियाँ', summary: 'सारांश', title: 'टेबल प्रॉपर्टीज़', toolbar: 'टेबल', widthPc: 'प्रतिशत', widthPx: 'पिक्सैल', widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/mk.js0000644000175000017500000000463214006075351022673 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'mk', { border: 'Border size', // MISSING caption: 'Caption', // MISSING cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Delete Cells', merge: 'Merge Cells', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Cell padding', // MISSING cellSpace: 'Cell spacing', // MISSING column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Delete Columns' }, columns: 'Columns', deleteTable: 'Delete Table', // MISSING headers: 'Headers', // MISSING headersBoth: 'Both', // MISSING headersColumn: 'First column', // MISSING headersNone: 'None', headersRow: 'First Row', // MISSING invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Table width must be a number.', // MISSING menu: 'Table Properties', // MISSING row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Delete Rows' }, rows: 'Rows', summary: 'Summary', // MISSING title: 'Table Properties', // MISSING toolbar: 'Table', // MISSING widthPc: 'percent', // MISSING widthPx: 'pixels', // MISSING widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/mn.js0000644000175000017500000000547714006075351022706 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'mn', { border: 'Хүрээний хэмжээ', caption: 'Тайлбар', cell: { menu: 'Нүх/зай', insertBefore: 'Нүх/зай өмнө нь оруулах', insertAfter: 'Нүх/зай дараа нь оруулах', deleteCell: 'Нүх устгах', merge: 'Нүх нэгтэх', mergeRight: 'Баруун тийш нэгтгэх', mergeDown: 'Доош нэгтгэх', splitHorizontal: 'Нүх/зайг босоогоор нь тусгаарлах', splitVertical: 'Нүх/зайг хөндлөнгөөр нь тусгаарлах', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Хэвтээд тэгшлэх арга', vAlign: 'Босоод тэгшлэх арга', alignBaseline: 'Baseline', bgColor: 'Дэвсгэр өнгө', borderColor: 'Хүрээний өнгө', data: 'Data', header: 'Header', yes: 'Тийм', no: 'Үгүй', invalidWidth: 'Нүдний өргөн нь тоо байх ёстой.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Сонгох' }, cellPad: 'Нүх доторлох(padding)', cellSpace: 'Нүх хоорондын зай (spacing)', column: { menu: 'Багана', insertBefore: 'Багана өмнө нь оруулах', insertAfter: 'Багана дараа нь оруулах', deleteColumn: 'Багана устгах' }, columns: 'Багана', deleteTable: 'Хүснэгт устгах', headers: 'Headers', // MISSING headersBoth: 'Both', // MISSING headersColumn: 'First column', // MISSING headersNone: 'None', headersRow: 'First Row', // MISSING invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Хүснэгтийн өргөн нь тоо байх ёстой.', menu: 'Хүснэгт', row: { menu: 'Мөр', insertBefore: 'Мөр өмнө нь оруулах', insertAfter: 'Мөр дараа нь оруулах', deleteRow: 'Мөр устгах' }, rows: 'Мөр', summary: 'Тайлбар', title: 'Хүснэгт', toolbar: 'Хүснэгт', widthPc: 'хувь', widthPx: 'цэг', widthUnit: 'өргөний нэгж' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/gl.js0000644000175000017500000000466514006075351022674 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'gl', { border: 'Tamaño do bordo', caption: 'Título', cell: { menu: 'Cela', insertBefore: 'Inserir a cela á esquerda', insertAfter: 'Inserir a cela á dereita', deleteCell: 'Eliminar celas', merge: 'Combinar celas', mergeRight: 'Combinar á dereita', mergeDown: 'Combinar cara abaixo', splitHorizontal: 'Dividir a cela en horizontal', splitVertical: 'Dividir a cela en vertical', title: 'Propiedades da cela', cellType: 'Tipo de cela', rowSpan: 'Expandir filas', colSpan: 'Expandir columnas', wordWrap: 'Axustar ao contido', hAlign: 'Aliñación horizontal', vAlign: 'Aliñación vertical', alignBaseline: 'Liña de base', bgColor: 'Cor do fondo', borderColor: 'Cor do bordo', data: 'Datos', header: 'Cabeceira', yes: 'Si', no: 'Non', invalidWidth: 'O largo da cela debe ser un número.', invalidHeight: 'O alto da cela debe ser un número.', invalidRowSpan: 'A expansión de filas debe ser un número enteiro.', invalidColSpan: 'A expansión de columnas debe ser un número enteiro.', chooseColor: 'Escoller' }, cellPad: 'Marxe interior da cela', cellSpace: 'Marxe entre celas', column: { menu: 'Columna', insertBefore: 'Inserir a columna á esquerda', insertAfter: 'Inserir a columna á dereita', deleteColumn: 'Borrar Columnas' }, columns: 'Columnas', deleteTable: 'Borrar Táboa', headers: 'Cabeceiras', headersBoth: 'Ambas', headersColumn: 'Primeira columna', headersNone: 'Ningún', headersRow: 'Primeira fila', invalidBorder: 'O tamaño do bordo debe ser un número.', invalidCellPadding: 'A marxe interior debe ser un número positivo.', invalidCellSpacing: 'A marxe entre celas debe ser un número positivo.', invalidCols: 'O número de columnas debe ser un número maior que 0.', invalidHeight: 'O alto da táboa debe ser un número.', invalidRows: 'O número de filas debe ser un número maior que 0', invalidWidth: 'O largo da táboa debe ser un número.', menu: 'Propiedades da táboa', row: { menu: 'Fila', insertBefore: 'Inserir a fila por riba', insertAfter: 'Inserir a fila por baixo', deleteRow: 'Eliminar filas' }, rows: 'Filas', summary: 'Resumo', title: 'Propiedades da táboa', toolbar: 'Taboa', widthPc: 'porcentaxe', widthPx: 'píxeles', widthUnit: 'unidade do largo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ko.js0000644000175000017500000000431014006075351022666 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ko', { border: '테두리 두께', caption: '주석', cell: { menu: '셀', insertBefore: '앞에 셀 삽입', insertAfter: '뒤에 셀 삽입', deleteCell: '셀 삭제', merge: '셀 합치기', mergeRight: '오른쪽 합치기', mergeDown: '왼쪽 합치기', splitHorizontal: '수평 나누기', splitVertical: '수직 나누기', title: '셀 속성', cellType: '셀 종류', rowSpan: '행 간격', colSpan: '열 간격', wordWrap: '줄 끝 단어 줄 바꿈', hAlign: '가로 정렬', vAlign: '세로 정렬', alignBaseline: '영문 글꼴 기준선', bgColor: '배경색', borderColor: '테두리 색', data: '자료', header: '머릿칸', yes: '예', no: '아니오', invalidWidth: '셀 너비는 숫자여야 합니다.', invalidHeight: '셀 높이는 숫자여야 합니다.', invalidRowSpan: '행 간격은 정수여야 합니다.', invalidColSpan: '열 간격은 정수여야 합니다.', chooseColor: '선택' }, cellPad: '셀 여백', cellSpace: '셀 간격', column: { menu: '열', insertBefore: '왼쪽에 열 삽입', insertAfter: '오른쪽에 열 삽입', deleteColumn: '열 삭제' }, columns: '열', deleteTable: '표 삭제', headers: '머릿칸', headersBoth: '모두', headersColumn: '첫 열', headersNone: '없음', headersRow: '첫 행', invalidBorder: '테두리 두께는 숫자여야 합니다.', invalidCellPadding: '셀 여백은 0 이상이어야 합니다.', invalidCellSpacing: '셀 간격은 0 이상이어야 합니다.', invalidCols: '열 번호는 0보다 커야 합니다.', invalidHeight: '표 높이는 숫자여야 합니다.', invalidRows: '행 번호는 0보다 커야 합니다.', invalidWidth: '표의 너비는 숫자여야 합니다.', menu: '표 속성', row: { menu: '행', insertBefore: '위에 행 삽입', insertAfter: '아래에 행 삽입', deleteRow: '행 삭제' }, rows: '행', summary: '요약', title: '표 속성', toolbar: '표', widthPc: '백분율', widthPx: '픽셀', widthUnit: '너비 단위' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/zh.js0000644000175000017500000000414414006075351022703 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'zh', { border: '框線大小', caption: '標題', cell: { menu: '儲存格', insertBefore: '前方插入儲存格', insertAfter: '後方插入儲存格', deleteCell: '刪除儲存格', merge: '合併儲存格', mergeRight: '向右合併', mergeDown: '向下合併', splitHorizontal: '水平分割儲存格', splitVertical: '垂直分割儲存格', title: '儲存格屬性', cellType: '儲存格類型', rowSpan: '列全長', colSpan: '行全長', wordWrap: '自動斷行', hAlign: '水平對齊', vAlign: '垂直對齊', alignBaseline: '基準線', bgColor: '背景顏色', borderColor: '框線顏色', data: '資料', header: '頁首', yes: '是', no: '否', invalidWidth: '儲存格寬度必須為數字。', invalidHeight: '儲存格高度必須為數字。', invalidRowSpan: '列全長必須是整數。', invalidColSpan: '行全長必須是整數。', chooseColor: '選擇' }, cellPad: '儲存格邊距', cellSpace: '儲存格間距', column: { menu: '行', insertBefore: '左方插入行', insertAfter: '右方插入行', deleteColumn: '刪除行' }, columns: '行', deleteTable: '刪除表格', headers: '頁首', headersBoth: '同時', headersColumn: '第一行', headersNone: '無', headersRow: '第一列', invalidBorder: '框線大小必須是整數。', invalidCellPadding: '儲存格邊距必須為正數。', invalidCellSpacing: '儲存格間距必須為正數。', invalidCols: '行數須為大於 0 的正整數。', invalidHeight: '表格高度必須為數字。', invalidRows: '列數須為大於 0 的正整數。', invalidWidth: '表格寬度必須為數字。', menu: '表格屬性', row: { menu: '列', insertBefore: '上方插入列', insertAfter: '下方插入列', deleteRow: '刪除列' }, rows: '列', summary: '總結', title: '表格屬性', toolbar: '表格', widthPc: '百分比', widthPx: '像素', widthUnit: '寬度單位' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/es.js0000644000175000017500000000475114006075351022675 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'es', { border: 'Tamaño de Borde', caption: 'Título', cell: { menu: 'Celda', insertBefore: 'Insertar celda a la izquierda', insertAfter: 'Insertar celda a la derecha', deleteCell: 'Eliminar Celdas', merge: 'Combinar Celdas', mergeRight: 'Combinar a la derecha', mergeDown: 'Combinar hacia abajo', splitHorizontal: 'Dividir la celda horizontalmente', splitVertical: 'Dividir la celda verticalmente', title: 'Propiedades de celda', cellType: 'Tipo de Celda', rowSpan: 'Expandir filas', colSpan: 'Expandir columnas', wordWrap: 'Ajustar al contenido', hAlign: 'Alineación Horizontal', vAlign: 'Alineación Vertical', alignBaseline: 'Linea de base', bgColor: 'Color de fondo', borderColor: 'Color de borde', data: 'Datos', header: 'Encabezado', yes: 'Sí', no: 'No', invalidWidth: 'La anchura de celda debe ser un número.', invalidHeight: 'La altura de celda debe ser un número.', invalidRowSpan: 'La expansión de filas debe ser un número entero.', invalidColSpan: 'La expansión de columnas debe ser un número entero.', chooseColor: 'Elegir' }, cellPad: 'Esp. interior', cellSpace: 'Esp. e/celdas', column: { menu: 'Columna', insertBefore: 'Insertar columna a la izquierda', insertAfter: 'Insertar columna a la derecha', deleteColumn: 'Eliminar Columnas' }, columns: 'Columnas', deleteTable: 'Eliminar Tabla', headers: 'Encabezados', headersBoth: 'Ambas', headersColumn: 'Primera columna', headersNone: 'Ninguno', headersRow: 'Primera fila', invalidBorder: 'El tamaño del borde debe ser un número.', invalidCellPadding: 'El espaciado interior debe ser un número.', invalidCellSpacing: 'El espaciado entre celdas debe ser un número.', invalidCols: 'El número de columnas debe ser un número mayor que 0.', invalidHeight: 'La altura de tabla debe ser un número.', invalidRows: 'El número de filas debe ser un número mayor que 0.', invalidWidth: 'La anchura de tabla debe ser un número.', menu: 'Propiedades de Tabla', row: { menu: 'Fila', insertBefore: 'Insertar fila en la parte superior', insertAfter: 'Insertar fila en la parte inferior', deleteRow: 'Eliminar Filas' }, rows: 'Filas', summary: 'Síntesis', title: 'Propiedades de Tabla', toolbar: 'Tabla', widthPc: 'porcentaje', widthPx: 'pixeles', widthUnit: 'unidad de la anchura' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/is.js0000644000175000017500000000455514006075351022703 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'is', { border: 'Breidd ramma', caption: 'Titill', cell: { menu: 'Reitur', insertBefore: 'Skjóta inn reiti fyrir aftan', insertAfter: 'Skjóta inn reiti fyrir framan', deleteCell: 'Fella reit', merge: 'Sameina reiti', mergeRight: 'Sameina til hægri', mergeDown: 'Sameina niður á við', splitHorizontal: 'Kljúfa reit lárétt', splitVertical: 'Kljúfa reit lóðrétt', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Reitaspássía', cellSpace: 'Bil milli reita', column: { menu: 'Dálkur', insertBefore: 'Skjóta inn dálki vinstra megin', insertAfter: 'Skjóta inn dálki hægra megin', deleteColumn: 'Fella dálk' }, columns: 'Dálkar', deleteTable: 'Fella töflu', headers: 'Fyrirsagnir', headersBoth: 'Hvort tveggja', headersColumn: 'Fyrsti dálkur', headersNone: 'Engar', headersRow: 'Fyrsta röð', invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Table width must be a number.', // MISSING menu: 'Eigindi töflu', row: { menu: 'Röð', insertBefore: 'Skjóta inn röð fyrir ofan', insertAfter: 'Skjóta inn röð fyrir neðan', deleteRow: 'Eyða röð' }, rows: 'Raðir', summary: 'Áfram', title: 'Eigindi töflu', toolbar: 'Tafla', widthPc: 'prósent', widthPx: 'myndeindir', widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/fo.js0000644000175000017500000000442614006075351022671 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'fo', { border: 'Bordabreidd', caption: 'Tabellfrágreiðing', cell: { menu: 'Meski', insertBefore: 'Set meska inn áðrenn', insertAfter: 'Set meska inn aftaná', deleteCell: 'Strika meskar', merge: 'Flætta meskar', mergeRight: 'Flætta meskar til høgru', mergeDown: 'Flætta saman', splitHorizontal: 'Kloyv meska vatnrætt', splitVertical: 'Kloyv meska loddrætt', title: 'Mesku eginleikar', cellType: 'Mesku slag', rowSpan: 'Ræð spenni', colSpan: 'Kolonnu spenni', wordWrap: 'Orðkloyving', hAlign: 'Horisontal plasering', vAlign: 'Loddrøtt plasering', alignBaseline: 'Basislinja', bgColor: 'Bakgrundslitur', borderColor: 'Bordalitur', data: 'Data', header: 'Header', yes: 'Ja', no: 'Nei', invalidWidth: 'Meskubreidd má vera eitt tal.', invalidHeight: 'Meskuhædd má vera eitt tal.', invalidRowSpan: 'Raðspennið má vera eitt heiltal.', invalidColSpan: 'Kolonnuspennið má vera eitt heiltal.', chooseColor: 'Vel' }, cellPad: 'Meskubreddi', cellSpace: 'Fjarstøða millum meskar', column: { menu: 'Kolonna', insertBefore: 'Set kolonnu inn áðrenn', insertAfter: 'Set kolonnu inn aftaná', deleteColumn: 'Strika kolonnur' }, columns: 'Kolonnur', deleteTable: 'Strika tabell', headers: 'Yvirskriftir', headersBoth: 'Báðir', headersColumn: 'Fyrsta kolonna', headersNone: 'Eingin', headersRow: 'Fyrsta rað', invalidBorder: 'Borda-stødd má vera eitt tal.', invalidCellPadding: 'Cell padding má vera eitt tal.', invalidCellSpacing: 'Cell spacing má vera eitt tal.', invalidCols: 'Talið av kolonnum má vera eitt tal størri enn 0.', invalidHeight: 'Tabell-hædd má vera eitt tal.', invalidRows: 'Talið av røðum má vera eitt tal størri enn 0.', invalidWidth: 'Tabell-breidd má vera eitt tal.', menu: 'Eginleikar fyri tabell', row: { menu: 'Rað', insertBefore: 'Set rað inn áðrenn', insertAfter: 'Set rað inn aftaná', deleteRow: 'Strika røðir' }, rows: 'Røðir', summary: 'Samandráttur', title: 'Eginleikar fyri tabell', toolbar: 'Tabell', widthPc: 'prosent', widthPx: 'pixels', widthUnit: 'breiddar unit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/tt.js0000644000175000017500000000611014006075351022704 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'tt', { border: 'Чик калынлыгы', caption: 'Исем', cell: { menu: 'Күзәнәк', insertBefore: 'Алдына күзәнәк өстәү', insertAfter: 'Артына күзәнәк өстәү', deleteCell: 'Күзәнәкләрне бетерү', merge: 'Күзәнәкләрне берләштерү', mergeRight: 'Уң яктагы белән берләштерү', mergeDown: 'Астагы белән берләштерү', splitHorizontal: 'Күзәнәкне юлларга бүлү', splitVertical: 'Күзәнәкне баганаларга бүлү', title: 'Күзәнәк үзлекләре', cellType: 'Күзәнәк төре', rowSpan: 'Юлларны берләштерү', colSpan: 'Баганаларны берләштерү', wordWrap: 'Текстны күчерү', hAlign: 'Ятма тигезләү', vAlign: 'Асма тигезләү', alignBaseline: 'Таяныч сызыгы', bgColor: 'Фон төсе', borderColor: 'Чик төсе', data: 'Мәгълүмат', header: 'Башлык', yes: 'Әйе', no: 'Юк', invalidWidth: 'Cell width must be a number.', // MISSING invalidHeight: 'Cell height must be a number.', // MISSING invalidRowSpan: 'Rows span must be a whole number.', // MISSING invalidColSpan: 'Columns span must be a whole number.', // MISSING chooseColor: 'Сайлау' }, cellPad: 'Cell padding', // MISSING cellSpace: 'Cell spacing', // MISSING column: { menu: 'Багана', insertBefore: 'Сулдан баганалар өстәү', insertAfter: 'Уңнан баганалар өстәү', deleteColumn: 'Баганаларны бетерү' }, columns: 'Баганалар', deleteTable: 'Таблицаны бетерү', headers: 'Башлыклар', headersBoth: 'Икесе дә', headersColumn: 'Беренче багана', headersNone: 'Һичбер', headersRow: 'Беренче юл', invalidBorder: 'Чик киңлеге сан булырга тиеш.', invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Күзәнәкләр аралары уңай сан булырга тиеш.', invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Таблица биеклеге сан булырга тиеш.', invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Таблица киңлеге сан булырга тиеш', menu: 'Таблица үзлекләре', row: { menu: 'Юл', insertBefore: 'Өстән юллар өстәү', insertAfter: 'Астан юллар өстәү', deleteRow: 'Юлларны бетерү' }, rows: 'Юллар', summary: 'Йомгаклау', title: 'Таблица үзлекләре', toolbar: 'Таблица', widthPc: 'процент', widthPx: 'Нокталар', widthUnit: 'киңлек берәмлеге' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/it.js0000644000175000017500000000466414006075351022705 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'it', { border: 'Dimensione bordo', caption: 'Intestazione', cell: { menu: 'Cella', insertBefore: 'Inserisci Cella Prima', insertAfter: 'Inserisci Cella Dopo', deleteCell: 'Elimina celle', merge: 'Unisce celle', mergeRight: 'Unisci a Destra', mergeDown: 'Unisci in Basso', splitHorizontal: 'Dividi Cella Orizzontalmente', splitVertical: 'Dividi Cella Verticalmente', title: 'Proprietà della cella', cellType: 'Tipo di cella', rowSpan: 'Su più righe', colSpan: 'Su più colonne', wordWrap: 'Ritorno a capo', hAlign: 'Allineamento orizzontale', vAlign: 'Allineamento verticale', alignBaseline: 'Linea Base', bgColor: 'Colore di Sfondo', borderColor: 'Colore del Bordo', data: 'Dati', header: 'Intestazione', yes: 'Si', no: 'No', invalidWidth: 'La larghezza della cella dev\'essere un numero.', invalidHeight: 'L\'altezza della cella dev\'essere un numero.', invalidRowSpan: 'Il numero di righe dev\'essere un numero intero.', invalidColSpan: 'Il numero di colonne dev\'essere un numero intero.', chooseColor: 'Scegli' }, cellPad: 'Padding celle', cellSpace: 'Spaziatura celle', column: { menu: 'Colonna', insertBefore: 'Inserisci Colonna Prima', insertAfter: 'Inserisci Colonna Dopo', deleteColumn: 'Elimina colonne' }, columns: 'Colonne', deleteTable: 'Cancella Tabella', headers: 'Intestazione', headersBoth: 'Entrambe', headersColumn: 'Prima Colonna', headersNone: 'Nessuna', headersRow: 'Prima Riga', invalidBorder: 'La dimensione del bordo dev\'essere un numero.', invalidCellPadding: 'Il paging delle celle dev\'essere un numero', invalidCellSpacing: 'La spaziatura tra le celle dev\'essere un numero.', invalidCols: 'Il numero di colonne dev\'essere un numero maggiore di 0.', invalidHeight: 'L\'altezza della tabella dev\'essere un numero.', invalidRows: 'Il numero di righe dev\'essere un numero maggiore di 0.', invalidWidth: 'La larghezza della tabella dev\'essere un numero.', menu: 'Proprietà tabella', row: { menu: 'Riga', insertBefore: 'Inserisci Riga Prima', insertAfter: 'Inserisci Riga Dopo', deleteRow: 'Elimina righe' }, rows: 'Righe', summary: 'Indice', title: 'Proprietà tabella', toolbar: 'Tabella', widthPc: 'percento', widthPx: 'pixel', widthUnit: 'unità larghezza' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/sv.js0000644000175000017500000000433614006075351022715 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'sv', { border: 'Kantstorlek', caption: 'Rubrik', cell: { menu: 'Cell', insertBefore: 'Lägg till cell före', insertAfter: 'Lägg till cell efter', deleteCell: 'Radera celler', merge: 'Sammanfoga celler', mergeRight: 'Sammanfoga höger', mergeDown: 'Sammanfoga ner', splitHorizontal: 'Dela cell horisontellt', splitVertical: 'Dela cell vertikalt', title: 'Egenskaper för cell', cellType: 'Celltyp', rowSpan: 'Rad spann', colSpan: 'Kolumnen spann', wordWrap: 'Radbrytning', hAlign: 'Horisontell justering', vAlign: 'Vertikal justering', alignBaseline: 'Baslinje', bgColor: 'Bakgrundsfärg', borderColor: 'Ramfärg', data: 'Data', header: 'Rubrik', yes: 'Ja', no: 'Nej', invalidWidth: 'Cellens bredd måste vara ett nummer.', invalidHeight: 'Cellens höjd måste vara ett nummer.', invalidRowSpan: 'Radutvidgning måste vara ett heltal.', invalidColSpan: 'Kolumn måste vara ett heltal.', chooseColor: 'Välj' }, cellPad: 'Cellutfyllnad', cellSpace: 'Cellavstånd', column: { menu: 'Kolumn', insertBefore: 'Lägg till kolumn före', insertAfter: 'Lägg till kolumn efter', deleteColumn: 'Radera kolumn' }, columns: 'Kolumner', deleteTable: 'Radera tabell', headers: 'Rubriker', headersBoth: 'Båda', headersColumn: 'Första kolumnen', headersNone: 'Ingen', headersRow: 'Första raden', invalidBorder: 'Ram måste vara ett nummer.', invalidCellPadding: 'Luft i cell måste vara ett nummer.', invalidCellSpacing: 'Luft i cell måste vara ett nummer.', invalidCols: 'Antal kolumner måste vara ett nummer större än 0.', invalidHeight: 'Tabellens höjd måste vara ett nummer.', invalidRows: 'Antal rader måste vara större än 0.', invalidWidth: 'Tabell måste vara ett nummer.', menu: 'Tabellegenskaper', row: { menu: 'Rad', insertBefore: 'Lägg till rad före', insertAfter: 'Lägg till rad efter', deleteRow: 'Radera rad' }, rows: 'Rader', summary: 'Sammanfattning', title: 'Tabellegenskaper', toolbar: 'Tabell', widthPc: 'procent', widthPx: 'pixlar', widthUnit: 'enhet bredd' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/gu.js0000644000175000017500000001005214006075351022670 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'gu', { border: 'કોઠાની બાજુ(બોર્ડર) સાઇઝ', caption: 'મથાળું/કૅપ્શન ', cell: { menu: 'કોષના ખાના', insertBefore: 'પહેલાં કોષ ઉમેરવો', insertAfter: 'પછી કોષ ઉમેરવો', deleteCell: 'કોષ ડિલીટ/કાઢી નાખવો', merge: 'કોષ ભેગા કરવા', mergeRight: 'જમણી બાજુ ભેગા કરવા', mergeDown: 'નીચે ભેગા કરવા', splitHorizontal: 'કોષને સમસ્તરીય વિભાજન કરવું', splitVertical: 'કોષને સીધું ને ઊભું વિભાજન કરવું', title: 'સેલના ગુણ', cellType: 'સેલનો પ્રકાર', rowSpan: 'આડી કટારની જગ્યા', colSpan: 'ઊભી કતારની જગ્યા', wordWrap: 'વર્ડ રેપ', hAlign: 'સપાટ લાઈનદોરી', vAlign: 'ઊભી લાઈનદોરી', alignBaseline: 'બસે લાઈન', bgColor: 'પાછાળનો રંગ', borderColor: 'બોર્ડેર રંગ', data: 'સ્વીકૃત માહિતી', header: 'મથાળું', yes: 'હા', no: 'ના', invalidWidth: 'સેલની પોહલાઈ આંકડો હોવો જોઈએ.', invalidHeight: 'સેલની ઊંચાઈ આંકડો હોવો જોઈએ.', invalidRowSpan: 'રો સ્પાન આંકડો હોવો જોઈએ.', invalidColSpan: 'કોલમ સ્પાન આંકડો હોવો જોઈએ.', chooseColor: 'પસંદ કરવું' }, cellPad: 'સેલ પૅડિંગ', cellSpace: 'સેલ અંતર', column: { menu: 'કૉલમ/ઊભી કટાર', insertBefore: 'પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી', insertAfter: 'પછી કૉલમ/ઊભી કટાર ઉમેરવી', deleteColumn: 'કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી' }, columns: 'કૉલમ/ઊભી કટાર', deleteTable: 'કોઠો ડિલીટ/કાઢી નાખવું', headers: 'મથાળા', headersBoth: 'બેવું', headersColumn: 'પહેલી ઊભી કટાર', headersNone: 'નથી ', headersRow: 'પહેલી કટાર', invalidBorder: 'બોર્ડર એક આંકડો હોવો જોઈએ', invalidCellPadding: 'સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.', invalidCellSpacing: 'સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.', invalidCols: 'ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.', invalidHeight: 'ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.', invalidRows: 'આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.', invalidWidth: 'ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.', menu: 'ટેબલ, કોઠાનું મથાળું', row: { menu: 'પંક્તિના ખાના', insertBefore: 'પહેલાં પંક્તિ ઉમેરવી', insertAfter: 'પછી પંક્તિ ઉમેરવી', deleteRow: 'પંક્તિઓ ડિલીટ/કાઢી નાખવી' }, rows: 'પંક્તિના ખાના', summary: 'ટૂંકો એહેવાલ', title: 'ટેબલ, કોઠાનું મથાળું', toolbar: 'ટેબલ, કોઠો', widthPc: 'પ્રતિશત', widthPx: 'પિકસલ', widthUnit: 'પોહાલાઈ એકમ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/tr.js0000644000175000017500000000457414006075351022716 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'tr', { border: 'Kenar Kalınlığı', caption: 'Başlık', cell: { menu: 'Hücre', insertBefore: 'Hücre Ekle - Önce', insertAfter: 'Hücre Ekle - Sonra', deleteCell: 'Hücre Sil', merge: 'Hücreleri Birleştir', mergeRight: 'Birleştir - Sağdaki İle ', mergeDown: 'Birleştir - Aşağıdaki İle ', splitHorizontal: 'Hücreyi Yatay Böl', splitVertical: 'Hücreyi Dikey Böl', title: 'Hücre Özellikleri', cellType: 'Hücre Tipi', rowSpan: 'Satırlar Mesafesi (Span)', colSpan: 'Sütünlar Mesafesi (Span)', wordWrap: 'Kelime Kaydırma', hAlign: 'Düşey Hizalama', vAlign: 'Yataş Hizalama', alignBaseline: 'Tabana', bgColor: 'Arkaplan Rengi', borderColor: 'Çerçeve Rengi', data: 'Veri', header: 'Başlık', yes: 'Evet', no: 'Hayır', invalidWidth: 'Hücre genişliği sayı olmalıdır.', invalidHeight: 'Hücre yüksekliği sayı olmalıdır.', invalidRowSpan: 'Satırların mesafesi tam sayı olmalıdır.', invalidColSpan: 'Sütünların mesafesi tam sayı olmalıdır.', chooseColor: 'Seçiniz' }, cellPad: 'Izgara yazı arası', cellSpace: 'Izgara kalınlığı', column: { menu: 'Sütun', insertBefore: 'Kolon Ekle - Önce', insertAfter: 'Kolon Ekle - Sonra', deleteColumn: 'Sütun Sil' }, columns: 'Sütunlar', deleteTable: 'Tabloyu Sil', headers: 'Başlıklar', headersBoth: 'Her İkisi', headersColumn: 'İlk Sütun', headersNone: 'Yok', headersRow: 'İlk Satır', invalidBorder: 'Çerceve büyüklüklüğü sayı olmalıdır.', invalidCellPadding: 'Hücre aralığı (padding) sayı olmalıdır.', invalidCellSpacing: 'Hücre boşluğu (spacing) sayı olmalıdır.', invalidCols: 'Sütün sayısı 0 sayısından büyük olmalıdır.', invalidHeight: 'Tablo yüksekliği sayı olmalıdır.', invalidRows: 'Satır sayısı 0 sayısından büyük olmalıdır.', invalidWidth: 'Tablo genişliği sayı olmalıdır.', menu: 'Tablo Özellikleri', row: { menu: 'Satır', insertBefore: 'Satır Ekle - Önce', insertAfter: 'Satır Ekle - Sonra', deleteRow: 'Satır Sil' }, rows: 'Satırlar', summary: 'Özet', title: 'Tablo Özellikleri', toolbar: 'Tablo', widthPc: 'yüzde', widthPx: 'piksel', widthUnit: 'genişlik birimi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/pl.js0000644000175000017500000000470414006075351022677 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'pl', { border: 'Grubość obramowania', caption: 'Tytuł', cell: { menu: 'Komórka', insertBefore: 'Wstaw komórkę z lewej', insertAfter: 'Wstaw komórkę z prawej', deleteCell: 'Usuń komórki', merge: 'Połącz komórki', mergeRight: 'Połącz z komórką z prawej', mergeDown: 'Połącz z komórką poniżej', splitHorizontal: 'Podziel komórkę poziomo', splitVertical: 'Podziel komórkę pionowo', title: 'Właściwości komórki', cellType: 'Typ komórki', rowSpan: 'Scalenie wierszy', colSpan: 'Scalenie komórek', wordWrap: 'Zawijanie słów', hAlign: 'Wyrównanie poziome', vAlign: 'Wyrównanie pionowe', alignBaseline: 'Linia bazowa', bgColor: 'Kolor tła', borderColor: 'Kolor obramowania', data: 'Dane', header: 'Nagłówek', yes: 'Tak', no: 'Nie', invalidWidth: 'Szerokość komórki musi być liczbą.', invalidHeight: 'Wysokość komórki musi być liczbą.', invalidRowSpan: 'Scalenie wierszy musi być liczbą całkowitą.', invalidColSpan: 'Scalenie komórek musi być liczbą całkowitą.', chooseColor: 'Wybierz' }, cellPad: 'Dopełnienie komórek', cellSpace: 'Odstęp pomiędzy komórkami', column: { menu: 'Kolumna', insertBefore: 'Wstaw kolumnę z lewej', insertAfter: 'Wstaw kolumnę z prawej', deleteColumn: 'Usuń kolumny' }, columns: 'Liczba kolumn', deleteTable: 'Usuń tabelę', headers: 'Nagłówki', headersBoth: 'Oba', headersColumn: 'Pierwsza kolumna', headersNone: 'Brak', headersRow: 'Pierwszy wiersz', invalidBorder: 'Wartość obramowania musi być liczbą.', invalidCellPadding: 'Dopełnienie komórek musi być liczbą dodatnią.', invalidCellSpacing: 'Odstęp pomiędzy komórkami musi być liczbą dodatnią.', invalidCols: 'Liczba kolumn musi być większa niż 0.', invalidHeight: 'Wysokość tabeli musi być liczbą.', invalidRows: 'Liczba wierszy musi być większa niż 0.', invalidWidth: 'Szerokość tabeli musi być liczbą.', menu: 'Właściwości tabeli', row: { menu: 'Wiersz', insertBefore: 'Wstaw wiersz powyżej', insertAfter: 'Wstaw wiersz poniżej', deleteRow: 'Usuń wiersze' }, rows: 'Liczba wierszy', summary: 'Podsumowanie', title: 'Właściwości tabeli', toolbar: 'Tabela', widthPc: '%', widthPx: 'piksele', widthUnit: 'jednostka szerokości' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/nb.js0000644000175000017500000000434114006075351022660 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'nb', { border: 'Rammestørrelse', caption: 'Tittel', cell: { menu: 'Celle', insertBefore: 'Sett inn celle før', insertAfter: 'Sett inn celle etter', deleteCell: 'Slett celler', merge: 'Slå sammen celler', mergeRight: 'Slå sammen høyre', mergeDown: 'Slå sammen ned', splitHorizontal: 'Del celle horisontalt', splitVertical: 'Del celle vertikalt', title: 'Celleegenskaper', cellType: 'Celletype', rowSpan: 'Radspenn', colSpan: 'Kolonnespenn', wordWrap: 'Tekstbrytning', hAlign: 'Horisontal justering', vAlign: 'Vertikal justering', alignBaseline: 'Grunnlinje', bgColor: 'Bakgrunnsfarge', borderColor: 'Rammefarge', data: 'Data', header: 'Overskrift', yes: 'Ja', no: 'Nei', invalidWidth: 'Cellebredde må være et tall.', invalidHeight: 'Cellehøyde må være et tall.', invalidRowSpan: 'Radspenn må være et heltall.', invalidColSpan: 'Kolonnespenn må være et heltall.', chooseColor: 'Velg' }, cellPad: 'Cellepolstring', cellSpace: 'Cellemarg', column: { menu: 'Kolonne', insertBefore: 'Sett inn kolonne før', insertAfter: 'Sett inn kolonne etter', deleteColumn: 'Slett kolonner' }, columns: 'Kolonner', deleteTable: 'Slett tabell', headers: 'Overskrifter', headersBoth: 'Begge', headersColumn: 'Første kolonne', headersNone: 'Ingen', headersRow: 'Første rad', invalidBorder: 'Rammestørrelse må være et tall.', invalidCellPadding: 'Cellepolstring må være et positivt tall.', invalidCellSpacing: 'Cellemarg må være et positivt tall.', invalidCols: 'Antall kolonner må være et tall større enn 0.', invalidHeight: 'Tabellhøyde må være et tall.', invalidRows: 'Antall rader må være et tall større enn 0.', invalidWidth: 'Tabellbredde må være et tall.', menu: 'Egenskaper for tabell', row: { menu: 'Rader', insertBefore: 'Sett inn rad før', insertAfter: 'Sett inn rad etter', deleteRow: 'Slett rader' }, rows: 'Rader', summary: 'Sammendrag', title: 'Egenskaper for tabell', toolbar: 'Tabell', widthPc: 'prosent', widthPx: 'piksler', widthUnit: 'Bredde-enhet' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/sl.js0000644000175000017500000000435514006075351022704 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'sl', { border: 'Velikost obrobe', caption: 'Naslov', cell: { menu: 'Celica', insertBefore: 'Vstavi celico pred', insertAfter: 'Vstavi celico za', deleteCell: 'Izbriši celice', merge: 'Združi celice', mergeRight: 'Združi desno', mergeDown: 'Druži navzdol', splitHorizontal: 'Razdeli celico vodoravno', splitVertical: 'Razdeli celico navpično', title: 'Lastnosti celice', cellType: 'Vrsta celice', rowSpan: 'Razpon vrstic', colSpan: 'Razpon stolpcev', wordWrap: 'Prelom besedila', hAlign: 'Vodoravna poravnava', vAlign: 'Navpična poravnava', alignBaseline: 'Osnovnica', bgColor: 'Barva ozadja', borderColor: 'Barva obrobe', data: 'Podatki', header: 'Glava', yes: 'Da', no: 'Ne', invalidWidth: 'Širina celice mora biti število.', invalidHeight: 'Višina celice mora biti število.', invalidRowSpan: 'Razpon vrstic mora biti celo število.', invalidColSpan: 'Razpon stolpcev mora biti celo število.', chooseColor: 'Izberi' }, cellPad: 'Polnilo med celicami', cellSpace: 'Razmik med celicami', column: { menu: 'Stolpec', insertBefore: 'Vstavi stolpec pred', insertAfter: 'Vstavi stolpec za', deleteColumn: 'Izbriši stolpce' }, columns: 'Stolpci', deleteTable: 'Izbriši tabelo', headers: 'Glave', headersBoth: 'Oboje', headersColumn: 'Prvi stolpec', headersNone: 'Brez', headersRow: 'Prva vrstica', invalidBorder: 'Širina obrobe mora biti število.', invalidCellPadding: 'Zamik celic mora biti število', invalidCellSpacing: 'Razmik med celicami mora biti število.', invalidCols: 'Število stolpcev mora biti večje od 0.', invalidHeight: 'Višina tabele mora biti število.', invalidRows: 'Število vrstic mora biti večje od 0.', invalidWidth: 'Širina tabele mora biti število.', menu: 'Lastnosti tabele', row: { menu: 'Vrstica', insertBefore: 'Vstavi vrstico pred', insertAfter: 'Vstavi vrstico za', deleteRow: 'Izbriši vrstice' }, rows: 'Vrstice', summary: 'Povzetek', title: 'Lastnosti tabele', toolbar: 'Tabela', widthPc: 'procentov', widthPx: 'pik', widthUnit: 'enota širine' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/fi.js0000644000175000017500000000455114006075351022662 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'fi', { border: 'Rajan paksuus', caption: 'Otsikko', cell: { menu: 'Solu', insertBefore: 'Lisää solu eteen', insertAfter: 'Lisää solu perään', deleteCell: 'Poista solut', merge: 'Yhdistä solut', mergeRight: 'Yhdistä oikealla olevan kanssa', mergeDown: 'Yhdistä alla olevan kanssa', splitHorizontal: 'Jaa solu vaakasuunnassa', splitVertical: 'Jaa solu pystysuunnassa', title: 'Solun ominaisuudet', cellType: 'Solun tyyppi', rowSpan: 'Rivin jatkuvuus', colSpan: 'Solun jatkuvuus', wordWrap: 'Rivitys', hAlign: 'Horisontaali kohdistus', vAlign: 'Vertikaali kohdistus', alignBaseline: 'Alas (teksti)', bgColor: 'Taustan väri', borderColor: 'Reunan väri', data: 'Data', header: 'Ylätunniste', yes: 'Kyllä', no: 'Ei', invalidWidth: 'Solun leveyden täytyy olla numero.', invalidHeight: 'Solun korkeuden täytyy olla numero.', invalidRowSpan: 'Rivin jatkuvuuden täytyy olla kokonaisluku.', invalidColSpan: 'Solun jatkuvuuden täytyy olla kokonaisluku.', chooseColor: 'Valitse' }, cellPad: 'Solujen sisennys', cellSpace: 'Solujen väli', column: { menu: 'Sarake', insertBefore: 'Lisää sarake vasemmalle', insertAfter: 'Lisää sarake oikealle', deleteColumn: 'Poista sarakkeet' }, columns: 'Sarakkeet', deleteTable: 'Poista taulu', headers: 'Ylätunnisteet', headersBoth: 'Molemmat', headersColumn: 'Ensimmäinen sarake', headersNone: 'Ei', headersRow: 'Ensimmäinen rivi', invalidBorder: 'Reunan koon täytyy olla numero.', invalidCellPadding: 'Solujen sisennyksen täytyy olla numero.', invalidCellSpacing: 'Solujen välin täytyy olla numero.', invalidCols: 'Sarakkeiden määrän täytyy olla suurempi kuin 0.', invalidHeight: 'Taulun korkeuden täytyy olla numero.', invalidRows: 'Rivien määrän täytyy olla suurempi kuin 0.', invalidWidth: 'Taulun leveyden täytyy olla numero.', menu: 'Taulun ominaisuudet', row: { menu: 'Rivi', insertBefore: 'Lisää rivi yläpuolelle', insertAfter: 'Lisää rivi alapuolelle', deleteRow: 'Poista rivit' }, rows: 'Rivit', summary: 'Yhteenveto', title: 'Taulun ominaisuudet', toolbar: 'Taulu', widthPc: 'prosenttia', widthPx: 'pikseliä', widthUnit: 'leveysyksikkö' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/fr-ca.js0000644000175000017500000000511114006075351023245 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'fr-ca', { border: 'Taille de la bordure', caption: 'Titre', cell: { menu: 'Cellule', insertBefore: 'Insérer une cellule avant', insertAfter: 'Insérer une cellule après', deleteCell: 'Supprimer des cellules', merge: 'Fusionner les cellules', mergeRight: 'Fusionner à droite', mergeDown: 'Fusionner en bas', splitHorizontal: 'Scinder la cellule horizontalement', splitVertical: 'Scinder la cellule verticalement', title: 'Propriétés de la cellule', cellType: 'Type de cellule', rowSpan: 'Fusion de lignes', colSpan: 'Fusion de colonnes', wordWrap: 'Retour à la ligne', hAlign: 'Alignement horizontal', vAlign: 'Alignement vertical', alignBaseline: 'Bas du texte', bgColor: 'Couleur d\'arrière plan', borderColor: 'Couleur de bordure', data: 'Données', header: 'En-tête', yes: 'Oui', no: 'Non', invalidWidth: 'La largeur de cellule doit être un nombre.', invalidHeight: 'La hauteur de cellule doit être un nombre.', invalidRowSpan: 'La fusion de lignes doit être un nombre entier.', invalidColSpan: 'La fusion de colonnes doit être un nombre entier.', chooseColor: 'Sélectionner' }, cellPad: 'Marge interne des cellules', cellSpace: 'Espacement des cellules', column: { menu: 'Colonne', insertBefore: 'Insérer une colonne avant', insertAfter: 'Insérer une colonne après', deleteColumn: 'Supprimer des colonnes' }, columns: 'Colonnes', deleteTable: 'Supprimer le tableau', headers: 'En-têtes', headersBoth: 'Les deux.', headersColumn: 'Première colonne', headersNone: 'Aucun', headersRow: 'Première ligne', invalidBorder: 'La taille de bordure doit être un nombre.', invalidCellPadding: 'La marge interne des cellules doit être un nombre positif.', invalidCellSpacing: 'L\'espacement des cellules doit être un nombre positif.', invalidCols: 'Le nombre de colonnes doit être supérieur à 0.', invalidHeight: 'La hauteur du tableau doit être un nombre.', invalidRows: 'Le nombre de lignes doit être supérieur à 0.', invalidWidth: 'La largeur du tableau doit être un nombre.', menu: 'Propriétés du tableau', row: { menu: 'Ligne', insertBefore: 'Insérer une ligne avant', insertAfter: 'Insérer une ligne après', deleteRow: 'Supprimer des lignes' }, rows: 'Lignes', summary: 'Résumé', title: 'Propriétés du tableau', toolbar: 'Tableau', widthPc: 'pourcentage', widthPx: 'pixels', widthUnit: 'unité de largeur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ru.js0000644000175000017500000000671514006075351022716 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ru', { border: 'Размер границ', caption: 'Заголовок', cell: { menu: 'Ячейка', insertBefore: 'Вставить ячейку слева', insertAfter: 'Вставить ячейку справа', deleteCell: 'Удалить ячейки', merge: 'Объединить ячейки', mergeRight: 'Объединить с правой', mergeDown: 'Объединить с нижней', splitHorizontal: 'Разделить ячейку по горизонтали', splitVertical: 'Разделить ячейку по вертикали', title: 'Свойства ячейки', cellType: 'Тип ячейки', rowSpan: 'Объединяет строк', colSpan: 'Объединяет колонок', wordWrap: 'Перенос по словам', hAlign: 'Горизонтальное выравнивание', vAlign: 'Вертикальное выравнивание', alignBaseline: 'По базовой линии', bgColor: 'Цвет фона', borderColor: 'Цвет границ', data: 'Данные', header: 'Заголовок', yes: 'Да', no: 'Нет', invalidWidth: 'Ширина ячейки должна быть числом.', invalidHeight: 'Высота ячейки должна быть числом.', invalidRowSpan: 'Количество объединяемых строк должно быть задано числом.', invalidColSpan: 'Количество объединяемых колонок должно быть задано числом.', chooseColor: 'Выберите' }, cellPad: 'Внутренний отступ ячеек', cellSpace: 'Внешний отступ ячеек', column: { menu: 'Колонка', insertBefore: 'Вставить колонку слева', insertAfter: 'Вставить колонку справа', deleteColumn: 'Удалить колонки' }, columns: 'Колонки', deleteTable: 'Удалить таблицу', headers: 'Заголовки', headersBoth: 'Сверху и слева', headersColumn: 'Левая колонка', headersNone: 'Без заголовков', headersRow: 'Верхняя строка', invalidBorder: 'Размер границ должен быть числом.', invalidCellPadding: 'Внутренний отступ ячеек (cellpadding) должен быть числом.', invalidCellSpacing: 'Внешний отступ ячеек (cellspacing) должен быть числом.', invalidCols: 'Количество столбцов должно быть больше 0.', invalidHeight: 'Высота таблицы должна быть числом.', invalidRows: 'Количество строк должно быть больше 0.', invalidWidth: 'Ширина таблицы должна быть числом.', menu: 'Свойства таблицы', row: { menu: 'Строка', insertBefore: 'Вставить строку сверху', insertAfter: 'Вставить строку снизу', deleteRow: 'Удалить строки' }, rows: 'Строки', summary: 'Итоги', title: 'Свойства таблицы', toolbar: 'Таблица', widthPc: 'процентов', widthPx: 'пикселей', widthUnit: 'единица измерения' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ka.js0000644000175000017500000001074714006075351022663 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ka', { border: 'ჩარჩოს ზომა', caption: 'სათაური', cell: { menu: 'უჯრა', insertBefore: 'უჯრის ჩასმა მანამდე', insertAfter: 'უჯრის ჩასმა მერე', deleteCell: 'უჯრების წაშლა', merge: 'უჯრების შეერთება', mergeRight: 'შეერთება მარჯვენასთან', mergeDown: 'შეერთება ქვემოთასთან', splitHorizontal: 'გაყოფა ჰორიზონტალურად', splitVertical: 'გაყოფა ვერტიკალურად', title: 'უჯრის პარამეტრები', cellType: 'უჯრის ტიპი', rowSpan: 'სტრიქონების ოდენობა', colSpan: 'სვეტების ოდენობა', wordWrap: 'სტრიქონის გადატანა (Word Wrap)', hAlign: 'ჰორიზონტალური სწორება', vAlign: 'ვერტიკალური სწორება', alignBaseline: 'ძირითადი ხაზის გასწვრივ', bgColor: 'ფონის ფერი', borderColor: 'ჩარჩოს ფერი', data: 'მონაცემები', header: 'სათაური', yes: 'დიახ', no: 'არა', invalidWidth: 'უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.', invalidHeight: 'უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.', invalidRowSpan: 'სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.', invalidColSpan: 'სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.', chooseColor: 'არჩევა' }, cellPad: 'უჯრის კიდე (padding)', cellSpace: 'უჯრის სივრცე (spacing)', column: { menu: 'სვეტი', insertBefore: 'სვეტის ჩამატება წინ', insertAfter: 'სვეტის ჩამატება მერე', deleteColumn: 'სვეტების წაშლა' }, columns: 'სვეტი', deleteTable: 'ცხრილის წაშლა', headers: 'სათაურები', headersBoth: 'ორივე', headersColumn: 'პირველი სვეტი', headersNone: 'არაფერი', headersRow: 'პირველი სტრიქონი', invalidBorder: 'ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.', invalidCellPadding: 'უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.', invalidCellSpacing: 'უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.', invalidCols: 'სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.', invalidHeight: 'ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.', invalidRows: 'სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.', invalidWidth: 'ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.', menu: 'ცხრილის პარამეტრები', row: { menu: 'სტრიქონი', insertBefore: 'სტრიქონის ჩამატება წინ', insertAfter: 'სტრიქონის ჩამატება მერე', deleteRow: 'სტრიქონების წაშლა' }, rows: 'სტრიქონი', summary: 'შეჯამება', title: 'ცხრილის პარამეტრები', toolbar: 'ცხრილი', widthPc: 'პროცენტი', widthPx: 'წერტილი', widthUnit: 'საზომი ერთეული' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/zh-cn.js0000644000175000017500000000424314006075351023301 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'zh-cn', { border: '边框', caption: '标题', cell: { menu: '单元格', insertBefore: '在左侧插入单元格', insertAfter: '在右侧插入单元格', deleteCell: '删除单元格', merge: '合并单元格', mergeRight: '向右合并单元格', mergeDown: '向下合并单元格', splitHorizontal: '水平拆分单元格', splitVertical: '垂直拆分单元格', title: '单元格属性', cellType: '单元格类型', rowSpan: '纵跨行数', colSpan: '横跨列数', wordWrap: '自动换行', hAlign: '水平对齐', vAlign: '垂直对齐', alignBaseline: '基线', bgColor: '背景颜色', borderColor: '边框颜色', data: '数据', header: '表头', yes: '是', no: '否', invalidWidth: '单元格宽度必须为数字格式', invalidHeight: '单元格高度必须为数字格式', invalidRowSpan: '行跨度必须为整数格式', invalidColSpan: '列跨度必须为整数格式', chooseColor: '选择' }, cellPad: '边距', cellSpace: '间距', column: { menu: '列', insertBefore: '在左侧插入列', insertAfter: '在右侧插入列', deleteColumn: '删除列' }, columns: '列数', deleteTable: '删除表格', headers: '标题单元格', headersBoth: '第一列和第一行', headersColumn: '第一列', headersNone: '无', headersRow: '第一行', invalidBorder: '边框粗细必须为数字格式', invalidCellPadding: '单元格填充必须为数字格式', invalidCellSpacing: '单元格间距必须为数字格式', invalidCols: '指定的行数必须大于零', invalidHeight: '表格高度必须为数字格式', invalidRows: '指定的列数必须大于零', invalidWidth: '表格宽度必须为数字格式', menu: '表格属性', row: { menu: '行', insertBefore: '在上方插入行', insertAfter: '在下方插入行', deleteRow: '删除行' }, rows: '行数', summary: '摘要', title: '表格属性', toolbar: '表格', widthPc: '百分比', widthPx: '像素', widthUnit: '宽度单位' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/cs.js0000644000175000017500000000463614006075351022675 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'cs', { border: 'Ohraničení', caption: 'Popis', cell: { menu: 'Buňka', insertBefore: 'Vložit buňku před', insertAfter: 'Vložit buňku za', deleteCell: 'Smazat buňky', merge: 'Sloučit buňky', mergeRight: 'Sloučit doprava', mergeDown: 'Sloučit dolů', splitHorizontal: 'Rozdělit buňky vodorovně', splitVertical: 'Rozdělit buňky svisle', title: 'Vlastnosti buňky', cellType: 'Typ buňky', rowSpan: 'Spojit řádky', colSpan: 'Spojit sloupce', wordWrap: 'Zalamování', hAlign: 'Vodorovné zarovnání', vAlign: 'Svislé zarovnání', alignBaseline: 'Na účaří', bgColor: 'Barva pozadí', borderColor: 'Barva okraje', data: 'Data', header: 'Hlavička', yes: 'Ano', no: 'Ne', invalidWidth: 'Šířka buňky musí být číslo.', invalidHeight: 'Zadaná výška buňky musí být číslená.', invalidRowSpan: 'Zadaný počet sloučených řádků musí být celé číslo.', invalidColSpan: 'Zadaný počet sloučených sloupců musí být celé číslo.', chooseColor: 'Výběr' }, cellPad: 'Odsazení obsahu v buňce', cellSpace: 'Vzdálenost buněk', column: { menu: 'Sloupec', insertBefore: 'Vložit sloupec před', insertAfter: 'Vložit sloupec za', deleteColumn: 'Smazat sloupec' }, columns: 'Sloupce', deleteTable: 'Smazat tabulku', headers: 'Záhlaví', headersBoth: 'Obojí', headersColumn: 'První sloupec', headersNone: 'Žádné', headersRow: 'První řádek', invalidBorder: 'Zdaná velikost okraje musí být číselná.', invalidCellPadding: 'Zadané odsazení obsahu v buňce musí být číselné.', invalidCellSpacing: 'Zadaná vzdálenost buněk musí být číselná.', invalidCols: 'Počet sloupců musí být číslo větší než 0.', invalidHeight: 'Zadaná výška tabulky musí být číselná.', invalidRows: 'Počet řádků musí být číslo větší než 0.', invalidWidth: 'Šířka tabulky musí být číslo.', menu: 'Vlastnosti tabulky', row: { menu: 'Řádek', insertBefore: 'Vložit řádek před', insertAfter: 'Vložit řádek za', deleteRow: 'Smazat řádky' }, rows: 'Řádky', summary: 'Souhrn', title: 'Vlastnosti tabulky', toolbar: 'Tabulka', widthPc: 'procent', widthPx: 'bodů', widthUnit: 'jednotka šířky' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/pt.js0000644000175000017500000000467214006075351022713 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'pt', { border: 'Tamanho do contorno', caption: 'Legenda', cell: { menu: 'Célula', insertBefore: 'Inserir célula antes', insertAfter: 'Inserir célula depois', deleteCell: 'Apagar Células', merge: 'Unir Células', mergeRight: 'Unir à Direita', mergeDown: 'Fundir abaixo', splitHorizontal: 'Dividir célula horizontalmente', splitVertical: 'Dividir célula verticalmente', title: 'Propriedades da célula', cellType: 'Tipo de célula', rowSpan: 'Filas na Célula', colSpan: 'Colunas na Célula', wordWrap: 'Moldar texto', hAlign: 'Alinhamento Horizontal', vAlign: 'Alinhamento Vertical', alignBaseline: 'Base', bgColor: 'Cor de Fundo', borderColor: 'Cor da Margem', data: 'Dados', header: 'Cabeçalho', yes: 'Sim', no: 'Não', invalidWidth: 'A largura da célula deve ser um número.', invalidHeight: 'A altura da célula deve ser um número.', invalidRowSpan: 'As filas da célula deve ter um número inteiro.', invalidColSpan: 'As colunas da célula deve ter um número inteiro.', chooseColor: 'Escolher' }, cellPad: 'Espaço interior', cellSpace: 'Espaçamento de célula', column: { menu: 'Coluna', insertBefore: 'Inserir Coluna Antes', insertAfter: 'Inserir coluna depois', deleteColumn: 'Apagar colunas' }, columns: 'Colunas', deleteTable: 'Apagar tabela', headers: 'Cabeçalhos', headersBoth: 'Ambos', headersColumn: 'Primeira coluna', headersNone: 'Nenhum', headersRow: 'Primeira linha', invalidBorder: 'O tamanho da margem tem de ser um número.', invalidCellPadding: 'A criação do espaço na célula deve ser um número positivo.', invalidCellSpacing: 'O espaçamento da célula deve ser um número positivo.', invalidCols: 'O número de colunas tem de ser um número maior que 0.', invalidHeight: 'A altura da tabela tem de ser um número.', invalidRows: 'O número de linhas tem de ser maior que 0.', invalidWidth: 'A largura da tabela tem de ser um número.', menu: 'Propriedades da Tabela', row: { menu: 'Linha', insertBefore: 'Inserir linha antes', insertAfter: 'Inserir linha depois', deleteRow: 'Apagar linhas' }, rows: 'Linhas', summary: 'Sumário', title: 'Propriedades da Tabela', toolbar: 'Tabela', widthPc: 'percentagem', widthPx: 'pontos', widthUnit: 'unidade da largura' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/pt-br.js0000644000175000017500000000471614006075351023313 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'pt-br', { border: 'Borda', caption: 'Legenda', cell: { menu: 'Célula', insertBefore: 'Inserir célula a esquerda', insertAfter: 'Inserir célula a direita', deleteCell: 'Remover Células', merge: 'Mesclar Células', mergeRight: 'Mesclar com célula a direita', mergeDown: 'Mesclar com célula abaixo', splitHorizontal: 'Dividir célula horizontalmente', splitVertical: 'Dividir célula verticalmente', title: 'Propriedades da célula', cellType: 'Tipo de célula', rowSpan: 'Linhas cobertas', colSpan: 'Colunas cobertas', wordWrap: 'Quebra de palavra', hAlign: 'Alinhamento horizontal', vAlign: 'Alinhamento vertical', alignBaseline: 'Patamar de alinhamento', bgColor: 'Cor de fundo', borderColor: 'Cor das bordas', data: 'Dados', header: 'Cabeçalho', yes: 'Sim', no: 'Não', invalidWidth: 'A largura da célula tem que ser um número.', invalidHeight: 'A altura da célula tem que ser um número.', invalidRowSpan: 'Linhas cobertas tem que ser um número inteiro.', invalidColSpan: 'Colunas cobertas tem que ser um número inteiro.', chooseColor: 'Escolher' }, cellPad: 'Margem interna', cellSpace: 'Espaçamento', column: { menu: 'Coluna', insertBefore: 'Inserir coluna a esquerda', insertAfter: 'Inserir coluna a direita', deleteColumn: 'Remover Colunas' }, columns: 'Colunas', deleteTable: 'Apagar Tabela', headers: 'Cabeçalho', headersBoth: 'Ambos', headersColumn: 'Primeira coluna', headersNone: 'Nenhum', headersRow: 'Primeira linha', invalidBorder: 'O tamanho da borda tem que ser um número.', invalidCellPadding: 'A margem interna das células tem que ser um número.', invalidCellSpacing: 'O espaçamento das células tem que ser um número.', invalidCols: 'O número de colunas tem que ser um número maior que 0.', invalidHeight: 'A altura da tabela tem que ser um número.', invalidRows: 'O número de linhas tem que ser um número maior que 0.', invalidWidth: 'A largura da tabela tem que ser um número.', menu: 'Formatar Tabela', row: { menu: 'Linha', insertBefore: 'Inserir linha acima', insertAfter: 'Inserir linha abaixo', deleteRow: 'Remover Linhas' }, rows: 'Linhas', summary: 'Resumo', title: 'Formatar Tabela', toolbar: 'Tabela', widthPc: '%', widthPx: 'pixels', widthUnit: 'unidade largura' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/et.js0000644000175000017500000000435214006075351022673 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'et', { border: 'Joone suurus', caption: 'Tabeli tiitel', cell: { menu: 'Lahter', insertBefore: 'Sisesta lahter enne', insertAfter: 'Sisesta lahter peale', deleteCell: 'Eemalda lahtrid', merge: 'Ühenda lahtrid', mergeRight: 'Ühenda paremale', mergeDown: 'Ühenda alla', splitHorizontal: 'Poolita lahter horisontaalselt', splitVertical: 'Poolita lahter vertikaalselt', title: 'Lahtri omadused', cellType: 'Lahtri liik', rowSpan: 'Ridade vahe', colSpan: 'Tulpade vahe', wordWrap: 'Sõnade murdmine', hAlign: 'Horisontaalne joondus', vAlign: 'Vertikaalne joondus', alignBaseline: 'Baasjoon', bgColor: 'Tausta värv', borderColor: 'Äärise värv', data: 'Andmed', header: 'Päis', yes: 'Jah', no: 'Ei', invalidWidth: 'Lahtri laius peab olema number.', invalidHeight: 'Lahtri kõrgus peab olema number.', invalidRowSpan: 'Ridade vahe peab olema täisarv.', invalidColSpan: 'Tulpade vahe peab olema täisarv.', chooseColor: 'Vali' }, cellPad: 'Lahtri täidis', cellSpace: 'Lahtri vahe', column: { menu: 'Veerg', insertBefore: 'Sisesta veerg enne', insertAfter: 'Sisesta veerg peale', deleteColumn: 'Eemalda veerud' }, columns: 'Veerud', deleteTable: 'Kustuta tabel', headers: 'Päised', headersBoth: 'Mõlemad', headersColumn: 'Esimene tulp', headersNone: 'Puudub', headersRow: 'Esimene rida', invalidBorder: 'Äärise suurus peab olema number.', invalidCellPadding: 'Lahtrite polsterdus (padding) peab olema positiivne arv.', invalidCellSpacing: 'Lahtrite vahe peab olema positiivne arv.', invalidCols: 'Tulpade arv peab olema nullist suurem.', invalidHeight: 'Tabeli kõrgus peab olema number.', invalidRows: 'Ridade arv peab olema nullist suurem.', invalidWidth: 'Tabeli laius peab olema number.', menu: 'Tabeli omadused', row: { menu: 'Rida', insertBefore: 'Sisesta rida enne', insertAfter: 'Sisesta rida peale', deleteRow: 'Eemalda read' }, rows: 'Read', summary: 'Kokkuvõte', title: 'Tabeli omadused', toolbar: 'Tabel', widthPc: 'protsenti', widthPx: 'pikslit', widthUnit: 'laiuse ühik' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/da.js0000644000175000017500000000427614006075351022654 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'da', { border: 'Rammebredde', caption: 'Titel', cell: { menu: 'Celle', insertBefore: 'Indsæt celle før', insertAfter: 'Indsæt celle efter', deleteCell: 'Slet celle', merge: 'Flet celler', mergeRight: 'Flet til højre', mergeDown: 'Flet nedad', splitHorizontal: 'Del celle vandret', splitVertical: 'Del celle lodret', title: 'Celleegenskaber', cellType: 'Celletype', rowSpan: 'Række span (rows span)', colSpan: 'Kolonne span (columns span)', wordWrap: 'Tekstombrydning', hAlign: 'Vandret justering', vAlign: 'Lodret justering', alignBaseline: 'Grundlinje', bgColor: 'Baggrundsfarve', borderColor: 'Rammefarve', data: 'Data', header: 'Hoved', yes: 'Ja', no: 'Nej', invalidWidth: 'Cellebredde skal være et tal.', invalidHeight: 'Cellehøjde skal være et tal.', invalidRowSpan: 'Række span skal være et heltal.', invalidColSpan: 'Kolonne span skal være et heltal.', chooseColor: 'Vælg' }, cellPad: 'Cellemargen', cellSpace: 'Celleafstand', column: { menu: 'Kolonne', insertBefore: 'Indsæt kolonne før', insertAfter: 'Indsæt kolonne efter', deleteColumn: 'Slet kolonne' }, columns: 'Kolonner', deleteTable: 'Slet tabel', headers: 'Hoved', headersBoth: 'Begge', headersColumn: 'Første kolonne', headersNone: 'Ingen', headersRow: 'Første række', invalidBorder: 'Rammetykkelse skal være et tal.', invalidCellPadding: 'Cellemargen skal være et tal.', invalidCellSpacing: 'Celleafstand skal være et tal.', invalidCols: 'Antallet af kolonner skal være større end 0.', invalidHeight: 'Tabelhøjde skal være et tal.', invalidRows: 'Antallet af rækker skal være større end 0.', invalidWidth: 'Tabelbredde skal være et tal.', menu: 'Egenskaber for tabel', row: { menu: 'Række', insertBefore: 'Indsæt række før', insertAfter: 'Indsæt række efter', deleteRow: 'Slet række' }, rows: 'Rækker', summary: 'Resumé', title: 'Egenskaber for tabel', toolbar: 'Tabel', widthPc: 'procent', widthPx: 'pixels', widthUnit: 'Bredde på enhed' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/af.js0000644000175000017500000000424514006075351022652 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'af', { border: 'Randbreedte', caption: 'Naam', cell: { menu: 'Sel', insertBefore: 'Voeg sel in voor', insertAfter: 'Voeg sel in na', deleteCell: 'Verwyder sel', merge: 'Voeg selle saam', mergeRight: 'Voeg saam na regs', mergeDown: 'Voeg saam ondertoe', splitHorizontal: 'Splits sel horisontaal', splitVertical: 'Splits sel vertikaal', title: 'Sel eienskappe', cellType: 'Sel tipe', rowSpan: 'Omspan rye', colSpan: 'Omspan kolomme', wordWrap: 'Woord terugloop', hAlign: 'Horisontale oplyning', vAlign: 'Vertikale oplyning', alignBaseline: 'Basislyn', bgColor: 'Agtergrondkleur', borderColor: 'Randkleur', data: 'Inhoud', header: 'Opskrif', yes: 'Ja', no: 'Nee', invalidWidth: 'Selbreedte moet \'n getal wees.', invalidHeight: 'Selhoogte moet \'n getal wees.', invalidRowSpan: 'Omspan rye moet \'n heelgetal wees.', invalidColSpan: 'Omspan kolomme moet \'n heelgetal wees.', chooseColor: 'Kies' }, cellPad: 'Sel-spasie', cellSpace: 'Sel-afstand', column: { menu: 'Kolom', insertBefore: 'Voeg kolom in voor', insertAfter: 'Voeg kolom in na', deleteColumn: 'Verwyder kolom' }, columns: 'Kolomme', deleteTable: 'Verwyder tabel', headers: 'Opskrifte', headersBoth: 'Beide ', headersColumn: 'Eerste kolom', headersNone: 'Geen', headersRow: 'Eerste ry', invalidBorder: 'Randbreedte moet \'n getal wees.', invalidCellPadding: 'Sel-spasie moet \'n getal wees.', invalidCellSpacing: 'Sel-afstand moet \'n getal wees.', invalidCols: 'Aantal kolomme moet \'n getal groter as 0 wees.', invalidHeight: 'Tabelhoogte moet \'n getal wees.', invalidRows: 'Aantal rye moet \'n getal groter as 0 wees.', invalidWidth: 'Tabelbreedte moet \'n getal wees.', menu: 'Tabel eienskappe', row: { menu: 'Ry', insertBefore: 'Voeg ry in voor', insertAfter: 'Voeg ry in na', deleteRow: 'Verwyder ry' }, rows: 'Rye', summary: 'Opsomming', title: 'Tabel eienskappe', toolbar: 'Tabel', widthPc: 'persent', widthPx: 'piksels', widthUnit: 'breedte-eenheid' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/hu.js0000644000175000017500000000500714006075351022675 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'hu', { border: 'Szegélyméret', caption: 'Felirat', cell: { menu: 'Cella', insertBefore: 'Beszúrás balra', insertAfter: 'Beszúrás jobbra', deleteCell: 'Cellák törlése', merge: 'Cellák egyesítése', mergeRight: 'Cellák egyesítése jobbra', mergeDown: 'Cellák egyesítése lefelé', splitHorizontal: 'Cellák szétválasztása vízszintesen', splitVertical: 'Cellák szétválasztása függőlegesen', title: 'Cella tulajdonságai', cellType: 'Cella típusa', rowSpan: 'Függőleges egyesítés', colSpan: 'Vízszintes egyesítés', wordWrap: 'Hosszú sorok törése', hAlign: 'Vízszintes igazítás', vAlign: 'Függőleges igazítás', alignBaseline: 'Alapvonalra', bgColor: 'Háttér színe', borderColor: 'Keret színe', data: 'Adat', header: 'Fejléc', yes: 'Igen', no: 'Nem', invalidWidth: 'A szélesség mezőbe csak számokat írhat.', invalidHeight: 'A magasság mezőbe csak számokat írhat.', invalidRowSpan: 'A függőleges egyesítés mezőbe csak számokat írhat.', invalidColSpan: 'A vízszintes egyesítés mezőbe csak számokat írhat.', chooseColor: 'Válasszon' }, cellPad: 'Cella belső margó', cellSpace: 'Cella térköz', column: { menu: 'Oszlop', insertBefore: 'Beszúrás balra', insertAfter: 'Beszúrás jobbra', deleteColumn: 'Oszlopok törlése' }, columns: 'Oszlopok', deleteTable: 'Táblázat törlése', headers: 'Fejlécek', headersBoth: 'Mindkettő', headersColumn: 'Első oszlop', headersNone: 'Nincsenek', headersRow: 'Első sor', invalidBorder: 'A szegélyméret mezőbe csak számokat írhat.', invalidCellPadding: 'A cella belső margó mezőbe csak számokat írhat.', invalidCellSpacing: 'A cella térköz mezőbe csak számokat írhat.', invalidCols: 'Az oszlopok számának nagyobbnak kell lenni mint 0.', invalidHeight: 'A magasság mezőbe csak számokat írhat.', invalidRows: 'A sorok számának nagyobbnak kell lenni mint 0.', invalidWidth: 'A szélesség mezőbe csak számokat írhat.', menu: 'Táblázat tulajdonságai', row: { menu: 'Sor', insertBefore: 'Beszúrás fölé', insertAfter: 'Beszúrás alá', deleteRow: 'Sorok törlése' }, rows: 'Sorok', summary: 'Leírás', title: 'Táblázat tulajdonságai', toolbar: 'Táblázat', widthPc: 'százalék', widthPx: 'képpont', widthUnit: 'Szélesség egység' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/sr.js0000644000175000017500000000516114006075351022706 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'sr', { border: 'Величина оквира', caption: 'Наслов табеле', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Обриши ћелије', merge: 'Спој ћелије', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Размак ћелија', cellSpace: 'Ћелијски простор', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Обриши колоне' }, columns: 'Kолона', deleteTable: 'Обриши таблу', headers: 'Поглавља', headersBoth: 'Оба', headersColumn: 'Прва колона', headersNone: 'None', headersRow: 'Први ред', invalidBorder: 'Величина ивице треба да буде цифра.', invalidCellPadding: 'Пуњење ћелије треба да буде позитивна цифра.', invalidCellSpacing: 'Размак ћелије треба да буде позитивна цифра.', invalidCols: 'Број колона треба да буде цифра већа од 0.', invalidHeight: 'Висина табеле треба да буде цифра.', invalidRows: 'Број реда треба да буде цифра већа од 0.', invalidWidth: 'Ширина табеле треба да буде цифра.', menu: 'Особине табеле', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Обриши редове' }, rows: 'Редова', summary: 'Резиме', title: 'Особине табеле', toolbar: 'Табела', widthPc: 'процената', widthPx: 'пиксела', widthUnit: 'јединица ширине' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/nl.js0000644000175000017500000000443014006075351022671 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'nl', { border: 'Randdikte', caption: 'Onderschrift', cell: { menu: 'Cel', insertBefore: 'Voeg cel in voor', insertAfter: 'Voeg cel in na', deleteCell: 'Cellen verwijderen', merge: 'Cellen samenvoegen', mergeRight: 'Voeg samen naar rechts', mergeDown: 'Voeg samen naar beneden', splitHorizontal: 'Splits cel horizontaal', splitVertical: 'Splits cel vertikaal', title: 'Celeigenschappen', cellType: 'Celtype', rowSpan: 'Rijen samenvoegen', colSpan: 'Kolommen samenvoegen', wordWrap: 'Automatische terugloop', hAlign: 'Horizontale uitlijning', vAlign: 'Verticale uitlijning', alignBaseline: 'Tekstregel', bgColor: 'Achtergrondkleur', borderColor: 'Randkleur', data: 'Gegevens', header: 'Kop', yes: 'Ja', no: 'Nee', invalidWidth: 'De celbreedte moet een getal zijn.', invalidHeight: 'De celhoogte moet een getal zijn.', invalidRowSpan: 'Rijen samenvoegen moet een heel getal zijn.', invalidColSpan: 'Kolommen samenvoegen moet een heel getal zijn.', chooseColor: 'Kies' }, cellPad: 'Celopvulling', cellSpace: 'Celafstand', column: { menu: 'Kolom', insertBefore: 'Voeg kolom in voor', insertAfter: 'Voeg kolom in na', deleteColumn: 'Kolommen verwijderen' }, columns: 'Kolommen', deleteTable: 'Tabel verwijderen', headers: 'Koppen', headersBoth: 'Beide', headersColumn: 'Eerste kolom', headersNone: 'Geen', headersRow: 'Eerste rij', invalidBorder: 'De randdikte moet een getal zijn.', invalidCellPadding: 'Celopvulling moet een getal zijn.', invalidCellSpacing: 'Celafstand moet een getal zijn.', invalidCols: 'Het aantal kolommen moet een getal zijn groter dan 0.', invalidHeight: 'De tabelhoogte moet een getal zijn.', invalidRows: 'Het aantal rijen moet een getal zijn groter dan 0.', invalidWidth: 'De tabelbreedte moet een getal zijn.', menu: 'Tabeleigenschappen', row: { menu: 'Rij', insertBefore: 'Voeg rij in voor', insertAfter: 'Voeg rij in na', deleteRow: 'Rijen verwijderen' }, rows: 'Rijen', summary: 'Samenvatting', title: 'Tabeleigenschappen', toolbar: 'Tabel', widthPc: 'procent', widthPx: 'pixels', widthUnit: 'eenheid breedte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/vi.js0000644000175000017500000000522514006075351022701 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'vi', { border: 'Kích thước đường viền', caption: 'Đầu đề', cell: { menu: 'Ô', insertBefore: 'Chèn ô Phía trước', insertAfter: 'Chèn ô Phía sau', deleteCell: 'Xoá ô', merge: 'Kết hợp ô', mergeRight: 'Kết hợp sang phải', mergeDown: 'Kết hợp xuống dưới', splitHorizontal: 'Phân tách ô theo chiều ngang', splitVertical: 'Phân tách ô theo chiều dọc', title: 'Thuộc tính của ô', cellType: 'Kiểu của ô', rowSpan: 'Kết hợp hàng', colSpan: 'Kết hợp cột', wordWrap: 'Chữ liền hàng', hAlign: 'Canh lề ngang', vAlign: 'Canh lề dọc', alignBaseline: 'Đường cơ sở', bgColor: 'Màu nền', borderColor: 'Màu viền', data: 'Dữ liệu', header: 'Đầu đề', yes: 'Có', no: 'Không', invalidWidth: 'Chiều rộng của ô phải là một số nguyên.', invalidHeight: 'Chiều cao của ô phải là một số nguyên.', invalidRowSpan: 'Số hàng kết hợp phải là một số nguyên.', invalidColSpan: 'Số cột kết hợp phải là một số nguyên.', chooseColor: 'Chọn màu' }, cellPad: 'Khoảng đệm giữ ô và nội dung', cellSpace: 'Khoảng cách giữa các ô', column: { menu: 'Cột', insertBefore: 'Chèn cột phía trước', insertAfter: 'Chèn cột phía sau', deleteColumn: 'Xoá cột' }, columns: 'Số cột', deleteTable: 'Xóa bảng', headers: 'Đầu đề', headersBoth: 'Cả hai', headersColumn: 'Cột đầu tiên', headersNone: 'Không có', headersRow: 'Hàng đầu tiên', invalidBorder: 'Kích cỡ của đường biên phải là một số nguyên.', invalidCellPadding: 'Khoảng đệm giữa ô và nội dung phải là một số nguyên.', invalidCellSpacing: 'Khoảng cách giữa các ô phải là một số nguyên.', invalidCols: 'Số lượng cột phải là một số lớn hơn 0.', invalidHeight: 'Chiều cao của bảng phải là một số nguyên.', invalidRows: 'Số lượng hàng phải là một số lớn hơn 0.', invalidWidth: 'Chiều rộng của bảng phải là một số nguyên.', menu: 'Thuộc tính bảng', row: { menu: 'Hàng', insertBefore: 'Chèn hàng phía trước', insertAfter: 'Chèn hàng phía sau', deleteRow: 'Xoá hàng' }, rows: 'Số hàng', summary: 'Tóm lược', title: 'Thuộc tính bảng', toolbar: 'Bảng', widthPc: 'Phần trăm (%)', widthPx: 'Điểm ảnh (px)', widthUnit: 'Đơn vị' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ja.js0000644000175000017500000000503314006075351022652 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ja', { border: '枠線の幅', caption: 'キャプション', cell: { menu: 'セル', insertBefore: 'セルを前に挿入', insertAfter: 'セルを後に挿入', deleteCell: 'セルを削除', merge: 'セルを結合', mergeRight: '右に結合', mergeDown: '下に結合', splitHorizontal: 'セルを水平方向に分割', splitVertical: 'セルを垂直方向に分割', title: 'セルのプロパティ', cellType: 'セルの種類', rowSpan: '行の結合数', colSpan: '列の結合数', wordWrap: '単語の折り返し', hAlign: '水平方向の配置', vAlign: '垂直方向の配置', alignBaseline: 'ベースライン', bgColor: '背景色', borderColor: 'ボーダーカラー', data: 'テーブルデータ (td)', header: 'ヘッダ', yes: 'はい', no: 'いいえ', invalidWidth: 'セル幅は数値で入力してください。', invalidHeight: 'セル高さは数値で入力してください。', invalidRowSpan: '縦幅(行数)は数値で入力してください。', invalidColSpan: '横幅(列数)は数値で入力してください。', chooseColor: '色の選択' }, cellPad: 'セル内間隔', cellSpace: 'セル内余白', column: { menu: '列', insertBefore: '列を左に挿入', insertAfter: '列を右に挿入', deleteColumn: '列を削除' }, columns: '列数', deleteTable: '表を削除', headers: 'ヘッダ (th)', headersBoth: '両方', headersColumn: '最初の列のみ', headersNone: 'なし', headersRow: '最初の行のみ', invalidBorder: '枠線の幅は数値で入力してください。', invalidCellPadding: 'セル内余白は数値で入力してください。', invalidCellSpacing: 'セル間余白は数値で入力してください。', invalidCols: '列数は0より大きな数値を入力してください。', invalidHeight: '高さは数値で入力してください。', invalidRows: '行数は0より大きな数値を入力してください。', invalidWidth: '幅は数値で入力してください。', menu: '表のプロパティ', row: { menu: '行', insertBefore: '行を上に挿入', insertAfter: '行を下に挿入', deleteRow: '行を削除' }, rows: '行数', summary: '表の概要', title: '表のプロパティ', toolbar: '表', widthPc: 'パーセント', widthPx: 'ピクセル', widthUnit: '幅の単位' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/id.js0000644000175000017500000000437214006075351022661 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'id', { border: 'Ukuran batas', caption: 'Judul halaman', cell: { menu: 'Sel', insertBefore: 'Sisip Sel Sebelum', insertAfter: 'Sisip Sel Setelah', deleteCell: 'Hapus Sel', merge: 'Gabungkan Sel', mergeRight: 'Gabungkan ke Kanan', mergeDown: 'Gabungkan ke Bawah', splitHorizontal: 'Pisahkan Sel Secara Horisontal', splitVertical: 'Pisahkan Sel Secara Vertikal', title: 'Properti Sel', cellType: 'Tipe Sel', rowSpan: 'Rentang antar baris', colSpan: 'Rentang antar kolom', wordWrap: 'Word Wrap', hAlign: 'Jajaran Horisontal', vAlign: 'Jajaran Vertikal', alignBaseline: 'Dasar', bgColor: 'Warna Latar Belakang', borderColor: 'Warna Batasan', data: 'Data', header: 'Header', yes: 'Ya', no: 'Tidak', invalidWidth: 'Lebar sel harus sebuah angka.', invalidHeight: 'Tinggi sel harus sebuah angka', invalidRowSpan: 'Rentang antar baris harus angka seluruhnya.', invalidColSpan: 'Rentang antar kolom harus angka seluruhnya', chooseColor: 'Pilih' }, cellPad: 'Sel spasi dalam', cellSpace: 'Spasi antar sel', column: { menu: 'Kolom', insertBefore: 'Sisip Kolom Sebelum', insertAfter: 'Sisip Kolom Sesudah', deleteColumn: 'Hapus Kolom' }, columns: 'Kolom', deleteTable: 'Hapus Tabel', headers: 'Headers', headersBoth: 'Keduanya', headersColumn: 'Kolom pertama', headersNone: 'Tidak ada', headersRow: 'Baris Pertama', invalidBorder: 'Ukuran batasan harus sebuah angka', invalidCellPadding: '\'Spasi dalam\' sel harus angka positif.', invalidCellSpacing: 'Spasi antar sel harus angka positif.', invalidCols: 'Jumlah kolom harus sebuah angka lebih besar dari 0', invalidHeight: 'Tinggi tabel harus sebuah angka.', invalidRows: 'Jumlah barus harus sebuah angka dan lebih besar dari 0.', invalidWidth: 'Lebar tabel harus sebuah angka.', menu: 'Properti Tabel', row: { menu: 'Baris', insertBefore: 'Sisip Baris Sebelum', insertAfter: 'Sisip Baris Sesudah', deleteRow: 'Hapus Baris' }, rows: 'Baris', summary: 'Intisari', title: 'Properti Tabel', toolbar: 'Tabe', widthPc: 'persen', widthPx: 'piksel', widthUnit: 'lebar satuan' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/en-gb.js0000644000175000017500000000421614006075351023252 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'en-gb', { border: 'Border size', caption: 'Caption', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Delete Cells', merge: 'Merge Cells', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Cell padding', cellSpace: 'Cell spacing', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Delete Columns' }, columns: 'Columns', deleteTable: 'Delete Table', headers: 'Headers', headersBoth: 'Both', headersColumn: 'First column', headersNone: 'None', headersRow: 'First Row', invalidBorder: 'Border size must be a number.', invalidCellPadding: 'Cell padding must be a number.', invalidCellSpacing: 'Cell spacing must be a number.', invalidCols: 'Number of columns must be a number greater than 0.', invalidHeight: 'Table height must be a number.', invalidRows: 'Number of rows must be a number greater than 0.', invalidWidth: 'Table width must be a number.', menu: 'Table Properties', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Delete Rows' }, rows: 'Rows', summary: 'Summary', title: 'Table Properties', toolbar: 'Table', widthPc: 'percent', widthPx: 'pixels', widthUnit: 'width unit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/sq.js0000644000175000017500000000466414006075351022714 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'sq', { border: 'Madhësia e kornizave', caption: 'Titull', cell: { menu: 'Qeli', insertBefore: 'Shto Qeli Para', insertAfter: 'Shto Qeli Prapa', deleteCell: 'Gris Qelitë', merge: 'Bashko Qelitë', mergeRight: 'Bashko Djathtas', mergeDown: 'Bashko Poshtë', splitHorizontal: 'Ndaj Qelinë Horizontalisht', splitVertical: 'Ndaj Qelinë Vertikalisht', title: 'Rekuizitat e Qelisë', cellType: 'Lloji i Qelisë', rowSpan: 'Bashko Rreshtat', colSpan: 'Bashko Kolonat', wordWrap: 'Fund i Fjalës', hAlign: 'Bashkimi Horizontal', vAlign: 'Bashkimi Vertikal', alignBaseline: 'Baza', bgColor: 'Ngjyra e Prapavijës', borderColor: 'Ngjyra e Kornizave', data: 'Të dhënat', header: 'Koka', yes: 'Po', no: 'Jo', invalidWidth: 'Gjerësia e qelisë duhet të jetë numër.', invalidHeight: 'Lartësia e qelisë duhet të jetë numër.', invalidRowSpan: 'Hapësira e rreshtave duhet të jetë numër i plotë.', invalidColSpan: 'Hapësira e kolonave duhet të jetë numër i plotë.', chooseColor: 'Përzgjidh' }, cellPad: 'Mbushja e qelisë', cellSpace: 'Hapësira e qelisë', column: { menu: 'Kolona', insertBefore: 'Vendos Kolonë Para', insertAfter: 'Vendos Kolonë Pas', deleteColumn: 'Gris Kolonat' }, columns: 'Kolonat', deleteTable: 'Gris Tabelën', headers: 'Kokat', headersBoth: 'Së bashku', headersColumn: 'Kolona e parë', headersNone: 'Asnjë', headersRow: 'Rreshti i Parë', invalidBorder: 'Madhësia e kufinjve duhet të jetë numër.', invalidCellPadding: 'Mbushja e qelisë duhet të jetë numër pozitiv.', invalidCellSpacing: 'Hapësira e qelisë duhet të jetë numër pozitiv.', invalidCols: 'Numri i kolonave duhet të jetë numër më i madh se 0.', invalidHeight: 'Lartësia e tabelës duhet të jetë numër.', invalidRows: 'Numri i rreshtave duhet të jetë numër më i madh se 0.', invalidWidth: 'Gjerësia e tabelës duhet të jetë numër.', menu: 'Karakteristikat e Tabelës', row: { menu: 'Rreshti', insertBefore: 'Shto Rresht Para', insertAfter: 'Shto Rresht Prapa', deleteRow: 'Gris Rreshtat' }, rows: 'Rreshtat', summary: 'Përmbledhje', title: 'Karakteristikat e Tabelës', toolbar: 'Tabela', widthPc: 'përqind', widthPx: 'piksell', widthUnit: 'njësia e gjerësisë' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/bn.js0000644000175000017500000000516414006075351022664 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'bn', { border: 'বর্ডার সাইজ', caption: 'শীর্ষক', cell: { menu: 'সেল', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'সেল মুছে দাও', merge: 'সেল জোড়া দাও', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'সেল প্যাডিং', cellSpace: 'সেল স্পেস', column: { menu: 'কলাম', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'কলাম মুছে দাও' }, columns: 'কলাম', deleteTable: 'টেবিল ডিলীট কর', headers: 'Headers', // MISSING headersBoth: 'Both', // MISSING headersColumn: 'First column', // MISSING headersNone: 'None', headersRow: 'First Row', // MISSING invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Table width must be a number.', // MISSING menu: 'টেবিল প্রোপার্টি', row: { menu: 'রো', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'রো মুছে দাও' }, rows: 'রো', summary: 'সারাংশ', title: 'টেবিল প্রোপার্টি', toolbar: 'টেবিলের লেবেল যুক্ত কর', widthPc: 'শতকরা', widthPx: 'পিক্সেল', widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/en-au.js0000644000175000017500000000423114006075351023264 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'en-au', { border: 'Border size', caption: 'Caption', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Delete Cells', merge: 'Merge Cells', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Cell padding', cellSpace: 'Cell spacing', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Delete Columns' }, columns: 'Columns', deleteTable: 'Delete Table', headers: 'Headers', headersBoth: 'Both', headersColumn: 'First column', headersNone: 'None', headersRow: 'First Row', invalidBorder: 'Border size must be a number.', invalidCellPadding: 'Cell padding must be a number.', invalidCellSpacing: 'Cell spacing must be a number.', invalidCols: 'Number of columns must be a number greater than 0.', invalidHeight: 'Table height must be a number.', invalidRows: 'Number of rows must be a number greater than 0.', invalidWidth: 'Table width must be a number.', menu: 'Table Properties', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Delete Rows' }, rows: 'Rows', summary: 'Summary', title: 'Table Properties', toolbar: 'Table', widthPc: 'percent', widthPx: 'pixels', widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ku.js0000644000175000017500000000615014006075351022700 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ku', { border: 'گەورەیی پەراوێز', caption: 'سەردێڕ', cell: { menu: 'خانه', insertBefore: 'دانانی خانه لەپێش', insertAfter: 'دانانی خانه لەپاش', deleteCell: 'سڕینەوەی خانه', merge: 'تێکەڵکردنی خانە', mergeRight: 'تێکەڵکردنی لەگەڵ ڕاست', mergeDown: 'تێکەڵکردنی لەگەڵ خوارەوە', splitHorizontal: 'دابەشکردنی خانەی ئاسۆیی', splitVertical: 'دابەشکردنی خانەی ئەستونی', title: 'خاسیەتی خانه', cellType: 'جۆری خانه', rowSpan: 'ماوەی نێوان ڕیز', colSpan: 'بستی ئەستونی', wordWrap: 'پێچانەوەی وشە', hAlign: 'ڕیزکردنی ئاسۆیی', vAlign: 'ڕیزکردنی ئەستونی', alignBaseline: 'هێڵەبنەڕەت', bgColor: 'ڕەنگی پاشبنەما', borderColor: 'ڕەنگی پەراوێز', data: 'داتا', header: 'سەرپەڕه', yes: 'بەڵێ', no: 'نەخێر', invalidWidth: 'پانی خانه دەبێت بەتەواوی ژماره بێت.', invalidHeight: 'درێژی خانه بەتەواوی دەبێت ژمارە بێت.', invalidRowSpan: 'ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.', invalidColSpan: 'ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.', chooseColor: 'هەڵبژێرە' }, cellPad: 'بۆشایی ناوپۆش', cellSpace: 'بۆشایی خانه', column: { menu: 'ئەستون', insertBefore: 'دانانی ئەستون لەپێش', insertAfter: 'دانانی ئەستوون لەپاش', deleteColumn: 'سڕینەوەی ئەستوون' }, columns: 'ستوونەکان', deleteTable: 'سڕینەوەی خشتە', headers: 'سەرپەڕه', headersBoth: 'هەردووك', headersColumn: 'یەکەم ئەستوون', headersNone: 'هیچ', headersRow: 'یەکەم ڕیز', invalidBorder: 'ژمارەی پەراوێز دەبێت تەنها ژماره بێت.', invalidCellPadding: 'ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.', invalidCellSpacing: 'بۆشایی خانه دەبێت ژمارەکی درووست بێت.', invalidCols: 'ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.', invalidHeight: 'درێژی خشته دهبێت تهنها ژماره بێت.', invalidRows: 'ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.', invalidWidth: 'پانی خشته دەبێت تەنها ژماره بێت.', menu: 'خاسیەتی خشتە', row: { menu: 'ڕیز', insertBefore: 'دانانی ڕیز لەپێش', insertAfter: 'دانانی ڕیز لەپاش', deleteRow: 'سڕینەوەی ڕیز' }, rows: 'ڕیز', summary: 'کورتە', title: 'خاسیەتی خشتە', toolbar: 'خشتە', widthPc: 'لەسەدا', widthPx: 'وێنەخاڵ - پیکسل', widthUnit: 'پانی یەکە' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/ms.js0000644000175000017500000000453614006075351022706 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'ms', { border: 'Saiz Border', caption: 'Keterangan', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Buangkan Sel-sel', merge: 'Cantumkan Sel-sel', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Tambahan Ruang Sel', cellSpace: 'Ruangan Antara Sel', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Buangkan Lajur' }, columns: 'Jaluran', deleteTable: 'Delete Table', // MISSING headers: 'Headers', // MISSING headersBoth: 'Both', // MISSING headersColumn: 'First column', // MISSING headersNone: 'None', headersRow: 'First Row', // MISSING invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Table width must be a number.', // MISSING menu: 'Ciri-ciri Jadual', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Buangkan Baris' }, rows: 'Barisan', summary: 'Summary', // MISSING title: 'Ciri-ciri Jadual', toolbar: 'Jadual', widthPc: 'peratus', widthPx: 'piksel-piksel', widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/fr.js0000644000175000017500000000511314006075351022666 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'fr', { border: 'Taille de la bordure', caption: 'Titre du tableau', cell: { menu: 'Cellule', insertBefore: 'Insérer une cellule avant', insertAfter: 'Insérer une cellule après', deleteCell: 'Supprimer les cellules', merge: 'Fusionner les cellules', mergeRight: 'Fusionner à droite', mergeDown: 'Fusionner en bas', splitHorizontal: 'Fractionner horizontalement', splitVertical: 'Fractionner verticalement', title: 'Propriétés de la cellule', cellType: 'Type de cellule', rowSpan: 'Fusion de lignes', colSpan: 'Fusion de colonnes', wordWrap: 'Césure', hAlign: 'Alignement Horizontal', vAlign: 'Alignement Vertical', alignBaseline: 'Bas du texte', bgColor: 'Couleur d\'arrière-plan', borderColor: 'Couleur de Bordure', data: 'Données', header: 'Entête', yes: 'Oui', no: 'Non', invalidWidth: 'La Largeur de Cellule doit être un nombre.', invalidHeight: 'La Hauteur de Cellule doit être un nombre.', invalidRowSpan: 'La fusion de lignes doit être un nombre entier.', invalidColSpan: 'La fusion de colonnes doit être un nombre entier.', chooseColor: 'Choisissez' }, cellPad: 'Marge interne des cellules', cellSpace: 'Espacement des cellules', column: { menu: 'Colonnes', insertBefore: 'Insérer une colonne avant', insertAfter: 'Insérer une colonne après', deleteColumn: 'Supprimer les colonnes' }, columns: 'Colonnes', deleteTable: 'Supprimer le tableau', headers: 'En-Têtes', headersBoth: 'Les deux', headersColumn: 'Première colonne', headersNone: 'Aucunes', headersRow: 'Première ligne', invalidBorder: 'La taille de la bordure doit être un nombre.', invalidCellPadding: 'La marge intérieure des cellules doit être un nombre positif.', invalidCellSpacing: 'L\'espacement des cellules doit être un nombre positif.', invalidCols: 'Le nombre de colonnes doit être supérieur à 0.', invalidHeight: 'La hauteur du tableau doit être un nombre.', invalidRows: 'Le nombre de lignes doit être supérieur à 0.', invalidWidth: 'La largeur du tableau doit être un nombre.', menu: 'Propriétés du tableau', row: { menu: 'Ligne', insertBefore: 'Insérer une ligne avant', insertAfter: 'Insérer une ligne après', deleteRow: 'Supprimer les lignes' }, rows: 'Lignes', summary: 'Résumé (description)', title: 'Propriétés du tableau', toolbar: 'Tableau', widthPc: '% pourcents', widthPx: 'pixels', widthUnit: 'unité de largeur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/lang/bs.js0000644000175000017500000000446614006075351022675 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'table', 'bs', { border: 'Okvir', caption: 'Naslov', cell: { menu: 'Cell', insertBefore: 'Insert Cell Before', insertAfter: 'Insert Cell After', deleteCell: 'Briši æelije', merge: 'Spoji æelije', mergeRight: 'Merge Right', mergeDown: 'Merge Down', splitHorizontal: 'Split Cell Horizontally', splitVertical: 'Split Cell Vertically', title: 'Cell Properties', cellType: 'Cell Type', rowSpan: 'Rows Span', colSpan: 'Columns Span', wordWrap: 'Word Wrap', hAlign: 'Horizontal Alignment', vAlign: 'Vertical Alignment', alignBaseline: 'Baseline', bgColor: 'Background Color', borderColor: 'Border Color', data: 'Data', header: 'Header', yes: 'Yes', no: 'No', invalidWidth: 'Cell width must be a number.', invalidHeight: 'Cell height must be a number.', invalidRowSpan: 'Rows span must be a whole number.', invalidColSpan: 'Columns span must be a whole number.', chooseColor: 'Choose' }, cellPad: 'Uvod æelija', cellSpace: 'Razmak æelija', column: { menu: 'Column', insertBefore: 'Insert Column Before', insertAfter: 'Insert Column After', deleteColumn: 'Briši kolone' }, columns: 'Kolona', deleteTable: 'Delete Table', // MISSING headers: 'Headers', // MISSING headersBoth: 'Both', // MISSING headersColumn: 'First column', // MISSING headersNone: 'None', headersRow: 'First Row', // MISSING invalidBorder: 'Border size must be a number.', // MISSING invalidCellPadding: 'Cell padding must be a positive number.', // MISSING invalidCellSpacing: 'Cell spacing must be a positive number.', // MISSING invalidCols: 'Number of columns must be a number greater than 0.', // MISSING invalidHeight: 'Table height must be a number.', // MISSING invalidRows: 'Number of rows must be a number greater than 0.', // MISSING invalidWidth: 'Table width must be a number.', // MISSING menu: 'Svojstva tabele', row: { menu: 'Row', insertBefore: 'Insert Row Before', insertAfter: 'Insert Row After', deleteRow: 'Briši redove' }, rows: 'Redova', summary: 'Summary', // MISSING title: 'Svojstva tabele', toolbar: 'Tabela', widthPc: 'posto', widthPx: 'piksela', widthUnit: 'width unit' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/icons/0000755000175000017500000000000014006075351022113 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/table/icons/table.png0000644000175000017500000000102714006075351023710 0ustar domdomPNG  IHDRabKGD pHYs B(x0IDAT8˥Kn"1U0@!@VPlf' HNh 3uo~u- ~ sm[NEQCҗff~gq8D㑜39z ZTUu-K)r`2nնm6*RJK!!$afrt:9wh>SSmX !/i[Hb6s` sLSK?_eY0hP{V%C};1F!E=WI/CbY%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/table/icons/hidpi/0000755000175000017500000000000014006075351023210 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/table/icons/hidpi/table.png0000644000175000017500000000175614006075351025016 0ustar domdomPNG  IHDR szzbKGD pHYs B(xIDATXŗAkFFZ-K]CBhͭɽ_{I% ݘXvfwkoRX;0 4OoǏYg @ Z3`PUf*ZDQU*\DD|x{ 潗 Bpb{4M2$I*s!eY42Im$˲@YUo]n4M[ʪu9n<9a<\SA,yhj\8fEAg2A|vsۥS׫qE`4!f/J$OJduΌ&1Byfcnka:yjF9T/ǜ& sFssf`̰^N yGi׬%.3PN[Z޻SH4d4b,OU%shF<1_㋽=~}> b˄ qGG/^Lb9ǧpã?W> @T̹hኂεkq.bF$/|Ȟ67x+qIl^ !hp%+KSd\ffluιa{2c׹h / PsInud%W*rRs}ufǍpn1*d!{=%qxZTUE$Ha}E۷ `H!ï\[ck%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/sourcearea/0000755000175000017500000000000014006075351022042 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/sourcearea/plugin.js0000644000175000017500000001270114006075351023677 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview The Source Editing Area plugin. It registers the "source" editing * mode, which displays raw HTML data being edited in the editor. */ ( function() { CKEDITOR.plugins.add( 'sourcearea', { // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'source,source-rtl', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { // Source mode in inline editors is only available through the "sourcedialog" plugin. if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ) return; var sourcearea = CKEDITOR.plugins.sourcearea; editor.addMode( 'source', function( callback ) { var contentsSpace = editor.ui.space( 'contents' ), textarea = contentsSpace.getDocument().createElement( 'textarea' ); textarea.setStyles( CKEDITOR.tools.extend( { // IE7 has overflow the
    
    	
  • Full toolbar configuration

    Below you can see editor with full toolbar, generated automatically by the editor.

    Note: To create editor instance with full toolbar you don't have to set anything. Just leave toolbar and toolbarGroups with the default, null values.

    
    	
    rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/plugin.js0000644000175000017500000006111614006075351023214 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview The "toolbar" plugin. Renders the default toolbar interface in * the editor. */ ( function() { var toolbox = function() { this.toolbars = []; this.focusCommandExecuted = false; }; toolbox.prototype.focus = function() { for ( var t = 0, toolbar; toolbar = this.toolbars[ t++ ]; ) { for ( var i = 0, item; item = toolbar.items[ i++ ]; ) { if ( item.focus ) { item.focus(); return; } } } }; var commands = { toolbarFocus: { modes: { wysiwyg: 1, source: 1 }, readOnly: 1, exec: function( editor ) { if ( editor.toolbox ) { editor.toolbox.focusCommandExecuted = true; // Make the first button focus accessible for IE. (#3417) // Adobe AIR instead need while of delay. if ( CKEDITOR.env.ie || CKEDITOR.env.air ) { setTimeout( function() { editor.toolbox.focus(); }, 100 ); } else { editor.toolbox.focus(); } } } } }; CKEDITOR.plugins.add( 'toolbar', { requires: 'button', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength init: function( editor ) { var endFlag; var itemKeystroke = function( item, keystroke ) { var next, toolbar; var rtl = editor.lang.dir == 'rtl', toolbarGroupCycling = editor.config.toolbarGroupCycling, // Picking right/left key codes. rightKeyCode = rtl ? 37 : 39, leftKeyCode = rtl ? 39 : 37; toolbarGroupCycling = toolbarGroupCycling === undefined || toolbarGroupCycling; switch ( keystroke ) { case 9: // TAB case CKEDITOR.SHIFT + 9: // SHIFT + TAB // Cycle through the toolbars, starting from the one // closest to the current item. while ( !toolbar || !toolbar.items.length ) { if ( keystroke == 9 ) { toolbar = ( ( toolbar ? toolbar.next : item.toolbar.next ) || editor.toolbox.toolbars[ 0 ] ); } else { toolbar = ( ( toolbar ? toolbar.previous : item.toolbar.previous ) || editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ] ); } // Look for the first item that accepts focus. if ( toolbar.items.length ) { item = toolbar.items[ endFlag ? ( toolbar.items.length - 1 ) : 0 ]; while ( item && !item.focus ) { item = endFlag ? item.previous : item.next; if ( !item ) toolbar = 0; } } } if ( item ) item.focus(); return false; case rightKeyCode: next = item; do { // Look for the next item in the toolbar. next = next.next; // If it's the last item, cycle to the first one. if ( !next && toolbarGroupCycling ) next = item.toolbar.items[ 0 ]; } while ( next && !next.focus ); // If available, just focus it, otherwise focus the // first one. if ( next ) next.focus(); else // Send a TAB. itemKeystroke( item, 9 ); return false; case 40: // DOWN-ARROW if ( item.button && item.button.hasArrow ) { // Note: code is duplicated in plugins\richcombo\plugin.js in keyDownFn(). editor.once( 'panelShow', function( evt ) { evt.data._.panel._.currentBlock.onKeyDown( 40 ); } ); item.execute(); } else { // Send left arrow key. itemKeystroke( item, keystroke == 40 ? rightKeyCode : leftKeyCode ); } return false; case leftKeyCode: case 38: // UP-ARROW next = item; do { // Look for the previous item in the toolbar. next = next.previous; // If it's the first item, cycle to the last one. if ( !next && toolbarGroupCycling ) next = item.toolbar.items[ item.toolbar.items.length - 1 ]; } while ( next && !next.focus ); // If available, just focus it, otherwise focus the // last one. if ( next ) next.focus(); else { endFlag = 1; // Send a SHIFT + TAB. itemKeystroke( item, CKEDITOR.SHIFT + 9 ); endFlag = 0; } return false; case 27: // ESC editor.focus(); return false; case 13: // ENTER case 32: // SPACE item.execute(); return false; } return true; }; editor.on( 'uiSpace', function( event ) { if ( event.data.space != editor.config.toolbarLocation ) return; // Create toolbar only once. event.removeListener(); editor.toolbox = new toolbox(); var labelId = CKEDITOR.tools.getNextId(); var output = [ '', editor.lang.toolbar.toolbars, '', '' ]; var expanded = editor.config.toolbarStartupExpanded !== false, groupStarted, pendingSeparator; // If the toolbar collapser will be available, we'll have // an additional container for all toolbars. if ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE ) output.push( '' : ' style="display:none">' ) ); var toolbars = editor.toolbox.toolbars, toolbar = getToolbarConfig( editor ); for ( var r = 0; r < toolbar.length; r++ ) { var toolbarId, toolbarObj = 0, toolbarName, row = toolbar[ r ], items; // It's better to check if the row object is really // available because it's a common mistake to leave // an extra comma in the toolbar definition // settings, which leads on the editor not loading // at all in IE. (#3983) if ( !row ) continue; if ( groupStarted ) { output.push( '' ); groupStarted = 0; pendingSeparator = 0; } if ( row === '/' ) { output.push( '' ); continue; } items = row.items || row; // Create all items defined for this toolbar. for ( var i = 0; i < items.length; i++ ) { var item = items[ i ], canGroup; if ( item ) { if ( item.type == CKEDITOR.UI_SEPARATOR ) { // Do not add the separator immediately. Just save // it be included if we already have something in // the toolbar and if a new item is to be added (later). pendingSeparator = groupStarted && item; continue; } canGroup = item.canGroup !== false; // Initialize the toolbar first, if needed. if ( !toolbarObj ) { // Create the basic toolbar object. toolbarId = CKEDITOR.tools.getNextId(); toolbarObj = { id: toolbarId, items: [] }; toolbarName = row.name && ( editor.lang.toolbar.toolbarGroups[ row.name ] || row.name ); // Output the toolbar opener. output.push( '' ); // If a toolbar name is available, send the voice label. toolbarName && output.push( '', toolbarName, '' ); output.push( '' ); // Add the toolbar to the "editor.toolbox.toolbars" // array. var index = toolbars.push( toolbarObj ) - 1; // Create the next/previous reference. if ( index > 0 ) { toolbarObj.previous = toolbars[ index - 1 ]; toolbarObj.previous.next = toolbarObj; } } if ( canGroup ) { if ( !groupStarted ) { output.push( '' ); groupStarted = 1; } } else if ( groupStarted ) { output.push( '' ); groupStarted = 0; } function addItem( item ) { // jshint ignore:line var itemObj = item.render( editor, output ); index = toolbarObj.items.push( itemObj ) - 1; if ( index > 0 ) { itemObj.previous = toolbarObj.items[ index - 1 ]; itemObj.previous.next = itemObj; } itemObj.toolbar = toolbarObj; itemObj.onkey = itemKeystroke; // Fix for #3052: // Prevent JAWS from focusing the toolbar after document load. itemObj.onfocus = function() { if ( !editor.toolbox.focusCommandExecuted ) editor.focus(); }; } if ( pendingSeparator ) { addItem( pendingSeparator ); pendingSeparator = 0; } addItem( item ); } } if ( groupStarted ) { output.push( '' ); groupStarted = 0; pendingSeparator = 0; } if ( toolbarObj ) output.push( '' ); } if ( editor.config.toolbarCanCollapse ) output.push( '' ); // Not toolbar collapser for inline mode. if ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE ) { var collapserFn = CKEDITOR.tools.addFunction( function() { editor.execCommand( 'toolbarCollapse' ); } ); editor.on( 'destroy', function() { CKEDITOR.tools.removeFunction( collapserFn ); } ); editor.addCommand( 'toolbarCollapse', { readOnly: 1, exec: function( editor ) { var collapser = editor.ui.space( 'toolbar_collapser' ), toolbox = collapser.getPrevious(), contents = editor.ui.space( 'contents' ), toolboxContainer = toolbox.getParent(), contentHeight = parseInt( contents.$.style.height, 10 ), previousHeight = toolboxContainer.$.offsetHeight, minClass = 'cke_toolbox_collapser_min', collapsed = collapser.hasClass( minClass ); if ( !collapsed ) { toolbox.hide(); collapser.addClass( minClass ); collapser.setAttribute( 'title', editor.lang.toolbar.toolbarExpand ); } else { toolbox.show(); collapser.removeClass( minClass ); collapser.setAttribute( 'title', editor.lang.toolbar.toolbarCollapse ); } // Update collapser symbol. collapser.getFirst().setText( collapsed ? '\u25B2' : // BLACK UP-POINTING TRIANGLE '\u25C0' ); // BLACK LEFT-POINTING TRIANGLE var dy = toolboxContainer.$.offsetHeight - previousHeight; contents.setStyle( 'height', ( contentHeight - dy ) + 'px' ); editor.fire( 'resize', { outerHeight: editor.container.$.offsetHeight, contentsHeight: contents.$.offsetHeight, outerWidth: editor.container.$.offsetWidth } ); }, modes: { wysiwyg: 1, source: 1 } } ); editor.setKeystroke( CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' ); output.push( '', '', // BLACK UP-POINTING TRIANGLE '' ); } output.push( '' ); event.data.html += output.join( '' ); } ); editor.on( 'destroy', function() { if ( this.toolbox ) { var toolbars, index = 0, i, items, instance; toolbars = this.toolbox.toolbars; for ( ; index < toolbars.length; index++ ) { items = toolbars[ index ].items; for ( i = 0; i < items.length; i++ ) { instance = items[ i ]; if ( instance.clickFn ) CKEDITOR.tools.removeFunction( instance.clickFn ); if ( instance.keyDownFn ) CKEDITOR.tools.removeFunction( instance.keyDownFn ); } } } } ); // Manage editor focus when navigating the toolbar. editor.on( 'uiReady', function() { var toolbox = editor.ui.space( 'toolbox' ); toolbox && editor.focusManager.add( toolbox, 1 ); } ); editor.addCommand( 'toolbarFocus', commands.toolbarFocus ); editor.setKeystroke( CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ); editor.ui.add( '-', CKEDITOR.UI_SEPARATOR, {} ); editor.ui.addHandler( CKEDITOR.UI_SEPARATOR, { create: function() { return { render: function( editor, output ) { output.push( '' ); return {}; } }; } } ); } } ); function getToolbarConfig( editor ) { var removeButtons = editor.config.removeButtons; removeButtons = removeButtons && removeButtons.split( ',' ); function buildToolbarConfig() { // Object containing all toolbar groups used by ui items. var lookup = getItemDefinedGroups(); // Take the base for the new toolbar, which is basically a toolbar // definition without items. var toolbar = CKEDITOR.tools.clone( editor.config.toolbarGroups ) || getPrivateToolbarGroups( editor ); // Fill the toolbar groups with the available ui items. for ( var i = 0; i < toolbar.length; i++ ) { var toolbarGroup = toolbar[ i ]; // Skip toolbar break. if ( toolbarGroup == '/' ) continue; // Handle simply group name item. else if ( typeof toolbarGroup == 'string' ) toolbarGroup = toolbar[ i ] = { name: toolbarGroup }; var items, subGroups = toolbarGroup.groups; // Look for items that match sub groups. if ( subGroups ) { for ( var j = 0, sub; j < subGroups.length; j++ ) { sub = subGroups[ j ]; // If any ui item is registered for this subgroup. items = lookup[ sub ]; items && fillGroup( toolbarGroup, items ); } } // Add the main group items as well. items = lookup[ toolbarGroup.name ]; items && fillGroup( toolbarGroup, items ); } return toolbar; } // Returns an object containing all toolbar groups used by ui items. function getItemDefinedGroups() { var groups = {}, itemName, item, itemToolbar, group, order; for ( itemName in editor.ui.items ) { item = editor.ui.items[ itemName ]; itemToolbar = item.toolbar || 'others'; if ( itemToolbar ) { // Break the toolbar property into its parts: "group_name[,order]". itemToolbar = itemToolbar.split( ',' ); group = itemToolbar[ 0 ]; order = parseInt( itemToolbar[ 1 ] || -1, 10 ); // Initialize the group, if necessary. groups[ group ] || ( groups[ group ] = [] ); // Push the data used to build the toolbar later. groups[ group ].push( { name: itemName, order: order } ); } } // Put the items in the right order. for ( group in groups ) { groups[ group ] = groups[ group ].sort( function( a, b ) { return a.order == b.order ? 0 : b.order < 0 ? -1 : a.order < 0 ? 1 : a.order < b.order ? -1 : 1; } ); } return groups; } function fillGroup( toolbarGroup, uiItems ) { if ( uiItems.length ) { if ( toolbarGroup.items ) toolbarGroup.items.push( editor.ui.create( '-' ) ); else toolbarGroup.items = []; var item, name; while ( ( item = uiItems.shift() ) ) { name = typeof item == 'string' ? item : item.name; // Ignore items that are configured to be removed. if ( !removeButtons || CKEDITOR.tools.indexOf( removeButtons, name ) == -1 ) { item = editor.ui.create( name ); if ( !item ) continue; if ( !editor.addFeature( item ) ) continue; toolbarGroup.items.push( item ); } } } } function populateToolbarConfig( config ) { var toolbar = [], i, group, newGroup; for ( i = 0; i < config.length; ++i ) { group = config[ i ]; newGroup = {}; if ( group == '/' ) toolbar.push( group ); else if ( CKEDITOR.tools.isArray( group ) ) { fillGroup( newGroup, CKEDITOR.tools.clone( group ) ); toolbar.push( newGroup ); } else if ( group.items ) { fillGroup( newGroup, CKEDITOR.tools.clone( group.items ) ); newGroup.name = group.name; toolbar.push( newGroup ); } } return toolbar; } var toolbar = editor.config.toolbar; // If it is a string, return the relative "toolbar_name" config. if ( typeof toolbar == 'string' ) toolbar = editor.config[ 'toolbar_' + toolbar ]; return ( editor.toolbar = toolbar ? populateToolbarConfig( toolbar ) : buildToolbarConfig() ); } /** * Adds a toolbar group. See {@link CKEDITOR.config#toolbarGroups} for more details. * * **Note:** This method will not modify toolbar groups set explicitly by * {@link CKEDITOR.config#toolbarGroups}. It will only extend the default setting. * * @param {String} name Toolbar group name. * @param {Number/String} previous The name of the toolbar group after which this one * should be added or `0` if this group should be the first one. * @param {String} [subgroupOf] The name of the parent group. * @member CKEDITOR.ui */ CKEDITOR.ui.prototype.addToolbarGroup = function( name, previous, subgroupOf ) { // The toolbarGroups from the privates is the one we gonna use for automatic toolbar creation. var toolbarGroups = getPrivateToolbarGroups( this.editor ), atStart = previous === 0, newGroup = { name: name }; if ( subgroupOf ) { // Transform the subgroupOf name in the real subgroup object. subgroupOf = CKEDITOR.tools.search( toolbarGroups, function( group ) { return group.name == subgroupOf; } ); if ( subgroupOf ) { !subgroupOf.groups && ( subgroupOf.groups = [] ) ; if ( previous ) { // Search the "previous" item and add the new one after it. previous = CKEDITOR.tools.indexOf( subgroupOf.groups, previous ); if ( previous >= 0 ) { subgroupOf.groups.splice( previous + 1, 0, name ); return; } } // If no previous found. if ( atStart ) subgroupOf.groups.splice( 0, 0, name ); else subgroupOf.groups.push( name ); return; } else { // Ignore "previous" if subgroupOf has not been found. previous = null; } } if ( previous ) { // Transform the "previous" name into its index. previous = CKEDITOR.tools.indexOf( toolbarGroups, function( group ) { return group.name == previous; } ); } if ( atStart ) toolbarGroups.splice( 0, 0, name ); else if ( typeof previous == 'number' ) toolbarGroups.splice( previous + 1, 0, newGroup ); else toolbarGroups.push( name ); }; function getPrivateToolbarGroups( editor ) { return editor._.toolbarGroups || ( editor._.toolbarGroups = [ { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, { name: 'forms' }, '/', { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, { name: 'links' }, { name: 'insert' }, '/', { name: 'styles' }, { name: 'colors' }, { name: 'tools' }, { name: 'others' }, { name: 'about' } ] ); } } )(); /** * Separator UI element. * * @readonly * @property {String} [='separator'] * @member CKEDITOR */ CKEDITOR.UI_SEPARATOR = 'separator'; /** * The part of the user interface where the toolbar will be rendered. For the default * editor implementation, the recommended options are `'top'` and `'bottom'`. * * Please note that this option is only applicable to [classic](#!/guide/dev_framed) * (`iframe`-based) editor. In case of [inline](#!/guide/dev_inline) editor the toolbar * position is set dynamically depending on the position of the editable element on the screen. * * config.toolbarLocation = 'bottom'; * * @cfg * @member CKEDITOR.config */ CKEDITOR.config.toolbarLocation = 'top'; /** * The toolbox (alias toolbar) definition. It is a toolbar name or an array of * toolbars (strips), each one being also an array, containing a list of UI items. * * If set to `null`, the toolbar will be generated automatically using all available buttons * and {@link #toolbarGroups} as a toolbar groups layout. * * In CKEditor 4.5+ you can generate your toolbar customization code by using the [visual * toolbar configurator](http://docs.ckeditor.com/#!/guide/dev_toolbar). * * // Defines a toolbar with only one strip containing the "Source" button, a * // separator, and the "Bold" and "Italic" buttons. * config.toolbar = [ * [ 'Source', '-', 'Bold', 'Italic' ] * ]; * * // Similar to the example above, defines a "Basic" toolbar with only one strip containing three buttons. * // Note that this setting is composed by "toolbar_" added to the toolbar name, which in this case is called "Basic". * // This second part of the setting name can be anything. You must use this name in the CKEDITOR.config.toolbar setting * // in order to instruct the editor which `toolbar_(name)` setting should be used. * config.toolbar_Basic = [ * [ 'Source', '-', 'Bold', 'Italic' ] * ]; * // Load toolbar_Name where Name = Basic. * config.toolbar = 'Basic'; * * @cfg {Array/String} [toolbar=null] * @member CKEDITOR.config */ /** * The toolbar groups definition. * * If the toolbar layout is not explicitly defined by the {@link #toolbar} setting, then * this setting is used to group all defined buttons (see {@link CKEDITOR.ui#addButton}). * Buttons are associated with toolbar groups by the `toolbar` property in their definition objects. * * New groups may be dynamically added during the editor and plugin initialization by * {@link CKEDITOR.ui#addToolbarGroup}. This is only possible if the default setting was used. * * // Default setting. * config.toolbarGroups = [ * { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, * { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, * { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, * { name: 'forms' }, * '/', * { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, * { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, * { name: 'links' }, * { name: 'insert' }, * '/', * { name: 'styles' }, * { name: 'colors' }, * { name: 'tools' }, * { name: 'others' }, * { name: 'about' } * ]; * * @cfg {Array} [toolbarGroups=see example] * @member CKEDITOR.config */ /** * Whether the toolbar can be collapsed by the user. If disabled, the Collapse Toolbar * button will not be displayed. * * config.toolbarCanCollapse = true; * * @cfg {Boolean} [toolbarCanCollapse=false] * @member CKEDITOR.config */ /** * Whether the toolbar must start expanded when the editor is loaded. * * Setting this option to `false` will affect the toolbar only when * {@link #toolbarCanCollapse} is set to `true`: * * config.toolbarCanCollapse = true; * config.toolbarStartupExpanded = false; * * @cfg {Boolean} [toolbarStartupExpanded=true] * @member CKEDITOR.config */ /** * When enabled, causes the *Arrow* keys navigation to cycle within the current * toolbar group. Otherwise the *Arrow* keys will move through all items available in * the toolbar. The *Tab* key will still be used to quickly jump among the * toolbar groups. * * config.toolbarGroupCycling = false; * * @since 3.6 * @cfg {Boolean} [toolbarGroupCycling=true] * @member CKEDITOR.config */ /** * List of toolbar button names that must not be rendered. This will also work * for non-button toolbar items, like the Font drop-down list. * * config.removeButtons = 'Underline,JustifyCenter'; * * This configuration option should not be overused. The recommended way is to use the * {@link CKEDITOR.config#removePlugins} setting to remove features from the editor * or even better, [create a custom editor build](http://ckeditor.com/builder) with * just the features that you will use. * In some cases though, a single plugin may define a set of toolbar buttons and * `removeButtons` may be useful when just a few of them are to be removed. * * @cfg {String} [removeButtons] * @member CKEDITOR.config */ /** * The toolbar definition used by the editor. It is created from the * {@link CKEDITOR.config#toolbar} option if it is set or automatically * based on {@link CKEDITOR.config#toolbarGroups}. * * @readonly * @property {Object} toolbar * @member CKEDITOR.editor */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/0000755000175000017500000000000014006075351022274 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/bg.js0000644000175000017500000000143014006075351023220 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'bg', { toolbarCollapse: 'Свиване на лентата с инструменти', toolbarExpand: 'Разширяване на лентата с инструменти', toolbarGroups: { document: 'Документ', clipboard: 'Клипборд/Отмяна', editing: 'Промяна', forms: 'Форми', basicstyles: 'Базови стилове', paragraph: 'Параграф', links: 'Връзки', insert: 'Вмъкване', styles: 'Стилове', colors: 'Цветове', tools: 'Инструменти' }, toolbars: 'Ленти с инструменти' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/cy.js0000644000175000017500000000113614006075351023246 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'cy', { toolbarCollapse: 'Cyfangu\'r Bar Offer', toolbarExpand: 'Ehangu\'r Bar Offer', toolbarGroups: { document: 'Dogfen', clipboard: 'Clipfwrdd/Dadwneud', editing: 'Golygu', forms: 'Ffurflenni', basicstyles: 'Arddulliau Sylfaenol', paragraph: 'Paragraff', links: 'Dolenni', insert: 'Mewnosod', styles: 'Arddulliau', colors: 'Lliwiau', tools: 'Offer' }, toolbars: 'Bariau offer y golygydd' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/no.js0000644000175000017500000000112414006075351023244 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'no', { toolbarCollapse: 'Skjul verktøylinje', toolbarExpand: 'Vis verktøylinje', toolbarGroups: { document: 'Dokument', clipboard: 'Utklippstavle/Angre', editing: 'Redigering', forms: 'Skjema', basicstyles: 'Basisstiler', paragraph: 'Avsnitt', links: 'Lenker', insert: 'Innsetting', styles: 'Stiler', colors: 'Farger', tools: 'Verktøy' }, toolbars: 'Verktøylinjer for editor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/hr.js0000644000175000017500000000113514006075351023243 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'hr', { toolbarCollapse: 'Smanji alatnu traku', toolbarExpand: 'Proširi alatnu traku', toolbarGroups: { document: 'Dokument', clipboard: 'Međuspremnik/Poništi', editing: 'Uređivanje', forms: 'Forme', basicstyles: 'Osnovni stilovi', paragraph: 'Paragraf', links: 'Veze', insert: 'Umetni', styles: 'Stilovi', colors: 'Boje', tools: 'Alatke' }, toolbars: 'Alatne trake uređivača teksta' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/th.js0000644000175000017500000000130614006075351023245 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'th', { toolbarCollapse: 'ซ่อนแถบเครื่องมือ', toolbarExpand: 'เปิดแถบเครื่องมือ', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'แถบเครื่องมือช่วยพิมพ์ข้อความ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ar.js0000644000175000017500000000123414006075351023234 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ar', { toolbarCollapse: 'تقليص شريط الأدوت', toolbarExpand: 'تمديد شريط الأدوات', toolbarGroups: { document: 'مستند', clipboard: 'الحافظة/الرجوع', editing: 'تحرير', forms: 'نماذج', basicstyles: 'نمط بسيط', paragraph: 'فقرة', links: 'روابط', insert: 'إدراج', styles: 'أنماط', colors: 'ألوان', tools: 'أدوات' }, toolbars: 'أشرطة أدوات المحرر' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/sk.js0000644000175000017500000000117614006075351023254 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'sk', { toolbarCollapse: 'Zbaliť lištu nástrojov', toolbarExpand: 'Rozbaliť lištu nástrojov', toolbarGroups: { document: 'Dokument', clipboard: 'Schránka pre kopírovanie/Späť', editing: 'Upravovanie', forms: 'Formuláre', basicstyles: 'Základné štýly', paragraph: 'Odstavec', links: 'Odkazy', insert: 'Vložiť', styles: 'Štýly', colors: 'Farby', tools: 'Nástroje' }, toolbars: 'Lišty nástrojov editora' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ro.js0000644000175000017500000000110014006075351023242 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ro', { toolbarCollapse: 'Micșorează Bara', toolbarExpand: 'Mărește Bara', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editează bara de unelte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/en-ca.js0000644000175000017500000000113214006075351023612 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'en-ca', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ug.js0000644000175000017500000000127614006075351023253 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ug', { toolbarCollapse: 'قورال بالداقنى قاتلا', toolbarExpand: 'قورال بالداقنى ياي', toolbarGroups: { document: 'پۈتۈك', clipboard: 'چاپلاش تاختىسى/يېنىۋال', editing: 'تەھرىر', forms: 'جەدۋەل', basicstyles: 'ئاساسىي ئۇسلۇب', paragraph: 'ئابزاس', links: 'ئۇلانما', insert: 'قىستۇر', styles: 'ئۇسلۇب', colors: 'رەڭ', tools: 'قورال' }, toolbars: 'قورال بالداق' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/el.js0000644000175000017500000000137714006075351023242 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'el', { toolbarCollapse: 'Σύμπτυξη Εργαλειοθήκης', toolbarExpand: 'Ανάπτυξη Εργαλειοθήκης', toolbarGroups: { document: 'Έγγραφο', clipboard: 'Πρόχειρο/Αναίρεση', editing: 'Επεξεργασία', forms: 'Φόρμες', basicstyles: 'Βασικά Στυλ', paragraph: 'Παράγραφος', links: 'Σύνδεσμοι', insert: 'Εισαγωγή', styles: 'Στυλ', colors: 'Χρώματα', tools: 'Εργαλεία' }, toolbars: 'Εργαλειοθήκες επεξεργαστή' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/de.js0000644000175000017500000000114514006075351023223 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'de', { toolbarCollapse: 'Werkzeugleiste einklappen', toolbarExpand: 'Werkzeugleiste ausklappen', toolbarGroups: { document: 'Dokument', clipboard: 'Zwischenablage/Rückgängig', editing: 'Editieren', forms: 'Formulare', basicstyles: 'Grundstile', paragraph: 'Absatz', links: 'Links', insert: 'Einfügen', styles: 'Stile', colors: 'Farben', tools: 'Werkzeuge' }, toolbars: 'Editor Werkzeugleisten' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/uk.js0000644000175000017500000000146514006075351023257 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'uk', { toolbarCollapse: 'Згорнути панель інструментів', toolbarExpand: 'Розгорнути панель інструментів', toolbarGroups: { document: 'Документ', clipboard: 'Буфер обміну / Скасувати', editing: 'Редагування', forms: 'Форми', basicstyles: 'Основний Стиль', paragraph: 'Параграф', links: 'Посилання', insert: 'Вставити', styles: 'Стилі', colors: 'Кольори', tools: 'Інструменти' }, toolbars: 'Панель інструментів редактора' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/sr-latn.js0000644000175000017500000000110014006075351024202 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'sr-latn', { toolbarCollapse: 'Suzi alatnu traku', toolbarExpand: 'Proširi alatnu traku', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Alatne trake' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/km.js0000644000175000017500000000153614006075351023246 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'km', { toolbarCollapse: 'បង្រួម​របារ​ឧបករណ៍', toolbarExpand: 'ពង្រីក​របារ​ឧបករណ៍', toolbarGroups: { document: 'ឯកសារ', clipboard: 'Clipboard/មិន​ធ្វើ​វិញ', editing: 'ការ​កែ​សម្រួល', forms: 'បែបបទ', basicstyles: 'រចនាបថ​មូលដ្ឋាន', paragraph: 'កថាខណ្ឌ', links: 'តំណ', insert: 'បញ្ចូល', styles: 'រចនាបថ', colors: 'ពណ៌', tools: 'ឧបករណ៍' }, toolbars: 'របារ​ឧបករណ៍​កែ​សម្រួល' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/eu.js0000644000175000017500000000111014006075351023234 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'eu', { toolbarCollapse: 'Tresna-barra Txikitu', toolbarExpand: 'Tresna-barra Luzatu', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editorearen Tresna-barra' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/fa.js0000644000175000017500000000130614006075351023220 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'fa', { toolbarCollapse: 'بستن نوار ابزار', toolbarExpand: 'بازکردن نوار ابزار', toolbarGroups: { document: 'سند', clipboard: 'حافظه موقت/برگشت', editing: 'در حال ویرایش', forms: 'فرم​ها', basicstyles: 'سبک‌های پایه', paragraph: 'بند', links: 'پیوندها', insert: 'ورود', styles: 'سبک‌ها', colors: 'رنگ​ها', tools: 'ابزارها' }, toolbars: 'نوار ابزارهای ویرایش‌گر' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/si.js0000644000175000017500000000153714006075351023253 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'si', { toolbarCollapse: 'මෙවලම් තීරුව හැකුලුම.', toolbarExpand: 'මෙවලම් තීරුව දීගහැරුම', toolbarGroups: { document: 'ලිපිය', clipboard: 'ඇමිණුම වෙනස් කිරීම', editing: 'සංස්කරණය', forms: 'පෝරමය', basicstyles: 'මුලික විලාසය', paragraph: 'චේදය', links: 'සබැඳිය', insert: 'ඇතුලත් කිරීම', styles: 'විලාසය', colors: 'වර්ණය', tools: 'මෙවලම්' }, toolbars: 'සංස්කරණ මෙවලම් තීරුව' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/en.js0000644000175000017500000000106614006075351023237 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'en', { toolbarCollapse: 'Collapse Toolbar', toolbarExpand: 'Expand Toolbar', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/he.js0000644000175000017500000000126114006075351023226 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'he', { toolbarCollapse: 'מזעור סרגל כלים', toolbarExpand: 'הרחבת סרגל כלים', toolbarGroups: { document: 'מסמך', clipboard: 'לוח הגזירים (Clipboard)/צעד אחרון', editing: 'עריכה', forms: 'טפסים', basicstyles: 'עיצוב בסיסי', paragraph: 'פסקה', links: 'קישורים', insert: 'הכנסה', styles: 'עיצוב', colors: 'צבעים', tools: 'כלים' }, toolbars: 'סרגלי כלים של העורך' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/lt.js0000644000175000017500000000116214006075351023251 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'lt', { toolbarCollapse: 'Apjungti įrankių juostą', toolbarExpand: 'Išplėsti įrankių juostą', toolbarGroups: { document: 'Dokumentas', clipboard: 'Atmintinė/Atgal', editing: 'Redagavimas', forms: 'Formos', basicstyles: 'Pagrindiniai stiliai', paragraph: 'Paragrafas', links: 'Nuorodos', insert: 'Įterpti', styles: 'Stiliai', colors: 'Spalvos', tools: 'Įrankiai' }, toolbars: 'Redaktoriaus įrankiai' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/lv.js0000644000175000017500000000111514006075351023251 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'lv', { toolbarCollapse: 'Aizvērt rīkjoslu', toolbarExpand: 'Atvērt rīkjoslu', toolbarGroups: { document: 'Dokuments', clipboard: 'Starpliktuve/Atcelt', editing: 'Labošana', forms: 'Formas', basicstyles: 'Pamata stili', paragraph: 'Paragrāfs', links: 'Saites', insert: 'Ievietot', styles: 'Stili', colors: 'Krāsas', tools: 'Rīki' }, toolbars: 'Redaktora rīkjoslas' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/eo.js0000644000175000017500000000112014006075351023227 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'eo', { toolbarCollapse: 'Faldi la ilbreton', toolbarExpand: 'Malfaldi la ilbreton', toolbarGroups: { document: 'Dokumento', clipboard: 'Poŝo/Malfari', editing: 'Redaktado', forms: 'Formularoj', basicstyles: 'Bazaj stiloj', paragraph: 'Paragrafo', links: 'Ligiloj', insert: 'Enmeti', styles: 'Stiloj', colors: 'Koloroj', tools: 'Iloj' }, toolbars: 'Ilobretoj de la redaktilo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ca.js0000644000175000017500000000112214006075351023211 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ca', { toolbarCollapse: 'Redueix la barra d\'eines', toolbarExpand: 'Amplia la barra d\'eines', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor de barra d\'eines' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/hi.js0000644000175000017500000000113714006075351023234 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'hi', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'एडिटर टूलबार' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/mk.js0000644000175000017500000000112714006075351023242 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'mk', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/mn.js0000644000175000017500000000127114006075351023245 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'mn', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Холбоосууд', insert: 'Оруулах', styles: 'Загварууд', colors: 'Онгөнүүд', tools: 'Хэрэгслүүд' }, toolbars: 'Болосруулагчийн хэрэгслийн самбар' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/gl.js0000644000175000017500000000120314006075351023230 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'gl', { toolbarCollapse: 'Contraer a barra de ferramentas', toolbarExpand: 'Expandir a barra de ferramentas', toolbarGroups: { document: 'Documento', clipboard: 'Portapapeis/desfacer', editing: 'Edición', forms: 'Formularios', basicstyles: 'Estilos básicos', paragraph: 'Paragrafo', links: 'Ligazóns', insert: 'Inserir', styles: 'Estilos', colors: 'Cores', tools: 'Ferramentas' }, toolbars: 'Barras de ferramentas do editor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ko.js0000644000175000017500000000110314006075351023236 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ko', { toolbarCollapse: '툴바 줄이기', toolbarExpand: '툴바 확장', toolbarGroups: { document: '문서', clipboard: '클립보드/실행 취소', editing: '편집', forms: '폼', basicstyles: '기본 스타일', paragraph: '단락', links: '링크', insert: '삽입', styles: '스타일', colors: '색상', tools: '도구' }, toolbars: '에디터 툴바' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/zh.js0000644000175000017500000000107614006075351023257 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'zh', { toolbarCollapse: '摺疊工具列', toolbarExpand: '展開工具列', toolbarGroups: { document: '文件', clipboard: '剪貼簿/復原', editing: '編輯選項', forms: '格式', basicstyles: '基本樣式', paragraph: '段落', links: '連結', insert: '插入', styles: '樣式', colors: '顏色', tools: '工具' }, toolbars: '編輯器工具列' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/es.js0000644000175000017500000000120514006075351023237 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'es', { toolbarCollapse: 'Contraer barra de herramientas', toolbarExpand: 'Expandir barra de herramientas', toolbarGroups: { document: 'Documento', clipboard: 'Portapapeles/Deshacer', editing: 'Edición', forms: 'Formularios', basicstyles: 'Estilos básicos', paragraph: 'Párrafo', links: 'Enlaces', insert: 'Insertar', styles: 'Estilos', colors: 'Colores', tools: 'Herramientas' }, toolbars: 'Barras de herramientas del editor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/is.js0000644000175000017500000000112714006075351023246 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'is', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/fo.js0000644000175000017500000000110314006075351023231 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'fo', { toolbarCollapse: 'Lat Toolbar aftur', toolbarExpand: 'Vís Toolbar', toolbarGroups: { document: 'Dokument', clipboard: 'Clipboard/Undo', editing: 'Editering', forms: 'Formar', basicstyles: 'Grundleggjandi Styles', paragraph: 'Reglubrot', links: 'Leinkjur', insert: 'Set inn', styles: 'Styles', colors: 'Litir', tools: 'Tól' }, toolbars: 'Editor toolbars' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/tt.js0000644000175000017500000000131514006075351023261 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'tt', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Документ', clipboard: 'Алмашу буферы/Кайтару', editing: 'Төзәтү', forms: 'Формалар', basicstyles: 'Төп стильләр', paragraph: 'Параграф', links: 'Сылталамалар', insert: 'Өстәү', styles: 'Стильләр', colors: 'Төсләр', tools: 'Кораллар' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/it.js0000644000175000017500000000111314006075351023242 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'it', { toolbarCollapse: 'Minimizza Toolbar', toolbarExpand: 'Espandi Toolbar', toolbarGroups: { document: 'Documento', clipboard: 'Copia negli appunti/Annulla', editing: 'Modifica', forms: 'Form', basicstyles: 'Stili di base', paragraph: 'Paragrafo', links: 'Link', insert: 'Inserisci', styles: 'Stili', colors: 'Colori', tools: 'Strumenti' }, toolbars: 'Editor toolbar' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/sv.js0000644000175000017500000000111414006075351023257 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'sv', { toolbarCollapse: 'Dölj verktygsfält', toolbarExpand: 'Visa verktygsfält', toolbarGroups: { document: 'Dokument', clipboard: 'Urklipp/ångra', editing: 'Redigering', forms: 'Formulär', basicstyles: 'Basstilar', paragraph: 'Paragraf', links: 'Länkar', insert: 'Infoga', styles: 'Stilar', colors: 'Färger', tools: 'Verktyg' }, toolbars: 'Redigera verktygsfält' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/gu.js0000644000175000017500000000144114006075351023245 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'gu', { toolbarCollapse: 'ટૂલબાર નાનું કરવું', toolbarExpand: 'ટૂલબાર મોટું કરવું', toolbarGroups: { document: 'દસ્તાવેજ', clipboard: 'ક્લિપબોર્ડ/અન', editing: 'એડીટ કરવું', forms: 'ફોર્મ', basicstyles: 'બેસિક્ સ્ટાઇલ', paragraph: 'ફકરો', links: 'લીંક', insert: 'ઉમેરવું', styles: 'સ્ટાઇલ', colors: 'રંગ', tools: 'ટૂલ્સ' }, toolbars: 'એડીટર ટૂલ બાર' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/tr.js0000644000175000017500000000114114006075351023254 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'tr', { toolbarCollapse: 'Araç çubuklarını topla', toolbarExpand: 'Araç çubuklarını aç', toolbarGroups: { document: 'Belge', clipboard: 'Pano/Geri al', editing: 'Düzenleme', forms: 'Formlar', basicstyles: 'Temel Stiller', paragraph: 'Paragraf', links: 'Bağlantılar', insert: 'Ekle', styles: 'Stiller', colors: 'Renkler', tools: 'Araçlar' }, toolbars: 'Araç çubukları Editörü' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/pl.js0000644000175000017500000000114014006075351023241 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'pl', { toolbarCollapse: 'Zwiń pasek narzędzi', toolbarExpand: 'Rozwiń pasek narzędzi', toolbarGroups: { document: 'Dokument', clipboard: 'Schowek/Wstecz', editing: 'Edycja', forms: 'Formularze', basicstyles: 'Style podstawowe', paragraph: 'Akapit', links: 'Hiperłącza', insert: 'Wstawianie', styles: 'Style', colors: 'Kolory', tools: 'Narzędzia' }, toolbars: 'Paski narzędzi edytora' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/nb.js0000644000175000017500000000112414006075351023227 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'nb', { toolbarCollapse: 'Skjul verktøylinje', toolbarExpand: 'Vis verktøylinje', toolbarGroups: { document: 'Dokument', clipboard: 'Utklippstavle/Angre', editing: 'Redigering', forms: 'Skjema', basicstyles: 'Basisstiler', paragraph: 'Avsnitt', links: 'Lenker', insert: 'Innsetting', styles: 'Stiler', colors: 'Farger', tools: 'Verktøy' }, toolbars: 'Verktøylinjer for editor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/sl.js0000644000175000017500000000111714006075351023250 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'sl', { toolbarCollapse: 'Skrči Orodno Vrstico', toolbarExpand: 'Razširi Orodno Vrstico', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Urejevalnik orodne vrstice' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/fi.js0000644000175000017500000000113314006075351023226 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'fi', { toolbarCollapse: 'Kutista työkalupalkki', toolbarExpand: 'Laajenna työkalupalkki', toolbarGroups: { document: 'Dokumentti', clipboard: 'Leikepöytä/Kumoa', editing: 'Muokkaus', forms: 'Lomakkeet', basicstyles: 'Perustyylit', paragraph: 'Kappale', links: 'Linkit', insert: 'Lisää', styles: 'Tyylit', colors: 'Värit', tools: 'Työkalut' }, toolbars: 'Editorin työkalupalkit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/fr-ca.js0000644000175000017500000000116714006075351023627 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'fr-ca', { toolbarCollapse: 'Enrouler la barre d\'outils', toolbarExpand: 'Dérouler la barre d\'outils', toolbarGroups: { document: 'Document', clipboard: 'Presse papier/Annuler', editing: 'Édition', forms: 'Formulaires', basicstyles: 'Styles de base', paragraph: 'Paragraphe', links: 'Liens', insert: 'Insérer', styles: 'Styles', colors: 'Couleurs', tools: 'Outils' }, toolbars: 'Barre d\'outils de l\'éditeur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ru.js0000644000175000017500000000146014006075351023261 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ru', { toolbarCollapse: 'Свернуть панель инструментов', toolbarExpand: 'Развернуть панель инструментов', toolbarGroups: { document: 'Документ', clipboard: 'Буфер обмена / Отмена действий', editing: 'Корректировка', forms: 'Формы', basicstyles: 'Простые стили', paragraph: 'Абзац', links: 'Ссылки', insert: 'Вставка', styles: 'Стили', colors: 'Цвета', tools: 'Инструменты' }, toolbars: 'Панели инструментов редактора' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ka.js0000644000175000017500000000156714006075351023236 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ka', { toolbarCollapse: 'ხელსაწყოთა ზოლის შეწევა', toolbarExpand: 'ხელსაწყოთა ზოლის გამოწევა', toolbarGroups: { document: 'დოკუმენტი', clipboard: 'Clipboard/გაუქმება', editing: 'რედაქტირება', forms: 'ფორმები', basicstyles: 'ძირითადი სტილები', paragraph: 'აბზაცი', links: 'ბმულები', insert: 'ჩასმა', styles: 'სტილები', colors: 'ფერები', tools: 'ხელსაწყოები' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/zh-cn.js0000644000175000017500000000106214006075351023650 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'zh-cn', { toolbarCollapse: '折叠工具栏', toolbarExpand: '展开工具栏', toolbarGroups: { document: '文档', clipboard: '剪贴板/撤销', editing: '编辑', forms: '表单', basicstyles: '基本格式', paragraph: '段落', links: '链接', insert: '插入', styles: '样式', colors: '颜色', tools: '工具' }, toolbars: '工具栏' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/cs.js0000644000175000017500000000114014006075351023233 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'cs', { toolbarCollapse: 'Skrýt panel nástrojů', toolbarExpand: 'Zobrazit panel nástrojů', toolbarGroups: { document: 'Dokument', clipboard: 'Schránka/Zpět', editing: 'Úpravy', forms: 'Formuláře', basicstyles: 'Základní styly', paragraph: 'Odstavec', links: 'Odkazy', insert: 'Vložit', styles: 'Styly', colors: 'Barvy', tools: 'Nástroje' }, toolbars: 'Panely nástrojů editoru' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/pt.js0000644000175000017500000000122014006075351023250 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'pt', { toolbarCollapse: 'Ocultar barra de ferramentas', toolbarExpand: 'Expandir barra de ferramentas', toolbarGroups: { document: 'Documento', clipboard: 'Área de transferência/Anular', editing: 'Edição', forms: 'Formulários', basicstyles: 'Estilos Básicos', paragraph: 'Parágrafo', links: 'Hiperligações', insert: 'Inserir', styles: 'Estilos', colors: 'Cores', tools: 'Ferramentas' }, toolbars: 'Editor de Barras de Ferramentas' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/pt-br.js0000644000175000017500000000117414006075351023661 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'pt-br', { toolbarCollapse: 'Diminuir Barra de Ferramentas', toolbarExpand: 'Aumentar Barra de Ferramentas', toolbarGroups: { document: 'Documento', clipboard: 'Clipboard/Desfazer', editing: 'Edição', forms: 'Formulários', basicstyles: 'Estilos Básicos', paragraph: 'Paragrafo', links: 'Links', insert: 'Inserir', styles: 'Estilos', colors: 'Cores', tools: 'Ferramentas' }, toolbars: 'Barra de Ferramentas do Editor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/et.js0000644000175000017500000000115114006075351023240 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'et', { toolbarCollapse: 'Tööriistariba peitmine', toolbarExpand: 'Tööriistariba näitamine', toolbarGroups: { document: 'Dokument', clipboard: 'Lõikelaud/tagasivõtmine', editing: 'Muutmine', forms: 'Vormid', basicstyles: 'Põhistiilid', paragraph: 'Lõik', links: 'Lingid', insert: 'Sisesta', styles: 'Stiilid', colors: 'Värvid', tools: 'Tööriistad' }, toolbars: 'Redaktori tööriistaribad' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/da.js0000644000175000017500000000115214006075351023215 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'da', { toolbarCollapse: 'Sammenklap værktøjslinje', toolbarExpand: 'Udvid værktøjslinje', toolbarGroups: { document: 'Dokument', clipboard: 'Udklipsholder/Fortryd', editing: 'Redigering', forms: 'Formularer', basicstyles: 'Basis styles', paragraph: 'Paragraf', links: 'Links', insert: 'Indsæt', styles: 'Typografier', colors: 'Farver', tools: 'Værktøjer' }, toolbars: 'Editors værktøjslinjer' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/af.js0000644000175000017500000000107614006075351023224 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'af', { toolbarCollapse: 'Verklein werkbalk', toolbarExpand: 'Vergroot werkbalk', toolbarGroups: { document: 'Dokument', clipboard: 'Knipbord/Undo', editing: 'Verander', forms: 'Vorms', basicstyles: 'Eenvoudige Styl', paragraph: 'Paragraaf', links: 'Skakels', insert: 'Toevoeg', styles: 'Style', colors: 'Kleure', tools: 'Gereedskap' }, toolbars: 'Werkbalke' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/hu.js0000644000175000017500000000117314006075351023250 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'hu', { toolbarCollapse: 'Eszköztár összecsukása', toolbarExpand: 'Eszköztár szétnyitása', toolbarGroups: { document: 'Dokumentum', clipboard: 'Vágólap/Visszavonás', editing: 'Szerkesztés', forms: 'Űrlapok', basicstyles: 'Alapstílusok', paragraph: 'Bekezdés', links: 'Hivatkozások', insert: 'Beszúrás', styles: 'Stílusok', colors: 'Színek', tools: 'Eszközök' }, toolbars: 'Szerkesztő Eszköztár' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/sr.js0000644000175000017500000000116714006075351023263 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'sr', { toolbarCollapse: 'Склопи алатну траку', toolbarExpand: 'Прошири алатну траку', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Едитор алатне траке' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/nl.js0000644000175000017500000000112314006075351023240 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'nl', { toolbarCollapse: 'Werkbalk inklappen', toolbarExpand: 'Werkbalk uitklappen', toolbarGroups: { document: 'Document', clipboard: 'Klembord/Ongedaan maken', editing: 'Bewerken', forms: 'Formulieren', basicstyles: 'Basisstijlen', paragraph: 'Paragraaf', links: 'Links', insert: 'Invoegen', styles: 'Stijlen', colors: 'Kleuren', tools: 'Toepassingen' }, toolbars: 'Werkbalken' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/vi.js0000644000175000017500000000116014006075351023246 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'vi', { toolbarCollapse: 'Thu gọn thanh công cụ', toolbarExpand: 'Mở rộng thnah công cụ', toolbarGroups: { document: 'Tài liệu', clipboard: 'Clipboard/Undo', editing: 'Chỉnh sửa', forms: 'Bảng biểu', basicstyles: 'Kiểu cơ bản', paragraph: 'Đoạn', links: 'Liên kết', insert: 'Chèn', styles: 'Kiểu', colors: 'Màu sắc', tools: 'Công cụ' }, toolbars: 'Thanh công cụ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ja.js0000644000175000017500000000112114006075351023217 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ja', { toolbarCollapse: 'ツールバーを閉じる', toolbarExpand: 'ツールバーを開く', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: '編集ツールバー' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/id.js0000644000175000017500000000112214006075351023222 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'id', { toolbarCollapse: 'Ciutkan Toolbar', toolbarExpand: 'Bentangkan Toolbar', toolbarGroups: { document: 'Dokumen', clipboard: 'Papan klip / Kembalikan perlakuan', editing: 'Sunting', forms: 'Formulir', basicstyles: 'Gaya Dasar', paragraph: 'Paragraf', links: 'Tautan', insert: 'Sisip', styles: 'Gaya', colors: 'Warna', tools: 'Alat' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/en-gb.js0000644000175000017500000000107114006075351023621 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'en-gb', { toolbarCollapse: 'Collapse Toolbar', toolbarExpand: 'Expand Toolbar', toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/sq.js0000644000175000017500000000111414006075351023252 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'sq', { toolbarCollapse: 'Zvogëlo Shiritin', toolbarExpand: 'Zgjero Shiritin', toolbarGroups: { document: 'Dokument', clipboard: 'Tabela Punës/Ribëje', editing: 'Duke Redaktuar', forms: 'Formular', basicstyles: 'Stili Bazë', paragraph: 'Paragraf', links: 'Nyjet', insert: 'Shto', styles: 'Stil', colors: 'Ngjyrat', tools: 'Mjetet' }, toolbars: 'Shiritet e Redaktuesit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/bn.js0000644000175000017500000000112714006075351023232 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'bn', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/en-au.js0000644000175000017500000000111714006075351023637 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'en-au', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ku.js0000644000175000017500000000135214006075351023252 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ku', { toolbarCollapse: 'شاردنەوی هێڵی تووڵامراز', toolbarExpand: 'نیشاندانی هێڵی تووڵامراز', toolbarGroups: { document: 'پەڕه', clipboard: 'بڕین/پووچکردنەوە', editing: 'چاکسازی', forms: 'داڕشتە', basicstyles: 'شێوازی بنچینەیی', paragraph: 'بڕگە', links: 'بەستەر', insert: 'خستنە ناو', styles: 'شێواز', colors: 'ڕەنگەکان', tools: 'ئامرازەکان' }, toolbars: 'تووڵامرازی دەسکاریکەر' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/ms.js0000644000175000017500000000112714006075351023252 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'ms', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/fr.js0000644000175000017500000000116314006075351023242 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'fr', { toolbarCollapse: 'Enrouler la barre d\'outils', toolbarExpand: 'Dérouler la barre d\'outils', toolbarGroups: { document: 'Document', clipboard: 'Presse-papier/Défaire', editing: 'Editer', forms: 'Formulaires', basicstyles: 'Styles de base', paragraph: 'Paragraphe', links: 'Liens', insert: 'Insérer', styles: 'Styles', colors: 'Couleurs', tools: 'Outils' }, toolbars: 'Barre d\'outils de l\'éditeur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/toolbar/lang/bs.js0000644000175000017500000000112714006075351023237 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'toolbar', 'bs', { toolbarCollapse: 'Collapse Toolbar', // MISSING toolbarExpand: 'Expand Toolbar', // MISSING toolbarGroups: { document: 'Document', clipboard: 'Clipboard/Undo', editing: 'Editing', forms: 'Forms', basicstyles: 'Basic Styles', paragraph: 'Paragraph', links: 'Links', insert: 'Insert', styles: 'Styles', colors: 'Colors', tools: 'Tools' }, toolbars: 'Editor toolbars' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/0000755000175000017500000000000014006075351022207 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/plugin.js0000644000175000017500000000447114006075351024051 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.colordialog = { requires: 'dialog', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength init: function( editor ) { var cmd = new CKEDITOR.dialogCommand( 'colordialog' ); cmd.editorFocus = false; editor.addCommand( 'colordialog', cmd ); CKEDITOR.dialog.add( 'colordialog', this.path + 'dialogs/colordialog.js' ); /** * Open up color dialog and to receive the selected color. * * @param {Function} callback The callback when color dialog is closed * @param {String} callback.color The color value received if selected on the dialog. * @param [scope] The scope in which the callback will be bound. * @member CKEDITOR.editor */ editor.getColorFromDialog = function( callback, scope ) { var onClose = function( evt ) { releaseHandlers( this ); var color = evt.name == 'ok' ? this.getValueOf( 'picker', 'selectedColor' ) : null; callback.call( scope, color ); }; var releaseHandlers = function( dialog ) { dialog.removeListener( 'ok', onClose ); dialog.removeListener( 'cancel', onClose ); }; var bindToDialog = function( dialog ) { dialog.on( 'ok', onClose ); dialog.on( 'cancel', onClose ); }; editor.execCommand( 'colordialog' ); if ( editor._.storedDialogs && editor._.storedDialogs.colordialog ) bindToDialog( editor._.storedDialogs.colordialog ); else { CKEDITOR.on( 'dialogDefinition', function( e ) { if ( e.data.name != 'colordialog' ) return; var definition = e.data.definition; e.removeListener(); definition.onLoad = CKEDITOR.tools.override( definition.onLoad, function( orginal ) { return function() { bindToDialog( this ); definition.onLoad = orginal; if ( typeof orginal == 'function' ) orginal.call( this ); }; } ); } ); } }; } }; CKEDITOR.plugins.add( 'colordialog', CKEDITOR.plugins.colordialog ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/dialogs/0000755000175000017500000000000014006075351023631 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/dialogs/colordialog.js0000644000175000017500000002203014006075351026462 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'colordialog', function( editor ) { // Define some shorthands. var $el = CKEDITOR.dom.element, $doc = CKEDITOR.document, lang = editor.lang.colordialog; // Reference the dialog. var dialog; var spacer = { type: 'html', html: ' ' }; var selected; function clearSelected() { $doc.getById( selHiColorId ).removeStyle( 'background-color' ); dialog.getContentElement( 'picker', 'selectedColor' ).setValue( '' ); selected && selected.removeAttribute( 'aria-selected' ); selected = null; } function updateSelected( evt ) { var target = evt.data.getTarget(), color; if ( target.getName() == 'td' && ( color = target.getChild( 0 ).getHtml() ) ) { selected = target; selected.setAttribute( 'aria-selected', true ); dialog.getContentElement( 'picker', 'selectedColor' ).setValue( color ); } } // Basing black-white decision off of luma scheme using the Rec. 709 version function whiteOrBlack( color ) { color = color.replace( /^#/, '' ); for ( var i = 0, rgb = []; i <= 2; i++ ) rgb[ i ] = parseInt( color.substr( i * 2, 2 ), 16 ); var luma = ( 0.2126 * rgb[ 0 ] ) + ( 0.7152 * rgb[ 1 ] ) + ( 0.0722 * rgb[ 2 ] ); return '#' + ( luma >= 165 ? '000' : 'fff' ); } // Distinguish focused and hover states. var focused, hovered; // Apply highlight style. function updateHighlight( event ) { // Convert to event. !event.name && ( event = new CKEDITOR.event( event ) ); var isFocus = !( /mouse/ ).test( event.name ), target = event.data.getTarget(), color; if ( target.getName() == 'td' && ( color = target.getChild( 0 ).getHtml() ) ) { removeHighlight( event ); isFocus ? focused = target : hovered = target; // Apply outline style to show focus. if ( isFocus ) { target.setStyle( 'border-color', whiteOrBlack( color ) ); target.setStyle( 'border-style', 'dotted' ); } $doc.getById( hicolorId ).setStyle( 'background-color', color ); $doc.getById( hicolorTextId ).setHtml( color ); } } function clearHighlight() { var color = focused.getChild( 0 ).getHtml(); focused.setStyle( 'border-color', color ); focused.setStyle( 'border-style', 'solid' ); $doc.getById( hicolorId ).removeStyle( 'background-color' ); $doc.getById( hicolorTextId ).setHtml( ' ' ); focused = null; } // Remove previously focused style. function removeHighlight( event ) { var isFocus = !( /mouse/ ).test( event.name ), target = isFocus && focused; if ( target ) { var color = target.getChild( 0 ).getHtml(); target.setStyle( 'border-color', color ); target.setStyle( 'border-style', 'solid' ); } if ( !( focused || hovered ) ) { $doc.getById( hicolorId ).removeStyle( 'background-color' ); $doc.getById( hicolorTextId ).setHtml( ' ' ); } } function onKeyStrokes( evt ) { var domEvt = evt.data; var element = domEvt.getTarget(); var relative, nodeToMove; var keystroke = domEvt.getKeystroke(), rtl = editor.lang.dir == 'rtl'; switch ( keystroke ) { // UP-ARROW case 38: // relative is TR if ( ( relative = element.getParent().getPrevious() ) ) { nodeToMove = relative.getChild( [ element.getIndex() ] ); nodeToMove.focus(); } domEvt.preventDefault(); break; // DOWN-ARROW case 40: // relative is TR if ( ( relative = element.getParent().getNext() ) ) { nodeToMove = relative.getChild( [ element.getIndex() ] ); if ( nodeToMove && nodeToMove.type == 1 ) nodeToMove.focus(); } domEvt.preventDefault(); break; // SPACE // ENTER case 32: case 13: updateSelected( evt ); domEvt.preventDefault(); break; // RIGHT-ARROW case rtl ? 37 : 39: // relative is TD if ( ( nodeToMove = element.getNext() ) ) { if ( nodeToMove.type == 1 ) { nodeToMove.focus(); domEvt.preventDefault( true ); } } // relative is TR else if ( ( relative = element.getParent().getNext() ) ) { nodeToMove = relative.getChild( [ 0 ] ); if ( nodeToMove && nodeToMove.type == 1 ) { nodeToMove.focus(); domEvt.preventDefault( true ); } } break; // LEFT-ARROW case rtl ? 39 : 37: // relative is TD if ( ( nodeToMove = element.getPrevious() ) ) { nodeToMove.focus(); domEvt.preventDefault( true ); } // relative is TR else if ( ( relative = element.getParent().getPrevious() ) ) { nodeToMove = relative.getLast(); nodeToMove.focus(); domEvt.preventDefault( true ); } break; default: // Do not stop not handled events. return; } } function createColorTable() { table = CKEDITOR.dom.element.createFromHtml( '' + '' + '
    ' + lang.options + '
    ' ); table.on( 'mouseover', updateHighlight ); table.on( 'mouseout', removeHighlight ); // Create the base colors array. var aColors = [ '00', '33', '66', '99', 'cc', 'ff' ]; // This function combines two ranges of three values from the color array into a row. function appendColorRow( rangeA, rangeB ) { for ( var i = rangeA; i < rangeA + 3; i++ ) { var row = new $el( table.$.insertRow( -1 ) ); row.setAttribute( 'role', 'row' ); for ( var j = rangeB; j < rangeB + 3; j++ ) { for ( var n = 0; n < 6; n++ ) { appendColorCell( row.$, '#' + aColors[ j ] + aColors[ n ] + aColors[ i ] ); } } } } // This function create a single color cell in the color table. function appendColorCell( targetRow, color ) { var cell = new $el( targetRow.insertCell( -1 ) ); cell.setAttribute( 'class', 'ColorCell' ); cell.setAttribute( 'tabIndex', -1 ); cell.setAttribute( 'role', 'gridcell' ); cell.on( 'keydown', onKeyStrokes ); cell.on( 'click', updateSelected ); cell.on( 'focus', updateHighlight ); cell.on( 'blur', removeHighlight ); cell.setStyle( 'background-color', color ); cell.setStyle( 'border', '1px solid ' + color ); cell.setStyle( 'width', '14px' ); cell.setStyle( 'height', '14px' ); var colorLabel = numbering( 'color_table_cell' ); cell.setAttribute( 'aria-labelledby', colorLabel ); cell.append( CKEDITOR.dom.element.createFromHtml( '' + color + '', CKEDITOR.document ) ); } appendColorRow( 0, 0 ); appendColorRow( 3, 0 ); appendColorRow( 0, 3 ); appendColorRow( 3, 3 ); // Create the last row. var oRow = new $el( table.$.insertRow( -1 ) ); oRow.setAttribute( 'role', 'row' ); // Create the gray scale colors cells. appendColorCell( oRow.$, '#000000' ); for ( var n = 0; n < 16; n++ ) { var c = n.toString( 16 ); appendColorCell( oRow.$, '#' + c + c + c + c + c + c ); } appendColorCell( oRow.$, '#ffffff' ); } var numbering = function( id ) { return CKEDITOR.tools.getNextId() + '_' + id; }, hicolorId = numbering( 'hicolor' ), hicolorTextId = numbering( 'hicolortext' ), selHiColorId = numbering( 'selhicolor' ), table; createColorTable(); return { title: lang.title, minWidth: 360, minHeight: 220, onLoad: function() { // Update reference. dialog = this; }, onHide: function() { clearSelected(); clearHighlight(); }, contents: [ { id: 'picker', label: lang.title, accessKey: 'I', elements: [ { type: 'hbox', padding: 0, widths: [ '70%', '10%', '30%' ], children: [ { type: 'html', html: '
    ', onLoad: function() { CKEDITOR.document.getById( this.domId ).append( table ); }, focus: function() { // Restore the previously focused cell, // otherwise put the initial focus on the first table cell. ( focused || this.getElement().getElementsByTag( 'td' ).getItem( 0 ) ).focus(); } }, spacer, { type: 'vbox', padding: 0, widths: [ '70%', '5%', '25%' ], children: [ { type: 'html', html: '' + lang.highlight + '' + '
    ' + '
     
    ' + lang.selected + '' + '
    ' }, { type: 'text', label: lang.selected, labelStyle: 'display:none', id: 'selectedColor', style: 'width: 76px;margin-top:4px', onChange: function() { // Try to update color preview with new value. If fails, then set it no none. try { $doc.getById( selHiColorId ).setStyle( 'background-color', this.getValue() ); } catch ( e ) { clearSelected(); } } }, spacer, { type: 'button', id: 'clear', label: lang.clear, onClick: clearSelected } ] } ] } ] } ] }; } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/0000755000175000017500000000000014006075351023130 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/bg.js0000644000175000017500000000057714006075351024067 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'bg', { clear: 'Изчистване', highlight: 'Осветяване', options: 'Цветови опции', selected: 'Изберете цвят', title: 'Изберете цвят' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/cy.js0000644000175000017500000000050214006075351024076 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'cy', { clear: 'Clirio', highlight: 'Uwcholeuo', options: 'Opsiynau Lliw', selected: 'Lliw a Ddewiswyd', title: 'Dewis lliw' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/no.js0000644000175000017500000000047114006075351024104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'no', { clear: 'Tøm', highlight: 'Merk', options: 'Alternativer for farge', selected: 'Valgt', title: 'Velg farge' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/hr.js0000644000175000017500000000050014006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'hr', { clear: 'Očisti', highlight: 'Istaknuto', options: 'Opcije boje', selected: 'Odabrana boja', title: 'Odaberi boju' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/th.js0000644000175000017500000000057014006075351024103 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'th', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ar.js0000644000175000017500000000054714006075351024076 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ar', { clear: 'مسح', highlight: 'تحديد', options: 'اختيارات الألوان', selected: 'اللون المختار', title: 'اختر اللون' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/sk.js0000644000175000017500000000051314006075351024102 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'sk', { clear: 'Vyčistiť', highlight: 'Zvýrazniť', options: 'Možnosti farby', selected: 'Vybraná farba', title: 'Vyberte farbu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ro.js0000644000175000017500000000057014006075351024110 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ro', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/en-ca.js0000644000175000017500000000057314006075351024456 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'en-ca', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ug.js0000644000175000017500000000054314006075351024103 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ug', { clear: 'تازىلا', highlight: 'يورۇت', options: 'رەڭ تاللانمىسى', selected: 'رەڭ تاللاڭ', title: 'رەڭ تاللاڭ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/el.js0000644000175000017500000000061514006075351024070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'el', { clear: 'Εκκαθάριση', highlight: 'Σήμανση', options: 'Επιλογές Χρωμάτων', selected: 'Επιλεγμένο Χρώμα', title: 'Επιλογή χρώματος' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/de.js0000644000175000017500000000051614006075351024060 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'de', { clear: 'Entfernen', highlight: 'Hervorheben', options: 'Farboptionen', selected: 'Ausgewählte Farbe', title: 'Farbe auswählen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/uk.js0000644000175000017500000000063214006075351024106 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'uk', { clear: 'Очистити', highlight: 'Колір, на який вказує курсор', options: 'Опції кольорів', selected: 'Обраний колір', title: 'Обрати колір' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/sr-latn.js0000644000175000017500000000057514006075351025055 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'sr-latn', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/km.js0000644000175000017500000000063414006075351024100 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'km', { clear: 'សម្អាត', highlight: 'បន្លិច​ពណ៌', options: 'ជម្រើស​ពណ៌', selected: 'ពណ៌​ដែល​បាន​រើស', title: 'រើស​ពណ៌' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/eu.js0000644000175000017500000000051514006075351024100 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'eu', { clear: 'Garbitu', highlight: 'Nabarmendu', options: 'Kolore Aukerak', selected: 'Hautatutako Kolorea', title: 'Kolorea Hautatu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/fa.js0000644000175000017500000000055614006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'fa', { clear: 'پاک کردن', highlight: 'متمایز', options: 'گزینه​های رنگ', selected: 'رنگ انتخاب شده', title: 'انتخاب رنگ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/si.js0000644000175000017500000000064314006075351024104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'si', { clear: 'පැහැදිලි', highlight: 'මතුකර පෙන්වන්න', options: 'වර්ණ විකල්ප', selected: 'තෙරු වර්ණ', title: 'වර්ණ තෝරන්න' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/en.js0000644000175000017500000000050114006075351024064 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'en', { clear: 'Clear', highlight: 'Highlight', options: 'Color Options', selected: 'Selected Color', title: 'Select color' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/he.js0000644000175000017500000000052214006075351024061 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'he', { clear: 'ניקוי', highlight: 'סימון', options: 'אפשרויות צבע', selected: 'בחירה', title: 'בחירת צבע' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/lt.js0000644000175000017500000000052614006075351024110 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'lt', { clear: 'Išvalyti', highlight: 'Paryškinti', options: 'Spalvos nustatymai', selected: 'Pasirinkta spalva', title: 'Pasirinkite spalvą' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/lv.js0000644000175000017500000000052314006075351024107 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'lv', { clear: 'Notīrīt', highlight: 'Paraugs', options: 'Krāsas uzstādījumi', selected: 'Izvēlētā krāsa', title: 'Izvēlies krāsu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/eo.js0000644000175000017500000000051214006075351024067 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'eo', { clear: 'Forigi', highlight: 'Detaloj', options: 'Opcioj pri koloroj', selected: 'Selektita koloro', title: 'Selekti koloron' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ca.js0000644000175000017500000000051714006075351024054 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ca', { clear: 'Neteja', highlight: 'Destacat', options: 'Opcions del color', selected: 'Color Seleccionat', title: 'Seleccioni el color' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/hi.js0000644000175000017500000000057014006075351024070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'hi', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/mk.js0000644000175000017500000000057014006075351024077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'mk', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/mn.js0000644000175000017500000000057014006075351024102 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'mn', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/gl.js0000644000175000017500000000051414006075351024070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'gl', { clear: 'Limpar', highlight: 'Resaltar', options: 'Opcións de cor', selected: 'Cor seleccionado', title: 'Seleccione unha cor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ko.js0000644000175000017500000000050514006075351024077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ko', { clear: '비우기', highlight: '강조', options: '색상 옵션', selected: '선택된 색상', title: '색상 선택' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/zh.js0000644000175000017500000000047714006075351024117 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'zh', { clear: '清除', highlight: '高亮', options: '色彩選項', selected: '選取的色彩', title: '選取色彩' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/es.js0000644000175000017500000000047714006075351024105 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'es', { clear: 'Borrar', highlight: 'Muestra', options: 'Opciones de colores', selected: 'Elegido', title: 'Elegir color' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/is.js0000644000175000017500000000057014006075351024103 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'is', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/fo.js0000644000175000017500000000047314006075351024076 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'fo', { clear: 'Strika', highlight: 'Framheva', options: 'Litmøguleikar', selected: 'Valdur litur', title: 'Vel lit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/tt.js0000644000175000017500000000056514006075351024123 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'tt', { clear: 'Бушату', highlight: 'Билгеләү', options: 'Төс көйләүләре', selected: 'Сайланган төсләр', title: 'Төс сайлау' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/it.js0000644000175000017500000000052314006075351024102 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'it', { clear: 'cancella', highlight: 'Evidenzia', options: 'Opzioni colore', selected: 'Seleziona il colore', title: 'Selezionare il colore' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/sv.js0000644000175000017500000000047414006075351024123 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'sv', { clear: 'Rensa', highlight: 'Markera', options: 'Färgalternativ', selected: 'Vald färg', title: 'Välj färg' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/gu.js0000644000175000017500000000063414006075351024104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'gu', { clear: 'સાફ કરવું', highlight: 'હાઈઈટ', options: 'રંગના વિકલ્પ', selected: 'પસંદ કરેલો રંગ', title: 'રંગ પસંદ કરો' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/tr.js0000644000175000017500000000050114006075351024107 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'tr', { clear: 'Temizle', highlight: 'İşaretle', options: 'Renk Seçenekleri', selected: 'Seçilmiş', title: 'Renk seç' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/pl.js0000644000175000017500000000047414006075351024106 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'pl', { clear: 'Wyczyść', highlight: 'Zaznacz', options: 'Opcje koloru', selected: 'Wybrany', title: 'Wybierz kolor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/nb.js0000644000175000017500000000047714006075351024075 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'nb', { clear: 'Tøm', highlight: 'Merk', options: 'Alternativer for farge', selected: 'Valgt farge', title: 'Velg farge' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/sl.js0000644000175000017500000000050114006075351024100 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'sl', { clear: 'Počisti', highlight: 'Poudarjeno', options: 'Barvne Možnosti', selected: 'Izbrano', title: 'Izberi barvo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/fi.js0000644000175000017500000000050114006075351024060 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'fi', { clear: 'Poista', highlight: 'Korostus', options: 'Värin ominaisuudet', selected: 'Valittu', title: 'Valitse väri' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/fr-ca.js0000644000175000017500000000053214006075351024456 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'fr-ca', { clear: 'Effacer', highlight: 'Surligner', options: 'Options de couleur', selected: 'Couleur sélectionnée', title: 'Choisir une couleur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ru.js0000644000175000017500000000060414006075351024114 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ru', { clear: 'Очистить', highlight: 'Под курсором', options: 'Настройки цвета', selected: 'Выбранный цвет', title: 'Выберите цвет' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ka.js0000644000175000017500000000066714006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ka', { clear: 'გასუფთავება', highlight: 'ჩვენება', options: 'ფერის პარამეტრები', selected: 'არჩეული ფერი', title: 'ფერის შეცვლა' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/zh-cn.js0000644000175000017500000000047714006075351024515 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'zh-cn', { clear: '清除', highlight: '高亮', options: '颜色选项', selected: '选择颜色', title: '选择颜色' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/cs.js0000644000175000017500000000050414006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'cs', { clear: 'Vyčistit', highlight: 'Zvýraznit', options: 'Nastavení barvy', selected: 'Vybráno', title: 'Výběr barvy' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/pt.js0000644000175000017500000000050614006075351024112 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'pt', { clear: 'Limpar', highlight: 'Realçar', options: 'Opções de cor', selected: 'Cor selecionada', title: 'Selecionar cor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/pt-br.js0000644000175000017500000000051214006075351024510 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'pt-br', { clear: 'Limpar', highlight: 'Grifar', options: 'Opções de Cor', selected: 'Cor Selecionada', title: 'Selecione uma Cor' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/et.js0000644000175000017500000000050414006075351024075 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'et', { clear: 'Eemalda', highlight: 'Näidis', options: 'Värvi valikud', selected: 'Valitud värv', title: 'Värvi valimine' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/da.js0000644000175000017500000000047714006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'da', { clear: 'Nulstil', highlight: 'Markér', options: 'Farvemuligheder', selected: 'Valgt farve', title: 'Vælg farve' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/af.js0000644000175000017500000000047114006075351024056 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'af', { clear: 'Herstel', highlight: 'Aktief', options: 'Kleuropsies', selected: 'Geselekteer', title: 'Kies kleur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/hu.js0000644000175000017500000000051214006075351024100 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'hu', { clear: 'Ürítés', highlight: 'Nagyítás', options: 'Szín opciók', selected: 'Kiválasztott', title: 'Válasszon színt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/sr.js0000644000175000017500000000057014006075351024114 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'sr', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/nl.js0000644000175000017500000000050514006075351024077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'nl', { clear: 'Wissen', highlight: 'Actief', options: 'Kleuropties', selected: 'Geselecteerde kleur', title: 'Selecteer kleur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/vi.js0000644000175000017500000000051314006075351024103 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'vi', { clear: 'Xóa bỏ', highlight: 'Màu chọn', options: 'Tùy chọn màu', selected: 'Màu đã chọn', title: 'Chọn màu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ja.js0000644000175000017500000000052714006075351024064 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ja', { clear: 'クリア', highlight: 'ハイライト', options: 'カラーオプション', selected: '選択された色', title: '色選択' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/en-gb.js0000644000175000017500000000050714006075351024460 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'en-gb', { clear: 'Clear', highlight: 'Highlight', options: 'Colour Options', selected: 'Selected Colour', title: 'Select colour' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/sq.js0000644000175000017500000000053414006075351024113 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'sq', { clear: 'Pastro', highlight: 'Thekso', options: 'Përzgjedhjet e Ngjyrave', selected: 'Ngjyra e Përzgjedhur', title: 'Përzgjidh një ngjyrë' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/bn.js0000644000175000017500000000057014006075351024067 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'bn', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/en-au.js0000644000175000017500000000057314006075351024500 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'en-au', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ku.js0000644000175000017500000000062114006075351024104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ku', { clear: 'پاکیکەوە', highlight: 'نیشانکردن', options: 'هەڵبژاردەی ڕەنگەکان', selected: 'ڕەنگی هەڵبژێردراو', title: 'هەڵبژاردنی ڕەنگ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/ms.js0000644000175000017500000000057014006075351024107 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'ms', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/fr.js0000644000175000017500000000052014006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'fr', { clear: 'Effacer', highlight: 'Détails', options: 'Option des couleurs', selected: 'Couleur choisie', title: 'Choisir une couleur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/colordialog/lang/bs.js0000644000175000017500000000057014006075351024074 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'colordialog', 'bs', { clear: 'Clear', // MISSING highlight: 'Highlight', // MISSING options: 'Color Options', // MISSING selected: 'Selected Color', // MISSING title: 'Select color' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/0000755000175000017500000000000014006075351022254 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/plugin.js0000644000175000017500000001306514006075351024115 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { 'use strict'; CKEDITOR.plugins.add( 'stylescombo', { requires: 'richcombo', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength init: function( editor ) { var config = editor.config, lang = editor.lang.stylescombo, styles = {}, stylesList = [], combo, allowedContent = []; editor.on( 'stylesSet', function( evt ) { var stylesDefinitions = evt.data.styles; if ( !stylesDefinitions ) return; var style, styleName, styleType; // Put all styles into an Array. for ( var i = 0, count = stylesDefinitions.length; i < count; i++ ) { var styleDefinition = stylesDefinitions[ i ]; if ( editor.blockless && ( styleDefinition.element in CKEDITOR.dtd.$block ) ) continue; styleName = styleDefinition.name; style = new CKEDITOR.style( styleDefinition ); if ( !editor.filter.customConfig || editor.filter.check( style ) ) { style._name = styleName; style._.enterMode = config.enterMode; // Get the type (which will be used to assign style to one of 3 groups) from assignedTo if it's defined. style._.type = styleType = style.assignedTo || style.type; // Weight is used to sort styles (#9029). style._.weight = i + ( styleType == CKEDITOR.STYLE_OBJECT ? 1 : styleType == CKEDITOR.STYLE_BLOCK ? 2 : 3 ) * 1000; styles[ styleName ] = style; stylesList.push( style ); allowedContent.push( style ); } } // Sorts the Array, so the styles get grouped by type in proper order (#9029). stylesList.sort( function( styleA, styleB ) { return styleA._.weight - styleB._.weight; } ); } ); editor.ui.addRichCombo( 'Styles', { label: lang.label, title: lang.panelTitle, toolbar: 'styles,10', allowedContent: allowedContent, panel: { css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), multiSelect: true, attributes: { 'aria-label': lang.panelTitle } }, init: function() { var style, styleName, lastType, type, i, count; // Loop over the Array, adding all items to the // combo. for ( i = 0, count = stylesList.length; i < count; i++ ) { style = stylesList[ i ]; styleName = style._name; type = style._.type; if ( type != lastType ) { this.startGroup( lang[ 'panelTitle' + String( type ) ] ); lastType = type; } this.add( styleName, style.type == CKEDITOR.STYLE_OBJECT ? styleName : style.buildPreview(), styleName ); } this.commit(); }, onClick: function( value ) { editor.focus(); editor.fire( 'saveSnapshot' ); var style = styles[ value ], elementPath = editor.elementPath(); editor[ style.checkActive( elementPath, editor ) ? 'removeStyle' : 'applyStyle' ]( style ); editor.fire( 'saveSnapshot' ); }, onRender: function() { editor.on( 'selectionChange', function( ev ) { var currentValue = this.getValue(), elementPath = ev.data.path, elements = elementPath.elements; // For each element into the elements path. for ( var i = 0, count = elements.length, element; i < count; i++ ) { element = elements[ i ]; // Check if the element is removable by any of // the styles. for ( var value in styles ) { if ( styles[ value ].checkElementRemovable( element, true, editor ) ) { if ( value != currentValue ) this.setValue( value ); return; } } } // If no styles match, just empty it. this.setValue( '' ); }, this ); }, onOpen: function() { var selection = editor.getSelection(), element = selection.getSelectedElement(), elementPath = editor.elementPath( element ), counter = [ 0, 0, 0, 0 ]; this.showAll(); this.unmarkAll(); for ( var name in styles ) { var style = styles[ name ], type = style._.type; if ( style.checkApplicable( elementPath, editor, editor.activeFilter ) ) counter[ type ]++; else this.hideItem( name ); if ( style.checkActive( elementPath, editor ) ) this.mark( name ); } if ( !counter[ CKEDITOR.STYLE_BLOCK ] ) this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_BLOCK ) ] ); if ( !counter[ CKEDITOR.STYLE_INLINE ] ) this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_INLINE ) ] ); if ( !counter[ CKEDITOR.STYLE_OBJECT ] ) this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_OBJECT ) ] ); }, refresh: function() { var elementPath = editor.elementPath(); if ( !elementPath ) return; for ( var name in styles ) { var style = styles[ name ]; if ( style.checkApplicable( elementPath, editor, editor.activeFilter ) ) return; } this.setState( CKEDITOR.TRISTATE_DISABLED ); }, // Force a reload of the data reset: function() { if ( combo ) { delete combo._.panel; delete combo._.list; combo._.committed = 0; combo._.items = {}; combo._.state = CKEDITOR.TRISTATE_OFF; } styles = {}; stylesList = []; } } ); } } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/0000755000175000017500000000000014006075351023175 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bg.js0000644000175000017500000000065314006075351024127 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'bg', { label: 'Стилове', panelTitle: 'Стилове за форматиране', panelTitle1: 'Блокови стилове', panelTitle2: 'Вътрешни стилове', panelTitle3: 'Обектни стилове' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/cy.js0000644000175000017500000000055414006075351024152 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'cy', { label: 'Arddulliau', panelTitle: 'Arddulliau Fformatio', panelTitle1: 'Arddulliau Bloc', panelTitle2: 'Arddulliau Mewnol', panelTitle3: 'Arddulliau Gwrthrych' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/no.js0000644000175000017500000000051514006075351024150 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'no', { label: 'Stil', panelTitle: 'Stilformater', panelTitle1: 'Blokkstiler', panelTitle2: 'Inlinestiler', panelTitle3: 'Objektstiler' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hr.js0000644000175000017500000000053314006075351024145 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'hr', { label: 'Stil', panelTitle: 'Stilovi formatiranja', panelTitle1: 'Block stilovi', panelTitle2: 'Inline stilovi', panelTitle3: 'Object stilovi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/th.js0000644000175000017500000000061714006075351024152 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'th', { label: 'ลักษณะ', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ar.js0000644000175000017500000000060014006075351024131 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ar', { label: 'أنماط', panelTitle: 'أنماط التنسيق', panelTitle1: 'أنماط الفقرة', panelTitle2: 'أنماط مضمنة', panelTitle3: 'أنماط الكائن' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sk.js0000644000175000017500000000056314006075351024154 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sk', { label: 'Štýly', panelTitle: 'Formátovanie štýlov', panelTitle1: 'Štýly bloku', panelTitle2: 'Vnútroriadkové (inline) štýly', panelTitle3: 'Štýly objeku' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ro.js0000644000175000017500000000057214006075351024157 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ro', { label: 'Stil', panelTitle: 'Formatarea stilurilor', panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-ca.js0000644000175000017500000000054514006075351024522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en-ca', { label: 'Styles', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ug.js0000644000175000017500000000073714006075351024155 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ug', { label: 'ئۇسلۇب', panelTitle: 'ئۇسلۇب', panelTitle1: 'بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى', panelTitle2: 'ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى', panelTitle3: 'نەڭ (Object) ئېلېمېنت ئۇسلۇبى' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/el.js0000644000175000017500000000063114006075351024133 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'el', { label: 'Μορφές', panelTitle: 'Στυλ Μορφοποίησης', panelTitle1: 'Στυλ Τμημάτων', panelTitle2: 'Στυλ Εν Σειρά', panelTitle3: 'Στυλ Αντικειμένων' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/de.js0000644000175000017500000000052314006075351024123 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'de', { label: 'Stil', panelTitle: 'Formatierungsstile', panelTitle1: 'Blockstile', panelTitle2: 'Inline Stilart', panelTitle3: 'Objektstile' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/uk.js0000644000175000017500000000062214006075351024152 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'uk', { label: 'Стиль', panelTitle: 'Стилі форматування', panelTitle1: 'Блочні стилі', panelTitle2: 'Рядкові стилі', panelTitle3: 'Об\'єктні стилі' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sr-latn.js0000644000175000017500000000060614006075351025115 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sr-latn', { label: 'Stil', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/km.js0000644000175000017500000000072714006075351024150 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'km', { label: 'រចនាបថ', panelTitle: 'ទ្រង់ទ្រាយ​រចនាបថ', panelTitle1: 'រចនាបថ​ប្លក់', panelTitle2: 'រចនាបថ​ក្នុង​ជួរ', panelTitle3: 'រចនាបថ​វត្ថុ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/eu.js0000644000175000017500000000053614006075351024150 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'eu', { label: 'Estiloa', panelTitle: 'Formatu Estiloak', panelTitle1: 'Bloke Estiloak', panelTitle2: 'Inline Estiloak', panelTitle3: 'Objektu Estiloak' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fa.js0000644000175000017500000000060014006075351024115 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fa', { label: 'سبک', panelTitle: 'سبکهای قالببندی', panelTitle1: 'سبکهای بلوک', panelTitle2: 'سبکهای درونخطی', panelTitle3: 'سبکهای شیء' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/si.js0000644000175000017500000000061714006075351024152 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'si', { label: 'විලාසය', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en.js0000644000175000017500000000052714006075351024141 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en', { label: 'Styles', panelTitle: 'Formatting Styles', panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/he.js0000644000175000017500000000060614006075351024131 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'he', { label: 'סגנון', panelTitle: 'סגנונות פורמט', panelTitle1: 'סגנונות בלוק', panelTitle2: 'סגנונות רצף', panelTitle3: 'סגנונות אובייקט' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/lt.js0000644000175000017500000000054314006075351024154 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'lt', { label: 'Stilius', panelTitle: 'Stilių formatavimas', panelTitle1: 'Blokų stiliai', panelTitle2: 'Vidiniai stiliai', panelTitle3: 'Objektų stiliai' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/lv.js0000644000175000017500000000053314006075351024155 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'lv', { label: 'Stils', panelTitle: 'Formatēšanas stili', panelTitle1: 'Bloka stili', panelTitle2: 'iekļautie stili', panelTitle3: 'Objekta stili' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/eo.js0000644000175000017500000000054514006075351024142 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'eo', { label: 'Stiloj', panelTitle: 'Stiloj pri enpaĝigo', panelTitle1: 'Stiloj de blokoj', panelTitle2: 'Enliniaj Stiloj', panelTitle3: 'Stiloj de objektoj' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ca.js0000644000175000017500000000053714006075351024123 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ca', { label: 'Estil', panelTitle: 'Estils de format', panelTitle1: 'Estils de bloc', panelTitle2: 'Estils incrustats', panelTitle3: 'Estils d\'objecte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hi.js0000644000175000017500000000061714006075351024137 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'hi', { label: 'स्टाइल', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/mk.js0000644000175000017500000000060314006075351024141 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'mk', { label: 'Styles', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/mn.js0000644000175000017500000000062214006075351024145 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'mn', { label: 'Загвар', panelTitle: 'Загвар хэлбэржүүлэх', panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/gl.js0000644000175000017500000000055114006075351024136 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'gl', { label: 'Estilos', panelTitle: 'Estilos de formatando', panelTitle1: 'Estilos de bloque', panelTitle2: 'Estilos de liña', panelTitle3: 'Estilos de obxecto' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ko.js0000644000175000017500000000055514006075351024151 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ko', { label: '스타일', panelTitle: '전체 구성 스타일', panelTitle1: '블록 스타일', panelTitle2: '인라인 스타일', panelTitle3: '객체 스타일' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/zh.js0000644000175000017500000000052314006075351024154 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'zh', { label: '樣式', panelTitle: '格式化樣式', panelTitle1: '區塊樣式', panelTitle2: '內嵌樣式', panelTitle3: '物件樣式' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/es.js0000644000175000017500000000055614006075351024150 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'es', { label: 'Estilo', panelTitle: 'Estilos para formatear', panelTitle1: 'Estilos de párrafo', panelTitle2: 'Estilos de carácter', panelTitle3: 'Estilos de objeto' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/is.js0000644000175000017500000000061114006075351024144 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'is', { label: 'Stílflokkur', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fo.js0000644000175000017500000000054114006075351024137 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fo', { label: 'Typografi', panelTitle: 'Formatterings stílir', panelTitle1: 'Blokk stílir', panelTitle2: 'Inline stílir', panelTitle3: 'Object stílir' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/tt.js0000644000175000017500000000065614006075351024171 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'tt', { label: 'Стильләр', panelTitle: 'Форматлау стильләре', panelTitle1: 'Блоклар стильләре', panelTitle2: 'Эчке стильләр', panelTitle3: 'Объектлар стильләре' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/it.js0000644000175000017500000000054514006075351024153 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'it', { label: 'Stili', panelTitle: 'Stili di formattazione', panelTitle1: 'Stili per blocchi', panelTitle2: 'Stili in linea', panelTitle3: 'Stili per oggetti' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sv.js0000644000175000017500000000053014006075351024161 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sv', { label: 'Anpassad stil', panelTitle: 'Formatmallar', panelTitle1: 'Blockstil', panelTitle2: 'Inbäddad stil', panelTitle3: 'Objektets stil' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/gu.js0000644000175000017500000000062414006075351024150 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'gu', { label: 'શૈલી/રીત', panelTitle: 'ફોર્મેટ ', panelTitle1: 'બ્લોક ', panelTitle2: 'ઈનલાઈન ', panelTitle3: 'ઓબ્જેક્ટ પદ્ધતિ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/tr.js0000644000175000017500000000053614006075351024164 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'tr', { label: 'Biçem', panelTitle: 'Stilleri Düzenliyor', panelTitle1: 'Blok Stilleri', panelTitle2: 'Inline Stilleri', panelTitle3: 'Nesne Stilleri' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pl.js0000644000175000017500000000053114006075351024145 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'pl', { label: 'Styl', panelTitle: 'Style formatujące', panelTitle1: 'Style blokowe', panelTitle2: 'Style liniowe', panelTitle3: 'Style obiektowe' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/nb.js0000644000175000017500000000051514006075351024133 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'nb', { label: 'Stil', panelTitle: 'Stilformater', panelTitle1: 'Blokkstiler', panelTitle2: 'Inlinestiler', panelTitle3: 'Objektstiler' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sl.js0000644000175000017500000000053214006075351024151 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sl', { label: 'Slog', panelTitle: 'Oblikovalni Stili', panelTitle1: 'Slogi odstavkov', panelTitle2: 'Slogi besedila', panelTitle3: 'Slogi objektov' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fi.js0000644000175000017500000000054514006075351024135 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fi', { label: 'Tyyli', panelTitle: 'Muotoilujen tyylit', panelTitle1: 'Lohkojen tyylit', panelTitle2: 'Rivinsisäiset tyylit', panelTitle3: 'Objektien tyylit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fr-ca.js0000644000175000017500000000054414006075351024526 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fr-ca', { label: 'Styles', panelTitle: 'Styles de formattage', panelTitle1: 'Styles de block', panelTitle2: 'Styles en ligne', panelTitle3: 'Styles d\'objet' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ru.js0000644000175000017500000000062414006075351024163 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ru', { label: 'Стили', panelTitle: 'Стили форматирования', panelTitle1: 'Стили блока', panelTitle2: 'Стили элемента', panelTitle3: 'Стили объекта' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ka.js0000644000175000017500000000075514006075351024135 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ka', { label: 'სტილები', panelTitle: 'ფორმატირების სტილები', panelTitle1: 'არის სტილები', panelTitle2: 'თანდართული სტილები', panelTitle3: 'ობიექტის სტილები' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/zh-cn.js0000644000175000017500000000053714006075351024557 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'zh-cn', { label: '样式', panelTitle: '样式', panelTitle1: '块级元素样式', panelTitle2: '内联元素样式', panelTitle3: '对象元素样式' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/cs.js0000644000175000017500000000053714006075351024145 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'cs', { label: 'Styl', panelTitle: 'Formátovací styly', panelTitle1: 'Blokové styly', panelTitle2: 'Řádkové styly', panelTitle3: 'Objektové styly' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pt.js0000644000175000017500000000055114006075351024157 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'pt', { label: 'Estilos', panelTitle: 'Estilos de Formatação', panelTitle1: 'Estilos de bloco', panelTitle2: 'Estilos de Linha', panelTitle3: 'Estilos de Objeto' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pt-br.js0000644000175000017500000000056314006075351024563 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'pt-br', { label: 'Estilo', panelTitle: 'Estilos de Formatação', panelTitle1: 'Estilos de bloco', panelTitle2: 'Estilos de texto corrido', panelTitle3: 'Estilos de objeto' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/et.js0000644000175000017500000000053314006075351024144 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'et', { label: 'Stiil', panelTitle: 'Vormindusstiilid', panelTitle1: 'Blokkstiilid', panelTitle2: 'Reasisesed stiilid', panelTitle3: 'Objektistiilid' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/da.js0000644000175000017500000000055514006075351024124 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'da', { label: 'Typografi', panelTitle: 'Formattering på stylesheet', panelTitle1: 'Block typografi', panelTitle2: 'Inline typografi', panelTitle3: 'Object typografi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/af.js0000644000175000017500000000051314006075351024120 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'af', { label: 'Styl', panelTitle: 'Vormaat style', panelTitle1: 'Blok style', panelTitle2: 'Inlyn style', panelTitle3: 'Objek style' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hu.js0000644000175000017500000000054714006075351024155 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'hu', { label: 'Stílus', panelTitle: 'Formázási stílusok', panelTitle1: 'Blokk stílusok', panelTitle2: 'Inline stílusok', panelTitle3: 'Objektum stílusok' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sr.js0000644000175000017500000000060514006075351024160 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sr', { label: 'Стил', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/nl.js0000644000175000017500000000052414006075351024145 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'nl', { label: 'Stijl', panelTitle: 'Opmaakstijlen', panelTitle1: 'Blok stijlen', panelTitle2: 'Inline stijlen', panelTitle3: 'Object stijlen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/vi.js0000644000175000017500000000056114006075351024153 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'vi', { label: 'Kiểu', panelTitle: 'Phong cách định dạng', panelTitle1: 'Kiểu khối', panelTitle2: 'Kiểu trực tiếp', panelTitle3: 'Kiểu đối tượng' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ja.js0000644000175000017500000000060314006075351024124 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ja', { label: 'スタイル', panelTitle: 'スタイル', panelTitle1: 'ブロックスタイル', panelTitle2: 'インラインスタイル', panelTitle3: 'オブジェクトスタイル' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/id.js0000644000175000017500000000060114006075351024124 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'id', { label: 'Gaya', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-gb.js0000644000175000017500000000053214006075351024523 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en-gb', { label: 'Styles', panelTitle: 'Formatting Styles', panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sq.js0000644000175000017500000000054414006075351024161 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sq', { label: 'Stil', panelTitle: 'Stilet e Formatimit', panelTitle1: 'Stilet e Bllokut', panelTitle2: 'Stili i Brendshëm', panelTitle3: 'Stilet e Objektit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bn.js0000644000175000017500000000061714006075351024136 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'bn', { label: 'স্টাইল', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-au.js0000644000175000017500000000054514006075351024544 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en-au', { label: 'Styles', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ku.js0000644000175000017500000000061214006075351024151 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ku', { label: 'شێواز', panelTitle: 'شێوازی ڕازاندنەوە', panelTitle1: 'شێوازی خشت', panelTitle2: 'شێوازی ناوهێڵ', panelTitle3: 'شێوازی بەرکار' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ms.js0000644000175000017500000000060214006075351024150 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ms', { label: 'Stail', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fr.js0000644000175000017500000000054314006075351024144 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fr', { label: 'Styles', panelTitle: 'Styles de mise en page', panelTitle1: 'Styles de blocs', panelTitle2: 'Styles en ligne', panelTitle3: 'Styles d\'objet' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bs.js0000644000175000017500000000060114006075351024134 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'stylescombo', 'bs', { label: 'Stil', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/panel/0000755000175000017500000000000014006075351021010 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/panel/plugin.js0000644000175000017500000002442714006075351022655 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { CKEDITOR.plugins.add( 'panel', { beforeInit: function( editor ) { editor.ui.addHandler( CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler ); } } ); /** * Panel UI element. * * @readonly * @property {String} [='panel'] * @member CKEDITOR */ CKEDITOR.UI_PANEL = 'panel'; /** * @class * @constructor Creates a panel class instance. * @param {CKEDITOR.dom.document} document * @param {Object} definition */ CKEDITOR.ui.panel = function( document, definition ) { // Copy all definition properties to this object. if ( definition ) CKEDITOR.tools.extend( this, definition ); // Set defaults. CKEDITOR.tools.extend( this, { className: '', css: [] } ); this.id = CKEDITOR.tools.getNextId(); this.document = document; this.isFramed = this.forceIFrame || this.css.length; this._ = { blocks: {} }; }; /** * Represents panel handler object. * * @class * @singleton * @extends CKEDITOR.ui.handlerDefinition */ CKEDITOR.ui.panel.handler = { /** * Transforms a panel definition in a {@link CKEDITOR.ui.panel} instance. * * @param {Object} definition * @returns {CKEDITOR.ui.panel} */ create: function( definition ) { return new CKEDITOR.ui.panel( definition ); } }; var panelTpl = CKEDITOR.addTemplate( 'panel', '' ); var frameTpl = CKEDITOR.addTemplate( 'panel-frame', '' ); var frameDocTpl = CKEDITOR.addTemplate( 'panel-frame-inner', '' + '' + '{css}' + '' + '<\/html>' ); /** @class CKEDITOR.ui.panel */ CKEDITOR.ui.panel.prototype = { /** * Renders the combo. * * @param {CKEDITOR.editor} editor The editor instance which this button is * to be used by. * @param {Array} [output] The output array to which append the HTML relative * to this button. */ render: function( editor, output ) { this.getHolderElement = function() { var holder = this._.holder; if ( !holder ) { if ( this.isFramed ) { var iframe = this.document.getById( this.id + '_frame' ), parentDiv = iframe.getParent(), doc = iframe.getFrameDocument(); // Make it scrollable on iOS. (#8308) CKEDITOR.env.iOS && parentDiv.setStyles( { 'overflow': 'scroll', '-webkit-overflow-scrolling': 'touch' } ); var onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function() { this.isLoaded = true; if ( this.onLoad ) this.onLoad(); }, this ) ); doc.write( frameDocTpl.output( CKEDITOR.tools.extend( { css: CKEDITOR.tools.buildStyleHtml( this.css ), onload: 'window.parent.CKEDITOR.tools.callFunction(' + onLoad + ');' }, data ) ) ); var win = doc.getWindow(); // Register the CKEDITOR global. win.$.CKEDITOR = CKEDITOR; // Arrow keys for scrolling is only preventable with 'keypress' event in Opera (#4534). doc.on( 'keydown', function( evt ) { var keystroke = evt.data.getKeystroke(), dir = this.document.getById( this.id ).getAttribute( 'dir' ); // Delegate key processing to block. if ( this._.onKeyDown && this._.onKeyDown( keystroke ) === false ) { evt.data.preventDefault(); return; } // ESC/ARROW-LEFT(ltr) OR ARROW-RIGHT(rtl) if ( keystroke == 27 || keystroke == ( dir == 'rtl' ? 39 : 37 ) ) { if ( this.onEscape && this.onEscape( keystroke ) === false ) evt.data.preventDefault(); } }, this ); holder = doc.getBody(); holder.unselectable(); CKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad ); } else { holder = this.document.getById( this.id ); } this._.holder = holder; } return holder; }; var data = { editorId: editor.id, id: this.id, langCode: editor.langCode, dir: editor.lang.dir, cls: this.className, frame: '', env: CKEDITOR.env.cssClass, 'z-index': editor.config.baseFloatZIndex + 1 }; if ( this.isFramed ) { // With IE, the custom domain has to be taken care at first, // for other browers, the 'src' attribute should be left empty to // trigger iframe's 'load' event. var src = CKEDITOR.env.air ? 'javascript:void(0)' : // jshint ignore:line CKEDITOR.env.ie ? 'javascript:void(function(){' + encodeURIComponent( // jshint ignore:line 'document.open();' + // In IE, the document domain must be set any time we call document.open(). '(' + CKEDITOR.tools.fixDomain + ')();' + 'document.close();' ) + '}())' : ''; data.frame = frameTpl.output( { id: this.id + '_frame', src: src } ); } var html = panelTpl.output( data ); if ( output ) output.push( html ); return html; }, /** * @todo */ addBlock: function( name, block ) { block = this._.blocks[ name ] = block instanceof CKEDITOR.ui.panel.block ? block : new CKEDITOR.ui.panel.block( this.getHolderElement(), block ); if ( !this._.currentBlock ) this.showBlock( name ); return block; }, /** * @todo */ getBlock: function( name ) { return this._.blocks[ name ]; }, /** * @todo */ showBlock: function( name ) { var blocks = this._.blocks, block = blocks[ name ], current = this._.currentBlock; // ARIA role works better in IE on the body element, while on the iframe // for FF. (#8864) var holder = !this.forceIFrame || CKEDITOR.env.ie ? this._.holder : this.document.getById( this.id + '_frame' ); if ( current ) current.hide(); this._.currentBlock = block; CKEDITOR.fire( 'ariaWidget', holder ); // Reset the focus index, so it will always go into the first one. block._.focusIndex = -1; this._.onKeyDown = block.onKeyDown && CKEDITOR.tools.bind( block.onKeyDown, block ); block.show(); return block; }, /** * @todo */ destroy: function() { this.element && this.element.remove(); } }; /** * @class * * @todo class and all methods */ CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass( { /** * Creates a block class instances. * * @constructor * @todo */ $: function( blockHolder, blockDefinition ) { this.element = blockHolder.append( blockHolder.getDocument().createElement( 'div', { attributes: { 'tabindex': -1, 'class': 'cke_panel_block' }, styles: { display: 'none' } } ) ); // Copy all definition properties to this object. if ( blockDefinition ) CKEDITOR.tools.extend( this, blockDefinition ); // Set the a11y attributes of this element ... this.element.setAttributes( { 'role': this.attributes.role || 'presentation', 'aria-label': this.attributes[ 'aria-label' ], 'title': this.attributes.title || this.attributes[ 'aria-label' ] } ); this.keys = {}; this._.focusIndex = -1; // Disable context menu for panels. this.element.disableContextMenu(); }, _: { /** * Mark the item specified by the index as current activated. */ markItem: function( index ) { if ( index == -1 ) return; var links = this.element.getElementsByTag( 'a' ); var item = links.getItem( this._.focusIndex = index ); // Safari need focus on the iframe window first(#3389), but we need // lock the blur to avoid hiding the panel. if ( CKEDITOR.env.webkit ) item.getDocument().getWindow().focus(); item.focus(); this.onMark && this.onMark( item ); } }, proto: { show: function() { this.element.setStyle( 'display', '' ); }, hide: function() { if ( !this.onHide || this.onHide.call( this ) !== true ) this.element.setStyle( 'display', 'none' ); }, onKeyDown: function( keystroke, noCycle ) { var keyAction = this.keys[ keystroke ]; switch ( keyAction ) { // Move forward. case 'next': var index = this._.focusIndex, links = this.element.getElementsByTag( 'a' ), link; while ( ( link = links.getItem( ++index ) ) ) { // Move the focus only if the element is marked with // the _cke_focus and it it's visible (check if it has // width). if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) { this._.focusIndex = index; link.focus(); break; } } // If no link was found, cycle and restart from the top. (#11125) if ( !link && !noCycle ) { this._.focusIndex = -1; return this.onKeyDown( keystroke, 1 ); } return false; // Move backward. case 'prev': index = this._.focusIndex; links = this.element.getElementsByTag( 'a' ); while ( index > 0 && ( link = links.getItem( --index ) ) ) { // Move the focus only if the element is marked with // the _cke_focus and it it's visible (check if it has // width). if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) { this._.focusIndex = index; link.focus(); break; } // Make sure link is null when the loop ends and nothing was // found (#11125). link = null; } // If no link was found, cycle and restart from the bottom. (#11125) if ( !link && !noCycle ) { this._.focusIndex = links.count(); return this.onKeyDown( keystroke, 1 ); } return false; case 'click': case 'mouseup': index = this._.focusIndex; link = index >= 0 && this.element.getElementsByTag( 'a' ).getItem( index ); if ( link ) link.$[ keyAction ] ? link.$[ keyAction ]() : link.$[ 'on' + keyAction ](); return false; } return true; } } } ); } )(); /** * Fired when a panel is added to the document. * * @event ariaWidget * @member CKEDITOR * @param {Object} data The element wrapping the panel. */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/floatingspace/0000755000175000017500000000000014006075351022530 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/floatingspace/plugin.js0000644000175000017500000003366714006075351024403 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { var win = CKEDITOR.document.getWindow(), pixelate = CKEDITOR.tools.cssLength; CKEDITOR.plugins.add( 'floatingspace', { init: function( editor ) { // Add listener with lower priority than that in themedui creator. // Thereby floatingspace will be created only if themedui wasn't used. editor.on( 'loaded', function() { attach( this ); }, null, null, 20 ); } } ); function scrollOffset( side ) { var pageOffset = side == 'left' ? 'pageXOffset' : 'pageYOffset', docScrollOffset = side == 'left' ? 'scrollLeft' : 'scrollTop'; return ( pageOffset in win.$ ) ? win.$[ pageOffset ] : CKEDITOR.document.$.documentElement[ docScrollOffset ]; } function attach( editor ) { var config = editor.config, // Get the HTML for the predefined spaces. topHtml = editor.fire( 'uiSpace', { space: 'top', html: '' } ).html, // Re-positioning of the space. layout = ( function() { // Mode indicates the vertical aligning mode. var mode, editable, spaceRect, editorRect, viewRect, spaceHeight, pageScrollX, // Allow minor adjustments of the float space from custom configs. dockedOffsetX = config.floatSpaceDockedOffsetX || 0, dockedOffsetY = config.floatSpaceDockedOffsetY || 0, pinnedOffsetX = config.floatSpacePinnedOffsetX || 0, pinnedOffsetY = config.floatSpacePinnedOffsetY || 0; // Update the float space position. function updatePos( pos, prop, val ) { floatSpace.setStyle( prop, pixelate( val ) ); floatSpace.setStyle( 'position', pos ); } // Change the current mode and update float space position accordingly. function changeMode( newMode ) { var editorPos = editable.getDocumentPosition(); switch ( newMode ) { case 'top': updatePos( 'absolute', 'top', editorPos.y - spaceHeight - dockedOffsetY ); break; case 'pin': updatePos( 'fixed', 'top', pinnedOffsetY ); break; case 'bottom': updatePos( 'absolute', 'top', editorPos.y + ( editorRect.height || editorRect.bottom - editorRect.top ) + dockedOffsetY ); break; } mode = newMode; } return function( evt ) { // #10112 Do not fail on editable-less editor. if ( !( editable = editor.editable() ) ) return; var show = ( evt && evt.name == 'focus' ); // Show up the space on focus gain. if ( show ) { floatSpace.show(); } editor.fire( 'floatingSpaceLayout', { show: show } ); // Reset the horizontal position for below measurement. floatSpace.removeStyle( 'left' ); floatSpace.removeStyle( 'right' ); // Compute the screen position from the TextRectangle object would // be very simple, even though the "width"/"height" property is not // available for all, it's safe to figure that out from the rest. // http://help.dottoro.com/ljgupwlp.php spaceRect = floatSpace.getClientRect(); editorRect = editable.getClientRect(); viewRect = win.getViewPaneSize(); spaceHeight = spaceRect.height; pageScrollX = scrollOffset( 'left' ); // We initialize it as pin mode. if ( !mode ) { mode = 'pin'; changeMode( 'pin' ); // Call for a refresh to the actual layout. layout( evt ); return; } // +------------------------ Viewport -+ \ // | | |-> floatSpaceDockedOffsetY // | ................................. | / // | | // | +------ Space -+ | // | | | | // | +--------------+ | // | +------------------ Editor -+ | // | | | | // if ( spaceHeight + dockedOffsetY <= editorRect.top ) changeMode( 'top' ); // +- - - - - - - - - Editor -+ // | | // +------------------------ Viewport -+ \ // | | | | |-> floatSpacePinnedOffsetY // | ................................. | / // | +------ Space -+ | | // | | | | | // | +--------------+ | | // | | | | // | +---------------------------+ | // +-----------------------------------+ // else if ( spaceHeight + dockedOffsetY > viewRect.height - editorRect.bottom ) changeMode( 'pin' ); // +- - - - - - - - - Editor -+ // | | // +------------------------ Viewport -+ \ // | | | | |-> floatSpacePinnedOffsetY // | ................................. | / // | | | | // | | | | // | +---------------------------+ | // | +------ Space -+ | // | | | | // | +--------------+ | // else changeMode( 'bottom' ); var mid = viewRect.width / 2, alignSide, offset; if ( config.floatSpacePreferRight ) { alignSide = 'right'; } else if ( editorRect.left > 0 && editorRect.right < viewRect.width && editorRect.width > spaceRect.width ) { alignSide = config.contentsLangDirection == 'rtl' ? 'right' : 'left'; } else { alignSide = mid - editorRect.left > editorRect.right - mid ? 'left' : 'right'; } // (#9769) If viewport width is less than space width, // make sure space never cross the left boundary of the viewport. // In other words: top-left corner of the space is always visible. if ( spaceRect.width > viewRect.width ) { alignSide = 'left'; offset = 0; } else { if ( alignSide == 'left' ) { // If the space rect fits into viewport, align it // to the left edge of editor: // // +------------------------ Viewport -+ // | | // | +------------- Space -+ | // | | | | // | +---------------------+ | // | +------------------ Editor -+ | // | | | | // if ( editorRect.left > 0 ) offset = editorRect.left; // If the left part of the editor is cut off by the left // edge of the viewport, stick the space to the viewport: // // +------------------------ Viewport -+ // | | // +---------------- Space -+ | // | | | // +------------------------+ | // +----|------------- Editor -+ | // | | | | // else offset = 0; } else { // If the space rect fits into viewport, align it // to the right edge of editor: // // +------------------------ Viewport -+ // | | // | +------------- Space -+ | // | | | | // | +---------------------+ | // | +------------------ Editor -+ | // | | | | // if ( editorRect.right < viewRect.width ) offset = viewRect.width - editorRect.right; // If the right part of the editor is cut off by the right // edge of the viewport, stick the space to the viewport: // // +------------------------ Viewport -+ // | | // | +------------- Space -+ // | | | // | +---------------------+ // | +-----------------|- Editor -+ // | | | | // else offset = 0; } // (#9769) Finally, stick the space to the opposite side of // the viewport when it's cut off horizontally on the left/right // side like below. // // This trick reveals cut off space in some edge cases and // hence it improves accessibility. // // +------------------------ Viewport -+ // | | // | +--------------------|-- Space -+ // | | | | // | +--------------------|----------+ // | +------- Editor -+ | // | | | | // // becomes: // // +------------------------ Viewport -+ // | | // | +----------------------- Space -+ // | | | // | +-------------------------------+ // | +------- Editor -+ | // | | | | // if ( offset + spaceRect.width > viewRect.width ) { alignSide = alignSide == 'left' ? 'right' : 'left'; offset = 0; } } // Pin mode is fixed, so don't include scroll-x. // (#9903) For mode is "top" or "bottom", add opposite scroll-x for right-aligned space. var scroll = mode == 'pin' ? 0 : alignSide == 'left' ? pageScrollX : -pageScrollX; floatSpace.setStyle( alignSide, pixelate( ( mode == 'pin' ? pinnedOffsetX : dockedOffsetX ) + offset + scroll ) ); }; } )(); if ( topHtml ) { var floatSpaceTpl = new CKEDITOR.template( '' + ( editor.title ? '{voiceLabel}' : ' ' ) + '
    ' + '' + '
    ' + '
    ' ), floatSpace = CKEDITOR.document.getBody().append( CKEDITOR.dom.element.createFromHtml( floatSpaceTpl.output( { content: topHtml, id: editor.id, langDir: editor.lang.dir, langCode: editor.langCode, name: editor.name, style: 'display:none;z-index:' + ( config.baseFloatZIndex - 1 ), topId: editor.ui.spaceId( 'top' ), voiceLabel: editor.title } ) ) ), // Use event buffers to reduce CPU load when tons of events are fired. changeBuffer = CKEDITOR.tools.eventsBuffer( 500, layout ), uiBuffer = CKEDITOR.tools.eventsBuffer( 100, layout ); // There's no need for the floatSpace to be selectable. floatSpace.unselectable(); // Prevent clicking on non-buttons area of the space from blurring editor. floatSpace.on( 'mousedown', function( evt ) { evt = evt.data; if ( !evt.getTarget().hasAscendant( 'a', 1 ) ) evt.preventDefault(); } ); editor.on( 'focus', function( evt ) { layout( evt ); editor.on( 'change', changeBuffer.input ); win.on( 'scroll', uiBuffer.input ); win.on( 'resize', uiBuffer.input ); } ); editor.on( 'blur', function() { floatSpace.hide(); editor.removeListener( 'change', changeBuffer.input ); win.removeListener( 'scroll', uiBuffer.input ); win.removeListener( 'resize', uiBuffer.input ); } ); editor.on( 'destroy', function() { win.removeListener( 'scroll', uiBuffer.input ); win.removeListener( 'resize', uiBuffer.input ); floatSpace.clearCustomData(); floatSpace.remove(); } ); // Handle initial focus. if ( editor.focusManager.hasFocus ) floatSpace.show(); // Register this UI space to the focus manager. editor.focusManager.add( floatSpace, 1 ); } } } )(); /** * Along with {@link #floatSpaceDockedOffsetY} it defines the * amount of offset (in pixels) between the float space and the editable left/right * boundaries when the space element is docked on either side of the editable. * * config.floatSpaceDockedOffsetX = 10; * * @cfg {Number} [floatSpaceDockedOffsetX=0] * @member CKEDITOR.config */ /** * Along with {@link #floatSpaceDockedOffsetX} it defines the * amount of offset (in pixels) between the float space and the editable top/bottom * boundaries when the space element is docked on either side of the editable. * * config.floatSpaceDockedOffsetY = 10; * * @cfg {Number} [floatSpaceDockedOffsetY=0] * @member CKEDITOR.config */ /** * Along with {@link #floatSpacePinnedOffsetY} it defines the * amount of offset (in pixels) between the float space and the viewport boundaries * when the space element is pinned. * * config.floatSpacePinnedOffsetX = 20; * * @cfg {Number} [floatSpacePinnedOffsetX=0] * @member CKEDITOR.config */ /** * Along with {@link #floatSpacePinnedOffsetX} it defines the * amount of offset (in pixels) between the float space and the viewport boundaries * when the space element is pinned. * * config.floatSpacePinnedOffsetY = 20; * * @cfg {Number} [floatSpacePinnedOffsetY=0] * @member CKEDITOR.config */ /** * Indicates that the float space should be aligned to the right side * of the editable area rather than to the left (if possible). * * config.floatSpacePreferRight = true; * * @since 4.5 * @cfg {Boolean} [floatSpacePreferRight=false] * @member CKEDITOR.config */ /** * Fired when the viewport or editor parameters change and the floating space needs to check and * eventually update its position and dimensions. * * @since 4.5 * @event floatingSpaceLayout * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor The editor instance. * @param data * @param {Boolean} data.show True if the float space should show up as a result of this event. */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/autolink/0000755000175000017500000000000014006075350021536 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/autolink/plugin.js0000644000175000017500000000225414006075350023375 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { 'use strict'; // Regex by Imme Emosol. var validUrlRegex = /^(https?|ftp):\/\/(-\.)?([^\s\/?\.#-]+\.?)+(\/[^\s]*)?[^\s\.,]$/ig, doubleQuoteRegex = /"/g; CKEDITOR.plugins.add( 'autolink', { requires: 'clipboard', init: function( editor ) { editor.on( 'paste', function( evt ) { var data = evt.data.dataValue; if ( evt.data.dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_INTERNAL ) { return; } // If we found "<" it means that most likely there's some tag and we don't want to touch it. if ( data.indexOf( '<' ) > -1 ) { return; } // #13419 data = data.replace( validUrlRegex , '$&' ); // If link was discovered, change the type to 'html'. This is important e.g. when pasting plain text in Chrome // where real type is correctly recognized. if ( data != evt.data.dataValue ) { evt.data.type = 'html'; } evt.data.dataValue = data; } ); } } ); } )();rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/0000755000175000017500000000000014006075351020631 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/find/plugin.js0000755000175000017500000000334614006075351022476 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.add( 'find', { requires: 'dialog', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'find,find-rtl,replace', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { var findCommand = editor.addCommand( 'find', new CKEDITOR.dialogCommand( 'find' ) ); findCommand.canUndo = false; findCommand.readOnly = 1; var replaceCommand = editor.addCommand( 'replace', new CKEDITOR.dialogCommand( 'replace' ) ); replaceCommand.canUndo = false; if ( editor.ui.addButton ) { editor.ui.addButton( 'Find', { label: editor.lang.find.find, command: 'find', toolbar: 'find,10' } ); editor.ui.addButton( 'Replace', { label: editor.lang.find.replace, command: 'replace', toolbar: 'find,20' } ); } CKEDITOR.dialog.add( 'find', this.path + 'dialogs/find.js' ); CKEDITOR.dialog.add( 'replace', this.path + 'dialogs/find.js' ); } } ); /** * Defines the style to be used to highlight results with the find dialog. * * // Highlight search results with blue on yellow. * config.find_highlight = { * element: 'span', * styles: { 'background-color': '#ff0', color: '#00f' } * }; * * @cfg * @member CKEDITOR.config */ CKEDITOR.config.find_highlight = { element: 'span', styles: { 'background-color': '#004', color: '#fff' } }; rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/dialogs/0000755000175000017500000000000014006075351022253 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/find/dialogs/find.js0000755000175000017500000005464214006075351023547 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { var isReplace; function findEvaluator( node ) { return node.type == CKEDITOR.NODE_TEXT && node.getLength() > 0 && ( !isReplace || !node.isReadOnly() ); } // Elements which break characters been considered as sequence. function nonCharactersBoundary( node ) { return !( node.type == CKEDITOR.NODE_ELEMENT && node.isBlockBoundary( CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$empty, CKEDITOR.dtd.$nonEditable ) ) ); } // Get the cursor object which represent both current character and it's dom // position thing. var cursorStep = function() { return { textNode: this.textNode, offset: this.offset, character: this.textNode ? this.textNode.getText().charAt( this.offset ) : null, hitMatchBoundary: this._.matchBoundary }; }; var pages = [ 'find', 'replace' ], fieldsMapping = [ [ 'txtFindFind', 'txtFindReplace' ], [ 'txtFindCaseChk', 'txtReplaceCaseChk' ], [ 'txtFindWordChk', 'txtReplaceWordChk' ], [ 'txtFindCyclic', 'txtReplaceCyclic' ] ]; // Synchronize corresponding filed values between 'replace' and 'find' pages. // @param {String} currentPageId The page id which receive values. function syncFieldsBetweenTabs( currentPageId ) { var sourceIndex, targetIndex, sourceField, targetField; sourceIndex = currentPageId === 'find' ? 1 : 0; targetIndex = 1 - sourceIndex; var i, l = fieldsMapping.length; for ( i = 0; i < l; i++ ) { sourceField = this.getContentElement( pages[ sourceIndex ], fieldsMapping[ i ][ sourceIndex ] ); targetField = this.getContentElement( pages[ targetIndex ], fieldsMapping[ i ][ targetIndex ] ); targetField.setValue( sourceField.getValue() ); } } function findDialog( editor, startupPage ) { // Style object for highlights: (#5018) // 1. Defined as full match style to avoid compromising ordinary text color styles. // 2. Must be apply onto inner-most text to avoid conflicting with ordinary text color styles visually. var highlightConfig = { attributes: { 'data-cke-highlight': 1 }, fullMatch: 1, ignoreReadonly: 1, childRule: function() { return 0; } }; var highlightStyle = new CKEDITOR.style( CKEDITOR.tools.extend( highlightConfig, editor.config.find_highlight, true ) ); // Iterator which walk through the specified range char by char. By // default the walking will not stop at the character boundaries, until // the end of the range is encountered. // @param { CKEDITOR.dom.range } range // @param {Boolean} matchWord Whether the walking will stop at character boundary. function characterWalker( range, matchWord ) { var self = this; var walker = new CKEDITOR.dom.walker( range ); walker.guard = matchWord ? nonCharactersBoundary : function( node ) { !nonCharactersBoundary( node ) && ( self._.matchBoundary = true ); }; walker.evaluator = findEvaluator; walker.breakOnFalse = 1; if ( range.startContainer.type == CKEDITOR.NODE_TEXT ) { this.textNode = range.startContainer; this.offset = range.startOffset - 1; } this._ = { matchWord: matchWord, walker: walker, matchBoundary: false }; } characterWalker.prototype = { next: function() { return this.move(); }, back: function() { return this.move( true ); }, move: function( rtl ) { var currentTextNode = this.textNode; // Already at the end of document, no more character available. if ( currentTextNode === null ) return cursorStep.call( this ); this._.matchBoundary = false; // There are more characters in the text node, step forward. if ( currentTextNode && rtl && this.offset > 0 ) { this.offset--; return cursorStep.call( this ); } else if ( currentTextNode && this.offset < currentTextNode.getLength() - 1 ) { this.offset++; return cursorStep.call( this ); } else { currentTextNode = null; // At the end of the text node, walking foward for the next. while ( !currentTextNode ) { currentTextNode = this._.walker[ rtl ? 'previous' : 'next' ].call( this._.walker ); // Stop searching if we're need full word match OR // already reach document end. if ( this._.matchWord && !currentTextNode || this._.walker._.end ) break; } // Found a fresh text node. this.textNode = currentTextNode; if ( currentTextNode ) this.offset = rtl ? currentTextNode.getLength() - 1 : 0; else this.offset = 0; } return cursorStep.call( this ); } }; /** * A range of cursors which represent a trunk of characters which try to * match, it has the same length as the pattern string. * * **Note:** This class isn't accessible from global scope. * * @private * @class CKEDITOR.plugins.find.characterRange * @constructor Creates a characterRange class instance. */ var characterRange = function( characterWalker, rangeLength ) { this._ = { walker: characterWalker, cursors: [], rangeLength: rangeLength, highlightRange: null, isMatched: 0 }; }; characterRange.prototype = { /** * Translate this range to {@link CKEDITOR.dom.range}. */ toDomRange: function() { var range = editor.createRange(); var cursors = this._.cursors; if ( cursors.length < 1 ) { var textNode = this._.walker.textNode; if ( textNode ) range.setStartAfter( textNode ); else return null; } else { var first = cursors[ 0 ], last = cursors[ cursors.length - 1 ]; range.setStart( first.textNode, first.offset ); range.setEnd( last.textNode, last.offset + 1 ); } return range; }, /** * Reflect the latest changes from dom range. */ updateFromDomRange: function( domRange ) { var cursor, walker = new characterWalker( domRange ); this._.cursors = []; do { cursor = walker.next(); if ( cursor.character ) this._.cursors.push( cursor ); } while ( cursor.character ); this._.rangeLength = this._.cursors.length; }, setMatched: function() { this._.isMatched = true; }, clearMatched: function() { this._.isMatched = false; }, isMatched: function() { return this._.isMatched; }, /** * Hightlight the current matched chunk of text. */ highlight: function() { // Do not apply if nothing is found. if ( this._.cursors.length < 1 ) return; // Remove the previous highlight if there's one. if ( this._.highlightRange ) this.removeHighlight(); // Apply the highlight. var range = this.toDomRange(), bookmark = range.createBookmark(); highlightStyle.applyToRange( range, editor ); range.moveToBookmark( bookmark ); this._.highlightRange = range; // Scroll the editor to the highlighted area. var element = range.startContainer; if ( element.type != CKEDITOR.NODE_ELEMENT ) element = element.getParent(); element.scrollIntoView(); // Update the character cursors. this.updateFromDomRange( range ); }, /** * Remove highlighted find result. */ removeHighlight: function() { if ( !this._.highlightRange ) return; var bookmark = this._.highlightRange.createBookmark(); highlightStyle.removeFromRange( this._.highlightRange, editor ); this._.highlightRange.moveToBookmark( bookmark ); this.updateFromDomRange( this._.highlightRange ); this._.highlightRange = null; }, isReadOnly: function() { if ( !this._.highlightRange ) return 0; return this._.highlightRange.startContainer.isReadOnly(); }, moveBack: function() { var retval = this._.walker.back(), cursors = this._.cursors; if ( retval.hitMatchBoundary ) this._.cursors = cursors = []; cursors.unshift( retval ); if ( cursors.length > this._.rangeLength ) cursors.pop(); return retval; }, moveNext: function() { var retval = this._.walker.next(), cursors = this._.cursors; // Clear the cursors queue if we've crossed a match boundary. if ( retval.hitMatchBoundary ) this._.cursors = cursors = []; cursors.push( retval ); if ( cursors.length > this._.rangeLength ) cursors.shift(); return retval; }, getEndCharacter: function() { var cursors = this._.cursors; if ( cursors.length < 1 ) return null; return cursors[ cursors.length - 1 ].character; }, getNextCharacterRange: function( maxLength ) { var lastCursor, nextRangeWalker, cursors = this._.cursors; if ( ( lastCursor = cursors[ cursors.length - 1 ] ) && lastCursor.textNode ) nextRangeWalker = new characterWalker( getRangeAfterCursor( lastCursor ) ); // In case it's an empty range (no cursors), figure out next range from walker (#4951). else nextRangeWalker = this._.walker; return new characterRange( nextRangeWalker, maxLength ); }, getCursors: function() { return this._.cursors; } }; // The remaining document range after the character cursor. function getRangeAfterCursor( cursor, inclusive ) { var range = editor.createRange(); range.setStart( cursor.textNode, ( inclusive ? cursor.offset : cursor.offset + 1 ) ); range.setEndAt( editor.editable(), CKEDITOR.POSITION_BEFORE_END ); return range; } // The document range before the character cursor. function getRangeBeforeCursor( cursor ) { var range = editor.createRange(); range.setStartAt( editor.editable(), CKEDITOR.POSITION_AFTER_START ); range.setEnd( cursor.textNode, cursor.offset ); return range; } var KMP_NOMATCH = 0, KMP_ADVANCED = 1, KMP_MATCHED = 2; // Examination the occurrence of a word which implement KMP algorithm. var kmpMatcher = function( pattern, ignoreCase ) { var overlap = [ -1 ]; if ( ignoreCase ) pattern = pattern.toLowerCase(); for ( var i = 0; i < pattern.length; i++ ) { overlap.push( overlap[ i ] + 1 ); while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) ) overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1; } this._ = { overlap: overlap, state: 0, ignoreCase: !!ignoreCase, pattern: pattern }; }; kmpMatcher.prototype = { feedCharacter: function( c ) { if ( this._.ignoreCase ) c = c.toLowerCase(); while ( true ) { if ( c == this._.pattern.charAt( this._.state ) ) { this._.state++; if ( this._.state == this._.pattern.length ) { this._.state = 0; return KMP_MATCHED; } return KMP_ADVANCED; } else if ( !this._.state ) return KMP_NOMATCH; else { this._.state = this._.overlap[this._.state]; } } return null; }, reset: function() { this._.state = 0; } }; var wordSeparatorRegex = /[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/; var isWordSeparator = function( c ) { if ( !c ) return true; var code = c.charCodeAt( 0 ); return ( code >= 9 && code <= 0xd ) || ( code >= 0x2000 && code <= 0x200a ) || wordSeparatorRegex.test( c ); }; var finder = { searchRange: null, matchRange: null, find: function( pattern, matchCase, matchWord, matchCyclic, highlightMatched, cyclicRerun ) { if ( !this.matchRange ) this.matchRange = new characterRange( new characterWalker( this.searchRange ), pattern.length ); else { this.matchRange.removeHighlight(); this.matchRange = this.matchRange.getNextCharacterRange( pattern.length ); } var matcher = new kmpMatcher( pattern, !matchCase ), matchState = KMP_NOMATCH, character = '%'; while ( character !== null ) { this.matchRange.moveNext(); while ( ( character = this.matchRange.getEndCharacter() ) ) { matchState = matcher.feedCharacter( character ); if ( matchState == KMP_MATCHED ) break; if ( this.matchRange.moveNext().hitMatchBoundary ) matcher.reset(); } if ( matchState == KMP_MATCHED ) { if ( matchWord ) { var cursors = this.matchRange.getCursors(), tail = cursors[ cursors.length - 1 ], head = cursors[ 0 ]; var rangeBefore = getRangeBeforeCursor( head ), rangeAfter = getRangeAfterCursor( tail ); // The word boundary checks requires to trim the text nodes. (#9036) rangeBefore.trim(); rangeAfter.trim(); var headWalker = new characterWalker( rangeBefore, true ), tailWalker = new characterWalker( rangeAfter, true ); if ( !( isWordSeparator( headWalker.back().character ) && isWordSeparator( tailWalker.next().character ) ) ) continue; } this.matchRange.setMatched(); if ( highlightMatched !== false ) this.matchRange.highlight(); return true; } } this.matchRange.clearMatched(); this.matchRange.removeHighlight(); // Clear current session and restart with the default search // range. // Re-run the finding once for cyclic.(#3517) if ( matchCyclic && !cyclicRerun ) { this.searchRange = getSearchRange( 1 ); this.matchRange = null; return arguments.callee.apply( this, Array.prototype.slice.call( arguments ).concat( [ true ] ) ); } return false; }, // Record how much replacement occurred toward one replacing. replaceCounter: 0, replace: function( dialog, pattern, newString, matchCase, matchWord, matchCyclic, isReplaceAll ) { isReplace = 1; // Successiveness of current replace/find. var result = 0; // 1. Perform the replace when there's already a match here. // 2. Otherwise perform the find but don't replace it immediately. if ( this.matchRange && this.matchRange.isMatched() && !this.matchRange._.isReplaced && !this.matchRange.isReadOnly() ) { // Turn off highlight for a while when saving snapshots. this.matchRange.removeHighlight(); var domRange = this.matchRange.toDomRange(); var text = editor.document.createText( newString ); if ( !isReplaceAll ) { // Save undo snaps before and after the replacement. var selection = editor.getSelection(); selection.selectRanges( [ domRange ] ); editor.fire( 'saveSnapshot' ); } domRange.deleteContents(); domRange.insertNode( text ); if ( !isReplaceAll ) { selection.selectRanges( [ domRange ] ); editor.fire( 'saveSnapshot' ); } this.matchRange.updateFromDomRange( domRange ); if ( !isReplaceAll ) this.matchRange.highlight(); this.matchRange._.isReplaced = true; this.replaceCounter++; result = 1; } else { result = this.find( pattern, matchCase, matchWord, matchCyclic, !isReplaceAll ); } isReplace = 0; return result; } }; // The range in which find/replace happened, receive from user // selection prior. function getSearchRange( isDefault ) { var searchRange, sel = editor.getSelection(), editable = editor.editable(); if ( sel && !isDefault ) { searchRange = sel.getRanges()[ 0 ].clone(); searchRange.collapse( true ); } else { searchRange = editor.createRange(); searchRange.setStartAt( editable, CKEDITOR.POSITION_AFTER_START ); } searchRange.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); return searchRange; } var lang = editor.lang.find; return { title: lang.title, resizable: CKEDITOR.DIALOG_RESIZE_NONE, minWidth: 350, minHeight: 170, buttons: [ // Close button only. CKEDITOR.dialog.cancelButton( editor, { label: editor.lang.common.close } ) ], contents: [ { id: 'find', label: lang.find, title: lang.find, accessKey: '', elements: [ { type: 'hbox', widths: [ '230px', '90px' ], children: [ { type: 'text', id: 'txtFindFind', label: lang.findWhat, isChanged: false, labelLayout: 'horizontal', accessKey: 'F' }, { type: 'button', id: 'btnFind', align: 'left', style: 'width:100%', label: lang.find, onClick: function() { var dialog = this.getDialog(); if ( !finder.find( dialog.getValueOf( 'find', 'txtFindFind' ), dialog.getValueOf( 'find', 'txtFindCaseChk' ), dialog.getValueOf( 'find', 'txtFindWordChk' ), dialog.getValueOf( 'find', 'txtFindCyclic' ) ) ) { alert( lang.notFoundMsg ); // jshint ignore:line } } } ] }, { type: 'fieldset', label: CKEDITOR.tools.htmlEncode( lang.findOptions ), style: 'margin-top:29px', children: [ { type: 'vbox', padding: 0, children: [ { type: 'checkbox', id: 'txtFindCaseChk', isChanged: false, label: lang.matchCase }, { type: 'checkbox', id: 'txtFindWordChk', isChanged: false, label: lang.matchWord }, { type: 'checkbox', id: 'txtFindCyclic', isChanged: false, 'default': true, label: lang.matchCyclic } ] } ] } ] }, { id: 'replace', label: lang.replace, accessKey: 'M', elements: [ { type: 'hbox', widths: [ '230px', '90px' ], children: [ { type: 'text', id: 'txtFindReplace', label: lang.findWhat, isChanged: false, labelLayout: 'horizontal', accessKey: 'F' }, { type: 'button', id: 'btnFindReplace', align: 'left', style: 'width:100%', label: lang.replace, onClick: function() { var dialog = this.getDialog(); if ( !finder.replace( dialog, dialog.getValueOf( 'replace', 'txtFindReplace' ), dialog.getValueOf( 'replace', 'txtReplace' ), dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ), dialog.getValueOf( 'replace', 'txtReplaceWordChk' ), dialog.getValueOf( 'replace', 'txtReplaceCyclic' ) ) ) { alert( lang.notFoundMsg ); // jshint ignore:line } } } ] }, { type: 'hbox', widths: [ '230px', '90px' ], children: [ { type: 'text', id: 'txtReplace', label: lang.replaceWith, isChanged: false, labelLayout: 'horizontal', accessKey: 'R' }, { type: 'button', id: 'btnReplaceAll', align: 'left', style: 'width:100%', label: lang.replaceAll, isChanged: false, onClick: function() { var dialog = this.getDialog(); finder.replaceCounter = 0; // Scope to full document. finder.searchRange = getSearchRange( 1 ); if ( finder.matchRange ) { finder.matchRange.removeHighlight(); finder.matchRange = null; } editor.fire( 'saveSnapshot' ); while ( finder.replace( dialog, dialog.getValueOf( 'replace', 'txtFindReplace' ), dialog.getValueOf( 'replace', 'txtReplace' ), dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ), dialog.getValueOf( 'replace', 'txtReplaceWordChk' ), false, true ) ) { } if ( finder.replaceCounter ) { alert( lang.replaceSuccessMsg.replace( /%1/, finder.replaceCounter ) ); // jshint ignore:line editor.fire( 'saveSnapshot' ); } else { alert( lang.notFoundMsg ); // jshint ignore:line } } } ] }, { type: 'fieldset', label: CKEDITOR.tools.htmlEncode( lang.findOptions ), children: [ { type: 'vbox', padding: 0, children: [ { type: 'checkbox', id: 'txtReplaceCaseChk', isChanged: false, label: lang.matchCase }, { type: 'checkbox', id: 'txtReplaceWordChk', isChanged: false, label: lang.matchWord }, { type: 'checkbox', id: 'txtReplaceCyclic', isChanged: false, 'default': true, label: lang.matchCyclic } ] } ] } ] } ], onLoad: function() { var dialog = this; // Keep track of the current pattern field in use. var patternField, wholeWordChkField; // Ignore initial page select on dialog show var isUserSelect = 0; this.on( 'hide', function() { isUserSelect = 0; } ); this.on( 'show', function() { isUserSelect = 1; } ); this.selectPage = CKEDITOR.tools.override( this.selectPage, function( originalFunc ) { return function( pageId ) { originalFunc.call( dialog, pageId ); var currPage = dialog._.tabs[ pageId ]; var patternFieldInput, patternFieldId, wholeWordChkFieldId; patternFieldId = pageId === 'find' ? 'txtFindFind' : 'txtFindReplace'; wholeWordChkFieldId = pageId === 'find' ? 'txtFindWordChk' : 'txtReplaceWordChk'; patternField = dialog.getContentElement( pageId, patternFieldId ); wholeWordChkField = dialog.getContentElement( pageId, wholeWordChkFieldId ); // Prepare for check pattern text filed 'keyup' event if ( !currPage.initialized ) { patternFieldInput = CKEDITOR.document.getById( patternField._.inputId ); currPage.initialized = true; } // Synchronize fields on tab switch. if ( isUserSelect ) syncFieldsBetweenTabs.call( this, pageId ); }; } ); }, onShow: function() { // Establish initial searching start position. finder.searchRange = getSearchRange(); // Fill in the find field with selected text. var selectedText = this.getParentEditor().getSelection().getSelectedText(), patternFieldId = ( startupPage == 'find' ? 'txtFindFind' : 'txtFindReplace' ); var field = this.getContentElement( startupPage, patternFieldId ); field.setValue( selectedText ); field.select(); this.selectPage( startupPage ); this[ ( startupPage == 'find' && this._.editor.readOnly ? 'hide' : 'show' ) + 'Page' ]( 'replace' ); }, onHide: function() { var range; if ( finder.matchRange && finder.matchRange.isMatched() ) { finder.matchRange.removeHighlight(); editor.focus(); range = finder.matchRange.toDomRange(); if ( range ) editor.getSelection().selectRanges( [ range ] ); } // Clear current session before dialog close delete finder.matchRange; }, onFocus: function() { if ( startupPage == 'replace' ) return this.getContentElement( 'replace', 'txtFindReplace' ); else return this.getContentElement( 'find', 'txtFindFind' ); } }; } CKEDITOR.dialog.add( 'find', function( editor ) { return findDialog( editor, 'find' ); } ); CKEDITOR.dialog.add( 'replace', function( editor ) { return findDialog( editor, 'replace' ); } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/0000755000175000017500000000000014006075351021552 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/bg.js0000644000175000017500000000132014006075351022474 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'bg', { find: 'Търсене', findOptions: 'Find Options', findWhat: 'Търси за:', matchCase: 'Съвпадение', matchCyclic: 'Циклично съвпадение', matchWord: 'Съвпадение с дума', notFoundMsg: 'Указаният текст не е намерен.', replace: 'Препокриване', replaceAll: 'Препокрий всички', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Препокрива с:', title: 'Търсене и препокриване' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/cy.js0000644000175000017500000000112214006075351022517 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'cy', { find: 'Chwilio', findOptions: 'Opsiynau Chwilio', findWhat: 'Chwilio\'r term:', matchCase: 'Cydweddu\'r cas', matchCyclic: 'Cydweddu\'n gylchol', matchWord: 'Cydweddu gair cyfan', notFoundMsg: 'Nid oedd y testun wedi\'i ddarganfod.', replace: 'Amnewid Un', replaceAll: 'Amnewid Pob', replaceSuccessMsg: 'Amnewidiwyd %1 achlysur.', replaceWith: 'Amnewid gyda:', title: 'Chwilio ac Amnewid' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/no.js0000644000175000017500000000111214006075351022517 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'no', { find: 'Søk', findOptions: 'Søkealternativer', findWhat: 'Søk etter:', matchCase: 'Skill mellom store og små bokstaver', matchCyclic: 'Søk i hele dokumentet', matchWord: 'Bare hele ord', notFoundMsg: 'Fant ikke søketeksten.', replace: 'Erstatt', replaceAll: 'Erstatt alle', replaceSuccessMsg: '%1 tilfelle(r) erstattet.', replaceWith: 'Erstatt med:', title: 'Søk og erstatt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/hr.js0000644000175000017500000000111614006075351022520 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'hr', { find: 'Pronađi', findOptions: 'Opcije traženja', findWhat: 'Pronađi:', matchCase: 'Usporedi mala/velika slova', matchCyclic: 'Usporedi kružno', matchWord: 'Usporedi cijele riječi', notFoundMsg: 'Traženi tekst nije pronađen.', replace: 'Zamijeni', replaceAll: 'Zamijeni sve', replaceSuccessMsg: 'Zamijenjeno %1 pojmova.', replaceWith: 'Zamijeni s:', title: 'Pronađi i zamijeni' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/th.js0000644000175000017500000000142014006075351022520 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'th', { find: 'ค้นหา', findOptions: 'Find Options', findWhat: 'ค้นหาคำว่า:', matchCase: 'ตัวโหญ่-เล็ก ต้องตรงกัน', matchCyclic: 'Match cyclic', matchWord: 'ต้องตรงกันทุกคำ', notFoundMsg: 'ไม่พบคำที่ค้นหา.', replace: 'ค้นหาและแทนที่', replaceAll: 'แทนที่ทั้งหมดที่พบ', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'แทนที่ด้วย:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ar.js0000644000175000017500000000125414006075351022514 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ar', { find: 'بحث', findOptions: 'Find Options', findWhat: 'البحث بـ:', matchCase: 'مطابقة حالة الأحرف', matchCyclic: 'مطابقة دورية', matchWord: 'مطابقة بالكامل', notFoundMsg: 'لم يتم العثور على النص المحدد.', replace: 'إستبدال', replaceAll: 'إستبدال الكل', replaceSuccessMsg: 'تم استبدال 1% من الحالات ', replaceWith: 'إستبدال بـ:', title: 'بحث واستبدال' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/sk.js0000644000175000017500000000114614006075351022527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'sk', { find: 'Hľadať', findOptions: 'Nájsť možnosti', findWhat: 'Čo hľadať:', matchCase: 'Rozlišovať malé a veľké písmená', matchCyclic: 'Cykliť zhodu', matchWord: 'Len celé slová', notFoundMsg: 'Hľadaný text nebol nájdený.', replace: 'Nahradiť', replaceAll: 'Nahradiť všetko', replaceSuccessMsg: '%1 výskyt(ov) nahradených.', replaceWith: 'Čím nahradiť:', title: 'Nájsť a nahradiť' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ro.js0000644000175000017500000000120114006075351022522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ro', { find: 'Găseşte', findOptions: 'Find Options', findWhat: 'Găseşte:', matchCase: 'Deosebeşte majuscule de minuscule (Match case)', matchCyclic: 'Potrivește ciclic', matchWord: 'Doar cuvintele întregi', notFoundMsg: 'Textul specificat nu a fost găsit.', replace: 'Înlocuieşte', replaceAll: 'Înlocuieşte tot', replaceSuccessMsg: '%1 căutări înlocuite.', replaceWith: 'Înlocuieşte cu:', title: 'Găseşte şi înlocuieşte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/en-ca.js0000644000175000017500000000106214006075351023072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'en-ca', { find: 'Find', findOptions: 'Find Options', findWhat: 'Find what:', matchCase: 'Match case', matchCyclic: 'Match cyclic', matchWord: 'Match whole word', notFoundMsg: 'The specified text was not found.', replace: 'Replace', replaceAll: 'Replace All', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Replace with:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ug.js0000644000175000017500000000143014006075351022521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ug', { find: 'ئىزدە', findOptions: 'ئىزدەش تاللانمىسى', findWhat: 'ئىزدە:', matchCase: 'چوڭ كىچىك ھەرپنى پەرقلەندۈر', matchCyclic: 'ئايلانما ماسلىشىش', matchWord: 'پۈتۈن سۆز ماسلىشىش', notFoundMsg: 'بەلگىلەنگەن تېكىستنى تاپالمىدى', replace: 'ئالماشتۇر', replaceAll: 'ھەممىنى ئالماشتۇر', replaceSuccessMsg: 'جەمئى %1 جايدىكى ئالماشتۇرۇش تاماملاندى', replaceWith: 'ئالماشتۇر:', title: 'ئىزدەپ ئالماشتۇر' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/el.js0000644000175000017500000000150414006075351022510 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'el', { find: 'Εύρεση', findOptions: 'Επιλογές Εύρεσης', findWhat: 'Εύρεση για:', matchCase: 'Ταίριασμα πεζών/κεφαλαίων', matchCyclic: 'Αναδρομική εύρεση', matchWord: 'Εύρεση μόνο πλήρων λέξεων', notFoundMsg: 'Το κείμενο δεν βρέθηκε.', replace: 'Αντικατάσταση', replaceAll: 'Αντικατάσταση Όλων', replaceSuccessMsg: 'Ο(ι) όρος(-οι) αντικαταστήθηκε(-αν) %1 φορές.', replaceWith: 'Αντικατάσταση με:', title: 'Εύρεση και Αντικατάσταση' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/de.js0000644000175000017500000000113014006075351022473 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'de', { find: 'Suchen', findOptions: 'Suchoptionen', findWhat: 'Suche nach:', matchCase: 'Groß-/Kleinschreibung beachten', matchCyclic: 'Zyklische Suche', matchWord: 'Nur ganze Worte suchen', notFoundMsg: 'Der angegebene Text wurde nicht gefunden.', replace: 'Ersetzen', replaceAll: 'Alle ersetzen', replaceSuccessMsg: '%1 Vorkommen ersetzt.', replaceWith: 'Ersetze mit:', title: 'Suchen und Ersetzen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/uk.js0000644000175000017500000000132314006075351022526 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'uk', { find: 'Пошук', findOptions: 'Параметри Пошуку', findWhat: 'Шукати:', matchCase: 'Враховувати регістр', matchCyclic: 'Циклічна заміна', matchWord: 'Збіг цілих слів', notFoundMsg: 'Вказаний текст не знайдено.', replace: 'Заміна', replaceAll: 'Замінити все', replaceSuccessMsg: '%1 співпадінь(ня) замінено.', replaceWith: 'Замінити на:', title: 'Знайти і замінити' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/sr-latn.js0000644000175000017500000000110114006075351023461 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'sr-latn', { find: 'Pretraga', findOptions: 'Find Options', findWhat: 'Pronadi:', matchCase: 'Razlikuj mala i velika slova', matchCyclic: 'Match cyclic', matchWord: 'Uporedi cele reci', notFoundMsg: 'Traženi tekst nije pronađen.', replace: 'Zamena', replaceAll: 'Zameni sve', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Zameni sa:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/km.js0000644000175000017500000000163114006075351022520 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'km', { find: 'ស្វែងរក', findOptions: 'ជម្រើស​ស្វែង​រក', findWhat: 'ស្វែងរកអ្វី:', matchCase: 'ករណី​ដំណូច', matchCyclic: 'ត្រូវ​នឹង cyclic', matchWord: 'ដូច​នឹង​ពាក្យ​ទាំង​មូល', notFoundMsg: 'រក​មិន​ឃើញ​ពាក្យ​ដែល​បាន​បញ្ជាក់។', replace: 'ជំនួស', replaceAll: 'ជំនួសទាំងអស់', replaceSuccessMsg: 'ការ​ជំនួស​ចំនួន %1 បាន​កើត​ឡើង។', replaceWith: 'ជំនួសជាមួយ:', title: 'រក​និង​ជំនួស' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/eu.js0000644000175000017500000000111214006075351022514 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'eu', { find: 'Bilatu', findOptions: 'Find Options', findWhat: 'Zer bilatu:', matchCase: 'Maiuskula/minuskula', matchCyclic: 'Bilaketa ziklikoa', matchWord: 'Esaldi osoa bilatu', notFoundMsg: 'Idatzitako testua ez da topatu.', replace: 'Ordezkatu', replaceAll: 'Ordeztu Guztiak', replaceSuccessMsg: 'Zenbat aldiz ordeztua: %1', replaceWith: 'Zerekin ordeztu:', title: 'Bilatu eta Ordeztu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/fa.js0000644000175000017500000000137714006075351022506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'fa', { find: 'جستجو', findOptions: 'گزینه​های جستجو', findWhat: 'چه چیز را مییابید:', matchCase: 'همسانی در بزرگی و کوچکی نویسه​ها', matchCyclic: 'همسانی با چرخه', matchWord: 'همسانی با واژهٴ کامل', notFoundMsg: 'متن موردنظر یافت نشد.', replace: 'جایگزینی', replaceAll: 'جایگزینی همهٴ یافته​ها', replaceSuccessMsg: '%1 رخداد جایگزین شد.', replaceWith: 'جایگزینی با:', title: 'جستجو و جایگزینی' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/si.js0000644000175000017500000000133714006075351022527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'si', { find: 'Find', // MISSING findOptions: 'Find Options', // MISSING findWhat: 'Find what:', // MISSING matchCase: 'Match case', // MISSING matchCyclic: 'Match cyclic', // MISSING matchWord: 'Match whole word', // MISSING notFoundMsg: 'The specified text was not found.', // MISSING replace: 'හිලව් කිරීම', replaceAll: 'සියල්ලම හිලව් කරන්න', replaceSuccessMsg: '%1 occurrence(s) replaced.', // MISSING replaceWith: 'Replace with:', // MISSING title: 'Find and Replace' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/en.js0000644000175000017500000000105714006075351022515 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'en', { find: 'Find', findOptions: 'Find Options', findWhat: 'Find what:', matchCase: 'Match case', matchCyclic: 'Match cyclic', matchWord: 'Match whole word', notFoundMsg: 'The specified text was not found.', replace: 'Replace', replaceAll: 'Replace All', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Replace with:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/he.js0000644000175000017500000000132214006075351022502 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'he', { find: 'חיפוש', findOptions: 'אפשרויות חיפוש', findWhat: 'חיפוש מחרוזת:', matchCase: 'הבחנה בין אותיות רשיות לקטנות (Case)', matchCyclic: 'התאמה מחזורית', matchWord: 'התאמה למילה המלאה', notFoundMsg: 'הטקסט המבוקש לא נמצא.', replace: 'החלפה', replaceAll: 'החלפה בכל העמוד', replaceSuccessMsg: '%1 טקסטים הוחלפו.', replaceWith: 'החלפה במחרוזת:', title: 'חיפוש והחלפה' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/lt.js0000644000175000017500000000117014006075351022526 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'lt', { find: 'Rasti', findOptions: 'Paieškos nustatymai', findWhat: 'Surasti tekstą:', matchCase: 'Skirti didžiąsias ir mažąsias raides', matchCyclic: 'Sutampantis cikliškumas', matchWord: 'Atitikti pilną žodį', notFoundMsg: 'Nurodytas tekstas nerastas.', replace: 'Pakeisti', replaceAll: 'Pakeisti viską', replaceSuccessMsg: '%1 sutapimas(ų) buvo pakeisti.', replaceWith: 'Pakeisti tekstu:', title: 'Surasti ir pakeisti' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/lv.js0000644000175000017500000000112114006075351022524 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'lv', { find: 'Meklēt', findOptions: 'Meklēt uzstādījumi', findWhat: 'Meklēt:', matchCase: 'Reģistrjūtīgs', matchCyclic: 'Sakrist cikliski', matchWord: 'Jāsakrīt pilnībā', notFoundMsg: 'Norādītā frāze netika atrasta.', replace: 'Nomainīt', replaceAll: 'Aizvietot visu', replaceSuccessMsg: '%1 gadījums(i) aizvietoti', replaceWith: 'Nomainīt uz:', title: 'Meklēt un aizvietot' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/eo.js0000644000175000017500000000112114006075351022506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'eo', { find: 'Serĉi', findOptions: 'Opcioj pri Serĉado', findWhat: 'Serĉi:', matchCase: 'Kongruigi Usklecon', matchCyclic: 'Cikla Serĉado', matchWord: 'Tuta Vorto', notFoundMsg: 'La celteksto ne estas trovita.', replace: 'Anstataŭigi', replaceAll: 'Anstataŭigi Ĉion', replaceSuccessMsg: '%1 anstataŭigita(j) apero(j).', replaceWith: 'Anstataŭigi per:', title: 'Serĉi kaj Anstataŭigi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ca.js0000644000175000017500000000116614006075351022477 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ca', { find: 'Cerca', findOptions: 'Opcions de Cerca', findWhat: 'Cerca el:', matchCase: 'Distingeix majúscules/minúscules', matchCyclic: 'Coincidència cíclica', matchWord: 'Només paraules completes', notFoundMsg: 'El text especificat no s\'ha trobat.', replace: 'Reemplaça', replaceAll: 'Reemplaça-ho tot', replaceSuccessMsg: '%1 ocurrència/es reemplaçada/es.', replaceWith: 'Reemplaça amb:', title: 'Cerca i reemplaça' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/hi.js0000644000175000017500000000145014006075351022510 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'hi', { find: 'खोजें', findOptions: 'Find Options', findWhat: 'यह खोजें:', matchCase: 'केस मिलायें', matchCyclic: 'Match cyclic', matchWord: 'पूरा शब्द मिलायें', notFoundMsg: 'आपके द्वारा दिया गया टेक्स्ट नहीं मिला', replace: 'रीप्लेस', replaceAll: 'सभी रिप्लेस करें', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'इससे रिप्लेस करें:', title: 'खोजें और बदलें' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/mk.js0000644000175000017500000000105714006075351022522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'mk', { find: 'Find', findOptions: 'Find Options', findWhat: 'Find what:', matchCase: 'Match case', matchCyclic: 'Match cyclic', matchWord: 'Match whole word', notFoundMsg: 'The specified text was not found.', replace: 'Replace', replaceAll: 'Replace All', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Replace with:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/mn.js0000644000175000017500000000124214006075351022521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'mn', { find: 'Хайх', findOptions: 'Хайх сонголтууд', findWhat: 'Хайх үг/үсэг:', matchCase: 'Тэнцэх төлөв', matchCyclic: 'Match cyclic', matchWord: 'Тэнцэх бүтэн үг', notFoundMsg: 'Хайсан бичвэрийг олсонгүй.', replace: 'Орлуулах', replaceAll: 'Бүгдийг нь солих', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Солих үг:', title: 'Хайж орлуулах' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/gl.js0000644000175000017500000000116214006075351022512 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'gl', { find: 'Buscar', findOptions: 'Buscar opcións', findWhat: 'Texto a buscar:', matchCase: 'Coincidir Mai./min.', matchCyclic: 'Coincidencia cíclica', matchWord: 'Coincidencia coa palabra completa', notFoundMsg: 'Non se atopou o texto indicado.', replace: 'Substituir', replaceAll: 'Substituír todo', replaceSuccessMsg: '%1 concorrencia(s) substituída(s).', replaceWith: 'Substituír con:', title: 'Buscar e substituír' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ko.js0000644000175000017500000000113714006075351022523 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ko', { find: '찾기', findOptions: '찾기 조건', findWhat: '찾을 내용:', matchCase: '대소문자 구분', matchCyclic: '되돌이 검색', matchWord: '온전한 단어', notFoundMsg: '문자열을 찾을 수 없습니다.', replace: '바꾸기', replaceAll: '모두 바꾸기', replaceSuccessMsg: '%1개의 항목이 바뀌었습니다.', replaceWith: '바꿀 내용:', title: '찾기 및 바꾸기' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/zh.js0000644000175000017500000000110114006075351022522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'zh', { find: '尋找', findOptions: '尋找選項', findWhat: '尋找目標:', matchCase: '大小寫須相符', matchCyclic: '循環搜尋', matchWord: '全字拼寫須相符', notFoundMsg: '找不到指定的文字。', replace: '取代', replaceAll: '全部取代', replaceSuccessMsg: '已取代 %1 個指定項目。', replaceWith: '取代成:', title: '尋找及取代' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/es.js0000644000175000017500000000121614006075351022517 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'es', { find: 'Buscar', findOptions: 'Opciones de búsqueda', findWhat: 'Texto a buscar:', matchCase: 'Coincidir may/min', matchCyclic: 'Buscar en todo el contenido', matchWord: 'Coincidir toda la palabra', notFoundMsg: 'El texto especificado no ha sido encontrado.', replace: 'Reemplazar', replaceAll: 'Reemplazar Todo', replaceSuccessMsg: 'La expresión buscada ha sido reemplazada %1 veces.', replaceWith: 'Reemplazar con:', title: 'Buscar y Reemplazar' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/is.js0000644000175000017500000000113114006075351022517 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'is', { find: 'Leita', findOptions: 'Find Options', findWhat: 'Leita að:', matchCase: 'Gera greinarmun á¡ há¡- og lágstöfum', matchCyclic: 'Match cyclic', matchWord: 'Aðeins heil orð', notFoundMsg: 'Leitartexti fannst ekki!', replace: 'Skipta út', replaceAll: 'Skipta út allsstaðar', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Skipta út fyrir:', title: 'Finna og skipta' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/fo.js0000644000175000017500000000110514006075351022511 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'fo', { find: 'Leita', findOptions: 'Finn møguleikar', findWhat: 'Finn:', matchCase: 'Munur á stórum og smáum bókstavum', matchCyclic: 'Match cyclic', matchWord: 'Bert heil orð', notFoundMsg: 'Leititeksturin varð ikki funnin', replace: 'Yvirskriva', replaceAll: 'Yvirskriva alt', replaceSuccessMsg: '%1 úrslit broytt.', replaceWith: 'Yvirskriva við:', title: 'Finn og broyt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/tt.js0000644000175000017500000000150614006075351022541 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'tt', { find: 'Эзләү', findOptions: 'Эзләү көйләүләре', findWhat: 'Нәрсә эзләргә:', matchCase: 'Баш һәм юл хәрефләрен исәпкә алу', matchCyclic: 'Кабатлап эзләргә', matchWord: 'Сүзләрне тулысынча гына эзләү', notFoundMsg: 'Эзләнгән текст табылмады.', replace: 'Алмаштыру', replaceAll: 'Барысын да алмаштыру', replaceSuccessMsg: '%1 урында(ларда) алмаштырылган.', replaceWith: 'Нәрсәгә алмаштыру:', title: 'Эзләп табу һәм алмаштыру' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/it.js0000644000175000017500000000113214006075351022521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'it', { find: 'Trova', findOptions: 'Opzioni di ricerca', findWhat: 'Trova:', matchCase: 'Maiuscole/minuscole', matchCyclic: 'Ricerca ciclica', matchWord: 'Solo parole intere', notFoundMsg: 'L\'elemento cercato non è stato trovato.', replace: 'Sostituisci', replaceAll: 'Sostituisci tutto', replaceSuccessMsg: '%1 occorrenza(e) sostituite.', replaceWith: 'Sostituisci con:', title: 'Cerca e Sostituisci' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/sv.js0000644000175000017500000000106314006075351022540 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'sv', { find: 'Sök', findOptions: 'Sökalternativ', findWhat: 'Sök efter:', matchCase: 'Skiftläge', matchCyclic: 'Matcha cykliska', matchWord: 'Inkludera hela ord', notFoundMsg: 'Angiven text kunde ej hittas.', replace: 'Ersätt', replaceAll: 'Ersätt alla', replaceSuccessMsg: '%1 förekomst(er) ersatta.', replaceWith: 'Ersätt med:', title: 'Sök och ersätt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/gu.js0000644000175000017500000000147614006075351022533 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'gu', { find: 'શોધવું', findOptions: 'વીકલ્પ શોધો', findWhat: 'આ શોધો', matchCase: 'કેસ સરખા રાખો', matchCyclic: 'સરખાવવા બધા', matchWord: 'બઘા શબ્દ સરખા રાખો', notFoundMsg: 'તમે શોધેલી ટેક્સ્ટ નથી મળી', replace: 'રિપ્લેસ/બદલવું', replaceAll: 'બઘા બદલી ', replaceSuccessMsg: '%1 ફેરફારો બાદલાયા છે.', replaceWith: 'આનાથી બદલો', title: 'શોધવું અને બદલવું' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/tr.js0000644000175000017500000000114414006075351022535 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'tr', { find: 'Bul', findOptions: 'Seçenekleri Bul', findWhat: 'Aranan:', matchCase: 'Büyük/küçük harf duyarlı', matchCyclic: 'Eşleşen döngü', matchWord: 'Kelimenin tamamı uysun', notFoundMsg: 'Belirtilen yazı bulunamadı.', replace: 'Değiştir', replaceAll: 'Tümünü Değiştir', replaceSuccessMsg: '%1 bulunanlardan değiştirildi.', replaceWith: 'Bununla değiştir:', title: 'Bul ve Değiştir' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/pl.js0000644000175000017500000000112614006075351022523 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'pl', { find: 'Znajdź', findOptions: 'Opcje wyszukiwania', findWhat: 'Znajdź:', matchCase: 'Uwzględnij wielkość liter', matchCyclic: 'Cykliczne dopasowanie', matchWord: 'Całe słowa', notFoundMsg: 'Nie znaleziono szukanego hasła.', replace: 'Zamień', replaceAll: 'Zamień wszystko', replaceSuccessMsg: '%1 wystąpień zastąpionych.', replaceWith: 'Zastąp przez:', title: 'Znajdź i zamień' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/nb.js0000644000175000017500000000111214006075351022502 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'nb', { find: 'Søk', findOptions: 'Søkealternativer', findWhat: 'Søk etter:', matchCase: 'Skill mellom store og små bokstaver', matchCyclic: 'Søk i hele dokumentet', matchWord: 'Bare hele ord', notFoundMsg: 'Fant ikke søketeksten.', replace: 'Erstatt', replaceAll: 'Erstatt alle', replaceSuccessMsg: '%1 tilfelle(r) erstattet.', replaceWith: 'Erstatt med:', title: 'Søk og erstatt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/sl.js0000644000175000017500000000112414006075351022524 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'sl', { find: 'Najdi', findOptions: 'Find Options', findWhat: 'Najdi:', matchCase: 'Razlikuj velike in male črke', matchCyclic: 'Primerjaj znake v cirilici', matchWord: 'Samo cele besede', notFoundMsg: 'Navedeno besedilo ni bilo najdeno.', replace: 'Zamenjaj', replaceAll: 'Zamenjaj vse', replaceSuccessMsg: '%1 pojavitev je bilo zamenjano.', replaceWith: 'Zamenjaj z:', title: 'Najdi in zamenjaj' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/fi.js0000644000175000017500000000106414006075351022507 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'fi', { find: 'Etsi', findOptions: 'Hakuasetukset', findWhat: 'Etsi mitä:', matchCase: 'Sama kirjainkoko', matchCyclic: 'Kierrä ympäri', matchWord: 'Koko sana', notFoundMsg: 'Etsittyä tekstiä ei löytynyt.', replace: 'Korvaa', replaceAll: 'Korvaa kaikki', replaceSuccessMsg: '%1 esiintymä(ä) korvattu.', replaceWith: 'Korvaa tällä:', title: 'Etsi ja korvaa' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/fr-ca.js0000644000175000017500000000111614006075351023077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'fr-ca', { find: 'Rechercher', findOptions: 'Options de recherche', findWhat: 'Rechercher:', matchCase: 'Respecter la casse', matchCyclic: 'Recherche cyclique', matchWord: 'Mot entier', notFoundMsg: 'Le texte indiqué est introuvable.', replace: 'Remplacer', replaceAll: 'Tout remplacer', replaceSuccessMsg: '%1 remplacements.', replaceWith: 'Remplacer par:', title: 'Rechercher et remplacer' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ru.js0000644000175000017500000000130514006075351022535 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ru', { find: 'Найти', findOptions: 'Опции поиска', findWhat: 'Найти:', matchCase: 'Учитывать регистр', matchCyclic: 'По всему тексту', matchWord: 'Только слово целиком', notFoundMsg: 'Искомый текст не найден.', replace: 'Заменить', replaceAll: 'Заменить всё', replaceSuccessMsg: 'Успешно заменено %1 раз(а).', replaceWith: 'Заменить на:', title: 'Поиск и замена' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ka.js0000644000175000017500000000177314006075351022513 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ka', { find: 'ძებნა', findOptions: 'Find Options', findWhat: 'საძიებელი ტექსტი:', matchCase: 'დიდი და პატარა ასოების დამთხვევა', matchCyclic: 'დოკუმენტის ბოლოში გასვლის მერე თავიდან დაწყება', matchWord: 'მთელი სიტყვის დამთხვევა', notFoundMsg: 'მითითებული ტექსტი არ მოიძებნა.', replace: 'შეცვლა', replaceAll: 'ყველას შეცვლა', replaceSuccessMsg: '%1 მოძებნილი შეიცვალა.', replaceWith: 'შეცვლის ტექსტი:', title: 'ძებნა და შეცვლა' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/zh-cn.js0000644000175000017500000000104714006075351023131 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'zh-cn', { find: '查找', findOptions: '查找选项', findWhat: '查找:', matchCase: '区分大小写', matchCyclic: '循环匹配', matchWord: '全字匹配', notFoundMsg: '指定的文本没有找到。', replace: '替换', replaceAll: '全部替换', replaceSuccessMsg: '共完成 %1 处替换。', replaceWith: '替换:', title: '查找和替换' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/cs.js0000644000175000017500000000111014006075351022506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'cs', { find: 'Hledat', findOptions: 'Možnosti hledání', findWhat: 'Co hledat:', matchCase: 'Rozlišovat velikost písma', matchCyclic: 'Procházet opakovaně', matchWord: 'Pouze celá slova', notFoundMsg: 'Hledaný text nebyl nalezen.', replace: 'Nahradit', replaceAll: 'Nahradit vše', replaceSuccessMsg: '%1 nahrazení.', replaceWith: 'Čím nahradit:', title: 'Najít a nahradit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/pt.js0000644000175000017500000000114414006075351022533 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'pt', { find: 'Procurar', findOptions: 'Find Options', findWhat: 'Texto a procurar:', matchCase: 'Maiúsculas/Minúsculas', matchCyclic: 'Match cyclic', matchWord: 'Coincidir com toda a palavra', notFoundMsg: 'O texto especificado não foi encontrado.', replace: 'Substituir', replaceAll: 'Substituir Tudo', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Substituir por:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/pt-br.js0000644000175000017500000000117514006075351023140 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'pt-br', { find: 'Localizar', findOptions: 'Opções', findWhat: 'Procurar por:', matchCase: 'Coincidir Maiúsculas/Minúsculas', matchCyclic: 'Coincidir cíclico', matchWord: 'Coincidir a palavra inteira', notFoundMsg: 'O texto especificado não foi encontrado.', replace: 'Substituir', replaceAll: 'Substituir Tudo', replaceSuccessMsg: '%1 ocorrência(s) substituída(s).', replaceWith: 'Substituir por:', title: 'Localizar e Substituir' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/et.js0000644000175000017500000000110614006075351022516 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'et', { find: 'Otsi', findOptions: 'Otsingu valikud', findWhat: 'Otsitav:', matchCase: 'Suur- ja väiketähtede eristamine', matchCyclic: 'Jätkatakse algusest', matchWord: 'Ainult terved sõnad', notFoundMsg: 'Otsitud teksti ei leitud.', replace: 'Asenda', replaceAll: 'Asenda kõik', replaceSuccessMsg: '%1 vastet asendati.', replaceWith: 'Asendus:', title: 'Otsimine ja asendamine' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/da.js0000644000175000017500000000110114006075351022465 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'da', { find: 'Søg', findOptions: 'Find muligheder', findWhat: 'Søg efter:', matchCase: 'Forskel på store og små bogstaver', matchCyclic: 'Match cyklisk', matchWord: 'Kun hele ord', notFoundMsg: 'Søgeteksten blev ikke fundet', replace: 'Erstat', replaceAll: 'Erstat alle', replaceSuccessMsg: '%1 forekomst(er) erstattet.', replaceWith: 'Erstat med:', title: 'Søg og erstat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/af.js0000644000175000017500000000107014006075351022474 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'af', { find: 'Soek', findOptions: 'Find Options', findWhat: 'Soek na:', matchCase: 'Hoof/kleinletter sensitief', matchCyclic: 'Soek deurlopend', matchWord: 'Hele woord moet voorkom', notFoundMsg: 'Teks nie gevind nie.', replace: 'Vervang', replaceAll: 'Vervang alles', replaceSuccessMsg: '%1 voorkoms(te) vervang.', replaceWith: 'Vervang met:', title: 'Soek en vervang' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/hu.js0000644000175000017500000000115614006075351022527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'hu', { find: 'Keresés', findOptions: 'Beállítások', findWhat: 'Keresett szöveg:', matchCase: 'Kis- és nagybetű megkülönböztetése', matchCyclic: 'Ciklikus keresés', matchWord: 'Csak ha ez a teljes szó', notFoundMsg: 'A keresett szöveg nem található.', replace: 'Csere', replaceAll: 'Az összes cseréje', replaceSuccessMsg: '%1 egyezőség cserélve.', replaceWith: 'Csere erre:', title: 'Keresés és csere' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/sr.js0000644000175000017500000000123714006075351022537 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'sr', { find: 'Претрага', findOptions: 'Find Options', findWhat: 'Пронађи:', matchCase: 'Разликуј велика и мала слова', matchCyclic: 'Match cyclic', matchWord: 'Упореди целе речи', notFoundMsg: 'Тражени текст није пронађен.', replace: 'Замена', replaceAll: 'Замени све', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Замени са:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/nl.js0000644000175000017500000000112314006075351022516 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'nl', { find: 'Zoeken', findOptions: 'Zoekopties', findWhat: 'Zoeken naar:', matchCase: 'Hoofdlettergevoelig', matchCyclic: 'Doorlopend zoeken', matchWord: 'Hele woord moet voorkomen', notFoundMsg: 'De opgegeven tekst is niet gevonden.', replace: 'Vervangen', replaceAll: 'Alles vervangen', replaceSuccessMsg: '%1 resultaten vervangen.', replaceWith: 'Vervangen met:', title: 'Zoeken en vervangen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/vi.js0000644000175000017500000000121114006075351022521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'vi', { find: 'Tìm kiếm', findOptions: 'Tìm tùy chọn', findWhat: 'Tìm chuỗi:', matchCase: 'Phân biệt chữ hoa/thường', matchCyclic: 'Giống một phần', matchWord: 'Giống toàn bộ từ', notFoundMsg: 'Không tìm thấy chuỗi cần tìm.', replace: 'Thay thế', replaceAll: 'Thay thế tất cả', replaceSuccessMsg: '%1 vị trí đã được thay thế.', replaceWith: 'Thay bằng:', title: 'Tìm kiếm và thay thế' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ja.js0000644000175000017500000000124414006075351022503 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ja', { find: '検索', findOptions: '検索オプション', findWhat: '検索する文字列:', matchCase: '大文字と小文字を区別する', matchCyclic: '末尾に逹したら先頭に戻る', matchWord: '単語単位で探す', notFoundMsg: '指定された文字列は見つかりませんでした。', replace: '置換', replaceAll: 'すべて置換', replaceSuccessMsg: '%1 個置換しました。', replaceWith: '置換後の文字列:', title: '検索と置換' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/id.js0000644000175000017500000000115414006075351022505 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'id', { find: 'Temukan', findOptions: 'Opsi menemukan', findWhat: 'Temukan apa:', matchCase: 'Match case', // MISSING matchCyclic: 'Match cyclic', // MISSING matchWord: 'Match whole word', // MISSING notFoundMsg: 'The specified text was not found.', // MISSING replace: 'Ganti', replaceAll: 'Ganti Semua', replaceSuccessMsg: '%1 occurrence(s) replaced.', // MISSING replaceWith: 'Ganti dengan:', title: 'Temukan dan Ganti' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/en-gb.js0000644000175000017500000000106214006075351023077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'en-gb', { find: 'Find', findOptions: 'Find Options', findWhat: 'Find what:', matchCase: 'Match case', matchCyclic: 'Match cyclic', matchWord: 'Match whole word', notFoundMsg: 'The specified text was not found.', replace: 'Replace', replaceAll: 'Replace All', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Replace with:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/sq.js0000644000175000017500000000115414006075351022534 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'sq', { find: 'Gjej', findOptions: 'Gjejë Alternativat', findWhat: 'Gjej çka:', matchCase: 'Rasti i përputhjes', matchCyclic: 'Përputh ciklikun', matchWord: 'Përputh fjalën e tërë', notFoundMsg: 'Teksti i caktuar nuk mundej të gjendet.', replace: 'Zëvendëso', replaceAll: 'Zëvendëso të gjitha', replaceSuccessMsg: '%1 rast(e) u zëvendësua(n).', replaceWith: 'Zëvendëso me:', title: 'Gjej dhe Zëvendëso' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/bn.js0000644000175000017500000000137214006075351022512 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'bn', { find: 'খোজো', findOptions: 'Find Options', findWhat: 'যা খুঁজতে হবে:', matchCase: 'কেস মিলাও', matchCyclic: 'Match cyclic', matchWord: 'পুরা শব্দ মেলাও', notFoundMsg: 'আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি', replace: 'রিপ্লেস', replaceAll: 'সব বদলে দাও', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'যার সাথে বদলাতে হবে:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/en-au.js0000644000175000017500000000106214006075351023114 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'en-au', { find: 'Find', findOptions: 'Find Options', findWhat: 'Find what:', matchCase: 'Match case', matchCyclic: 'Match cyclic', matchWord: 'Match whole word', notFoundMsg: 'The specified text was not found.', replace: 'Replace', replaceAll: 'Replace All', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Replace with:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ku.js0000644000175000017500000000145214006075351022531 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ku', { find: 'گەڕان', findOptions: 'هەڵبژاردەکانی گەڕان', findWhat: 'گەڕان بەدووای:', matchCase: 'جیاکردنەوه لەنێوان پیتی گەورەو بچووك', matchCyclic: 'گەڕان لەهەموو پەڕەکه', matchWord: 'تەنەا هەموو وشەکه', notFoundMsg: 'هیچ دەقه گەڕانێك نەدۆزراوه.', replace: 'لەبریدانان', replaceAll: 'لەبریدانانی هەمووی', replaceSuccessMsg: ' پێشهاتە(ی) لەبری دانرا. %1', replaceWith: 'لەبریدانان به:', title: 'گەڕان و لەبریدانان' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/ms.js0000644000175000017500000000111614006075351022526 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'ms', { find: 'Cari', findOptions: 'Find Options', findWhat: 'Perkataan yang dicari:', matchCase: 'Padanan case huruf', matchCyclic: 'Match cyclic', matchWord: 'Padana Keseluruhan perkataan', notFoundMsg: 'Text yang dicari tidak dijumpai.', replace: 'Ganti', replaceAll: 'Ganti semua', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Diganti dengan:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/fr.js0000644000175000017500000000114714006075351022522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'fr', { find: 'Trouver', findOptions: 'Options de recherche', findWhat: 'Expression à trouver: ', matchCase: 'Respecter la casse', matchCyclic: 'Boucler', matchWord: 'Mot entier uniquement', notFoundMsg: 'Le texte spécifié ne peut être trouvé.', replace: 'Remplacer', replaceAll: 'Remplacer tout', replaceSuccessMsg: '%1 occurrence(s) replacée(s).', replaceWith: 'Remplacer par: ', title: 'Trouver et remplacer' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/lang/bs.js0000644000175000017500000000111114006075351022506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'find', 'bs', { find: 'Naði', findOptions: 'Find Options', findWhat: 'Naði šta:', matchCase: 'Uporeðuj velika/mala slova', matchCyclic: 'Match cyclic', matchWord: 'Uporeðuj samo cijelu rijeè', notFoundMsg: 'Traženi tekst nije pronaðen.', replace: 'Zamjeni', replaceAll: 'Zamjeni sve', replaceSuccessMsg: '%1 occurrence(s) replaced.', replaceWith: 'Zamjeni sa:', title: 'Find and Replace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/icons/0000755000175000017500000000000014006075351021744 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/find/icons/find.png0000644000175000017500000000172414006075351023376 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8uK#ƿ73q0Il 9E$Jc/z =ui+ \zZ\V6q];:Qauviǃ{?E񷩩w@u(yR4h4~\XXPU!FFFP,d@Dh6hZ+̼! 1E񷩩w@u(yR4h4~\XXPU!FFFP,d@Dh6hZ+̼! 1O CFI$ UŨ*A.#͒?ڊ>~e%I1*3b~P⫫+MӔC-J_e$I"b4hwwZ~SVߏМfDQUF nnnfk^?Gf'""*"Z(mrd}%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/icons/hidpi/0000755000175000017500000000000014006075351023041 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/find/icons/hidpi/find.png0000644000175000017500000000456114006075351024475 0ustar domdomPNG  IHDR szzbKGD pHYs B(xIDATXíkls~г*J[d8c4X̲6ƨɒ itd8,@dsd0 e؃r(k=ه,؂&^ɕ@#~dY@}>xSOh\jUNӴ$6[WVv@ Ҝ畺.|ںv 4f*uyݵs~|>SkDͮ{yˢeF xmn_O$PMYUIQU4 vvnܴ[zDg? Cߧ\<\w/녅()m_e@/,Wvj8M5hxAhα#Deι;Fj Op50`>Ν`Yn[#D}}MJjtU$;nY$ 6y 0 dIb.'ŝdŶmqLSsY0N0ML#Gf'FGG2!Ѐ/H$~qKSQN.A!=gJOmG;.0ĉ}m7y{JJKo)O$$3sA@AAt f !@wwٳτ;.^X6%lo|{CצR)"( $A0+Z#7e`%iI,sIzO^2#&/Ξ3gxk>X,a(>m32|V\\W%P/f}]a>- wp1c mqny$Goݶ9ղ,늢|^T\<ܳ---Jcc%˲H$PUu !t:ŧ==τ;.΂s f@<^6wxO@W^`dUQ B3g.q IBux#Ͽ2eDpxx9sӷ]q[SxbŊߔ3p ,>wtNjs]V)Y-545ym \ }߶qFGY㫀L[z7:J?9dz %tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/icons/hidpi/find-rtl.png0000644000175000017500000000456114006075351025274 0ustar domdomPNG  IHDR szzbKGD pHYs B(xIDATXíkls~г*J[d8c4X̲6ƨɒ itd8,@dsd0 e؃r(k=ه,؂&^ɕ@#~dY@}>xSOh\jUNӴ$6[WVv@ Ҝ畺.|ںv 4f*uyݵs~|>SkDͮ{yˢeF xmn_O$PMYUIQU4 vvnܴ[zDg? Cߧ\<\w/녅()m_e@/,Wvj8M5hxAhα#Deι;Fj Op50`>Ν`Yn[#D}}MJjtU$;nY$ 6y 0 dIb.'ŝdŶmqLSsY0N0ML#Gf'FGG2!Ѐ/H$~qKSQN.A!=gJOmG;.0ĉ}m7y{JJKo)O$$3sA@AAt f !@wwٳτ;.^X6%lo|{CצR)"( $A0+Z#7e`%iI,sIzO^2#&/Ξ3gxk>X,a(>m32|V\\W%P/f}]a>- wp1c mqny$Goݶ9ղ,늢|^T\<ܳ---Jcc%˲H$PUu !t:ŧ==τ;.΂s f@<^6wxO@W^`dUQ B3g.q IBux#Ͽ2eDpxx9sӷ]q[SxbŊߔ3p ,>wtNjs]V)Y-545ym \ }߶qFGY㫀L[z7:J?9dz %tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/find/icons/hidpi/replace.png0000644000175000017500000000531114006075351025162 0ustar domdomPNG  IHDR szzbKGD pHYs B(x IDATXõ{lTם?ܹcMl$M M&@AiAJ6!6.ژm4զj#DT$*J Li7Cll3=3v e?zѕs~0O$O0r⣦ػJ%19R`Y;͛ 022Vcr[)E7EQ 8{MJW!R,)PZZSI@M,&ʅ@B`[1'hd hc$RJX De6dщUC<%؈ǯz (˄S6,,)RR´ipBETb,&*5d"[WXKw̚U]w3}b>_ٍ|R^Mu5[F Q? |1g%!-o~ ڜ?/2r$ ` Tbђ%yضݬ緿#C0$-8οtvtD74H!|x*Ē%0O~t" lH!@R(ٳM =Z֝CX85Cil&#A)Ōf6X/ϯ˖m3O;WP)<9\6={|>/+RaȥK0t^oa>ccc ϳyfb vq5 ?˖H+B8ٽ]!6"{dycǏkuo{s}wM__ipVKKYxޏD{{C",)H}҇?M&%55OA@40ZWq> tIu}o/.mܸ9q7g:H*ocRNRFc1ju]$SVRC ]/oB9G<{ѩ]^0MX*q˶mqA4 .^\.}]7*B>v}=$gDwJas9)</ǯdWnX:MܵE۳8* +JzQ)yp: >qz'?CTuc0ZeT%%^`.BR"t7o^ |x<ةTyx7,nkBJ# NP*9{ml1@D#Dlj>քk*ɿ]wCTd|,=t_^3kKp*T kʟWR"#~퇁UW2~knezppx[] SVa ĵ0#/[-4o l7tw!ێD8M.So"LF8jU%$ʷyGl۶Ms[[zm)7ٖb.jΝ{)1>X:MY)q[o}bN&Q*BC>hvRqϽbIQB1rHt-\`̤y2U?muʕPB0 rx^߹l`HDm&!\7dWoݺU+GQRCCC-]/1bX,} $dK۶+ ܲ@Hyx'ߧ455A2={z1 ejkk}ĬYH&b55Dc1HaY *{ <"ۗݽ_9]yj{, "3m~z_il洴0 +mXuZkĹ瞻T! ?V&SB&sEz2\XCmIZ.O+iY։;r~}=v՘+!C/v9sjiBLN)+Ō37o7_:=%tEXtdate:create2013-06-20T12:24:19+02:00U%tEXtdate:modify2013-06-20T12:24:19+02:00$StEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/0000755000175000017500000000000014006075351020657 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/font/plugin.js0000644000175000017500000002476714006075351022533 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition, order ) { var config = editor.config, style = new CKEDITOR.style( styleDefinition ); // Gets the list of fonts from the settings. var names = entries.split( ';' ), values = []; // Create style objects for all fonts. var styles = {}; for ( var i = 0; i < names.length; i++ ) { var parts = names[ i ]; if ( parts ) { parts = parts.split( '/' ); var vars = {}, name = names[ i ] = parts[ 0 ]; vars[ styleType ] = values[ i ] = parts[ 1 ] || name; styles[ name ] = new CKEDITOR.style( styleDefinition, vars ); styles[ name ]._.definition.name = name; } else { names.splice( i--, 1 ); } } editor.ui.addRichCombo( comboName, { label: lang.label, title: lang.panelTitle, toolbar: 'styles,' + order, allowedContent: style, requiredContent: style, panel: { css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), multiSelect: false, attributes: { 'aria-label': lang.panelTitle } }, init: function() { this.startGroup( lang.panelTitle ); for ( var i = 0; i < names.length; i++ ) { var name = names[ i ]; // Add the tag entry to the panel list. this.add( name, styles[ name ].buildPreview(), name ); } }, onClick: function( value ) { editor.focus(); editor.fire( 'saveSnapshot' ); var previousValue = this.getValue(), style = styles[ value ]; // When applying one style over another, first remove the previous one (#12403). // NOTE: This is only a temporary fix. It will be moved to the styles system (#12687). if ( previousValue && value != previousValue ) { var previousStyle = styles[ previousValue ], range = editor.getSelection().getRanges()[ 0 ]; // If the range is collapsed we can't simply use the editor.removeStyle method // because it will remove the entire element and we want to split it instead. if ( range.collapsed ) { var path = editor.elementPath(), // Find the style element. matching = path.contains( function( el ) { return previousStyle.checkElementRemovable( el ); } ); if ( matching ) { var startBoundary = range.checkBoundaryOfElement( matching, CKEDITOR.START ), endBoundary = range.checkBoundaryOfElement( matching, CKEDITOR.END ), node, bm; // If we are at both boundaries it means that the element is empty. // Remove it but in a way that we won't lose other empty inline elements inside it. // Example:

    x[]x

    // Result:

    x[]x

    if ( startBoundary && endBoundary ) { bm = range.createBookmark(); // Replace the element with its children (TODO element.replaceWithChildren). while ( ( node = matching.getFirst() ) ) { node.insertBefore( matching ); } matching.remove(); range.moveToBookmark( bm ); // If we are at the boundary of the style element, just move out. } else if ( startBoundary ) { range.moveToPosition( matching, CKEDITOR.POSITION_BEFORE_START ); } else if ( endBoundary ) { range.moveToPosition( matching, CKEDITOR.POSITION_AFTER_END ); } else { // Split the element and clone the elements that were in the path // (between the startContainer and the matching element) // into the new place. range.splitElement( matching ); range.moveToPosition( matching, CKEDITOR.POSITION_AFTER_END ); cloneSubtreeIntoRange( range, path.elements.slice(), matching ); } editor.getSelection().selectRanges( [ range ] ); } } else { editor.removeStyle( previousStyle ); } } editor[ previousValue == value ? 'removeStyle' : 'applyStyle' ]( style ); editor.fire( 'saveSnapshot' ); }, onRender: function() { editor.on( 'selectionChange', function( ev ) { var currentValue = this.getValue(); var elementPath = ev.data.path, elements = elementPath.elements; // For each element into the elements path. for ( var i = 0, element; i < elements.length; i++ ) { element = elements[ i ]; // Check if the element is removable by any of // the styles. for ( var value in styles ) { if ( styles[ value ].checkElementMatch( element, true, editor ) ) { if ( value != currentValue ) this.setValue( value ); return; } } } // If no styles match, just empty it. this.setValue( '', defaultLabel ); }, this ); }, refresh: function() { if ( !editor.activeFilter.check( style ) ) this.setState( CKEDITOR.TRISTATE_DISABLED ); } } ); } // Clones the subtree between subtreeStart (exclusive) and the // leaf (inclusive) and inserts it into the range. // // @param range // @param {CKEDITOR.dom.element[]} elements Elements path in the standard order: leaf -> root. // @param {CKEDITOR.dom.element/null} substreeStart The start of the subtree. // If null, then the leaf belongs to the subtree. function cloneSubtreeIntoRange( range, elements, subtreeStart ) { var current = elements.pop(); if ( !current ) { return; } // Rewind the elements array up to the subtreeStart and then start the real cloning. if ( subtreeStart ) { return cloneSubtreeIntoRange( range, elements, current.equals( subtreeStart ) ? null : subtreeStart ); } var clone = current.clone(); range.insertNode( clone ); range.moveToPosition( clone, CKEDITOR.POSITION_AFTER_START ); cloneSubtreeIntoRange( range, elements ); } CKEDITOR.plugins.add( 'font', { requires: 'richcombo', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength init: function( editor ) { var config = editor.config; addCombo( editor, 'Font', 'family', editor.lang.font, config.font_names, config.font_defaultLabel, config.font_style, 30 ); addCombo( editor, 'FontSize', 'size', editor.lang.font.fontSize, config.fontSize_sizes, config.fontSize_defaultLabel, config.fontSize_style, 40 ); } } ); } )(); /** * The list of fonts names to be displayed in the Font combo in the toolbar. * Entries are separated by semi-colons (`';'`), while it's possible to have more * than one font for each entry, in the HTML way (separated by comma). * * A display name may be optionally defined by prefixing the entries with the * name and the slash character. For example, `'Arial/Arial, Helvetica, sans-serif'` * will be displayed as `'Arial'` in the list, but will be outputted as * `'Arial, Helvetica, sans-serif'`. * * config.font_names = * 'Arial/Arial, Helvetica, sans-serif;' + * 'Times New Roman/Times New Roman, Times, serif;' + * 'Verdana'; * * config.font_names = 'Arial;Times New Roman;Verdana'; * * @cfg {String} [font_names=see source] * @member CKEDITOR.config */ CKEDITOR.config.font_names = 'Arial/Arial, Helvetica, sans-serif;' + 'Comic Sans MS/Comic Sans MS, cursive;' + 'Courier New/Courier New, Courier, monospace;' + 'Georgia/Georgia, serif;' + 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' + 'Tahoma/Tahoma, Geneva, sans-serif;' + 'Times New Roman/Times New Roman, Times, serif;' + 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' + 'Verdana/Verdana, Geneva, sans-serif'; /** * The text to be displayed in the Font combo is none of the available values * matches the current cursor position or text selection. * * // If the default site font is Arial, we may making it more explicit to the end user. * config.font_defaultLabel = 'Arial'; * * @cfg {String} [font_defaultLabel=''] * @member CKEDITOR.config */ CKEDITOR.config.font_defaultLabel = ''; /** * The style definition to be used to apply the font in the text. * * // This is actually the default value for it. * config.font_style = { * element: 'span', * styles: { 'font-family': '#(family)' }, * overrides: [ { element: 'font', attributes: { 'face': null } } ] * }; * * @cfg {Object} [font_style=see example] * @member CKEDITOR.config */ CKEDITOR.config.font_style = { element: 'span', styles: { 'font-family': '#(family)' }, overrides: [ { element: 'font', attributes: { 'face': null } } ] }; /** * The list of fonts size to be displayed in the Font Size combo in the * toolbar. Entries are separated by semi-colons (`';'`). * * Any kind of "CSS like" size can be used, like `'12px'`, `'2.3em'`, `'130%'`, * `'larger'` or `'x-small'`. * * A display name may be optionally defined by prefixing the entries with the * name and the slash character. For example, `'Bigger Font/14px'` will be * displayed as `'Bigger Font'` in the list, but will be outputted as `'14px'`. * * config.fontSize_sizes = '16/16px;24/24px;48/48px;'; * * config.fontSize_sizes = '12px;2.3em;130%;larger;x-small'; * * config.fontSize_sizes = '12 Pixels/12px;Big/2.3em;30 Percent More/130%;Bigger/larger;Very Small/x-small'; * * @cfg {String} [fontSize_sizes=see source] * @member CKEDITOR.config */ CKEDITOR.config.fontSize_sizes = '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px'; /** * The text to be displayed in the Font Size combo is none of the available * values matches the current cursor position or text selection. * * // If the default site font size is 12px, we may making it more explicit to the end user. * config.fontSize_defaultLabel = '12px'; * * @cfg {String} [fontSize_defaultLabel=''] * @member CKEDITOR.config */ CKEDITOR.config.fontSize_defaultLabel = ''; /** * The style definition to be used to apply the font size in the text. * * // This is actually the default value for it. * config.fontSize_style = { * element: 'span', * styles: { 'font-size': '#(size)' }, * overrides: [ { element :'font', attributes: { 'size': null } } ] * }; * * @cfg {Object} [fontSize_style=see example] * @member CKEDITOR.config */ CKEDITOR.config.fontSize_style = { element: 'span', styles: { 'font-size': '#(size)' }, overrides: [ { element: 'font', attributes: { 'size': null } } ] }; rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/0000755000175000017500000000000014006075351021600 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/bg.js0000644000175000017500000000063514006075351022532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'bg', { fontSize: { label: 'Размер', voiceLabel: 'Размер на шрифт', panelTitle: 'Размер на шрифт' }, label: 'Шрифт', panelTitle: 'Име на шрифт', voiceLabel: 'Шрифт' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/cy.js0000644000175000017500000000054414006075351022554 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'cy', { fontSize: { label: 'Maint', voiceLabel: 'Maint y Ffont', panelTitle: 'Maint y Ffont' }, label: 'Ffont', panelTitle: 'Enw\'r Ffont', voiceLabel: 'Ffont' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/no.js0000644000175000017500000000054214006075351022553 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'no', { fontSize: { label: 'Størrelse', voiceLabel: 'Font Størrelse', panelTitle: 'Størrelse' }, label: 'Skrift', panelTitle: 'Skrift', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/hr.js0000644000175000017500000000053414006075351022551 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'hr', { fontSize: { label: 'Veličina', voiceLabel: 'Veličina slova', panelTitle: 'Veličina' }, label: 'Font', panelTitle: 'Font', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/th.js0000644000175000017500000000063014006075351022550 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'th', { fontSize: { label: 'ขนาด', voiceLabel: 'Font Size', panelTitle: 'ขนาด' }, label: 'แบบอักษร', panelTitle: 'แบบอักษร', voiceLabel: 'แบบอักษร' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ar.js0000644000175000017500000000057614006075351022550 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ar', { fontSize: { label: 'حجم الخط', voiceLabel: 'حجم الخط', panelTitle: 'حجم الخط' }, label: 'خط', panelTitle: 'حجم الخط', voiceLabel: 'حجم الخط' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/sk.js0000644000175000017500000000055414006075351022557 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'sk', { fontSize: { label: 'Veľkosť', voiceLabel: 'Veľkosť písma', panelTitle: 'Veľkosť písma' }, label: 'Font', panelTitle: 'Názov fontu', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ro.js0000644000175000017500000000052214006075351022555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ro', { fontSize: { label: 'Mărime', voiceLabel: 'Font Size', panelTitle: 'Mărime' }, label: 'Font', panelTitle: 'Font', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/en-ca.js0000644000175000017500000000053114006075351023120 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'en-ca', { fontSize: { label: 'Size', voiceLabel: 'Font Size', panelTitle: 'Font Size' }, label: 'Font', panelTitle: 'Font Name', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ug.js0000644000175000017500000000062314006075351022552 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ug', { fontSize: { label: 'چوڭلۇقى', voiceLabel: 'خەت چوڭلۇقى', panelTitle: 'چوڭلۇقى' }, label: 'خەت نۇسخا', panelTitle: 'خەت نۇسخا', voiceLabel: 'خەت نۇسخا' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/el.js0000644000175000017500000000075614006075351022546 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'el', { fontSize: { label: 'Μέγεθος', voiceLabel: 'Μέγεθος Γραμματοσειράς', panelTitle: 'Μέγεθος Γραμματοσειράς' }, label: 'Γραμματοσειρά', panelTitle: 'Όνομα Γραμματοσειράς', voiceLabel: 'Γραμματοσειρά' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/de.js0000644000175000017500000000056314006075351022532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'de', { fontSize: { label: 'Größe', voiceLabel: 'Schrifgröße', panelTitle: 'Schriftgröße' }, label: 'Schriftart', panelTitle: 'Schriftartname', voiceLabel: 'Schriftart' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/uk.js0000644000175000017500000000057614006075351022565 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'uk', { fontSize: { label: 'Розмір', voiceLabel: 'Розмір шрифту', panelTitle: 'Розмір' }, label: 'Шрифт', panelTitle: 'Шрифт', voiceLabel: 'Шрифт' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/sr-latn.js0000644000175000017500000000054714006075351023524 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'sr-latn', { fontSize: { label: 'Veličina fonta', voiceLabel: 'Font Size', panelTitle: 'Veličina fonta' }, label: 'Font', panelTitle: 'Font', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/km.js0000644000175000017500000000075414006075351022553 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'km', { fontSize: { label: 'ទំហំ', voiceLabel: 'ទំហំ​អក្សរ', panelTitle: 'ទំហំ​អក្សរ' }, label: 'ពុម្ព​អក្សរ', panelTitle: 'ឈ្មោះ​ពុម្ព​អក្សរ', voiceLabel: 'ពុម្ព​អក្សរ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/eu.js0000644000175000017500000000054514006075351022553 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'eu', { fontSize: { label: 'Tamaina', voiceLabel: 'Tamaina', panelTitle: 'Tamaina' }, label: 'Letra-tipoa', panelTitle: 'Letra-tipoa', voiceLabel: 'Letra-tipoa' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/fa.js0000644000175000017500000000057214006075351022530 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'fa', { fontSize: { label: 'اندازه', voiceLabel: 'اندازه قلم', panelTitle: 'اندازه قلم' }, label: 'قلم', panelTitle: 'نام قلم', voiceLabel: 'قلم' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/si.js0000644000175000017500000000073514006075351022556 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'si', { fontSize: { label: 'විශාලත්වය', voiceLabel: 'අක්ෂර විශාලත්වය', panelTitle: 'අක්ෂර විශාලත්වය' }, label: 'අක්ෂරය', panelTitle: 'අක්ෂර නාමය', voiceLabel: 'අක්ෂර' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/en.js0000644000175000017500000000052614006075351022543 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'en', { fontSize: { label: 'Size', voiceLabel: 'Font Size', panelTitle: 'Font Size' }, label: 'Font', panelTitle: 'Font Name', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/he.js0000644000175000017500000000053714006075351022537 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'he', { fontSize: { label: 'גודל', voiceLabel: 'גודל', panelTitle: 'גודל' }, label: 'גופן', panelTitle: 'גופן', voiceLabel: 'גופן' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/lt.js0000644000175000017500000000055614006075351022563 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'lt', { fontSize: { label: 'Šrifto dydis', voiceLabel: 'Šrifto dydis', panelTitle: 'Šrifto dydis' }, label: 'Šriftas', panelTitle: 'Šriftas', voiceLabel: 'Šriftas' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/lv.js0000644000175000017500000000053514006075351022562 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'lv', { fontSize: { label: 'Izmērs', voiceLabel: 'Fonta izmeŗs', panelTitle: 'Izmērs' }, label: 'Šrifts', panelTitle: 'Šrifts', voiceLabel: 'Fonts' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/eo.js0000644000175000017500000000054314006075351022543 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'eo', { fontSize: { label: 'Grado', voiceLabel: 'Tipara grado', panelTitle: 'Tipara grado' }, label: 'Tiparo', panelTitle: 'Tipara nomo', voiceLabel: 'Tiparo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ca.js0000644000175000017500000000060214006075351022517 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ca', { fontSize: { label: 'Mida', voiceLabel: 'Mida de la lletra', panelTitle: 'Mida de la lletra' }, label: 'Tipus de lletra', panelTitle: 'Tipus de lletra', voiceLabel: 'Tipus de lletra' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/hi.js0000644000175000017500000000057514006075351022545 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'hi', { fontSize: { label: 'साइज़', voiceLabel: 'Font Size', panelTitle: 'साइज़' }, label: 'फ़ॉन्ट', panelTitle: 'फ़ॉन्ट', voiceLabel: 'फ़ॉन्ट' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/mk.js0000644000175000017500000000056714006075351022555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'mk', { fontSize: { label: 'Size', voiceLabel: 'Font Size', panelTitle: 'Font Size' }, label: 'Font', // MISSING panelTitle: 'Font Name', // MISSING voiceLabel: 'Font' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/mn.js0000644000175000017500000000070514006075351022552 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'mn', { fontSize: { label: 'Хэмжээ', voiceLabel: 'Үсгийн хэмжээ', panelTitle: 'Үсгийн хэмжээ' }, label: 'Үсгийн хэлбэр', panelTitle: 'Үгсийн хэлбэрийн нэр', voiceLabel: 'Үгсийн хэлбэр' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/gl.js0000644000175000017500000000060514006075351022541 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'gl', { fontSize: { label: 'Tamaño', voiceLabel: 'Tamaño da letra', panelTitle: 'Tamaño da letra' }, label: 'Tipo de letra', panelTitle: 'Nome do tipo de letra', voiceLabel: 'Tipo de letra' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ko.js0000644000175000017500000000054114006075351022547 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ko', { fontSize: { label: '크기', voiceLabel: '글자 크기', panelTitle: '글자 크기' }, label: '글꼴', panelTitle: '글꼴', voiceLabel: '글꼴' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/zh.js0000644000175000017500000000054514006075351022563 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'zh', { fontSize: { label: '大小', voiceLabel: '字型大小', panelTitle: '字型大小' }, label: '字型', panelTitle: '字型名稱', voiceLabel: '字型' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/es.js0000644000175000017500000000054014006075351022544 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'es', { fontSize: { label: 'Tamaño', voiceLabel: 'Tamaño de fuente', panelTitle: 'Tamaño' }, label: 'Fuente', panelTitle: 'Fuente', voiceLabel: 'Fuente' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/is.js0000644000175000017500000000056314006075351022555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'is', { fontSize: { label: 'Leturstærð ', voiceLabel: 'Font Size', panelTitle: 'Leturstærð ' }, label: 'Leturgerð ', panelTitle: 'Leturgerð ', voiceLabel: 'Leturgerð ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/fo.js0000644000175000017500000000054514006075351022546 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'fo', { fontSize: { label: 'Skriftstødd', voiceLabel: 'Skriftstødd', panelTitle: 'Skriftstødd' }, label: 'Skrift', panelTitle: 'Skrift', voiceLabel: 'Skrift' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/tt.js0000644000175000017500000000064214006075351022567 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'tt', { fontSize: { label: 'Зурлык', voiceLabel: 'Шрифт зурлыклары', panelTitle: 'Шрифт зурлыклары' }, label: 'Шрифт', panelTitle: 'Шрифт исеме', voiceLabel: 'Шрифт' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/it.js0000644000175000017500000000056214006075351022555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'it', { fontSize: { label: 'Dimensione', voiceLabel: 'Dimensione Carattere', panelTitle: 'Dimensione' }, label: 'Carattere', panelTitle: 'Carattere', voiceLabel: 'Carattere' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/sv.js0000644000175000017500000000055014006075351022566 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'sv', { fontSize: { label: 'Storlek', voiceLabel: 'Teckenstorlek', panelTitle: 'Teckenstorlek' }, label: 'Typsnitt', panelTitle: 'Typsnitt', voiceLabel: 'Typsnitt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/gu.js0000644000175000017500000000067614006075351022562 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'gu', { fontSize: { label: 'ફૉન્ટ સાઇઝ/કદ', voiceLabel: 'ફોન્ટ સાઈઝ', panelTitle: 'ફૉન્ટ સાઇઝ/કદ' }, label: 'ફૉન્ટ', panelTitle: 'ફૉન્ટ', voiceLabel: 'ફોન્ટ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/tr.js0000644000175000017500000000053614006075351022567 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'tr', { fontSize: { label: 'Boyut', voiceLabel: 'Font Size', panelTitle: 'Boyut' }, label: 'Yazı Türü', panelTitle: 'Yazı Türü', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/pl.js0000644000175000017500000000054514006075351022555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'pl', { fontSize: { label: 'Rozmiar', voiceLabel: 'Rozmiar czcionki', panelTitle: 'Rozmiar' }, label: 'Czcionka', panelTitle: 'Czcionka', voiceLabel: 'Czcionka' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/nb.js0000644000175000017500000000055114006075351022536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'nb', { fontSize: { label: 'Størrelse', voiceLabel: 'Skriftstørrelse', panelTitle: 'Skriftstørrelse' }, label: 'Skrift', panelTitle: 'Skrift', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/sl.js0000644000175000017500000000053114006075351022553 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'sl', { fontSize: { label: 'Velikost', voiceLabel: 'Velikost', panelTitle: 'Velikost' }, label: 'Pisava', panelTitle: 'Pisava', voiceLabel: 'Pisava' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/fi.js0000644000175000017500000000055614006075351022542 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'fi', { fontSize: { label: 'Koko', voiceLabel: 'Kirjaisimen koko', panelTitle: 'Koko' }, label: 'Kirjaisinlaji', panelTitle: 'Kirjaisinlaji', voiceLabel: 'Kirjaisinlaji' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/fr-ca.js0000644000175000017500000000052614006075351023131 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'fr-ca', { fontSize: { label: 'Taille', voiceLabel: 'Taille', panelTitle: 'Taille' }, label: 'Police', panelTitle: 'Police', voiceLabel: 'Police' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ru.js0000644000175000017500000000061314006075351022564 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ru', { fontSize: { label: 'Размер', voiceLabel: 'Размер шрифта', panelTitle: 'Размер шрифта' }, label: 'Шрифт', panelTitle: 'Шрифт', voiceLabel: 'Шрифт' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ka.js0000644000175000017500000000070214006075351022530 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ka', { fontSize: { label: 'ზომა', voiceLabel: 'ტექსტის ზომა', panelTitle: 'ტექსტის ზომა' }, label: 'ფონტი', panelTitle: 'ფონტის სახელი', voiceLabel: 'ფონტი' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/zh-cn.js0000644000175000017500000000053414006075351023157 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'zh-cn', { fontSize: { label: '大小', voiceLabel: '文字大小', panelTitle: '大小' }, label: '字体', panelTitle: '字体', voiceLabel: '字体' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/cs.js0000644000175000017500000000054014006075351022542 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'cs', { fontSize: { label: 'Velikost', voiceLabel: 'Velikost písma', panelTitle: 'Velikost' }, label: 'Písmo', panelTitle: 'Písmo', voiceLabel: 'Písmo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/pt.js0000644000175000017500000000057514006075351022570 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'pt', { fontSize: { label: 'Tamanho', voiceLabel: 'Tamanho da letra', panelTitle: 'Tamanho da letra' }, label: 'Fonte', panelTitle: 'Nome do Tipo de Letra', voiceLabel: 'Tipo de Letra' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/pt-br.js0000644000175000017500000000053714006075351023167 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'pt-br', { fontSize: { label: 'Tamanho', voiceLabel: 'Tamanho da fonte', panelTitle: 'Tamanho' }, label: 'Fonte', panelTitle: 'Fonte', voiceLabel: 'Fonte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/et.js0000644000175000017500000000052314006075351022546 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'et', { fontSize: { label: 'Suurus', voiceLabel: 'Kirja suurus', panelTitle: 'Suurus' }, label: 'Kiri', panelTitle: 'Kiri', voiceLabel: 'Kiri' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/da.js0000644000175000017500000000057514006075351022531 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'da', { fontSize: { label: 'Skriftstørrelse', voiceLabel: 'Skriftstørrelse', panelTitle: 'Skriftstørrelse' }, label: 'Skrifttype', panelTitle: 'Skrifttype', voiceLabel: 'Skrifttype' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/af.js0000644000175000017500000000053414006075351022526 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'af', { fontSize: { label: 'Grootte', voiceLabel: 'Fontgrootte', panelTitle: 'Fontgrootte' }, label: 'Font', panelTitle: 'Fontnaam', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/hu.js0000644000175000017500000000054714006075351022560 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'hu', { fontSize: { label: 'Méret', voiceLabel: 'Betűméret', panelTitle: 'Méret' }, label: 'Betűtípus', panelTitle: 'Betűtípus', voiceLabel: 'Betűtípus' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/sr.js0000644000175000017500000000060614006075351022564 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'sr', { fontSize: { label: 'Величина фонта', voiceLabel: 'Font Size', panelTitle: 'Величина фонта' }, label: 'Фонт', panelTitle: 'Фонт', voiceLabel: 'Фонт' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/nl.js0000644000175000017500000000056414006075351022554 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'nl', { fontSize: { label: 'Lettergrootte', voiceLabel: 'Lettergrootte', panelTitle: 'Lettergrootte' }, label: 'Lettertype', panelTitle: 'Lettertype', voiceLabel: 'Lettertype' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/vi.js0000644000175000017500000000054614006075351022561 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'vi', { fontSize: { label: 'Cỡ chữ', voiceLabel: 'Kích cỡ phông', panelTitle: 'Cỡ chữ' }, label: 'Phông', panelTitle: 'Phông', voiceLabel: 'Phông' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ja.js0000644000175000017500000000060614006075351022532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ja', { fontSize: { label: 'サイズ', voiceLabel: 'フォントサイズ', panelTitle: 'フォントサイズ' }, label: 'フォント', panelTitle: 'フォント', voiceLabel: 'フォント' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/id.js0000644000175000017500000000061714006075351022536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'id', { fontSize: { label: 'Ukuran', voiceLabel: 'Font Size', // MISSING panelTitle: 'Font Size' // MISSING }, label: 'Font', // MISSING panelTitle: 'Font Name', // MISSING voiceLabel: 'Font' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/en-gb.js0000644000175000017500000000053114006075351023125 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'en-gb', { fontSize: { label: 'Size', voiceLabel: 'Font Size', panelTitle: 'Font Size' }, label: 'Font', panelTitle: 'Font Name', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/sq.js0000644000175000017500000000060514006075351022562 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'sq', { fontSize: { label: 'Madhësia', voiceLabel: 'Madhësia e Shkronjës', panelTitle: 'Madhësia e Shkronjës' }, label: 'Shkronja', panelTitle: 'Emri i Shkronjës', voiceLabel: 'Shkronja' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/bn.js0000644000175000017500000000056414006075351022542 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'bn', { fontSize: { label: 'সাইজ', voiceLabel: 'Font Size', panelTitle: 'সাইজ' }, label: 'ফন্ট', panelTitle: 'ফন্ট', voiceLabel: 'ফন্ট' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/en-au.js0000644000175000017500000000053114006075351023142 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'en-au', { fontSize: { label: 'Size', voiceLabel: 'Font Size', panelTitle: 'Font Size' }, label: 'Font', panelTitle: 'Font Name', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ku.js0000644000175000017500000000061414006075351022556 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ku', { fontSize: { label: 'گەورەیی', voiceLabel: 'گەورەیی فۆنت', panelTitle: 'گەورەیی فۆنت' }, label: 'فۆنت', panelTitle: 'ناوی فۆنت', voiceLabel: 'فۆنت' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/ms.js0000644000175000017500000000051414006075351022555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'ms', { fontSize: { label: 'Saiz', voiceLabel: 'Font Size', panelTitle: 'Saiz' }, label: 'Font', panelTitle: 'Font', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/fr.js0000644000175000017500000000056014006075351022546 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'fr', { fontSize: { label: 'Taille', voiceLabel: 'Taille de police', panelTitle: 'Taille de police' }, label: 'Police', panelTitle: 'Style de police', voiceLabel: 'Police' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/font/lang/bs.js0000644000175000017500000000052614006075351022545 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'font', 'bs', { fontSize: { label: 'Velièina', voiceLabel: 'Font Size', panelTitle: 'Velièina' }, label: 'Font', panelTitle: 'Font', voiceLabel: 'Font' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/showborders/0000755000175000017500000000000014006075351022252 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/showborders/plugin.js0000644000175000017500000001234214006075351024110 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview The "show border" plugin. The command display visible outline * border line around all table elements if table doesn't have a none-zero 'border' attribute specified. */ ( function() { var commandDefinition = { preserveState: true, editorFocus: false, readOnly: 1, exec: function( editor ) { this.toggleState(); this.refresh( editor ); }, refresh: function( editor ) { if ( editor.document ) { var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'attachClass' : 'removeClass'; editor.editable()[ funcName ]( 'cke_show_borders' ); } } }; var showBorderClassName = 'cke_show_border'; CKEDITOR.plugins.add( 'showborders', { modes: { 'wysiwyg': 1 }, onLoad: function() { var cssStyleText, cssTemplate = // TODO: For IE6, we don't have child selector support, // where nested table cells could be incorrect. ( CKEDITOR.env.ie6Compat ? [ '.%1 table.%2,', '.%1 table.%2 td, .%1 table.%2 th', '{', 'border : #d3d3d3 1px dotted', '}' ] : [ '.%1 table.%2,', '.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,', '.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,', '.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,', '.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th', '{', 'border : #d3d3d3 1px dotted', '}' ] ).join( '' ); cssStyleText = cssTemplate.replace( /%2/g, showBorderClassName ).replace( /%1/g, 'cke_show_borders ' ); CKEDITOR.addCss( cssStyleText ); }, init: function( editor ) { var command = editor.addCommand( 'showborders', commandDefinition ); command.canUndo = false; if ( editor.config.startupShowBorders !== false ) command.setState( CKEDITOR.TRISTATE_ON ); // Refresh the command on setData. editor.on( 'mode', function() { if ( command.state != CKEDITOR.TRISTATE_DISABLED ) command.refresh( editor ); }, null, null, 100 ); // Refresh the command on wysiwyg frame reloads. editor.on( 'contentDom', function() { if ( command.state != CKEDITOR.TRISTATE_DISABLED ) command.refresh( editor ); } ); editor.on( 'removeFormatCleanup', function( evt ) { var element = evt.data; if ( editor.getCommand( 'showborders' ).state == CKEDITOR.TRISTATE_ON && element.is( 'table' ) && ( !element.hasAttribute( 'border' ) || parseInt( element.getAttribute( 'border' ), 10 ) <= 0 ) ) element.addClass( showBorderClassName ); } ); }, afterInit: function( editor ) { var dataProcessor = editor.dataProcessor, dataFilter = dataProcessor && dataProcessor.dataFilter, htmlFilter = dataProcessor && dataProcessor.htmlFilter; if ( dataFilter ) { dataFilter.addRules( { elements: { 'table': function( element ) { var attributes = element.attributes, cssClass = attributes[ 'class' ], border = parseInt( attributes.border, 10 ); if ( ( !border || border <= 0 ) && ( !cssClass || cssClass.indexOf( showBorderClassName ) == -1 ) ) attributes[ 'class' ] = ( cssClass || '' ) + ' ' + showBorderClassName; } } } ); } if ( htmlFilter ) { htmlFilter.addRules( { elements: { 'table': function( table ) { var attributes = table.attributes, cssClass = attributes[ 'class' ]; cssClass && ( attributes[ 'class' ] = cssClass.replace( showBorderClassName, '' ).replace( /\s{2}/, ' ' ).replace( /^\s+|\s+$/, '' ) ); } } } ); } } } ); // Table dialog must be aware of it. CKEDITOR.on( 'dialogDefinition', function( ev ) { var dialogName = ev.data.name; if ( dialogName == 'table' || dialogName == 'tableProperties' ) { var dialogDefinition = ev.data.definition, infoTab = dialogDefinition.getContents( 'info' ), borderField = infoTab.get( 'txtBorder' ), originalCommit = borderField.commit; borderField.commit = CKEDITOR.tools.override( originalCommit, function( org ) { return function( data, selectedTable ) { org.apply( this, arguments ); var value = parseInt( this.getValue(), 10 ); selectedTable[ ( !value || value <= 0 ) ? 'addClass' : 'removeClass' ]( showBorderClassName ); }; } ); var advTab = dialogDefinition.getContents( 'advanced' ), classField = advTab && advTab.get( 'advCSSClasses' ); if ( classField ) { classField.setup = CKEDITOR.tools.override( classField.setup, function( originalSetup ) { return function() { originalSetup.apply( this, arguments ); this.setValue( this.getValue().replace( /cke_show_border/, '' ) ); }; } ); classField.commit = CKEDITOR.tools.override( classField.commit, function( originalCommit ) { return function( data, element ) { originalCommit.apply( this, arguments ); if ( !parseInt( element.getAttribute( 'border' ), 10 ) ) element.addClass( 'cke_show_border' ); }; } ); } } } ); } )(); /** * Whether to automatically enable the "show borders" command when the editor loads. * * config.startupShowBorders = false; * * @cfg {Boolean} [startupShowBorders=true] * @member CKEDITOR.config */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/menu/0000755000175000017500000000000014006075351020655 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/menu/plugin.js0000644000175000017500000004016214006075351022514 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.add( 'menu', { requires: 'floatpanel', beforeInit: function( editor ) { var groups = editor.config.menu_groups.split( ',' ), groupsOrder = editor._.menuGroups = {}, menuItems = editor._.menuItems = {}; for ( var i = 0; i < groups.length; i++ ) groupsOrder[ groups[ i ] ] = i + 1; /** * Registers an item group to the editor context menu in order to make it * possible to associate it with menu items later. * * @param {String} name Specify a group name. * @param {Number} [order=100] Define the display sequence of this group * inside the menu. A smaller value gets displayed first. * @member CKEDITOR.editor */ editor.addMenuGroup = function( name, order ) { groupsOrder[ name ] = order || 100; }; /** * Adds an item from the specified definition to the editor context menu. * * @method * @param {String} name The menu item name. * @param {Object} definition The menu item definition. * @member CKEDITOR.editor */ editor.addMenuItem = function( name, definition ) { if ( groupsOrder[ definition.group ] ) menuItems[ name ] = new CKEDITOR.menuItem( this, name, definition ); }; /** * Adds one or more items from the specified definition array to the editor context menu. * * @method * @param {Array} definitions List of definitions for each menu item as if {@link #addMenuItem} is called. * @member CKEDITOR.editor */ editor.addMenuItems = function( definitions ) { for ( var itemName in definitions ) { this.addMenuItem( itemName, definitions[ itemName ] ); } }; /** * Retrieves a particular menu item definition from the editor context menu. * * @method * @param {String} name The name of the desired menu item. * @returns {Object} * @member CKEDITOR.editor */ editor.getMenuItem = function( name ) { return menuItems[ name ]; }; /** * Removes a particular menu item added before from the editor context menu. * * @since 3.6.1 * @method * @param {String} name The name of the desired menu item. * @member CKEDITOR.editor */ editor.removeMenuItem = function( name ) { delete menuItems[ name ]; }; } } ); ( function() { var menuItemSource = '' + ''; menuItemSource += '' + '' + '' + '' + '' + '{label}' + '' + '{arrowHtml}' + '' + ''; var menuArrowSource = '' + '{label}' + ''; var menuItemTpl = CKEDITOR.addTemplate( 'menuItem', menuItemSource ), menuArrowTpl = CKEDITOR.addTemplate( 'menuArrow', menuArrowSource ); /** * @class * @todo */ CKEDITOR.menu = CKEDITOR.tools.createClass( { /** * @constructor */ $: function( editor, definition ) { definition = this._.definition = definition || {}; this.id = CKEDITOR.tools.getNextId(); this.editor = editor; this.items = []; this._.listeners = []; this._.level = definition.level || 1; var panelDefinition = CKEDITOR.tools.extend( {}, definition.panel, { css: [ CKEDITOR.skin.getPath( 'editor' ) ], level: this._.level - 1, block: {} } ); var attrs = panelDefinition.block.attributes = ( panelDefinition.attributes || {} ); // Provide default role of 'menu'. !attrs.role && ( attrs.role = 'menu' ); this._.panelDefinition = panelDefinition; }, _: { onShow: function() { var selection = this.editor.getSelection(), start = selection && selection.getStartElement(), path = this.editor.elementPath(), listeners = this._.listeners; this.removeAll(); // Call all listeners, filling the list of items to be displayed. for ( var i = 0; i < listeners.length; i++ ) { var listenerItems = listeners[ i ]( start, selection, path ); if ( listenerItems ) { for ( var itemName in listenerItems ) { var item = this.editor.getMenuItem( itemName ); if ( item && ( !item.command || this.editor.getCommand( item.command ).state ) ) { item.state = listenerItems[ itemName ]; this.add( item ); } } } } }, onClick: function( item ) { this.hide(); if ( item.onClick ) item.onClick(); else if ( item.command ) this.editor.execCommand( item.command ); }, onEscape: function( keystroke ) { var parent = this.parent; // 1. If it's sub-menu, close it, with focus restored on this. // 2. In case of a top-menu, close it, with focus returned to page. if ( parent ) parent._.panel.hideChild( 1 ); else if ( keystroke == 27 ) this.hide( 1 ); return false; }, onHide: function() { this.onHide && this.onHide(); }, showSubMenu: function( index ) { var menu = this._.subMenu, item = this.items[ index ], subItemDefs = item.getItems && item.getItems(); // If this item has no subitems, we just hide the submenu, if // available, and return back. if ( !subItemDefs ) { // Hide sub menu with focus returned. this._.panel.hideChild( 1 ); return; } // Create the submenu, if not available, or clean the existing // one. if ( menu ) menu.removeAll(); else { menu = this._.subMenu = new CKEDITOR.menu( this.editor, CKEDITOR.tools.extend( {}, this._.definition, { level: this._.level + 1 }, true ) ); menu.parent = this; menu._.onClick = CKEDITOR.tools.bind( this._.onClick, this ); } // Add all submenu items to the menu. for ( var subItemName in subItemDefs ) { var subItem = this.editor.getMenuItem( subItemName ); if ( subItem ) { subItem.state = subItemDefs[ subItemName ]; menu.add( subItem ); } } // Get the element representing the current item. var element = this._.panel.getBlock( this.id ).element.getDocument().getById( this.id + String( index ) ); // Show the submenu. // This timeout is needed to give time for the sub-menu get // focus when JAWS is running. (#9844) setTimeout( function() { menu.show( element, 2 ); }, 0 ); } }, proto: { /** * Adds an item. * * @param item */ add: function( item ) { // Later we may sort the items, but Array#sort is not stable in // some browsers, here we're forcing the original sequence with // 'order' attribute if it hasn't been assigned. (#3868) if ( !item.order ) item.order = this.items.length; this.items.push( item ); }, /** * Removes all items. */ removeAll: function() { this.items = []; }, /** * Shows the menu in given location. * * @param {CKEDITOR.dom.element} offsetParent * @param {Number} [corner] * @param {Number} [offsetX] * @param {Number} [offsetY] */ show: function( offsetParent, corner, offsetX, offsetY ) { // Not for sub menu. if ( !this.parent ) { this._.onShow(); // Don't menu with zero items. if ( !this.items.length ) return; } corner = corner || ( this.editor.lang.dir == 'rtl' ? 2 : 1 ); var items = this.items, editor = this.editor, panel = this._.panel, element = this._.element; // Create the floating panel for this menu. if ( !panel ) { panel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor, CKEDITOR.document.getBody(), this._.panelDefinition, this._.level ); panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) { if ( this._.onEscape( keystroke ) === false ) return false; }, this ); panel.onShow = function() { // Menu need CSS resets, compensate class name. var holder = panel._.panel.getHolderElement(); holder.getParent().addClass( 'cke' ).addClass( 'cke_reset_all' ); }; panel.onHide = CKEDITOR.tools.bind( function() { this._.onHide && this._.onHide(); }, this ); // Create an autosize block inside the panel. var block = panel.addBlock( this.id, this._.panelDefinition.block ); block.autoSize = true; var keys = block.keys; keys[ 40 ] = 'next'; // ARROW-DOWN keys[ 9 ] = 'next'; // TAB keys[ 38 ] = 'prev'; // ARROW-UP keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB keys[ ( editor.lang.dir == 'rtl' ? 37 : 39 ) ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // ARROW-RIGHT/ARROW-LEFT(rtl) keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). element = this._.element = block.element; var elementDoc = element.getDocument(); elementDoc.getBody().setStyle( 'overflow', 'hidden' ); elementDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' ); this._.itemOverFn = CKEDITOR.tools.addFunction( function( index ) { clearTimeout( this._.showSubTimeout ); this._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay || 400, this, [ index ] ); }, this ); this._.itemOutFn = CKEDITOR.tools.addFunction( function() { clearTimeout( this._.showSubTimeout ); }, this ); this._.itemClickFn = CKEDITOR.tools.addFunction( function( index ) { var item = this.items[ index ]; if ( item.state == CKEDITOR.TRISTATE_DISABLED ) { this.hide( 1 ); return; } if ( item.getItems ) this._.showSubMenu( index ); else this._.onClick( item ); }, this ); } // Put the items in the right order. sortItems( items ); // Apply the editor mixed direction status to menu. var path = editor.elementPath(), mixedDirCls = ( path && path.direction() != editor.lang.dir ) ? ' cke_mixed_dir_content' : ''; // Build the HTML that composes the menu and its items. var output = [ '' ); // Inject the HTML inside the panel. element.setHtml( output.join( '' ) ); CKEDITOR.ui.fire( 'ready', this ); // Show the panel. if ( this.parent ) this.parent._.panel.showAsChild( panel, this.id, offsetParent, corner, offsetX, offsetY ); else panel.showBlock( this.id, offsetParent, corner, offsetX, offsetY ); editor.fire( 'menuShow', [ panel ] ); }, /** * Adds a callback executed on opening the menu. Items * returned by that callback are added to the menu. * * @param {Function} listenerFn * @param {CKEDITOR.dom.element} listenerFn.startElement The selection start anchor element. * @param {CKEDITOR.dom.selection} listenerFn.selection The current selection. * @param {CKEDITOR.dom.elementPath} listenerFn.path The current elements path. * @param listenerFn.return Object (`commandName` => `state`) of items that should be added to the menu. */ addListener: function( listenerFn ) { this._.listeners.push( listenerFn ); }, /** * Hides the menu. * * @param {Boolean} [returnFocus] */ hide: function( returnFocus ) { this._.onHide && this._.onHide(); this._.panel && this._.panel.hide( returnFocus ); } } } ); function sortItems( items ) { items.sort( function( itemA, itemB ) { if ( itemA.group < itemB.group ) return -1; else if ( itemA.group > itemB.group ) return 1; return itemA.order < itemB.order ? -1 : itemA.order > itemB.order ? 1 : 0; } ); } /** * @class * @todo */ CKEDITOR.menuItem = CKEDITOR.tools.createClass( { $: function( editor, name, definition ) { CKEDITOR.tools.extend( this, definition, // Defaults { order: 0, className: 'cke_menubutton__' + name } ); // Transform the group name into its order number. this.group = editor._.menuGroups[ this.group ]; this.editor = editor; this.name = name; }, proto: { render: function( menu, index, output ) { var id = menu.id + String( index ), state = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state, ariaChecked = ''; var stateName = state == CKEDITOR.TRISTATE_ON ? 'on' : state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off'; if ( this.role in { menuitemcheckbox: 1, menuitemradio: 1 } ) ariaChecked = ' aria-checked="' + ( state == CKEDITOR.TRISTATE_ON ? 'true' : 'false' ) + '"'; var hasSubMenu = this.getItems; // ltr: BLACK LEFT-POINTING POINTER // rtl: BLACK RIGHT-POINTING POINTER var arrowLabel = '&#' + ( this.editor.lang.dir == 'rtl' ? '9668' : '9658' ) + ';'; var iconName = this.name; if ( this.icon && !( /\./ ).test( this.icon ) ) iconName = this.icon; var params = { id: id, name: this.name, iconName: iconName, label: this.label, cls: this.className || '', state: stateName, hasPopup: hasSubMenu ? 'true' : 'false', disabled: state == CKEDITOR.TRISTATE_DISABLED, title: this.label, href: 'javascript:void(\'' + ( this.label || '' ).replace( "'" + '' ) + '\')', // jshint ignore:line hoverFn: menu._.itemOverFn, moveOutFn: menu._.itemOutFn, clickFn: menu._.itemClickFn, index: index, iconStyle: CKEDITOR.skin.getIconStyle( iconName, ( this.editor.lang.dir == 'rtl' ), iconName == this.icon ? null : this.icon, this.iconOffset ), arrowHtml: hasSubMenu ? menuArrowTpl.output( { label: arrowLabel } ) : '', role: this.role ? this.role : 'menuitem', ariaChecked: ariaChecked }; menuItemTpl.output( params, output ); } } } ); } )(); /** * The amount of time, in milliseconds, the editor waits before displaying submenu * options when moving the mouse over options that contain submenus, like the * "Cell Properties" entry for tables. * * // Remove the submenu delay. * config.menu_subMenuDelay = 0; * * @cfg {Number} [menu_subMenuDelay=400] * @member CKEDITOR.config */ /** * Fired when a menu is shown. * * @event menuShow * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param {CKEDITOR.ui.panel[]} data */ /** * A comma separated list of items group names to be displayed in the context * menu. The order of items will reflect the order specified in this list if * no priority was defined in the groups. * * config.menu_groups = 'clipboard,table,anchor,link,image'; * * @cfg {String} [menu_groups=see source] * @member CKEDITOR.config */ CKEDITOR.config.menu_groups = 'clipboard,' + 'form,' + 'tablecell,tablecellproperties,tablerow,tablecolumn,table,' + 'anchor,link,image,flash,' + 'checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div'; rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/0000755000175000017500000000000014006075351022605 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/filter/0000755000175000017500000000000014006075351024072 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/filter/default.js0000644000175000017500000012747314006075351026072 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { var fragmentPrototype = CKEDITOR.htmlParser.fragment.prototype, elementPrototype = CKEDITOR.htmlParser.element.prototype; fragmentPrototype.onlyChild = elementPrototype.onlyChild = function() { var children = this.children, count = children.length, firstChild = ( count == 1 ) && children[ 0 ]; return firstChild || null; }; elementPrototype.removeAnyChildWithName = function( tagName ) { var children = this.children, childs = [], child; for ( var i = 0; i < children.length; i++ ) { child = children[ i ]; if ( !child.name ) continue; if ( child.name == tagName ) { childs.push( child ); children.splice( i--, 1 ); } childs = childs.concat( child.removeAnyChildWithName( tagName ) ); } return childs; }; elementPrototype.getAncestor = function( tagNameRegex ) { var parent = this.parent; while ( parent && !( parent.name && parent.name.match( tagNameRegex ) ) ) parent = parent.parent; return parent; }; fragmentPrototype.firstChild = elementPrototype.firstChild = function( evaluator ) { var child; for ( var i = 0; i < this.children.length; i++ ) { child = this.children[ i ]; if ( evaluator( child ) ) return child; else if ( child.name ) { child = child.firstChild( evaluator ); if ( child ) return child; } } return null; }; // Adding a (set) of styles to the element's 'style' attributes. elementPrototype.addStyle = function( name, value, isPrepend ) { var styleText, addingStyleText = ''; // name/value pair. if ( typeof value == 'string' ) addingStyleText += name + ':' + value + ';'; else { // style literal. if ( typeof name == 'object' ) { for ( var style in name ) { if ( name.hasOwnProperty( style ) ) addingStyleText += style + ':' + name[ style ] + ';'; } } // raw style text form. else { addingStyleText += name; } isPrepend = value; } if ( !this.attributes ) this.attributes = {}; styleText = this.attributes.style || ''; styleText = ( isPrepend ? [ addingStyleText, styleText ] : [ styleText, addingStyleText ] ).join( ';' ); this.attributes.style = styleText.replace( /^;+|;(?=;)/g, '' ); }; // Retrieve a style property value of the element. elementPrototype.getStyle = function( name ) { var styles = this.attributes.style; if ( styles ) { styles = CKEDITOR.tools.parseCssText( styles, 1 ); return styles[ name ]; } }; /** * Return the DTD-valid parent tag names of the specified one. * * @member CKEDITOR.dtd * @param {String} tagName * @returns {Object} */ CKEDITOR.dtd.parentOf = function( tagName ) { var result = {}; for ( var tag in this ) { if ( tag.indexOf( '$' ) == -1 && this[ tag ][ tagName ] ) result[ tag ] = 1; } return result; }; // 1. move consistent list item styles up to list root. // 2. clear out unnecessary list item numbering. function postProcessList( list ) { var children = list.children, child, attrs, count = list.children.length, match, mergeStyle, styleTypeRegexp = /list-style-type:(.*?)(?:;|$)/, stylesFilter = CKEDITOR.plugins.pastefromword.filters.stylesFilter; attrs = list.attributes; if ( styleTypeRegexp.exec( attrs.style ) ) return; for ( var i = 0; i < count; i++ ) { child = children[ i ]; if ( child.attributes.value && Number( child.attributes.value ) == i + 1 ) delete child.attributes.value; match = styleTypeRegexp.exec( child.attributes.style ); if ( match ) { if ( match[ 1 ] == mergeStyle || !mergeStyle ) mergeStyle = match[ 1 ]; else { mergeStyle = null; break; } } } if ( mergeStyle ) { for ( i = 0; i < count; i++ ) { attrs = children[ i ].attributes; attrs.style && ( attrs.style = stylesFilter( [ [ 'list-style-type' ] ] )( attrs.style ) || '' ); } list.addStyle( 'list-style-type', mergeStyle ); } } var emptyMarginRegex = /^(?:\b0[^\s]*\s*){1,4}$/; // e.g. 0px 0pt 0px var romanLiternalPattern = '^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$', lowerRomanLiteralRegex = new RegExp( romanLiternalPattern ), upperRomanLiteralRegex = new RegExp( romanLiternalPattern.toUpperCase() ); var orderedPatterns = { 'decimal': /\d+/, 'lower-roman': lowerRomanLiteralRegex, 'upper-roman': upperRomanLiteralRegex, 'lower-alpha': /^[a-z]+$/, 'upper-alpha': /^[A-Z]+$/ }, unorderedPatterns = { 'disc': /[l\u00B7\u2002]/, 'circle': /[\u006F\u00D8]/, 'square': /[\u006E\u25C6]/ }, listMarkerPatterns = { 'ol': orderedPatterns, 'ul': unorderedPatterns }, romans = [ [ 1000, 'M' ], [ 900, 'CM' ], [ 500, 'D' ], [ 400, 'CD' ], [ 100, 'C' ], [ 90, 'XC' ], [ 50, 'L' ], [ 40, 'XL' ], [ 10, 'X' ], [ 9, 'IX' ], [ 5, 'V' ], [ 4, 'IV' ], [ 1, 'I' ] ], alpahbets = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // Convert roman numbering back to decimal. function fromRoman( str ) { str = str.toUpperCase(); var l = romans.length, retVal = 0; for ( var i = 0; i < l; ++i ) { for ( var j = romans[ i ], k = j[ 1 ].length; str.substr( 0, k ) == j[ 1 ]; str = str.substr( k ) ) retVal += j[ 0 ]; } return retVal; } // Convert alphabet numbering back to decimal. function fromAlphabet( str ) { str = str.toUpperCase(); var l = alpahbets.length, retVal = 1; for ( var x = 1; str.length > 0; x *= l ) { retVal += alpahbets.indexOf( str.charAt( str.length - 1 ) ) * x; str = str.substr( 0, str.length - 1 ); } return retVal; } var listBaseIndent = 0, previousListItemMargin = null, previousListId; var plugin = ( CKEDITOR.plugins.pastefromword = { utils: { // Create a which indicate an list item type. createListBulletMarker: function( bullet, bulletText ) { var marker = new CKEDITOR.htmlParser.element( 'cke:listbullet' ); marker.attributes = { 'cke:listsymbol': bullet[ 0 ] }; marker.add( new CKEDITOR.htmlParser.text( bulletText ) ); return marker; }, isListBulletIndicator: function( element ) { var styleText = element.attributes && element.attributes.style; if ( /mso-list\s*:\s*Ignore/i.test( styleText ) ) return true; }, isContainingOnlySpaces: function( element ) { var text; return ( ( text = element.onlyChild() ) && ( /^(:?\s| )+$/ ).test( text.value ) ); }, resolveList: function( element ) { // indicate a list item. var attrs = element.attributes, listMarker; if ( ( listMarker = element.removeAnyChildWithName( 'cke:listbullet' ) ) && listMarker.length && ( listMarker = listMarker[ 0 ] ) ) { element.name = 'cke:li'; if ( attrs.style ) { attrs.style = plugin.filters.stylesFilter( [ // Text-indent is not representing list item level any more. [ 'text-indent' ], [ 'line-height' ], // First attempt is to resolve indent level from on a constant margin increment. [ ( /^margin(:?-left)?$/ ), null, function( margin ) { // Deal with component/short-hand form. var values = margin.split( ' ' ); margin = CKEDITOR.tools.convertToPx( values[ 3 ] || values[ 1 ] || values[ 0 ] ); // Figure out the indent unit by checking the first time of incrementation. if ( !listBaseIndent && previousListItemMargin !== null && margin > previousListItemMargin ) listBaseIndent = margin - previousListItemMargin; previousListItemMargin = margin; attrs[ 'cke:indent' ] = listBaseIndent && ( Math.ceil( margin / listBaseIndent ) + 1 ) || 1; } ], // The best situation: "mso-list:l0 level1 lfo2" tells the belonged list root, list item indentation, etc. [ ( /^mso-list$/ ), null, function( val ) { val = val.split( ' ' ); // Ignore values like "mso-list:Ignore". (FF #11976) if ( val.length < 2 ) { return; } var listId = Number( val[ 0 ].match( /\d+/ ) ), indent = Number( val[ 1 ].match( /\d+/ ) ); if ( indent == 1 ) { listId !== previousListId && ( attrs[ 'cke:reset' ] = 1 ); previousListId = listId; } attrs[ 'cke:indent' ] = indent; } ] ] )( attrs.style, element ) || ''; } // First level list item might be presented without a margin. // In case all above doesn't apply. if ( !attrs[ 'cke:indent' ] ) { previousListItemMargin = 0; attrs[ 'cke:indent' ] = 1; } // Inherit attributes from bullet. CKEDITOR.tools.extend( attrs, listMarker.attributes ); return true; } // Current list disconnected. else { previousListId = previousListItemMargin = listBaseIndent = null; } return false; }, // Providing a shorthand style then retrieve one or more style component values. getStyleComponents: ( function() { var calculator = CKEDITOR.dom.element.createFromHtml( '
    ', CKEDITOR.document ); CKEDITOR.document.getBody().append( calculator ); return function( name, styleValue, fetchList ) { calculator.setStyle( name, styleValue ); var styles = {}, count = fetchList.length; for ( var i = 0; i < count; i++ ) styles[ fetchList[ i ] ] = calculator.getStyle( fetchList[ i ] ); return styles; }; } )(), listDtdParents: CKEDITOR.dtd.parentOf( 'ol' ) }, filters: { // Transform a normal list into flat list items only presentation. // E.g.
    • level1
      1. level2
    • => // level1 // level2 flattenList: function( element, level ) { level = typeof level == 'number' ? level : 1; var attrs = element.attributes, listStyleType; // All list items are of the same type. switch ( attrs.type ) { case 'a': listStyleType = 'lower-alpha'; break; case '1': listStyleType = 'decimal'; break; // TODO: Support more list style type from MS-Word. } var children = element.children, child; for ( var i = 0; i < children.length; i++ ) { child = children[ i ]; if ( child.name in CKEDITOR.dtd.$listItem ) { var attributes = child.attributes, listItemChildren = child.children, count = listItemChildren.length, first = listItemChildren[ 0 ], last = listItemChildren[ count - 1 ]; // Converts
    • {...}

    • ->
    • {...}
    • . // The above format is what we got when pasting from Word 2010 to IE11 and possibly some others. // Existence of extra

      tag that can be later recognized as list item (see #getRules.return.elements.p) // creates incorrect and problematic structures similar to {...}. (#11376) if ( first.attributes && first.attributes.style && first.attributes.style.indexOf( 'mso-list' ) > -1 ) { child.attributes.style = first.attributes.style; first.replaceWithChildren(); } // Move out nested list. if ( last.name in CKEDITOR.dtd.$list ) { element.add( last, i + 1 ); // Remove the parent list item if it's just a holder. if ( !--listItemChildren.length ) children.splice( i--, 1 ); } child.name = 'cke:li'; // Inherit numbering from list root on the first list item. attrs.start && !i && ( attributes.value = attrs.start ); plugin.filters.stylesFilter( [ [ 'tab-stops', null, function( val ) { // val = [left|center|right|decimal] Source: W3C, WD-tabs-970117. // In some cases the first word is missing - hence the square brackets. var margin = val.match( /0$|\d+\.?\d*\w+/ ); margin && ( previousListItemMargin = CKEDITOR.tools.convertToPx( margin[ 0 ] ) ); } ], ( level == 1 ? [ 'mso-list', null, function( val ) { val = val.split( ' ' ); var listId = Number( val[ 0 ].match( /\d+/ ) ); listId !== previousListId && ( attributes[ 'cke:reset' ] = 1 ); previousListId = listId; } ] : null ) ] )( attributes.style ); attributes[ 'cke:indent' ] = level; attributes[ 'cke:listtype' ] = element.name; attributes[ 'cke:list-style-type' ] = listStyleType; } // Flatten sub list. else if ( child.name in CKEDITOR.dtd.$list ) { // Absorb sub list children. arguments.callee.apply( this, [ child, level + 1 ] ); children = children.slice( 0, i ).concat( child.children ).concat( children.slice( i + 1 ) ); element.children = []; for ( var j = 0, num = children.length; j < num; j++ ) element.add( children[ j ] ); children = element.children; } } delete element.name; // We're loosing tag name here, signalize this element as a list. attrs[ 'cke:list' ] = 1; }, // Try to collect all list items among the children and establish one // or more HTML list structures for them. // @param element assembleList: function( element ) { var children = element.children, child, listItem, // The current processing cke:li element. listItemAttrs, listItemIndent, // Indent level of current list item. lastIndent, lastListItem, // The previous one just been added to the list. list, // Current staging list and it's parent list if any. openedLists = [], previousListStyleType, previousListType; // Properties of the list item are to be resolved from the list bullet. var bullet, listType, listStyleType, itemNumeric; for ( var i = 0; i < children.length; i++ ) { child = children[ i ]; if ( child.name == 'cke:li' ) { child.name = 'li'; listItem = child; listItemAttrs = listItem.attributes; bullet = listItemAttrs[ 'cke:listsymbol' ]; bullet = bullet && bullet.match( /^(?:[(]?)([^\s]+?)([.)]?)$/ ); listType = listStyleType = itemNumeric = null; if ( listItemAttrs[ 'cke:ignored' ] ) { children.splice( i--, 1 ); continue; } // This's from a new list root. listItemAttrs[ 'cke:reset' ] && ( list = lastIndent = lastListItem = null ); // List item indent level might come from a real list indentation or // been resolved from a pseudo list item's margin value, even get // no indentation at all. listItemIndent = Number( listItemAttrs[ 'cke:indent' ] ); // We're moving out of the current list, cleaning up. if ( listItemIndent != lastIndent ) previousListType = previousListStyleType = null; // List type and item style are already resolved. if ( !bullet ) { listType = listItemAttrs[ 'cke:listtype' ] || 'ol'; listStyleType = listItemAttrs[ 'cke:list-style-type' ]; } else { // Probably share the same list style type with previous list item, // give it priority to avoid ambiguous between C(Alpha) and C.(Roman). if ( previousListType && listMarkerPatterns[ previousListType ][ previousListStyleType ].test( bullet[ 1 ] ) ) { listType = previousListType; listStyleType = previousListStyleType; } else { for ( var type in listMarkerPatterns ) { for ( var style in listMarkerPatterns[ type ] ) { if ( listMarkerPatterns[ type ][ style ].test( bullet[ 1 ] ) ) { // Small numbering has higher priority, when dealing with ambiguous // between C(Alpha) and C.(Roman). if ( type == 'ol' && ( /alpha|roman/ ).test( style ) ) { var num = /roman/.test( style ) ? fromRoman( bullet[ 1 ] ) : fromAlphabet( bullet[ 1 ] ); if ( !itemNumeric || num < itemNumeric ) { itemNumeric = num; listType = type; listStyleType = style; } } else { listType = type; listStyleType = style; break; } } } } } // Simply use decimal/disc for the rest forms of unrepresentable // numerals, e.g. Chinese..., but as long as there a second part // included, it has a bigger chance of being a order list ;) !listType && ( listType = bullet[ 2 ] ? 'ol' : 'ul' ); } previousListType = listType; previousListStyleType = listStyleType || ( listType == 'ol' ? 'decimal' : 'disc' ); if ( listStyleType && listStyleType != ( listType == 'ol' ? 'decimal' : 'disc' ) ) listItem.addStyle( 'list-style-type', listStyleType ); // Figure out start numbering. if ( listType == 'ol' && bullet ) { switch ( listStyleType ) { case 'decimal': itemNumeric = Number( bullet[ 1 ] ); break; case 'lower-roman': case 'upper-roman': itemNumeric = fromRoman( bullet[ 1 ] ); break; case 'lower-alpha': case 'upper-alpha': itemNumeric = fromAlphabet( bullet[ 1 ] ); break; } // Always create the numbering, swipe out unnecessary ones later. listItem.attributes.value = itemNumeric; } // Start the list construction. if ( !list ) { openedLists.push( list = new CKEDITOR.htmlParser.element( listType ) ); list.add( listItem ); children[ i ] = list; } else { if ( listItemIndent > lastIndent ) { openedLists.push( list = new CKEDITOR.htmlParser.element( listType ) ); list.add( listItem ); lastListItem.add( list ); } else if ( listItemIndent < lastIndent ) { // There might be a negative gap between two list levels. (#4944) var diff = lastIndent - listItemIndent, parent; while ( diff-- && ( parent = list.parent ) ) list = parent.parent; list.add( listItem ); } else { list.add( listItem ); } children.splice( i--, 1 ); } lastListItem = listItem; lastIndent = listItemIndent; } else if ( list ) { list = lastIndent = lastListItem = null; } } for ( i = 0; i < openedLists.length; i++ ) postProcessList( openedLists[ i ] ); list = lastIndent = lastListItem = previousListId = previousListItemMargin = listBaseIndent = null; }, // A simple filter which always rejecting. falsyFilter: function() { return false; }, // A filter dedicated on the 'style' attribute filtering, e.g. dropping/replacing style properties. // @param styles {Array} in form of [ styleNameRegexp, styleValueRegexp, // newStyleValue/newStyleGenerator, newStyleName ] where only the first // parameter is mandatory. // @param whitelist {Boolean} Whether the {@param styles} will be considered as a white-list. stylesFilter: function( styles, whitelist ) { return function( styleText, element ) { var rules = []; // html-encoded quote might be introduced by 'font-family' // from MS-Word which confused the following regexp. e.g. //'font-family: "Lucida, Console"' ( styleText || '' ).replace( /"/g, '"' ).replace( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function( match, name, value ) { name = name.toLowerCase(); name == 'font-family' && ( value = value.replace( /["']/g, '' ) ); var namePattern, valuePattern, newValue, newName; for ( var i = 0; i < styles.length; i++ ) { if ( styles[ i ] ) { namePattern = styles[ i ][ 0 ]; valuePattern = styles[ i ][ 1 ]; newValue = styles[ i ][ 2 ]; newName = styles[ i ][ 3 ]; if ( name.match( namePattern ) && ( !valuePattern || value.match( valuePattern ) ) ) { name = newName || name; whitelist && ( newValue = newValue || value ); if ( typeof newValue == 'function' ) newValue = newValue( value, element, name ); // Return an couple indicate both name and value // changed. if ( newValue && newValue.push ) name = newValue[ 0 ], newValue = newValue[ 1 ]; if ( typeof newValue == 'string' ) rules.push( [ name, newValue ] ); return; } } } !whitelist && rules.push( [ name, value ] ); } ); for ( var i = 0; i < rules.length; i++ ) rules[ i ] = rules[ i ].join( ':' ); return rules.length ? ( rules.join( ';' ) + ';' ) : false; }; }, // Migrate the element by decorate styles on it. // @param styleDefinition // @param variables elementMigrateFilter: function( styleDefinition, variables ) { return styleDefinition ? function( element ) { var styleDef = variables ? new CKEDITOR.style( styleDefinition, variables )._.definition : styleDefinition; element.name = styleDef.element; CKEDITOR.tools.extend( element.attributes, CKEDITOR.tools.clone( styleDef.attributes ) ); element.addStyle( CKEDITOR.style.getStyleText( styleDef ) ); // Mark style classes as allowed so they will not be filtered out (#12256). if ( styleDef.attributes && styleDef.attributes[ 'class' ] ) { element.classWhiteList = ' ' + styleDef.attributes[ 'class' ] + ' '; } } : function() {}; }, // Migrate styles by creating a new nested stylish element. // @param styleDefinition styleMigrateFilter: function( styleDefinition, variableName ) { var elementMigrateFilter = this.elementMigrateFilter; return styleDefinition ? function( value, element ) { // Build an stylish element first. var styleElement = new CKEDITOR.htmlParser.element( null ), variables = {}; variables[ variableName ] = value; elementMigrateFilter( styleDefinition, variables )( styleElement ); // Place the new element inside the existing span. styleElement.children = element.children; element.children = [ styleElement ]; // #10285 - later on styleElement will replace element if element won't have any attributes. // However, in some cases styleElement is identical to element and therefore should not be filtered // to avoid inf loop. Unfortunately calling element.filterChildren() does not prevent from that (#10327). // However, we can assume that we don't need to filter styleElement at all, so it is safe to replace // its filter method. styleElement.filter = function() {}; styleElement.parent = element; } : function() {}; }, // A filter which remove cke-namespaced-attribute on // all none-cke-namespaced elements. // @param value // @param element bogusAttrFilter: function( value, element ) { if ( element.name.indexOf( 'cke:' ) == -1 ) return false; }, // A filter which will be used to apply inline css style according the stylesheet // definition rules, is generated lazily when filtering. applyStyleFilter: null }, getRules: function( editor, filter ) { var dtd = CKEDITOR.dtd, blockLike = CKEDITOR.tools.extend( {}, dtd.$block, dtd.$listItem, dtd.$tableContent ), config = editor.config, filters = this.filters, falsyFilter = filters.falsyFilter, stylesFilter = filters.stylesFilter, elementMigrateFilter = filters.elementMigrateFilter, styleMigrateFilter = CKEDITOR.tools.bind( this.filters.styleMigrateFilter, this.filters ), createListBulletMarker = this.utils.createListBulletMarker, flattenList = filters.flattenList, assembleList = filters.assembleList, isListBulletIndicator = this.utils.isListBulletIndicator, containsNothingButSpaces = this.utils.isContainingOnlySpaces, resolveListItem = this.utils.resolveList, convertToPx = function( value ) { value = CKEDITOR.tools.convertToPx( value ); return isNaN( value ) ? value : value + 'px'; }, getStyleComponents = this.utils.getStyleComponents, listDtdParents = this.utils.listDtdParents, removeFontStyles = config.pasteFromWordRemoveFontStyles !== false, removeStyles = config.pasteFromWordRemoveStyles !== false; return { elementNames: [ // Remove script, meta and link elements. [ ( /meta|link|script/ ), '' ] ], root: function( element ) { element.filterChildren( filter ); assembleList( element ); }, elements: { '^': function( element ) { // Transform CSS style declaration to inline style. var applyStyleFilter; if ( CKEDITOR.env.gecko && ( applyStyleFilter = filters.applyStyleFilter ) ) applyStyleFilter( element ); }, $: function( element ) { var tagName = element.name || '', attrs = element.attributes; // Convert length unit of width/height on blocks to // a more editor-friendly way (px). if ( tagName in blockLike && attrs.style ) attrs.style = stylesFilter( [ [ ( /^(:?width|height)$/ ), null, convertToPx ] ] )( attrs.style ) || ''; // Processing headings. if ( tagName.match( /h\d/ ) ) { element.filterChildren( filter ); // Is the heading actually a list item? if ( resolveListItem( element ) ) return; // Adapt heading styles to editor's convention. elementMigrateFilter( config[ 'format_' + tagName ] )( element ); } // Remove inline elements which contain only empty spaces. else if ( tagName in dtd.$inline ) { element.filterChildren( filter ); if ( containsNothingButSpaces( element ) ) delete element.name; } // Remove element with ms-office namespace, // with it's content preserved, e.g. 'o:p'. else if ( tagName.indexOf( ':' ) != -1 && tagName.indexOf( 'cke' ) == -1 ) { element.filterChildren( filter ); // Restore image real link from vml. if ( tagName == 'v:imagedata' ) { var href = element.attributes[ 'o:href' ]; if ( href ) element.attributes.src = href; element.name = 'img'; return; } delete element.name; } // Assembling list items into a whole list. if ( tagName in listDtdParents ) { element.filterChildren( filter ); assembleList( element ); } }, // We'll drop any style sheet, but Firefox conclude // certain styles in a single style element, which are // required to be changed into inline ones. 'style': function( element ) { if ( CKEDITOR.env.gecko ) { // Grab only the style definition section. var styleDefSection = element.onlyChild().value.match( /\/\* Style Definitions \*\/([\s\S]*?)\/\*/ ), styleDefText = styleDefSection && styleDefSection[ 1 ], rules = {}; // Storing the parsed result. if ( styleDefText ) { styleDefText // Remove line-breaks. .replace( /[\n\r]/g, '' ) // Extract selectors and style properties. .replace( /(.+?)\{(.+?)\}/g, function( rule, selectors, styleBlock ) { selectors = selectors.split( ',' ); var length = selectors.length; for ( var i = 0; i < length; i++ ) { // Assume MS-Word mostly generate only simple // selector( [Type selector][Class selector]). CKEDITOR.tools.trim( selectors[ i ] ).replace( /^(\w+)(\.[\w-]+)?$/g, function( match, tagName, className ) { tagName = tagName || '*'; className = className.substring( 1, className.length ); // Reject MS-Word Normal styles. if ( className.match( /MsoNormal/ ) ) return; if ( !rules[ tagName ] ) rules[ tagName ] = {}; if ( className ) rules[ tagName ][ className ] = styleBlock; else rules[ tagName ] = styleBlock; } ); } } ); filters.applyStyleFilter = function( element ) { var name = rules[ '*' ] ? '*' : element.name, className = element.attributes && element.attributes[ 'class' ], style; if ( name in rules ) { style = rules[ name ]; if ( typeof style == 'object' ) style = style[ className ]; // Maintain style rules priorities. style && element.addStyle( style, true ); } }; } } return false; }, 'p': function( element ) { // A a fall-back approach to resolve list item in browsers // that doesn't include "mso-list:Ignore" on list bullets, // note it's not perfect as not all list style (e.g. "heading list") is shipped // with this pattern. (#6662) if ( ( /MsoListParagraph/i ).exec( element.attributes[ 'class' ] ) || ( element.getStyle( 'mso-list' ) && !element.getStyle( 'mso-list' ).match( /^(none|skip)$/i ) ) ) { var bulletText = element.firstChild( function( node ) { return node.type == CKEDITOR.NODE_TEXT && !containsNothingButSpaces( node.parent ); } ); var bullet = bulletText && bulletText.parent; if ( bullet ) bullet.addStyle( 'mso-list', 'Ignore' ); } element.filterChildren( filter ); // Is the paragraph actually a list item? if ( resolveListItem( element ) ) return; // Adapt paragraph formatting to editor's convention // according to enter-mode. if ( config.enterMode == CKEDITOR.ENTER_BR ) { // We suffer from attribute/style lost in this situation. delete element.name; element.add( new CKEDITOR.htmlParser.element( 'br' ) ); } else { elementMigrateFilter( config[ 'format_' + ( config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ] )( element ); } }, 'div': function( element ) { // Aligned table with no text surrounded is represented by a wrapper div, from which // table cells inherit as text-align styles, which is wrong. // Instead we use a clear-float div after the table to properly achieve the same layout. var singleChild = element.onlyChild(); if ( singleChild && singleChild.name == 'table' ) { var attrs = element.attributes; singleChild.attributes = CKEDITOR.tools.extend( singleChild.attributes, attrs ); attrs.style && singleChild.addStyle( attrs.style ); var clearFloatDiv = new CKEDITOR.htmlParser.element( 'div' ); clearFloatDiv.addStyle( 'clear', 'both' ); element.add( clearFloatDiv ); delete element.name; } }, 'td': function( element ) { // 'td' in 'thead' is actually . if ( element.getAncestor( 'thead' ) ) element.name = 'th'; }, // MS-Word sometimes present list as a mixing of normal list // and pseudo-list, normalize the previous ones into pseudo form. 'ol': flattenList, 'ul': flattenList, 'dl': flattenList, 'font': function( element ) { // Drop the font tag if it comes from list bullet text. if ( isListBulletIndicator( element.parent ) ) { delete element.name; return; } element.filterChildren( filter ); var attrs = element.attributes, styleText = attrs.style, parent = element.parent; if ( parent.name == 'font' ) { // Merge nested tags. CKEDITOR.tools.extend( parent.attributes, element.attributes ); styleText && parent.addStyle( styleText ); delete element.name; } // Convert the merged into a span with all attributes preserved. else { // Use array to avoid string concatenation and get rid of problems with trailing ";" (#12243). styleText = ( styleText || '' ).split( ';' ); // IE's having those deprecated attributes, normalize them. if ( attrs.color ) { if ( attrs.color != '#000000' ) styleText.push( 'color:' + attrs.color ); delete attrs.color; } if ( attrs.face ) { styleText.push( 'font-family:' + attrs.face ); delete attrs.face; } // TODO: Mapping size in ranges of xx-small, // x-small, small, medium, large, x-large, xx-large. if ( attrs.size ) { styleText.push( 'font-size:' + ( attrs.size > 3 ? 'large' : ( attrs.size < 3 ? 'small' : 'medium' ) ) ); delete attrs.size; } element.name = 'span'; element.addStyle( styleText.join( ';' ) ); } }, 'span': function( element ) { // Remove the span if it comes from list bullet text. if ( isListBulletIndicator( element.parent ) ) return false; element.filterChildren( filter ); if ( containsNothingButSpaces( element ) ) { delete element.name; return null; } // List item bullet type is supposed to be indicated by // the text of a span with style 'mso-list : Ignore' or an image. if ( isListBulletIndicator( element ) ) { var listSymbolNode = element.firstChild( function( node ) { return node.value || node.name == 'img'; } ); var listSymbol = listSymbolNode && ( listSymbolNode.value || 'l.' ), listType = listSymbol && listSymbol.match( /^(?:[(]?)([^\s]+?)([.)]?)$/ ); if ( listType ) { var marker = createListBulletMarker( listType, listSymbol ); // Some non-existed list items might be carried by an inconsequential list, indicate by "mso-hide:all/display:none", // those are to be removed later, now mark it with "cke:ignored". var ancestor = element.getAncestor( 'span' ); if ( ancestor && ( / mso-hide:\s*all|display:\s*none / ).test( ancestor.attributes.style ) ) marker.attributes[ 'cke:ignored' ] = 1; return marker; } } // Update the src attribute of image element with href. var attrs = element.attributes, styleText = attrs && attrs.style; // Assume MS-Word mostly carry font related styles on , // adapting them to editor's convention. if ( styleText ) { attrs.style = stylesFilter( [ // Drop 'inline-height' style which make lines overlapping. [ 'line-height' ], [ ( /^font-family$/ ), null, !removeFontStyles ? styleMigrateFilter( config.font_style, 'family' ) : null ], [ ( /^font-size$/ ), null, !removeFontStyles ? styleMigrateFilter( config.fontSize_style, 'size' ) : null ], [ ( /^color$/ ), null, !removeFontStyles ? styleMigrateFilter( config.colorButton_foreStyle, 'color' ) : null ], [ ( /^background-color$/ ), null, !removeFontStyles ? styleMigrateFilter( config.colorButton_backStyle, 'color' ) : null ] ] )( styleText, element ) || ''; } if ( !attrs.style ) delete attrs.style; if ( CKEDITOR.tools.isEmpty( attrs ) ) delete element.name; return null; }, // Migrate basic style formats to editor configured ones. b: elementMigrateFilter( config.coreStyles_bold ), i: elementMigrateFilter( config.coreStyles_italic ), u: elementMigrateFilter( config.coreStyles_underline ), s: elementMigrateFilter( config.coreStyles_strike ), sup: elementMigrateFilter( config.coreStyles_superscript ), sub: elementMigrateFilter( config.coreStyles_subscript ), // Remove full paths from links to anchors. a: function( element ) { var attrs = element.attributes; if ( attrs.name && attrs.name.match( /ole_link\d+/i ) ) { delete element.name; return; } if ( attrs.href && attrs.href.match( /^file:\/\/\/[\S]+#/i ) ) attrs.href = attrs.href.replace( /^file:\/\/\/[^#]+/i, '' ); }, 'cke:listbullet': function( element ) { if ( element.getAncestor( /h\d/ ) && !config.pasteFromWordNumberedHeadingToList ) delete element.name; } }, attributeNames: [ // Remove onmouseover and onmouseout events (from MS Word comments effect) [ ( /^onmouse(:?out|over)/ ), '' ], // Onload on image element. [ ( /^onload$/ ), '' ], // Remove office and vml attribute from elements. [ ( /(?:v|o):\w+/ ), '' ], // Remove lang/language attributes. [ ( /^lang/ ), '' ] ], attributes: { 'style': stylesFilter( removeStyles ? // Provide a white-list of styles that we preserve, those should // be the ones that could later be altered with editor tools. [ // Leave list-style-type [ ( /^list-style-type$/ ), null ], // Preserve margin-left/right which used as default indent style in the editor. [ ( /^margin$|^margin-(?!bottom|top)/ ), null, function( value, element, name ) { if ( element.name in { p: 1, div: 1 } ) { var indentStyleName = config.contentsLangDirection == 'ltr' ? 'margin-left' : 'margin-right'; // Extract component value from 'margin' shorthand. if ( name == 'margin' ) value = getStyleComponents( name, value, [ indentStyleName ] )[ indentStyleName ]; else if ( name != indentStyleName ) return null; if ( value && !emptyMarginRegex.test( value ) ) return [ indentStyleName, value ]; } return null; } ], // Preserve clear float style. [ ( /^clear$/ ) ], [ ( /^border.*|margin.*|vertical-align|float$/ ), null, function( value, element ) { if ( element.name == 'img' ) return value; } ], [ ( /^width|height$/ ), null, function( value, element ) { if ( element.name in { table: 1, td: 1, th: 1, img: 1 } ) return value; } ] ] : // Otherwise provide a black-list of styles that we remove. [ [ ( /^mso-/ ) ], // Fixing color values. [ ( /-color$/ ), null, function( value ) { if ( value == 'transparent' ) return false; if ( CKEDITOR.env.gecko ) return value.replace( /-moz-use-text-color/g, 'transparent' ); } ], // Remove empty margin values, e.g. 0.00001pt 0em 0pt [ ( /^margin$/ ), emptyMarginRegex ], [ 'text-indent', '0cm' ], [ 'page-break-before' ], [ 'tab-stops' ], [ 'display', 'none' ], removeFontStyles ? [ ( /font-?/ ) ] : null ], removeStyles ), // Prefer width styles over 'width' attributes. 'width': function( value, element ) { if ( element.name in dtd.$tableContent ) return false; }, // Prefer border styles over table 'border' attributes. 'border': function( value, element ) { if ( element.name in dtd.$tableContent ) return false; }, // Only Firefox carry style sheet from MS-Word, which // will be applied by us manually. For other browsers // the css className is useless. // We need to keep classes added as a style (#12256). 'class': function( value, element ) { if ( element.classWhiteList && element.classWhiteList.indexOf( ' ' + value + ' ' ) != -1 ) { return value; } return false; }, // MS-Word always generate 'background-color' along with 'bgcolor', // simply drop the deprecated attributes. 'bgcolor': falsyFilter, // Deprecate 'valign' attribute in favor of 'vertical-align'. 'valign': removeStyles ? falsyFilter : function( value, element ) { element.addStyle( 'vertical-align', value ); return false; } }, // Fore none-IE, some useful data might be buried under these IE-conditional // comments where RegExp were the right approach to dig them out where usual approach // is transform it into a fake element node which hold the desired data. comment: !CKEDITOR.env.ie ? function( value, node ) { var imageInfo = value.match( // ), listInfo = value.match( /^\[if !supportLists\]([\s\S]*?)\[endif\]$/ ); // Seek for list bullet indicator. if ( listInfo ) { // Bullet symbol could be either text or an image. var listSymbol = listInfo[ 1 ] || ( imageInfo && 'l.' ), listType = listSymbol && listSymbol.match( />(?:[(]?)([^\s]+?)([.)]?) element in conditional comments for Firefox. if ( CKEDITOR.env.gecko && imageInfo ) { var img = CKEDITOR.htmlParser.fragment.fromHtml( imageInfo[ 0 ] ).children[ 0 ], previousComment = node.previous, // Try to dig the real image link from vml markup from previous comment text. imgSrcInfo = previousComment && previousComment.value.match( /]*o:href=['"](.*?)['"]/ ), imgSrc = imgSrcInfo && imgSrcInfo[ 1 ]; // Is there a real 'src' url to be used? imgSrc && ( img.attributes.src = imgSrc ); return img; } return false; } : falsyFilter }; } } ); // The paste processor here is just a reduced copy of html data processor. var pasteProcessor = function() { this.dataFilter = new CKEDITOR.htmlParser.filter(); }; pasteProcessor.prototype = { toHtml: function( data ) { var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data ), writer = new CKEDITOR.htmlParser.basicWriter(); fragment.writeHtml( writer, this.dataFilter ); return writer.getHtml( true ); } }; CKEDITOR.cleanWord = function( data, editor ) { // We get and when we started using `dataTransfer` instead of pasteBin, so we need to // change to and to . data = data.replace( //g, '' ); // Firefox will be confused by those downlevel-revealed IE conditional // comments, fixing them first( convert it to upperlevel-revealed one ). // e.g. ... if ( CKEDITOR.env.gecko ) data = data.replace( /(([\S\s]*?))/gi, '$1$2$3' ); // #9456 - Webkit doesn't wrap list number with span, which is crucial for filter to recognize list. // //

      // // 3.       // Test3 //

      // // Transform to: // //

      // // // 3.       // // Test3 //

      if ( CKEDITOR.env.webkit ) data = data.replace( /(class="MsoListParagraph[^>]+>)([^<]+)()/gi, '$1$2$3' ); var dataProcessor = new pasteProcessor(), dataFilter = dataProcessor.dataFilter; // These rules will have higher priorities than default ones. dataFilter.addRules( CKEDITOR.plugins.pastefromword.getRules( editor, dataFilter ) ); // Allow extending data filter rules. editor.fire( 'beforeCleanWord', { filter: dataFilter } ); try { data = dataProcessor.toHtml( data ); } catch ( e ) { editor.showNotification( editor.lang.pastefromword.error ); } // Below post processing those things that are unable to delivered by filter rules. // Remove 'cke' namespaced attribute used in filter rules as marker. data = data.replace( /cke:.*?".*?"/g, '' ); // Remove empty style attribute. data = data.replace( /style=""/g, '' ); // Remove the dummy spans ( having no inline style ). data = data.replace( //g, '' ); return data; }; } )(); /** * Whether to ignore all font related formatting styles, including: * * * font size; * * font family; * * font foreground/background color. * * config.pasteFromWordRemoveFontStyles = false; * * @since 3.1 * @cfg {Boolean} [pasteFromWordRemoveFontStyles=true] * @member CKEDITOR.config */ /** * Whether to transform MS Word outline numbered headings into lists. * * config.pasteFromWordNumberedHeadingToList = true; * * @since 3.1 * @cfg {Boolean} [pasteFromWordNumberedHeadingToList=false] * @member CKEDITOR.config */ /** * Whether to remove element styles that can't be managed with the editor. Note * that this doesn't handle the font specific styles, which depends on the * {@link #pasteFromWordRemoveFontStyles} setting instead. * * config.pasteFromWordRemoveStyles = false; * * @since 3.1 * @cfg {Boolean} [pasteFromWordRemoveStyles=true] * @member CKEDITOR.config */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/plugin.js0000755000175000017500000001224214006075351024445 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { CKEDITOR.plugins.add( 'pastefromword', { requires: 'clipboard', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'pastefromword,pastefromword-rtl', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { var commandName = 'pastefromword', // Flag indicate this command is actually been asked instead of a generic pasting. forceFromWord = 0, path = this.path; editor.addCommand( commandName, { // Snapshots are done manually by editable.insertXXX methods. canUndo: false, async: true, exec: function( editor ) { var cmd = this; forceFromWord = 1; // Force html mode for incomming paste events sequence. editor.once( 'beforePaste', forceHtmlMode ); editor.getClipboardData( { title: editor.lang.pastefromword.title }, function( data ) { // Do not use editor#paste, because it would start from beforePaste event. data && editor.fire( 'paste', { type: 'html', dataValue: data.dataValue, method: 'paste', dataTransfer: CKEDITOR.plugins.clipboard.initPasteDataTransfer() } ); editor.fire( 'afterCommandExec', { name: commandName, command: cmd, returnValue: !!data } ); } ); } } ); // Register the toolbar button. editor.ui.addButton && editor.ui.addButton( 'PasteFromWord', { label: editor.lang.pastefromword.toolbar, command: commandName, toolbar: 'clipboard,50' } ); editor.on( 'pasteState', function( evt ) { editor.getCommand( commandName ).setState( evt.data ); } ); // Features bring by this command beside the normal process: // 1. No more bothering of user about the clean-up. // 2. Perform the clean-up even if content is not from MS-Word. // (e.g. from a MS-Word similar application.) // 3. Listen with high priority (3), so clean up is done before content // type sniffing (priority = 6). editor.on( 'paste', function( evt ) { var data = evt.data, mswordHtml = data.dataValue; // MS-WORD format sniffing. if ( mswordHtml && ( forceFromWord || ( /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/ ).test( mswordHtml ) ) ) { // Do not apply paste filter to data filtered by the Word filter (#13093). data.dontFilter = true; // If filter rules aren't loaded then cancel 'paste' event, // load them and when they'll get loaded fire new paste event // for which data will be filtered in second execution of // this listener. var isLazyLoad = loadFilterRules( editor, path, function() { // Event continuation with the original data. if ( isLazyLoad ) editor.fire( 'paste', data ); else if ( !editor.config.pasteFromWordPromptCleanup || ( forceFromWord || confirm( editor.lang.pastefromword.confirmCleanup ) ) ) // jshint ignore:line data.dataValue = CKEDITOR.cleanWord( mswordHtml, editor ); // Reset forceFromWord. forceFromWord = 0; } ); // The cleanup rules are to be loaded, we should just cancel // this event. isLazyLoad && evt.cancel(); } }, null, null, 3 ); } } ); function loadFilterRules( editor, path, callback ) { var isLoaded = CKEDITOR.cleanWord; if ( isLoaded ) callback(); else { var filterFilePath = CKEDITOR.getUrl( editor.config.pasteFromWordCleanupFile || ( path + 'filter/default.js' ) ); // Load with busy indicator. CKEDITOR.scriptLoader.load( filterFilePath, callback, null, true ); } return !isLoaded; } function forceHtmlMode( evt ) { evt.data.type = 'html'; } } )(); /** * Whether to prompt the user about the clean up of content being pasted from MS Word. * * config.pasteFromWordPromptCleanup = true; * * @since 3.1 * @cfg {Boolean} [pasteFromWordPromptCleanup=false] * @member CKEDITOR.config */ /** * The file that provides the MS Word cleanup function for pasting operations. * * **Note:** This is a global configuration shared by all editor instances present * in the page. * * // Load from 'pastefromword' plugin 'filter' sub folder (custom.js file) using path relative to CKEditor installation folder. * CKEDITOR.config.pasteFromWordCleanupFile = 'plugins/pastefromword/filter/custom.js'; * * // Load from 'pastefromword' plugin 'filter' sub folder (custom.js file) using full path (including CKEditor installation folder). * CKEDITOR.config.pasteFromWordCleanupFile = '/ckeditor/plugins/pastefromword/filter/custom.js'; * * // Load custom.js file from 'customFilerts' folder (located in server's root) using full URL. * CKEDITOR.config.pasteFromWordCleanupFile = 'http://my.example.com/customFilerts/custom.js'; * * @since 3.1 * @cfg {String} [pasteFromWordCleanupFile= + 'filter/default.js'] * @member CKEDITOR.config */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/0000755000175000017500000000000014006075351023526 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/bg.js0000644000175000017500000000076414006075351024463 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'bg', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Вмъкни от MS Word', toolbar: 'Вмъкни от MS Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/cy.js0000644000175000017500000000066314006075351024504 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'cy', { confirmCleanup: 'Mae\'r testun rydych chi am ludo wedi\'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?', error: 'Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol', title: 'Gludo o Word', toolbar: 'Gludo o Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/no.js0000644000175000017500000000072414006075351024503 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'no', { confirmCleanup: 'Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?', error: 'Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil', title: 'Lim inn fra Word', toolbar: 'Lim inn fra Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/hr.js0000644000175000017500000000070714006075351024501 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'hr', { confirmCleanup: 'Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?', error: 'Nije moguće očistiti podatke za ljepljenje zbog interne greške', title: 'Zalijepi iz Worda', toolbar: 'Zalijepi iz Worda' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/th.js0000644000175000017500000000173414006075351024504 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'th', { confirmCleanup: 'ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?', error: 'ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ', title: 'วางสำเนาจากตัวอักษรเวิร์ด', toolbar: 'วางสำเนาจากตัวอักษรเวิร์ด' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ar.js0000644000175000017500000000102114006075351024460 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ar', { confirmCleanup: 'يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟', error: 'لم يتم مسح المعلومات الملصقة لخلل داخلي', title: 'لصق من وورد', toolbar: 'لصق من وورد' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sk.js0000644000175000017500000000070714006075351024505 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sk', { confirmCleanup: 'Vkladaný text vyzerá byť skopírovaný z Wordu. Chcete ho automaticky vyčistiť pred vkladaním?', error: 'Nebolo možné vyčistiť vložené dáta kvôli internej chybe', title: 'Vložiť z Wordu', toolbar: 'Vložiť z Wordu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ro.js0000644000175000017500000000073214006075351024506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ro', { confirmCleanup: 'Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?', error: 'Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne', title: 'Adaugă din Word', toolbar: 'Adaugă din Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en-ca.js0000644000175000017500000000074314006075351025053 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'en-ca', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Paste from Word', toolbar: 'Paste from Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ug.js0000644000175000017500000000117714006075351024505 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ug', { confirmCleanup: 'سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟', error: 'ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ', title: 'MS Word تىن چاپلا', toolbar: 'MS Word تىن چاپلا' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/el.js0000644000175000017500000000125714006075351024471 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'el', { confirmCleanup: 'Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;', error: 'Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος', title: 'Επικόλληση από το Word', toolbar: 'Επικόλληση από το Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/de.js0000644000175000017500000000076614006075351024465 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'de', { confirmCleanup: 'Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?', error: 'Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen', title: 'Aus Word einfügen', toolbar: 'Aus Word einfügen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/uk.js0000644000175000017500000000116514006075351024506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'uk', { confirmCleanup: 'Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?', error: 'Неможливо очистити форматування через внутрішню помилку.', title: 'Вставити з Word', toolbar: 'Вставити з Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sr-latn.js0000644000175000017500000000074514006075351025452 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sr-latn', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Zalepi iz Worda', toolbar: 'Zalepi iz Worda' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/km.js0000644000175000017500000000157214006075351024500 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'km', { confirmCleanup: 'អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?', error: 'ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់', title: 'បិទ​ភ្ជាប់​ពី Word', toolbar: 'បិទ​ភ្ជាប់​ពី Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/eu.js0000644000175000017500000000067214006075351024502 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'eu', { confirmCleanup: 'Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?', error: 'Barneko errore bat dela eta ezin izan da testua garbitu', title: 'Itsatsi Word-etik', toolbar: 'Itsatsi Word-etik' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fa.js0000644000175000017500000000116614006075351024456 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'fa', { confirmCleanup: 'متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟', error: 'به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.', title: 'چسباندن از Word', toolbar: 'چسباندن از Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/si.js0000644000175000017500000000103214006075351024473 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'si', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'වචන වලින් අලවන්න', toolbar: 'වචන වලින් අලවන්න' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en.js0000644000175000017500000000071214006075351024466 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'en', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', error: 'It was not possible to clean up the pasted data due to an internal error', title: 'Paste from Word', toolbar: 'Paste from Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/he.js0000644000175000017500000000100314006075351024452 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'he', { confirmCleanup: 'נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?', error: 'לא ניתן היה לנקות את המידע בשל תקלה פנימית.', title: 'הדבקה מ-Word', toolbar: 'הדבקה מ-Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/lt.js0000644000175000017500000000067614006075351024514 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'lt', { confirmCleanup: 'Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?', error: 'Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto', title: 'Įdėti iš Word', toolbar: 'Įdėti iš Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/lv.js0000644000175000017500000000073214006075351024507 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'lv', { confirmCleanup: 'Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?', error: 'Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.', title: 'Ievietot no Worda', toolbar: 'Ievietot no Worda' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/eo.js0000644000175000017500000000071714006075351024474 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'eo', { confirmCleanup: 'La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?', error: 'Ne eblis purigi la intergluitajn datenojn pro interna eraro', title: 'Interglui el Word', toolbar: 'Interglui el Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ca.js0000644000175000017500000000073414006075351024453 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ca', { confirmCleanup: 'El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?', error: 'No ha estat possible netejar les dades enganxades degut a un error intern', title: 'Enganxa des del Word', toolbar: 'Enganxa des del Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/hi.js0000644000175000017500000000101414006075351024460 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'hi', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'पेस्ट (वर्ड से)', toolbar: 'पेस्ट (वर्ड से)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/mk.js0000644000175000017500000000076614006075351024504 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'mk', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Paste from Word', // MISSING toolbar: 'Paste from Word' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/mn.js0000644000175000017500000000076614006075351024507 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'mn', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Word-оос буулгах', toolbar: 'Word-оос буулгах' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/gl.js0000644000175000017500000000067714006075351024500 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'gl', { confirmCleanup: 'O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?', error: 'Non foi posíbel depurar os datos pegados por mor dun erro interno', title: 'Pegar desde Word', toolbar: 'Pegar desde Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ko.js0000644000175000017500000000076014006075351024500 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ko', { confirmCleanup: '붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?', error: '내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.', title: 'MS Word 에서 붙여넣기', toolbar: 'MS Word 에서 붙여넣기' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/zh.js0000644000175000017500000000072314006075351024507 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'zh', { confirmCleanup: '您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?', error: '由於發生內部錯誤,無法清除清除 Word 的格式。', title: '自 Word 貼上', toolbar: '自 Word 貼上' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/es.js0000644000175000017500000000066414006075351024501 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'es', { confirmCleanup: 'El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?', error: 'No ha sido posible limpiar los datos debido a un error interno', title: 'Pegar desde Word', toolbar: 'Pegar desde Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/is.js0000644000175000017500000000073614006075351024505 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'is', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Líma úr Word', toolbar: 'Líma úr Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fo.js0000644000175000017500000000070114006075351024466 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'fo', { confirmCleanup: 'Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?', error: 'Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil', title: 'Innrita frá Word', toolbar: 'Innrita frá Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/tt.js0000644000175000017500000000076014006075351024516 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'tt', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Word\'тан өстәү', toolbar: 'Word\'тан өстәү' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/it.js0000644000175000017500000000070714006075351024504 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'it', { confirmCleanup: 'Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?', error: 'Non è stato possibile eliminare il testo incollato a causa di un errore interno.', title: 'Incolla da Word', toolbar: 'Incolla da Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sv.js0000644000175000017500000000075214006075351024520 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sv', { confirmCleanup: 'Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?', error: 'Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel', title: 'Klistra in från Word', toolbar: 'Klistra in från Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/gu.js0000644000175000017500000000127014006075351024477 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'gu', { confirmCleanup: 'તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?', error: 'પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.', title: 'પેસ્ટ (વડૅ ટેક્સ્ટ)', toolbar: 'પેસ્ટ (વડૅ ટેક્સ્ટ)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/tr.js0000644000175000017500000000074314006075351024515 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'tr', { confirmCleanup: 'Yapıştırmaya çalıştığınız metin Word\'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?', error: 'Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir', title: 'Word\'den Yapıştır', toolbar: 'Word\'den Yapıştır' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/pl.js0000644000175000017500000000100114006075351024467 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'pl', { confirmCleanup: 'Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?', error: 'Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.', title: 'Wklej z programu MS Word', toolbar: 'Wklej z programu MS Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/nb.js0000644000175000017500000000072414006075351024466 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'nb', { confirmCleanup: 'Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?', error: 'Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil', title: 'Lim inn fra Word', toolbar: 'Lim inn fra Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sl.js0000644000175000017500000000072114006075351024502 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sl', { confirmCleanup: 'Besedilo, ki ga želite prilepiti je kopirano iz Word-a. Ali ga želite očistiti, preden ga prilepite?', error: 'Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake', title: 'Prilepi iz Worda', toolbar: 'Prilepi iz Worda' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fi.js0000644000175000017500000000075314006075351024467 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'fi', { confirmCleanup: 'Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)', error: 'Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia', title: 'Liitä Word-dokumentista', toolbar: 'Liitä Word-dokumentista' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fr-ca.js0000644000175000017500000000073714006075351025063 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'fr-ca', { confirmCleanup: 'Le texte que vous tentez de coller semble provenir de Word. Désirez vous le nettoyer avant de coller?', error: 'Il n\'a pas été possible de nettoyer les données collées du à une erreur interne', title: 'Coller de Word', toolbar: 'Coller de Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ru.js0000644000175000017500000000117714006075351024520 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ru', { confirmCleanup: 'Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?', error: 'Невозможно очистить вставленные данные из-за внутренней ошибки', title: 'Вставить из Word', toolbar: 'Вставить из Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ka.js0000644000175000017500000000124314006075351024457 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ka', { confirmCleanup: 'ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?', error: 'შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა', title: 'ვორდიდან ჩასმა', toolbar: 'ვორდიდან ჩასმა' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/zh-cn.js0000644000175000017500000000066714006075351025114 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'zh-cn', { confirmCleanup: '您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?', error: '由于内部错误无法清理要粘贴的数据', title: '从 MS Word 粘贴', toolbar: '从 MS Word 粘贴' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/cs.js0000644000175000017500000000072214006075351024472 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'cs', { confirmCleanup: 'Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?', error: 'Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.', title: 'Vložit z Wordu', toolbar: 'Vložit z Wordu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/pt.js0000644000175000017500000000070214006075351024506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'pt', { confirmCleanup: 'O texto que pretende colar parece ter sido copiado do Word. Deseja limpá-lo antes de colar?', error: 'Não foi possivel limpar a informação colada decido a um erro interno.', title: 'Colar do Word', toolbar: 'Colar do Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/pt-br.js0000644000175000017500000000073414006075351025114 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'pt-br', { confirmCleanup: 'O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?', error: 'Não foi possível limpar os dados colados devido a um erro interno', title: 'Colar do Word', toolbar: 'Colar do Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/et.js0000644000175000017500000000070614006075351024477 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'et', { confirmCleanup: 'Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?', error: 'Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik', title: 'Asetamine Wordist', toolbar: 'Asetamine Wordist' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/da.js0000644000175000017500000000075114006075351024453 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'da', { confirmCleanup: 'Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?', error: 'Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl', title: 'Indsæt fra Word', toolbar: 'Indsæt fra Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/af.js0000644000175000017500000000073014006075351024452 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'af', { confirmCleanup: 'Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?', error: 'Die geplakte teks kon nie skoongemaak word nie, weens \'n interne fout', title: 'Plak vanuit Word', toolbar: 'Plak vanuit Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/hu.js0000644000175000017500000000073414006075351024504 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'hu', { confirmCleanup: 'Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)', error: 'Egy belső hiba miatt nem sikerült megtisztítani a szöveget', title: 'Beillesztés Word-ből', toolbar: 'Beillesztés Word-ből' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sr.js0000644000175000017500000000076014006075351024513 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sr', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Залепи из Worda', toolbar: 'Залепи из Worda' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/nl.js0000644000175000017500000000075714006075351024506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'nl', { confirmCleanup: 'De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?', error: 'Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout', title: 'Plakken vanuit Word', toolbar: 'Plakken vanuit Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/vi.js0000644000175000017500000000102214006075351024475 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'vi', { confirmCleanup: 'Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?', error: 'Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ', title: 'Dán với định dạng Word', toolbar: 'Dán với định dạng Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ja.js0000644000175000017500000000107114006075351024455 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ja', { confirmCleanup: '貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?', error: '内部エラーにより貼り付けたデータをクリアできませんでした', title: 'ワード文章から貼り付け', toolbar: 'ワード文章から貼り付け' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/id.js0000644000175000017500000000073414006075351024464 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'id', { confirmCleanup: 'Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?', error: 'Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal', title: 'Tempel dari Word', toolbar: 'Tempel dari Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en-gb.js0000644000175000017500000000071514006075351025057 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'en-gb', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', error: 'It was not possible to clean up the pasted data due to an internal error', title: 'Paste from Word', toolbar: 'Paste from Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sq.js0000644000175000017500000000077614006075351024521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sq', { confirmCleanup: 'Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?', error: 'Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm', title: 'Hidhe nga Word-i', toolbar: 'Hidhe nga Word-i' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/bn.js0000644000175000017500000000077614006075351024475 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'bn', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'পেস্ট (শব্দ)', toolbar: 'পেস্ট (শব্দ)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en-au.js0000644000175000017500000000074314006075351025075 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'en-au', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Paste from Word', toolbar: 'Paste from Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ku.js0000644000175000017500000000112314006075351024500 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ku', { confirmCleanup: 'ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟', error: 'هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی', title: 'لکاندنی لەلایەن Word', toolbar: 'لکاندنی لەڕێی Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ms.js0000644000175000017500000000074214006075351024506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ms', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Tampal dari Word', toolbar: 'Tampal dari Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fr.js0000644000175000017500000000073514006075351024500 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'fr', { confirmCleanup: 'Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?', error: 'Il n\'a pas été possible de nettoyer les données collées à la suite d\'une erreur interne.', title: 'Coller depuis Word', toolbar: 'Coller depuis Word' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/lang/bs.js0000644000175000017500000000074614006075351024477 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'pastefromword', 'bs', { confirmCleanup: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING error: 'It was not possible to clean up the pasted data due to an internal error', // MISSING title: 'Zalijepi iz Word-a', toolbar: 'Zalijepi iz Word-a' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/icons/0000755000175000017500000000000014006075351023720 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/icons/pastefromword-rtl.png0000644000175000017500000000132014006075351030115 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8uOKQ73qC\.`BwYخG} B3 2AHPgc;]L5= CjA@34c4MJeY3///Al6  vL&c3s|>$Iq|+tVKv[v[VKNg)-Kb4 V+I:zzB@1x||D9 =I8X,=seA^VUjnCs4MYVu(5 ̬gf>:Jeo-03w%=QtGQTN@RH ox˽ޒZ19EqDV6(tzz)$o׹!iS`6\^__pJe;;;ιW[]Ib۩Zg M<swwG88::Jr$)&B \ Cil=YYj?$pj%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/icons/pastefromword.png0000644000175000017500000000132314006075351027321 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8}JQ3w茄eB "sa}=o5Eƍ!$L̴Mù;K8h$F$'DŽ9$! ' `g{{`cf}F@除j۝5Mu:u:5Muݙjg@*, 2t4"|>'2B=fFds s@π03sj5$R/766VfF$IBZ홙,̬Wן YL~+X#3SR);XEr#d2)Q_X zjG 08KPP$Z$q Ef}L s1ZX@)ɉNjEpzzlmmIfxIQnt/A,lZwח;+TY%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/icons/hidpi/0000755000175000017500000000000014006075351025015 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/icons/hidpi/pastefromword-rtl.png0000644000175000017500000000405214006075351031217 0ustar domdomPNG  IHDR szzbKGD pHYs B(xCIDATXÝoήY1C8u`E *"^ r\ܠHM#YW$7BZH J"m'33gN/vf]4Fs]qIL0Bi Zmv},D{4ZXū P}KQJiֺlwnLe)E "@6K_R"[Sdl*j m# `ZZ* \&@_b~أ]/&&>~wQ<ўE-FGc}ګbbpxS߼y(.*~_&Aq-=k''#cxllit Xa(^fxll*<wON)_ò;w0ZKW2M:`JZ.ruzzPB!PhM'۔ДeaHİm>tDۭ#Z"ZkZkH8׏8H)qS3ii))%j5u6RMJ~B?#l:zM)%t1l~)lѦٟHkzJ^,ЕiH\'iv?'^ ~Gvxrҕz oL)T DqP}~- )«Vǯ^xN&A $ 1.L )]c\Dۍ)h2_rر`hǎH5ւy*T(jdl$RӬsH|.|V]^q&"7fl޽@T Rб^|9tQ8ZYJh-B,)2܄Xѱn iN B@K&maHf&Rʘ)Dk=qjfxU(0 ,aipm#t AVݎmæMo3^X86kIwĪc9C`dC.F m=?ܙ;x5aIȾ5!m- ##3è0`0̤bH W鿫gDQ*NEDJcof^yzh :4 A2eYR4U={-KƬ0 3˥כ!キl (Uغۋ.| 57WPFK4  L5~[`:?m4r 'v/h]%tEXtdate:create2013-06-20T12:24:19+02:00U%tEXtdate:modify2013-06-20T12:24:19+02:00$StEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/pastefromword/icons/hidpi/pastefromword.png0000644000175000017500000000407114006075351030421 0ustar domdomPNG  IHDR szzbKGD pHYs B(xRIDATXåk?ٛv7)IEmUT`/c)ԏbňbc[C !ɃU:؊کHjcőYͬfwΜ>z$k7=pؙsn;+DCRcҩW_)LZ"CqWW?6_}upaq5σP^$GkM` ƘN+R\&Ck.G*$КQ՚\&MM70J !nݹ3IS--$"J!«TXY]e\׺~n\&CWGbx8 7߾pVW1/B+F jcsA16 ͝;_\vtx^FRd5uwt|D1u<|FkWT7LZh-9Bdc~?eÝ-,J@HZɷh10P8;[ "X,ʒm8뮛PmŢb`Yo@ڀIB c ߿T*o75ͭ]#T|1֌+leafGӧgf2d[~IhךmojpT+Eu9/Ρkޑoj)q!^Md_3d:M}(gB|4g<ƐNEuZq ,'>lnFsܹúR91lDA%X4ҲPK~:_5yA cJdP H)IZӼ^@HY/lUcXz캵%P[()R>߈[[c}y*HI ()ɦӴdgf&Z.!?ںRgm10JJZyo1F^4-Xʕkf< U*85oHS>O٨ 20 if ( parts1 ) { if ( !parts1[ 2 ] && parts2[ 2 ] == 'px' ) return parts2[ 1 ]; if ( parts1[ 2 ] == 'px' && !parts2[ 2 ] ) return parts2[ 1 ] + 'px'; } return length2; } var htmlFilterRules = { elements: { $: function( element ) { var attributes = element.attributes, realHtml = attributes && attributes[ 'data-cke-realelement' ], realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ), realElement = realFragment && realFragment.children[ 0 ]; // Width/height in the fake object are subjected to clone into the real element. if ( realElement && element.attributes[ 'data-cke-resizable' ] ) { var styles = new cssStyle( element ).rules, realAttrs = realElement.attributes, width = styles.width, height = styles.height; width && ( realAttrs.width = replaceCssLength( realAttrs.width, width ) ); height && ( realAttrs.height = replaceCssLength( realAttrs.height, height ) ); } return realElement; } } }; CKEDITOR.plugins.add( 'fakeobjects', { // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength init: function( editor ) { // Allow image with all styles and classes plus src, alt and title attributes. // We need them when fakeobject is pasted. editor.filter.allow( 'img[!data-cke-realelement,src,alt,title](*){*}', 'fakeobjects' ); }, afterInit: function( editor ) { var dataProcessor = editor.dataProcessor, htmlFilter = dataProcessor && dataProcessor.htmlFilter; if ( htmlFilter ) { htmlFilter.addRules( htmlFilterRules, { applyToAll: true } ); } } } ); /** * @member CKEDITOR.editor * @todo */ CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable ) { var lang = this.lang.fakeobjects, label = lang[ realElementType ] || lang.unknown; var attributes = { 'class': className, 'data-cke-realelement': encodeURIComponent( realElement.getOuterHtml() ), 'data-cke-real-node-type': realElement.type, alt: label, title: label, align: realElement.getAttribute( 'align' ) || '' }; // Do not set "src" on high-contrast so the alt text is displayed. (#8945) if ( !CKEDITOR.env.hc ) attributes.src = CKEDITOR.tools.transparentImageData; if ( realElementType ) attributes[ 'data-cke-real-element-type' ] = realElementType; if ( isResizable ) { attributes[ 'data-cke-resizable' ] = isResizable; var fakeStyle = new cssStyle(); var width = realElement.getAttribute( 'width' ), height = realElement.getAttribute( 'height' ); width && ( fakeStyle.rules.width = cssLength( width ) ); height && ( fakeStyle.rules.height = cssLength( height ) ); fakeStyle.populate( attributes ); } return this.document.createElement( 'img', { attributes: attributes } ); }; /** * @member CKEDITOR.editor * @todo */ CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable ) { var lang = this.lang.fakeobjects, label = lang[ realElementType ] || lang.unknown, html; var writer = new CKEDITOR.htmlParser.basicWriter(); realElement.writeHtml( writer ); html = writer.getHtml(); var attributes = { 'class': className, 'data-cke-realelement': encodeURIComponent( html ), 'data-cke-real-node-type': realElement.type, alt: label, title: label, align: realElement.attributes.align || '' }; // Do not set "src" on high-contrast so the alt text is displayed. (#8945) if ( !CKEDITOR.env.hc ) attributes.src = CKEDITOR.tools.transparentImageData; if ( realElementType ) attributes[ 'data-cke-real-element-type' ] = realElementType; if ( isResizable ) { attributes[ 'data-cke-resizable' ] = isResizable; var realAttrs = realElement.attributes, fakeStyle = new cssStyle(); var width = realAttrs.width, height = realAttrs.height; width !== undefined && ( fakeStyle.rules.width = cssLength( width ) ); height !== undefined && ( fakeStyle.rules.height = cssLength( height ) ); fakeStyle.populate( attributes ); } return new CKEDITOR.htmlParser.element( 'img', attributes ); }; /** * @member CKEDITOR.editor * @todo */ CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) { if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT ) return null; var element = CKEDITOR.dom.element.createFromHtml( decodeURIComponent( fakeElement.data( 'cke-realelement' ) ), this.document ); if ( fakeElement.data( 'cke-resizable' ) ) { var width = fakeElement.getStyle( 'width' ), height = fakeElement.getStyle( 'height' ); width && element.setAttribute( 'width', replaceCssLength( element.getAttribute( 'width' ), width ) ); height && element.setAttribute( 'height', replaceCssLength( element.getAttribute( 'height' ), height ) ); } return element; }; } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/0000755000175000017500000000000014006075351023112 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/bg.js0000644000175000017500000000055014006075351024040 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'bg', { anchor: 'Кука', flash: 'Флаш анимация', hiddenfield: 'Скрито поле', iframe: 'IFrame', unknown: 'Неизвестен обект' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/cy.js0000644000175000017500000000050514006075351024063 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'cy', { anchor: 'Angor', flash: 'Animeiddiant Flash', hiddenfield: 'Maes Cudd', iframe: 'IFrame', unknown: 'Gwrthrych Anhysbys' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/no.js0000644000175000017500000000047714006075351024074 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'no', { anchor: 'Anker', flash: 'Flash-animasjon', hiddenfield: 'Skjult felt', iframe: 'IFrame', unknown: 'Ukjent objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/hr.js0000644000175000017500000000050614006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'hr', { anchor: 'Sidro', flash: 'Flash animacija', hiddenfield: 'Sakriveno polje', iframe: 'IFrame', unknown: 'Nepoznati objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/th.js0000644000175000017500000000066714006075351024074 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'th', { anchor: 'แทรก/แก้ไข Anchor', flash: 'ภาพอนิเมชั่นแฟลช', hiddenfield: 'ฮิดเดนฟิลด์', iframe: 'IFrame', unknown: 'วัตถุไม่ทราบชนิด' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ar.js0000644000175000017500000000055714006075351024061 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ar', { anchor: 'إرساء', flash: 'رسم متحرك بالفلاش', hiddenfield: 'إدراج حقل خفي', iframe: 'iframe', unknown: 'عنصر غير معروف' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/sk.js0000644000175000017500000000050214006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'sk', { anchor: 'Kotva', flash: 'Flash animácia', hiddenfield: 'Skryté pole', iframe: 'IFrame', unknown: 'Neznámy objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ro.js0000644000175000017500000000060714006075351024073 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ro', { anchor: 'Inserează/Editează ancoră', flash: 'Flash Animation', // MISSING hiddenfield: 'Câmp ascuns (HiddenField)', iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/en-ca.js0000644000175000017500000000057414006075351024441 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'en-ca', { anchor: 'Anchor', // MISSING flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ug.js0000644000175000017500000000057014006075351024065 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ug', { anchor: 'لەڭگەرلىك نۇقتا', flash: 'Flash جانلاندۇرۇم', hiddenfield: 'يوشۇرۇن دائىرە', iframe: 'IFrame', unknown: 'يوچۇن نەڭ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/el.js0000644000175000017500000000055314006075351024053 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'el', { anchor: 'Άγκυρα', flash: 'Ταινία Flash', hiddenfield: 'Κρυφό Πεδίο', iframe: 'IFrame', unknown: 'Άγνωστο Αντικείμενο' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/de.js0000644000175000017500000000051114006075351024035 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'de', { anchor: 'Anker', flash: 'Flash-Animation', hiddenfield: 'Verstecktes Feld', iframe: 'IFrame', unknown: 'Unbekanntes Objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/uk.js0000644000175000017500000000055314006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'uk', { anchor: 'Якір', flash: 'Flash-анімація', hiddenfield: 'Приховані Поля', iframe: 'IFrame', unknown: 'Невідомий об\'єкт' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/sr-latn.js0000644000175000017500000000056614006075351025037 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'sr-latn', { anchor: 'Unesi/izmeni sidro', flash: 'Flash Animation', // MISSING hiddenfield: 'Skriveno polje', iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/km.js0000644000175000017500000000062114006075351024056 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'km', { anchor: 'យុថ្កា', flash: 'Flash មាន​ចលនា', hiddenfield: 'វាល​កំបាំង', iframe: 'IFrame', unknown: 'វត្ថុ​មិន​ស្គាល់' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/eu.js0000644000175000017500000000051114006075351024056 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'eu', { anchor: 'Aingura', flash: 'Flash Animazioa', hiddenfield: 'Ezkutuko Eremua', iframe: 'IFrame', unknown: 'Objektu ezezaguna' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/fa.js0000644000175000017500000000053014006075351024034 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'fa', { anchor: 'لنگر', flash: 'انیمشن فلش', hiddenfield: 'فیلد پنهان', iframe: 'IFrame', unknown: 'شیء ناشناخته' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/si.js0000644000175000017500000000060314006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'si', { anchor: 'ආධාරය', flash: 'Flash Animation', // MISSING hiddenfield: 'සැඟවුණු ප්‍රදේශය', iframe: 'IFrame', unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/en.js0000644000175000017500000000050214006075351024047 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'en', { anchor: 'Anchor', flash: 'Flash Animation', hiddenfield: 'Hidden Field', iframe: 'IFrame', unknown: 'Unknown Object' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/he.js0000644000175000017500000000055714006075351024053 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'he', { anchor: 'עוגן', flash: 'סרטון פלאש', hiddenfield: 'שדה חבוי', iframe: 'חלון פנימי (iframe)', unknown: 'אובייקט לא ידוע' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/lt.js0000644000175000017500000000051414006075351024067 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'lt', { anchor: 'Žymė', flash: 'Flash animacija', hiddenfield: 'Paslėptas laukas', iframe: 'IFrame', unknown: 'Nežinomas objektas' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/lv.js0000644000175000017500000000051014006075351024065 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'lv', { anchor: 'Iezīme', flash: 'Flash animācija', hiddenfield: 'Slēpts lauks', iframe: 'Iframe', unknown: 'Nezināms objekts' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/eo.js0000644000175000017500000000052214006075351024052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'eo', { anchor: 'Ankro', flash: 'FlaŝAnimacio', hiddenfield: 'Kaŝita kampo', iframe: 'Enlinia Kadro (IFrame)', unknown: 'Nekonata objekto' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ca.js0000644000175000017500000000050514006075351024033 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ca', { anchor: 'Àncora', flash: 'Animació Flash', hiddenfield: 'Camp ocult', iframe: 'IFrame', unknown: 'Objecte desconegut' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/hi.js0000644000175000017500000000064514006075351024055 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'hi', { anchor: 'ऐंकर इन्सर्ट/संपादन', flash: 'Flash Animation', // MISSING hiddenfield: 'गुप्त फ़ील्ड', iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/mk.js0000644000175000017500000000055614006075351024065 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'mk', { anchor: 'Anchor', flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/mn.js0000644000175000017500000000056214006075351024065 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'mn', { anchor: 'Зангуу', flash: 'Flash Animation', // MISSING hiddenfield: 'Нууц талбар', iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/gl.js0000644000175000017500000000052114006075351024050 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'gl', { anchor: 'Ancoraxe', flash: 'Animación «Flash»', hiddenfield: 'Campo agochado', iframe: 'IFrame', unknown: 'Obxecto descoñecido' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ko.js0000644000175000017500000000054414006075351024064 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ko', { anchor: '책갈피', flash: '플래시 애니메이션', hiddenfield: '숨은 입력 칸', iframe: '아이프레임', unknown: '알 수 없는 객체' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/zh.js0000644000175000017500000000050614006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'zh', { anchor: '錨點', flash: 'Flash 動畫', hiddenfield: '隱藏欄位', iframe: 'IFrame', unknown: '無法辨識的物件' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/es.js0000644000175000017500000000050614006075351024060 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'es', { anchor: 'Ancla', flash: 'Animación flash', hiddenfield: 'Campo oculto', iframe: 'IFrame', unknown: 'Objeto desconocido' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/is.js0000644000175000017500000000057114006075351024066 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'is', { anchor: 'Anchor', // MISSING flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/fo.js0000644000175000017500000000050314006075351024052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'fo', { anchor: 'Anchor', flash: 'Flash Animation', hiddenfield: 'Fjaldur teigur', iframe: 'IFrame', unknown: 'Ókent Object' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/tt.js0000644000175000017500000000055614006075351024105 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'tt', { anchor: 'Якорь', flash: 'Флеш анимациясы', hiddenfield: 'Яшерен кыр', iframe: 'IFrame', unknown: 'Танылмаган объект' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/it.js0000644000175000017500000000051214006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'it', { anchor: 'Ancora', flash: 'Animazione Flash', hiddenfield: 'Campo Nascosto', iframe: 'IFrame', unknown: 'Oggetto sconosciuto' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/sv.js0000644000175000017500000000047714006075351024110 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'sv', { anchor: 'Ankare', flash: 'Flashanimation', hiddenfield: 'Gömt fält', iframe: 'iFrame', unknown: 'Okänt objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/gu.js0000644000175000017500000000054414006075351024066 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'gu', { anchor: 'અનકર', flash: 'ફ્લેશ ', hiddenfield: 'હિડન ', iframe: 'IFrame', unknown: 'અનનોન ઓબ્જેક્ટ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/tr.js0000644000175000017500000000050714006075351024077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'tr', { anchor: 'Bağlantı', flash: 'Flash Animasyonu', hiddenfield: 'Gizli Alan', iframe: 'IFrame', unknown: 'Bilinmeyen Nesne' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/pl.js0000644000175000017500000000050214006075351024060 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'pl', { anchor: 'Kotwica', flash: 'Animacja Flash', hiddenfield: 'Pole ukryte', iframe: 'IFrame', unknown: 'Nieznany obiekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/nb.js0000644000175000017500000000047714006075351024057 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'nb', { anchor: 'Anker', flash: 'Flash-animasjon', hiddenfield: 'Skjult felt', iframe: 'IFrame', unknown: 'Ukjent objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/sl.js0000644000175000017500000000050014006075351024061 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'sl', { anchor: 'Sidro', flash: 'Flash animacija', hiddenfield: 'Skrito polje', iframe: 'IFrame', unknown: 'Neznan objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/fi.js0000644000175000017500000000051514006075351024047 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'fi', { anchor: 'Ankkuri', flash: 'Flash animaatio', hiddenfield: 'Piilokenttä', iframe: 'IFrame-kehys', unknown: 'Tuntematon objekti' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/fr-ca.js0000644000175000017500000000050314006075351024436 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'fr-ca', { anchor: 'Ancre', flash: 'Animation Flash', hiddenfield: 'Champ caché', iframe: 'IFrame', unknown: 'Objet inconnu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ru.js0000644000175000017500000000055514006075351024103 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ru', { anchor: 'Якорь', flash: 'Flash анимация', hiddenfield: 'Скрытое поле', iframe: 'iFrame', unknown: 'Неизвестный объект' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ka.js0000644000175000017500000000060414006075351024043 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ka', { anchor: 'ღუზა', flash: 'Flash ანიმაცია', hiddenfield: 'მალული ველი', iframe: 'IFrame', unknown: 'უცნობი ობიექტი' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/zh-cn.js0000644000175000017500000000047514006075351024475 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'zh-cn', { anchor: '锚点', flash: 'Flash 动画', hiddenfield: '隐藏域', iframe: 'IFrame', unknown: '未知对象' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/cs.js0000644000175000017500000000050514006075351024055 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'cs', { anchor: 'Záložka', flash: 'Flash animace', hiddenfield: 'Skryté pole', iframe: 'IFrame', unknown: 'Neznámý objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/pt.js0000644000175000017500000000053114006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'pt', { anchor: ' Inserir/Editar Âncora', flash: 'Animação Flash', hiddenfield: 'Campo oculto', iframe: 'IFrame', unknown: 'Objeto Desconhecido' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/pt-br.js0000644000175000017500000000051714006075351024477 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'pt-br', { anchor: 'Âncora', flash: 'Animação em Flash', hiddenfield: 'Campo Oculto', iframe: 'IFrame', unknown: 'Objeto desconhecido' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/et.js0000644000175000017500000000050714006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'et', { anchor: 'Ankur', flash: 'Flashi animatsioon', hiddenfield: 'Varjatud väli', iframe: 'IFrame', unknown: 'Tundmatu objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/da.js0000644000175000017500000000047614006075351024043 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'da', { anchor: 'Anker', flash: 'Flashanimation', hiddenfield: 'Skjult felt', iframe: 'Iframe', unknown: 'Ukendt objekt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/af.js0000644000175000017500000000050214006075351024033 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'af', { anchor: 'Anker', flash: 'Flash animasie', hiddenfield: 'Verborge veld', iframe: 'IFrame', unknown: 'Onbekende objek' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/hu.js0000644000175000017500000000051214006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'hu', { anchor: 'Horgony', flash: 'Flash animáció', hiddenfield: 'Rejtett mezõ', iframe: 'IFrame', unknown: 'Ismeretlen objektum' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/sr.js0000644000175000017500000000057114006075351024077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'sr', { anchor: 'Anchor', // MISSING flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/nl.js0000644000175000017500000000051214006075351024057 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'nl', { anchor: 'Interne link', flash: 'Flash animatie', hiddenfield: 'Verborgen veld', iframe: 'IFrame', unknown: 'Onbekend object' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/vi.js0000644000175000017500000000052114006075351024064 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'vi', { anchor: 'Điểm neo', flash: 'Flash', hiddenfield: 'Trường ẩn', iframe: 'IFrame', unknown: 'Đối tượng không rõ ràng' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ja.js0000644000175000017500000000052414006075351024043 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ja', { anchor: 'アンカー', flash: 'Flash Animation', hiddenfield: '不可視フィールド', iframe: 'IFrame', unknown: 'Unknown Object' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/id.js0000644000175000017500000000052314006075351024044 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'id', { anchor: 'Anchor', // MISSING flash: 'Animasi Flash', hiddenfield: 'Kolom Tersembunyi', iframe: 'IFrame', unknown: 'Obyek Tak Dikenal' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/en-gb.js0000644000175000017500000000050514006075351024440 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'en-gb', { anchor: 'Anchor', flash: 'Flash Animation', hiddenfield: 'Hidden Field', iframe: 'IFrame', unknown: 'Unknown Object' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/sq.js0000644000175000017500000000051114006075351024070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'sq', { anchor: 'Spirancë', flash: 'Objekt flash', hiddenfield: 'Fushë e fshehur', iframe: 'IFrame', unknown: 'Objekt i Panjohur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/bn.js0000644000175000017500000000057114006075351024052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'bn', { anchor: 'Anchor', // MISSING flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/en-au.js0000644000175000017500000000057414006075351024463 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'en-au', { anchor: 'Anchor', // MISSING flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ku.js0000644000175000017500000000056314006075351024073 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ku', { anchor: 'لەنگەر', flash: 'فلاش', hiddenfield: 'شاردنەوەی خانه', iframe: 'لەچوارچێوە', unknown: 'بەرکارێکی نەناسراو' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/ms.js0000644000175000017500000000057114006075351024072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'ms', { anchor: 'Anchor', // MISSING flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/fr.js0000644000175000017500000000050014006075351024052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'fr', { anchor: 'Ancre', flash: 'Animation Flash', hiddenfield: 'Champ caché', iframe: 'IFrame', unknown: 'Objet inconnu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/fakeobjects/lang/bs.js0000644000175000017500000000055614006075351024062 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'fakeobjects', 'bs', { anchor: 'Anchor', flash: 'Flash Animation', // MISSING hiddenfield: 'Hidden Field', // MISSING iframe: 'IFrame', // MISSING unknown: 'Unknown Object' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/0000755000175000017500000000000014006075350021334 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/plugin.js0000644000175000017500000000332114006075350023167 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview Plugin definition for the a11yhelp, which provides a dialog * with accessibility related help. */ ( function() { var pluginName = 'a11yhelp', commandName = 'a11yHelp'; CKEDITOR.plugins.add( pluginName, { requires: 'dialog', // List of available localizations. // jscs:disable availableLangs: { af:1,ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,en:1,'en-gb':1,eo:1,es:1,et:1,fa:1,fi:1,fo:1,fr:1,'fr-ca':1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,'pt-br':1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,'sr-latn':1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,'zh-cn':1 }, // jscs:enable init: function( editor ) { var plugin = this; editor.addCommand( commandName, { exec: function() { var langCode = editor.langCode; langCode = plugin.availableLangs[ langCode ] ? langCode : plugin.availableLangs[ langCode.replace( /-.*/, '' ) ] ? langCode.replace( /-.*/, '' ) : 'en'; CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( plugin.path + 'dialogs/lang/' + langCode + '.js' ), function() { editor.lang.a11yhelp = plugin.langEntries[ langCode ]; editor.openDialog( commandName ); } ); }, modes: { wysiwyg: 1, source: 1 }, readOnly: 1, canUndo: false } ); editor.setKeystroke( CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' ); CKEDITOR.dialog.add( commandName, this.path + 'dialogs/a11yhelp.js' ); editor.on( 'ariaEditorHelpLabel', function( evt ) { evt.data.label = editor.lang.common.editorHelp; } ); } } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/0000755000175000017500000000000014006075350022756 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/0000755000175000017500000000000014006075350023677 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/bg.js0000644000175000017500000001262614006075350024634 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'bg', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'Общо', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/cy.js0000644000175000017500000001222614006075350024653 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'cy', { title: 'Canllawiau Hygyrchedd', contents: 'Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.', legend: [ { name: 'Cyffredinol', items: [ { name: 'Bar Offer y Golygydd', legend: 'Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i\'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT+TAB. Symudwch i\'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol.' }, { name: 'Deialog y Golygydd', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Dewislen Cyd-destun y Golygydd', legend: 'Pwyswch $ {contextMenu} neu\'r ALLWEDD \'APPLICATION\' i agor y ddewislen cyd-destun. Yna symudwch i\'r opsiwn ddewislen nesaf gyda\'r TAB neu\'r SAETH I LAWR. Symudwch i\'r opsiwn blaenorol gyda SHIFT+TAB neu\'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i\'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC.' }, { name: 'Blwch Rhestr y Golygydd', legend: 'Tu mewn y blwch rhestr, ewch i\'r eitem rhestr nesaf gyda TAB neu\'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT+TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o\'r rhestr. Pwyswch ESC i gau\'r rhestr.' }, { name: 'Bar Llwybr Elfen y Golygydd', legend: 'Pwyswch ${elementsPathFocus} i fynd i\'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT+TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd.' } ] }, { name: 'Gorchmynion', items: [ { name: 'Gorchymyn dadwneud', legend: 'Pwyswch ${undo}' }, { name: 'Gorchymyn ailadrodd', legend: 'Pwyswch ${redo}' }, { name: 'Gorchymyn Bras', legend: 'Pwyswch ${bold}' }, { name: 'Gorchymyn italig', legend: 'Pwyswch ${italig}' }, { name: 'Gorchymyn tanlinellu', legend: 'Pwyso ${underline}' }, { name: 'Gorchymyn dolen', legend: 'Pwyswch ${link}' }, { name: 'Gorchymyn Cwympo\'r Dewislen', legend: 'Pwyswch ${toolbarCollapse}' }, { name: 'Myned i orchymyn bwlch ffocws blaenorol', legend: 'Pwyswch ${accessPreviousSpace} i fyned i\'r "blwch ffocws sydd methu ei gyrraedd" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i\'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell.' }, { name: 'Ewch i\'r gorchymyn blwch ffocws nesaf', legend: 'Pwyswch ${accessNextSpace} i fyned i\'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i\'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell.' }, { name: 'Cymorth Hygyrchedd', legend: 'Pwyswch ${a11yHelp}' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/no.js0000644000175000017500000001255314006075350024657 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'no', { title: 'Instruksjoner for tilgjengelighet', contents: 'Innhold for hjelp. Trykk ESC for å lukke denne dialogen.', legend: [ { name: 'Generelt', items: [ { name: 'Verktøylinje for editor', legend: 'Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen.' }, { name: 'Dialog for editor', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Kontekstmeny for editor', legend: 'Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC.' }, { name: 'Listeboks for editor', legend: 'I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen.' }, { name: 'Verktøylinje for elementsti', legend: 'Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren.' } ] }, { name: 'Kommandoer', items: [ { name: 'Angre', legend: 'Trykk ${undo}' }, { name: 'Gjør om', legend: 'Trykk ${redo}' }, { name: 'Fet tekst', legend: 'Trykk ${bold}' }, { name: 'Kursiv tekst', legend: 'Trykk ${italic}' }, { name: 'Understreking', legend: 'Trykk ${underline}' }, { name: 'Link', legend: 'Trykk ${link}' }, { name: 'Skjul verktøylinje', legend: 'Trykk ${toolbarCollapse}' }, { name: 'Gå til forrige fokusområde', legend: 'Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' }, { name: 'Gå til neste fokusområde', legend: 'Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' }, { name: 'Hjelp for tilgjengelighet', legend: 'Trykk ${a11yHelp}' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hr.js0000644000175000017500000001235314006075350024652 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'hr', { title: 'Upute dostupnosti', contents: 'Sadržaj pomoći. Za zatvaranje pritisnite ESC.', legend: [ { name: 'Općenito', items: [ { name: 'Alatna traka', legend: 'Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT+TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake.' }, { name: 'Dijalog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Kontekstni izbornik', legend: 'Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC.' }, { name: 'Lista', legend: 'Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT+TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje.' }, { name: 'Traka putanje elemenata', legend: 'Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT+TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa.' } ] }, { name: 'Naredbe', items: [ { name: 'Vrati naredbu', legend: 'Pritisni ${undo}' }, { name: 'Ponovi naredbu', legend: 'Pritisni ${redo}' }, { name: 'Bold naredba', legend: 'Pritisni ${bold}' }, { name: 'Italic naredba', legend: 'Pritisni ${italic}' }, { name: 'Underline naredba', legend: 'Pritisni ${underline}' }, { name: 'Link naredba', legend: 'Pritisni ${link}' }, { name: 'Smanji alatnu traku naredba', legend: 'Pritisni ${toolbarCollapse}' }, { name: 'Access previous focus space naredba', legend: 'Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak.' }, { name: 'Access next focus space naredba', legend: 'Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak.' }, { name: 'Pomoć za dostupnost', legend: 'Pritisni ${a11yHelp}' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/th.js0000644000175000017500000001316514006075350024656 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'th', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'ทั่วไป', items: [ { name: 'แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์', legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'คำสั่ง', items: [ { name: 'เลิกทำคำสั่ง', legend: 'วาง ${undo}' }, { name: 'คำสั่งสำหรับทำซ้ำ', legend: 'วาง ${redo}' }, { name: 'คำสั่งสำหรับตัวหนา', legend: 'วาง ${bold}' }, { name: 'คำสั่งสำหรับตัวเอียง', legend: 'วาง ${italic}' }, { name: 'คำสั่งสำหรับขีดเส้นใต้', legend: 'วาง ${underline}' }, { name: 'คำสั่งสำหรับลิงก์', legend: 'วาง ${link}' }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ar.js0000644000175000017500000001257214006075350024646 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ar', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'عام', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'إضافة', subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'تقسيم', f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'فاصلة', dash: 'Dash', // MISSING period: 'نقطة', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sk.js0000644000175000017500000001215314006075350024654 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sk', { title: 'Inštrukcie prístupnosti', contents: 'Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.', legend: [ { name: 'Všeobecne', items: [ { name: 'Lišta nástrojov editora', legend: 'Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov.' }, { name: 'Editorový dialóg', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editorové kontextové menu', legend: 'Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC.' }, { name: 'Editorov box zoznamu', legend: 'V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu.' }, { name: 'Editorove pásmo cesty prvku', legend: 'Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT+TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore.' } ] }, { name: 'Príkazy', items: [ { name: 'Vrátiť príkazy', legend: 'Stlačte ${undo}' }, { name: 'Nanovo vrátiť príkaz', legend: 'Stlačte ${redo}' }, { name: 'Príkaz na stučnenie', legend: 'Stlačte ${bold}' }, { name: 'Príkaz na kurzívu', legend: 'Stlačte ${italic}' }, { name: 'Príkaz na podčiarknutie', legend: 'Stlačte ${underline}' }, { name: 'Príkaz na odkaz', legend: 'Stlačte ${link}' }, { name: 'Príkaz na zbalenie lišty nástrojov', legend: 'Stlačte ${toolbarCollapse}' }, { name: 'Prejsť na predchádzajúcu zamerateľnú medzeru príkazu', legend: 'Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier.' }, { name: 'Prejsť na ďalší ', legend: 'Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier.' }, { name: 'Pomoc prístupnosti', legend: 'Stlačte ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Stránka hore', pageDown: 'Stránka dole', end: 'End', home: 'Home', leftArrow: 'Šípka naľavo', upArrow: 'Šípka hore', rightArrow: 'Šípka napravo', downArrow: 'Šípka dole', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Ľavé Windows tlačidlo', rightWindowKey: 'Pravé Windows tlačidlo', selectKey: 'Tlačidlo Select', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Násobenie', add: 'Sčítanie', subtract: 'Odčítanie', decimalPoint: 'Desatinná čiarka', divide: 'Delenie', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Bodkočiarka', equalSign: 'Rovná sa', comma: 'Čiarka', dash: 'Pomĺčka', period: 'Bodka', forwardSlash: 'Lomítko', graveAccent: 'Zdôrazňovanie prízvuku', openBracket: 'Hranatá zátvorka otváracia', backSlash: 'Backslash', closeBracket: 'Hranatá zátvorka zatváracia', singleQuote: 'Jednoduché úvodzovky' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ro.js0000644000175000017500000001270614006075350024663 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ro', { title: 'Instrucțiuni de accesibilitate', contents: 'Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.', legend: [ { name: 'General', items: [ { name: 'Editează bara instrumente.', legend: 'Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT+TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului.' }, { name: 'Dialog editor', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor meniu contextual', legend: 'Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC.' }, { name: 'Editor Casetă Listă', legend: 'În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista.' }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Comenzi', items: [ { name: ' Undo command', // MISSING legend: 'Apasă ${undo}' }, { name: 'Comanda precedentă', legend: 'Apasă ${redo}' }, { name: 'Comanda Îngroșat', legend: 'Apasă ${bold}' }, { name: 'Comanda Inclinat', legend: 'Apasă ${italic}' }, { name: 'Comanda Subliniere', legend: 'Apasă ${underline}' }, { name: 'Comanda Legatură', legend: 'Apasă ${link}' }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ug.js0000644000175000017500000001607114006075350024655 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ug', { title: 'قوشۇمچە چۈشەندۈرۈش', contents: 'ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.', legend: [ { name: 'ئادەتتىكى', items: [ { name: 'قورال بالداق تەھرىر', legend: '${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ.' }, { name: 'تەھرىرلىگۈچ سۆزلەشكۈسى', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى', legend: '${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ.' }, { name: 'تەھرىرلىگۈچ تىزىمى', legend: 'تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ.' }, { name: 'تەھرىرلىگۈچ ئېلېمېنت يول بالداق', legend: '${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ.' } ] }, { name: 'بۇيرۇق', items: [ { name: 'بۇيرۇقتىن يېنىۋال', legend: '${undo} نى بېسىڭ' }, { name: 'قايتىلاش بۇيرۇقى', legend: '${redo} نى بېسىڭ' }, { name: 'توملىتىش بۇيرۇقى', legend: '${bold} نى بېسىڭ' }, { name: 'يانتۇ بۇيرۇقى', legend: '${italic} نى بېسىڭ' }, { name: 'ئاستى سىزىق بۇيرۇقى', legend: '${underline} نى بېسىڭ' }, { name: 'ئۇلانما بۇيرۇقى', legend: '${link} نى بېسىڭ' }, { name: 'قورال بالداق قاتلاش بۇيرۇقى', legend: '${toolbarCollapse} نى بېسىڭ' }, { name: 'ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق', legend: '${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ.' }, { name: 'كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق', legend: '${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ.' }, { name: 'توسالغۇسىز لايىھە چۈشەندۈرۈشى', legend: '${a11yHelp} نى بېسىڭ' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/el.js0000644000175000017500000001652714006075350024650 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'el', { title: 'Οδηγίες Προσβασιμότητας', contents: 'Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.', legend: [ { name: 'Γενικά', items: [ { name: 'Εργαλειοθήκη Επεξεργαστή', legend: 'Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT+TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου.' }, { name: 'Παράθυρο Διαλόγου Επεξεργαστή', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Αναδυόμενο Μενού Επεξεργαστή', legend: 'Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC.' }, { name: 'Κουτί Λίστας Επεξεργαστών', legend: 'Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας.' }, { name: 'Μπάρα Διαδρομών Στοιχείων Επεξεργαστή', legend: 'Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή.' } ] }, { name: 'Εντολές', items: [ { name: 'Εντολή αναίρεσης', legend: 'Πατήστε ${undo}' }, { name: 'Εντολή επανάληψης', legend: 'Πατήστε ${redo}' }, { name: 'Εντολή έντονης γραφής', legend: 'Πατήστε ${bold}' }, { name: 'Εντολή πλάγιας γραφής', legend: 'Πατήστε ${italic}' }, { name: 'Εντολή υπογράμμισης', legend: 'Πατήστε ${underline}' }, { name: 'Εντολή συνδέσμου', legend: 'Πατήστε ${link}' }, { name: 'Εντολή Σύμπτηξης Εργαλειοθήκης', legend: 'Πατήστε ${toolbarCollapse}' }, { name: 'Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ', legend: 'Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. ' }, { name: 'Πρόσβαση στην επόμενη εντολή του χώρου εστίασης', legend: 'Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. ' }, { name: 'Βοήθεια Προσβασιμότητας', legend: 'Πατήστε ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Αριστερό Βέλος', upArrow: 'Πάνω Βέλος', rightArrow: 'Δεξί Βέλος', downArrow: 'Κάτω Βέλος', insert: 'Insert ', 'delete': 'Delete', leftWindowKey: 'Αριστερό Πλήκτρο Windows', rightWindowKey: 'Δεξί Πλήκτρο Windows', selectKey: 'Πλήκτρο Select', numpad0: 'Αριθμητικό πληκτρολόγιο 0', numpad1: 'Αριθμητικό Πληκτρολόγιο 1', numpad2: 'Αριθμητικό πληκτρολόγιο 2', numpad3: 'Αριθμητικό πληκτρολόγιο 3', numpad4: 'Αριθμητικό πληκτρολόγιο 4', numpad5: 'Αριθμητικό πληκτρολόγιο 5', numpad6: 'Αριθμητικό πληκτρολόγιο 6', numpad7: 'Αριθμητικό πληκτρολόγιο 7', numpad8: 'Αριθμητικό πληκτρολόγιο 8', numpad9: 'Αριθμητικό πληκτρολόγιο 9', multiply: 'Πολλαπλασιασμός', add: 'Πρόσθεση', subtract: 'Αφαίρεση', decimalPoint: 'Υποδιαστολή', divide: 'Διαίρεση', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: '6', f7: '7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Ερωτηματικό', equalSign: 'Σύμβολο Ισότητας', comma: 'Κόμμα', dash: 'Παύλα', period: 'Τελεία', forwardSlash: 'Κάθετος', graveAccent: 'Βαρεία', openBracket: 'Άνοιγμα Παρένθεσης', backSlash: 'Ανάστροφη Κάθετος', closeBracket: 'Κλείσιμο Παρένθεσης', singleQuote: 'Απόστροφος' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/de.js0000644000175000017500000001173614006075350024635 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'de', { title: 'Barrierefreiheitinformationen', contents: 'Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.', legend: [ { name: 'Allgemein', items: [ { name: 'Editorwerkzeugleiste', legend: 'Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren.' }, { name: 'Editordialog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor-Kontextmenü', legend: 'Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste.' }, { name: 'Editor-Listenbox', legend: 'Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs.' }, { name: 'Editor-Elementpfadleiste', legend: 'Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen.' } ] }, { name: 'Befehle', items: [ { name: 'Rückgängig-Befehl', legend: 'Drücken Sie ${undo}' }, { name: 'Wiederherstellen-Befehl', legend: 'Drücken Sie ${redo}' }, { name: 'Fettschrift-Befehl', legend: 'Drücken Sie ${bold}' }, { name: 'Kursiv-Befehl', legend: 'Drücken Sie ${italic}' }, { name: 'Unterstreichen-Befehl', legend: 'Drücken Sie ${underline}' }, { name: 'Link-Befehl', legend: 'Drücken Sie ${link}' }, { name: 'Werkzeugleiste einklappen-Befehl', legend: 'Drücken Sie ${toolbarCollapse}' }, { name: 'Zugang bisheriger Fokussierung Raumbefehl ', legend: 'Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. ' }, { name: 'Zugang nächster Schwerpunkt Raumbefehl ', legend: 'Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. ' }, { name: 'Eingabehilfen', legend: 'Drücken Sie ${a11yHelp}' } ] } ], backspace: 'Rücktaste', tab: 'Tab', enter: 'Eingabe', shift: 'Umschalt', ctrl: 'Strg', alt: 'Alt', pause: 'Pause', capslock: 'Feststell', escape: 'Escape', pageUp: 'Bild auf', pageDown: 'Bild ab', end: 'Ende', home: 'Pos1', leftArrow: 'Linke Pfeiltaste', upArrow: 'Obere Pfeiltaste', rightArrow: 'Rechte Pfeiltaste', downArrow: 'Untere Pfeiltaste', insert: 'Einfügen', 'delete': 'Entfernen', leftWindowKey: 'Linke Windowstaste', rightWindowKey: 'Rechte Windowstaste', selectKey: 'Taste auswählen', numpad0: 'Ziffernblock 0', numpad1: 'Ziffernblock 1', numpad2: 'Ziffernblock 2', numpad3: 'Ziffernblock 3', numpad4: 'Ziffernblock 4', numpad5: 'Ziffernblock 5', numpad6: 'Ziffernblock 6', numpad7: 'Ziffernblock 7', numpad8: 'Ziffernblock 8', numpad9: 'Ziffernblock 9', multiply: 'Multiplizieren', add: 'Addieren', subtract: 'Subtrahieren', decimalPoint: 'Punkt', divide: 'Dividieren', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Ziffernblock feststellen', scrollLock: 'Rollen', semiColon: 'Semikolon', equalSign: 'Gleichheitszeichen', comma: 'Komma', dash: 'Bindestrich', period: 'Punkt', forwardSlash: 'Schrägstrich', graveAccent: 'Gravis', openBracket: 'Öffnende eckige Klammer', backSlash: 'Rückwärtsgewandter Schrägstrich', closeBracket: 'Schließende eckige Klammer', singleQuote: 'Einfaches Anführungszeichen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/uk.js0000644000175000017500000001504714006075350024663 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'uk', { title: 'Спеціальні Інструкції', contents: 'Довідка. Натисніть ESC і вона зникне.', legend: [ { name: 'Основне', items: [ { name: 'Панель Редактора', legend: 'Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT+TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів.' }, { name: 'Діалог Редактора', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Контекстне Меню Редактора', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC.' }, { name: 'Скринька Списків Редактора', legend: 'Всередині списку переходимо до наступного пункту списку клавішею TAB або СТРІЛКА ВНИЗ. Перейти до попереднього елемента списку можна SHIFT+TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список.' }, { name: 'Шлях до елемента редактора', legend: 'Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі.' } ] }, { name: 'Команди', items: [ { name: 'Відмінити команду', legend: 'Натисніть ${undo}' }, { name: 'Повторити', legend: 'Натисніть ${redo}' }, { name: 'Жирний', legend: 'Натисніть ${bold}' }, { name: 'Курсив', legend: 'Натисніть ${italic}' }, { name: 'Підкреслений', legend: 'Натисніть ${underline}' }, { name: 'Посилання', legend: 'Натисніть ${link}' }, { name: 'Згорнути панель інструментів', legend: 'Натисніть ${toolbarCollapse}' }, { name: 'Доступ до попереднього місця фокусування', legend: 'Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування.' }, { name: 'Доступ до наступного місця фокусування', legend: 'Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування.' }, { name: 'Допомога з доступності', legend: 'Натисніть ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Esc', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Ліва стрілка', upArrow: 'Стрілка вгору', rightArrow: 'Права стрілка', downArrow: 'Стрілка вниз', insert: 'Вставити', 'delete': 'Видалити', leftWindowKey: 'Ліва клавіша Windows', rightWindowKey: 'Права клавіша Windows', selectKey: 'Виберіть клавішу', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Множення', add: 'Додати', subtract: 'Віднімання', decimalPoint: 'Десяткова кома', divide: 'Ділення', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Крапка з комою', equalSign: 'Знак рівності', comma: 'Кома', dash: 'Тире', period: 'Період', forwardSlash: 'Коса риска', graveAccent: 'Гравіс', openBracket: 'Відкрити дужку', backSlash: 'Зворотна коса риска', closeBracket: 'Закрити дужку', singleQuote: 'Одинарні лапки' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sr-latn.js0000644000175000017500000001263114006075350025620 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sr-latn', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'Opšte', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/km.js0000644000175000017500000001327614006075350024655 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'km', { title: 'Accessibility Instructions', // MISSING contents: 'មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។', legend: [ { name: 'ទូទៅ', items: [ { name: 'របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ', legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'ផ្ទាំង​កម្មវិធីនិពន្ធ', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'ម៉ីនុយបរិបទអ្នកកែសម្រួល', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'ប្រអប់បញ្ជីអ្នកកែសម្រួល', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'ពាក្យបញ្ជា', items: [ { name: 'ការ​បញ្ជា​មិនធ្វើវិញ', legend: 'ចុច ${undo}' }, { name: 'ការបញ្ជា​ធ្វើវិញ', legend: 'ចុច ${redo}' }, { name: 'ការបញ្ជា​អក្សរ​ដិត', legend: 'ចុច ${bold}' }, { name: 'ការបញ្ជា​អក្សរ​ទ្រេត', legend: 'ចុច ${italic}' }, { name: 'ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម', legend: 'ចុច ${underline}' }, { name: 'ពាក្យបញ្ជា​តំណ', legend: 'ចុច ${link}' }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: 'ជំនួយ​ពី​ភាព​ងាយស្រួល', legend: 'ជួយ ${a11yHelp}' } ] } ], backspace: 'លុបថយក្រោយ', tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'ផ្អាក', capslock: 'Caps Lock', // MISSING escape: 'ចាកចេញ', pageUp: 'ទំព័រ​លើ', pageDown: 'ទំព័រ​ក្រោម', end: 'ចុង', home: 'ផ្ទះ', leftArrow: 'ព្រួញ​ឆ្វេង', upArrow: 'ព្រួញ​លើ', rightArrow: 'ព្រួញ​ស្ដាំ', downArrow: 'ព្រួញ​ក្រោម', insert: 'បញ្ចូល', 'delete': 'លុប', leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'ជ្រើស​គ្រាប់​ចុច', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'គុណ', add: 'បន្ថែម', subtract: 'ដក', decimalPoint: 'ចំណុចទសភាគ', divide: 'ចែក', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', // MISSING scrollLock: 'បិទ​រំកិល', semiColon: 'ចុច​ក្បៀស', equalSign: 'សញ្ញា​អឺរ៉ូ', comma: 'ក្បៀស', dash: 'Dash', // MISSING period: 'ចុច', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'តង្កៀប​បើក', backSlash: 'Backslash', // MISSING closeBracket: 'តង្កៀប​បិទ', singleQuote: 'បន្តក់​មួយ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fa.js0000644000175000017500000001436014006075350024627 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'fa', { title: 'دستورالعمل‌های دسترسی', contents: 'راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.', legend: [ { name: 'عمومی', items: [ { name: 'نوار ابزار ویرایشگر', legend: '${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shift+Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید.' }, { name: 'پنجره محاورهای ویرایشگر', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'منوی متنی ویرایشگر', legend: '${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc.' }, { name: 'جعبه فهرست ویرایشگر', legend: 'در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید.' }, { name: 'ویرایشگر عنصر نوار راه', legend: 'برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر.' } ] }, { name: 'فرمان‌ها', items: [ { name: 'بازگشت به آخرین فرمان', legend: 'فشردن ${undo}' }, { name: 'انجام مجدد فرمان', legend: 'فشردن ${redo}' }, { name: 'فرمان درشت کردن متن', legend: 'فشردن ${bold}' }, { name: 'فرمان کج کردن متن', legend: 'فشردن ${italic}' }, { name: 'فرمان زیرخطدار کردن متن', legend: 'فشردن ${underline}' }, { name: 'فرمان پیوند دادن', legend: 'فشردن ${link}' }, { name: 'بستن نوار ابزار فرمان', legend: 'فشردن ${toolbarCollapse}' }, { name: 'دسترسی به فرمان محل تمرکز قبلی', legend: 'فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور.' }, { name: 'دسترسی به فضای دستور بعدی', legend: 'برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید.' }, { name: 'راهنمای دسترسی', legend: 'فشردن ${a11yHelp}' } ] } ], backspace: 'عقبگرد', tab: 'برگه', enter: 'ورود', shift: 'تعویض', ctrl: 'کنترل', alt: 'دگرساز', pause: 'توقف', capslock: 'Caps Lock', escape: 'گریز', pageUp: 'صفحه به بالا', pageDown: 'صفحه به پایین', end: 'پایان', home: 'خانه', leftArrow: 'پیکان چپ', upArrow: 'پیکان بالا', rightArrow: 'پیکان راست', downArrow: 'پیکان پایین', insert: 'ورود', 'delete': 'حذف', leftWindowKey: 'کلید چپ ویندوز', rightWindowKey: 'کلید راست ویندوز', selectKey: 'انتخاب کلید', numpad0: 'کلید شماره 0', numpad1: 'کلید شماره 1', numpad2: 'کلید شماره 2', numpad3: 'کلید شماره 3', numpad4: 'کلید شماره 4', numpad5: 'کلید شماره 5', numpad6: 'کلید شماره 6', numpad7: 'کلید شماره 7', numpad8: 'کلید شماره 8', numpad9: 'کلید شماره 9', multiply: 'ضرب', add: 'افزودن', subtract: 'تفریق', decimalPoint: 'نقطه‌ی اعشار', divide: 'جدا کردن', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semicolon', equalSign: 'علامت تساوی', comma: 'کاما', dash: 'خط تیره', period: 'دوره', forwardSlash: 'Forward Slash', graveAccent: 'Grave Accent', openBracket: 'Open Bracket', backSlash: 'Backslash', closeBracket: 'Close Bracket', singleQuote: 'Single Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/si.js0000644000175000017500000001604514006075350024656 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'si', { title: 'ළඟා වියහැකි ', contents: 'උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න', legend: [ { name: 'පොදු කරුණු', items: [ { name: 'සංස්කරණ මෙවලම් ', legend: 'ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න.' }, { name: 'සංස්කරණ ', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'සංස්කරණ අඩංගුවට ', legend: 'ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න.' }, { name: 'සංස්කරණ තේරුම් ', legend: 'තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT+TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න.' }, { name: 'සංස්කරණ අංග සහිත ', legend: 'ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න.' } ] }, { name: 'විධාන', items: [ { name: 'විධානය වෙනස් ', legend: 'ඔබන්න ${වෙනස් කිරීම}' }, { name: 'විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.', legend: 'ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}' }, { name: 'තද අකුරින් විධාන', legend: 'ඔබන්න ${තද }' }, { name: 'බැධී අකුරු විධාන', legend: 'ඔබන්න ${බැධී අකුරු }' }, { name: 'යටින් ඉරි ඇද ඇති විධාන.', legend: 'ඔබන්න ${යටින් ඉරි ඇද ඇති}' }, { name: 'සම්බන්ධිත විධාන', legend: 'ඔබන්න ${සම්බන්ධ }' }, { name: 'මෙවලම් තීරු හැකුලුම් විධාන', legend: 'ඔබන්න ${මෙවලම් තීරු හැකුලුම් }' }, { name: 'යොමුවීමට පෙර වැදගත් විධාන', legend: 'ඔබන්න ${යොමුවීමට ඊළඟ }' }, { name: 'යොමුවීමට ඊළග වැදගත් විධාන', legend: 'ඔබන්න ${යොමුවීමට ඊළඟ }' }, { name: 'ප්‍රවේශ ', legend: 'ඔබන්න ${a11y }' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en.js0000644000175000017500000001105214006075350024636 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'en', { title: 'Accessibility Instructions', contents: 'Help Contents. To close this dialog press ESC.', legend: [ { name: 'General', items: [ { name: 'Editor Toolbar', legend: 'Press ${toolbarFocus} to navigate to the toolbar. ' + 'Move to the next and previous toolbar group with TAB and SHIFT+TAB. ' + 'Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. ' + 'Press SPACE or ENTER to activate the toolbar button.' }, { name: 'Editor Dialog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. ' + 'When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. ' + 'With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' }, { name: 'Editor Context Menu', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. ' + 'Then move to next menu option with TAB or DOWN ARROW. ' + 'Move to previous option with SHIFT+TAB or UP ARROW. ' + 'Press SPACE or ENTER to select the menu option. ' + 'Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. ' + 'Go back to parent menu item with ESC or LEFT ARROW. ' + 'Close context menu with ESC.' }, { name: 'Editor List Box', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. ' + 'Move to previous list item with SHIFT+TAB or UP ARROW. ' + 'Press SPACE or ENTER to select the list option. ' + 'Press ESC to close the list-box.' }, { name: 'Editor Element Path Bar', legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. ' + 'Move to next element button with TAB or RIGHT ARROW. ' + 'Move to previous button with SHIFT+TAB or LEFT ARROW. ' + 'Press SPACE or ENTER to select the element in editor.' } ] }, { name: 'Commands', items: [ { name: ' Undo command', legend: 'Press ${undo}' }, { name: ' Redo command', legend: 'Press ${redo}' }, { name: ' Bold command', legend: 'Press ${bold}' }, { name: ' Italic command', legend: 'Press ${italic}' }, { name: ' Underline command', legend: 'Press ${underline}' }, { name: ' Link command', legend: 'Press ${link}' }, { name: ' Toolbar Collapse command', legend: 'Press ${toolbarCollapse}' }, { name: ' Access previous focus space command', legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, ' + 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: ' Access next focus space command', legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, ' + 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: ' Accessibility Help', legend: 'Press ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Left Arrow', upArrow: 'Up Arrow', rightArrow: 'Right Arrow', downArrow: 'Down Arrow', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Left Windows key', rightWindowKey: 'Right Windows key', selectKey: 'Select key', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Multiply', add: 'Add', subtract: 'Subtract', decimalPoint: 'Decimal Point', divide: 'Divide', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semicolon', equalSign: 'Equal Sign', comma: 'Comma', dash: 'Dash', period: 'Period', forwardSlash: 'Forward Slash', graveAccent: 'Grave Accent', openBracket: 'Open Bracket', backSlash: 'Backslash', closeBracket: 'Close Bracket', singleQuote: 'Single Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/he.js0000644000175000017500000001274714006075350024644 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'he', { title: 'הוראות נגישות', contents: 'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).', legend: [ { name: 'כללי', items: [ { name: 'סרגל הכלים', legend: 'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.' }, { name: 'דיאלוגים (חלונות תשאול)', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'תפריט ההקשר (Context Menu)', legend: 'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC).' }, { name: 'תפריטים צפים (List boxes)', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'עץ אלמנטים (Elements Path)', legend: 'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.' } ] }, { name: 'פקודות', items: [ { name: ' ביטול צעד אחרון', legend: 'לחץ ${undo}' }, { name: ' חזרה על צעד אחרון', legend: 'לחץ ${redo}' }, { name: ' הדגשה', legend: 'לחץ ${bold}' }, { name: ' הטייה', legend: 'לחץ ${italic}' }, { name: ' הוספת קו תחתון', legend: 'לחץ ${underline}' }, { name: ' הוספת לינק', legend: 'לחץ ${link}' }, { name: ' כיווץ סרגל הכלים', legend: 'לחץ ${toolbarCollapse}' }, { name: 'גישה למיקום המיקוד הקודם', legend: 'לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר.' }, { name: 'גישה למיקום המיקוד הבא', legend: 'לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר.' }, { name: ' הוראות נגישות', legend: 'לחץ ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'חץ שמאלה', upArrow: 'חץ למעלה', rightArrow: 'חץ ימינה', downArrow: 'חץ למטה', insert: 'הכנס', 'delete': 'מחק', leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'בחר מקש', numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'הוסף', subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'סלאש', graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'סלאש הפוך', closeBracket: 'Close Bracket', // MISSING singleQuote: 'ציטוט יחיד' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/lt.js0000644000175000017500000001263614006075350024664 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'lt', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'Bendros savybės', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/lv.js0000644000175000017500000001340614006075350024662 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'lv', { title: 'Pieejamības instrukcija', contents: 'Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.', legend: [ { name: 'Galvenais', items: [ { name: 'Redaktora rīkjosla', legend: 'Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu.' }, { name: 'Redaktora dialoga logs', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Redaktora satura izvēle', legend: 'Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC.' }, { name: 'Redaktora saraksta lauks', legend: 'Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku.' }, { name: 'Redaktora elementa ceļa josla', legend: 'Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT+TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā.' } ] }, { name: 'Komandas', items: [ { name: 'Komanda atcelt darbību', legend: 'Nospiediet ${undo}' }, { name: 'Komanda atkārtot darbību', legend: 'Nospiediet ${redo}' }, { name: 'Treknraksta komanda', legend: 'Nospiediet ${bold}' }, { name: 'Kursīva komanda', legend: 'Nospiediet ${italic}' }, { name: 'Apakšsvītras komanda ', legend: 'Nospiediet ${underline}' }, { name: 'Hipersaites komanda', legend: 'Nospiediet ${link}' }, { name: 'Rīkjoslas aizvēršanas komanda', legend: 'Nospiediet ${toolbarCollapse}' }, { name: 'Piekļūt iepriekšējai fokusa vietas komandai', legend: 'Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.' }, { name: 'Piekļūt nākošā fokusa apgabala komandai', legend: 'Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.' }, { name: 'Pieejamības palīdzība', legend: 'Nospiediet ${a11yHelp}' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/eo.js0000644000175000017500000001216414006075350024644 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'eo', { title: 'Uzindikoj pri atingeblo', contents: 'Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.', legend: [ { name: 'Ĝeneralaĵoj', items: [ { name: 'Ilbreto de la redaktilo', legend: 'Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA+TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon.' }, { name: 'Redaktildialogo', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Kunteksta menuo de la redaktilo', legend: 'Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo.' }, { name: 'Fallisto de la redaktilo', legend: 'En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon.' }, { name: 'Breto indikanta la vojon al la redaktilelementoj', legend: 'Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo.' } ] }, { name: 'Komandoj', items: [ { name: 'Komando malfari', legend: 'Premu ${undo}' }, { name: 'Komando refari', legend: 'Premu ${redo}' }, { name: 'Komando grasa', legend: 'Premu ${bold}' }, { name: 'Komando kursiva', legend: 'Premu ${italic}' }, { name: 'Komando substreki', legend: 'Premu ${underline}' }, { name: 'Komando ligilo', legend: 'Premu ${link}' }, { name: 'Komando faldi la ilbreton', legend: 'Premu ${toolbarCollapse}' }, { name: 'Komando por atingi la antaŭan fokusan spacon', legend: 'Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn.' }, { name: 'Komando por atingi la sekvan fokusan spacon', legend: 'Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn' }, { name: 'Helpilo pri atingeblo', legend: 'Premu ${a11yHelp}' } ] } ], backspace: 'Retropaŝo', tab: 'Tabo', enter: 'Enigi', shift: 'Registrumo', ctrl: 'Stirklavo', alt: 'Alt-klavo', pause: 'Paŭzo', capslock: 'Majuskla baskulo', escape: 'Eskapa klavo', pageUp: 'Antaŭa Paĝo', pageDown: 'Sekva Paĝo', end: 'Fino', home: 'Hejmo', leftArrow: 'Sago Maldekstren', upArrow: 'Sago Supren', rightArrow: 'Sago Dekstren', downArrow: 'Sago Suben', insert: 'Enmeti', 'delete': 'Forigi', leftWindowKey: 'Maldekstra Windows-klavo', rightWindowKey: 'Dekstra Windows-klavo', selectKey: 'Selektklavo', numpad0: 'Nombra Klavaro 0', numpad1: 'Nombra Klavaro 1', numpad2: 'Nombra Klavaro 2', numpad3: 'Nombra Klavaro 3', numpad4: 'Nombra Klavaro 4', numpad5: 'Nombra Klavaro 5', numpad6: 'Nombra Klavaro 6', numpad7: 'Nombra Klavaro 7', numpad8: 'Nombra Klavaro 8', numpad9: 'Nombra Klavaro 9', multiply: 'Obligi', add: 'Almeti', subtract: 'Subtrahi', decimalPoint: 'Dekuma Punkto', divide: 'Dividi', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Nombra Baskulo', scrollLock: 'Ruluma Baskulo', semiColon: 'Punktokomo', equalSign: 'Egalsigno', comma: 'Komo', dash: 'Haltostreko', period: 'Punkto', forwardSlash: 'Oblikvo', graveAccent: 'Malakuto', openBracket: 'Malferma Krampo', backSlash: 'Retroklino', closeBracket: 'Ferma Krampo', singleQuote: 'Citilo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ca.js0000644000175000017500000001177114006075350024627 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ca', { title: 'Instruccions d\'Accessibilitat', contents: 'Continguts de l\'Ajuda. Per tancar aquest quadre de diàleg premi ESC.', legend: [ { name: 'General', items: [ { name: 'Editor de barra d\'eines', legend: 'Premi ${toolbarFocus} per desplaçar-se per la barra d\'eines. Vagi en el següent i anterior grup de barra d\'eines amb TAB i SHIFT+TAB. Vagi en el següent i anterior botó de la barra d\'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d\'eines.' }, { name: 'Editor de quadre de diàleg', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor de menú contextual', legend: 'Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l\'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l\'opció del menú. Obri el submenú de l\'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l\'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC.' }, { name: 'Editor de caixa de llista', legend: 'Dins d\'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l\'anterior element de la llista amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l\'opció de la llista. Premi ESC per tancar el quadre de llista.' }, { name: 'Editor de barra de ruta de l\'element', legend: 'Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l\'element següent amb TAB o RIGHT ARROW. Desplacis a l\'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l\'element a l\'editor.' } ] }, { name: 'Ordres', items: [ { name: 'Desfer ordre', legend: 'Premi ${undo}' }, { name: 'Refer ordre', legend: 'Premi ${redo}' }, { name: 'Ordre negreta', legend: 'Premi ${bold}' }, { name: 'Ordre cursiva', legend: 'Premi ${italic}' }, { name: 'Ordre subratllat', legend: 'Premi ${underline}' }, { name: 'Ordre enllaç', legend: 'Premi ${link}' }, { name: 'Ordre amagar barra d\'eines', legend: 'Premi ${toolbarCollapse}' }, { name: 'Ordre per accedir a l\'anterior espai enfocat', legend: 'Premi ${accessPreviousSpace} per accedir a l\'enfocament d\'espai més proper inabastable abans del símbol d\'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d\'espais distants.' }, { name: 'Ordre per accedir al següent espai enfocat', legend: 'Premi ${accessNextSpace} per accedir a l\'enfocament d\'espai més proper inabastable després del símbol d\'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d\'espais distants.' }, { name: 'Ajuda d\'accessibilitat', legend: 'Premi ${a11yHelp}' } ] } ], backspace: 'Retrocés', tab: 'Tabulació', enter: 'Intro', shift: 'Majúscules', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pausa', capslock: 'Bloqueig de majúscules', escape: 'Escape', pageUp: 'Pàgina Amunt', pageDown: 'Pàgina Avall', end: 'Fi', home: 'Inici', leftArrow: 'Fletxa Esquerra', upArrow: 'Fletxa Amunt', rightArrow: 'Fletxa Dreta', downArrow: 'Fletxa Avall', insert: 'Inserir', 'delete': 'Eliminar', leftWindowKey: 'Tecla Windows Esquerra', rightWindowKey: 'Tecla Windows Dreta', selectKey: 'Tecla Seleccionar', numpad0: 'Teclat Numèric 0', numpad1: 'Teclat Numèric 1', numpad2: 'Teclat Numèric 2', numpad3: 'Teclat Numèric 3', numpad4: 'Teclat Numèric 4', numpad5: 'Teclat Numèric 5', numpad6: 'Teclat Numèric 6', numpad7: 'Teclat Numèric 7', numpad8: 'Teclat Numèric 8', numpad9: 'Teclat Numèric 9', multiply: 'Multiplicació', add: 'Suma', subtract: 'Resta', decimalPoint: 'Punt Decimal', divide: 'Divisió', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Bloqueig Teclat Numèric', scrollLock: 'Bloqueig de Desplaçament', semiColon: 'Punt i Coma', equalSign: 'Símbol Igual', comma: 'Coma', dash: 'Guió', period: 'Punt', forwardSlash: 'Barra Diagonal', graveAccent: 'Accent Obert', openBracket: 'Claudàtor Obert', backSlash: 'Barra Invertida', closeBracket: 'Claudàtor Tancat', singleQuote: 'Cometa Simple' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hi.js0000644000175000017500000001264314006075350024643 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'hi', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'सामान्य', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/_translationstatus.txt0000644000175000017500000000151414006075350030402 0ustar domdomCopyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license cs.js Found: 30 Missing: 0 cy.js Found: 30 Missing: 0 da.js Found: 12 Missing: 18 de.js Found: 30 Missing: 0 el.js Found: 25 Missing: 5 eo.js Found: 30 Missing: 0 fa.js Found: 30 Missing: 0 fi.js Found: 30 Missing: 0 fr.js Found: 30 Missing: 0 gu.js Found: 12 Missing: 18 he.js Found: 30 Missing: 0 it.js Found: 30 Missing: 0 mk.js Found: 5 Missing: 25 nb.js Found: 30 Missing: 0 nl.js Found: 30 Missing: 0 no.js Found: 30 Missing: 0 pt-br.js Found: 30 Missing: 0 ro.js Found: 6 Missing: 24 tr.js Found: 30 Missing: 0 ug.js Found: 27 Missing: 3 vi.js Found: 6 Missing: 24 zh-cn.js Found: 30 Missing: 0 rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/mk.js0000644000175000017500000001300014006075350024636 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'mk', { title: 'Инструкции за пристапност', contents: 'Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.', legend: [ { name: 'Општо', items: [ { name: 'Мени за едиторот', legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Дијалот за едиторот', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/mn.js0000644000175000017500000001263414006075350024655 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'mn', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'Ерөнхий', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/gl.js0000644000175000017500000001161314006075350024641 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'gl', { title: 'Instrucións de accesibilidade', contents: 'Axuda. Para pechar este diálogo prema ESC.', legend: [ { name: 'Xeral', items: [ { name: 'Barra de ferramentas do editor', legend: 'Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas.' }, { name: 'Editor de diálogo', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor do menú contextual', legend: 'Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC.' }, { name: 'Lista do editor', legend: 'Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS+TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista.' }, { name: 'Barra da ruta ao elemento no editor', legend: 'Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS+TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor.' } ] }, { name: 'Ordes', items: [ { name: 'Orde «desfacer»', legend: 'Prema ${undo}' }, { name: 'Orde «refacer»', legend: 'Prema ${redo}' }, { name: 'Orde «negra»', legend: 'Prema ${bold}' }, { name: 'Orde «cursiva»', legend: 'Prema ${italic}' }, { name: 'Orde «subliñar»', legend: 'Prema ${underline}' }, { name: 'Orde «ligazón»', legend: 'Prema ${link}' }, { name: 'Orde «contraer a barra de ferramentas»', legend: 'Prema ${toolbarCollapse}' }, { name: 'Orde «acceder ao anterior espazo en foco»', legend: 'Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes.' }, { name: 'Orde «acceder ao seguinte espazo en foco»', legend: 'Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes.' }, { name: 'Axuda da accesibilidade', legend: 'Prema ${a11yHelp}' } ] } ], backspace: 'Ir atrás', tab: 'Tabulador', enter: 'Intro', shift: 'Maiús', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pausa', capslock: 'Bloq. Maiús', escape: 'Escape', pageUp: 'Páxina arriba', pageDown: 'Páxina abaixo', end: 'Fin', home: 'Inicio', leftArrow: 'Frecha esquerda', upArrow: 'Frecha arriba', rightArrow: 'Frecha dereita', downArrow: 'Frecha abaixo', insert: 'Inserir', 'delete': 'Supr', leftWindowKey: 'Tecla Windows esquerda', rightWindowKey: 'Tecla Windows dereita', selectKey: 'Escolla a tecla', numpad0: 'Tec. numérico 0', numpad1: 'Tec. numérico 1', numpad2: 'Tec. numérico 2', numpad3: 'Tec. numérico 3', numpad4: 'Tec. numérico 4', numpad5: 'Tec. numérico 5', numpad6: 'Tec. numérico 6', numpad7: 'Tec. numérico 7', numpad8: 'Tec. numérico 8', numpad9: 'Tec. numérico 9', multiply: 'Multiplicar', add: 'Sumar', subtract: 'Restar', decimalPoint: 'Punto decimal', divide: 'Dividir', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Bloq. num.', scrollLock: 'Bloq. despraz.', semiColon: 'Punto e coma', equalSign: 'Signo igual', comma: 'Coma', dash: 'Guión', period: 'Punto', forwardSlash: 'Barra inclinada', graveAccent: 'Acento grave', openBracket: 'Abrir corchete', backSlash: 'Barra invertida', closeBracket: 'Pechar corchete', singleQuote: 'Comiña simple' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ko.js0000644000175000017500000001377014006075350024656 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ko', { title: '접근성 설명', contents: '도움말. 이 창을 닫으시려면 ESC 를 누르세요.', legend: [ { name: '일반', items: [ { name: '편집기 툴바', legend: '툴바를 탐색하시려면 ${toolbarFocus} 를 투르세요. 이전/다음 툴바 그룹으로 이동하시려면 TAB 키 또는 SHIFT+TAB 키를 누르세요. 이전/다음 툴바 버튼으로 이동하시려면 오른쪽 화살표 키 또는 왼쪽 화살표 키를 누르세요. 툴바 버튼을 활성화 하려면 SPACE 키 또는 ENTER 키를 누르세요.' }, { name: '편집기 다이얼로그', legend: 'TAB 키를 누르면 다음 대화상자로 이동하고, SHIFT+TAB 키를 누르면 이전 대화상자로 이동합니다. 대화상자를 제출하려면 ENTER 키를 누르고, ESC 키를 누르면 대화상자를 취소합니다. 대화상자에 탭이 여러개 있을 때, ALT+F10 키 또는 TAB 키를 누르면 순서에 따라 탭 목록에 도달할 수 있습니다. 탭 목록에 초점이 맞을 때, 오른쪽과 왼쪽 화살표 키를 이용하면 각각 다음과 이전 탭으로 이동할 수 있습니다.' }, { name: '편집기 환경 메뉴', legend: '${contextMenu} 또는 어플리케이션 키를 누르면 환경-메뉴를 열 수 있습니다. 환경-메뉴에서 TAB 키 또는 아래 화살표 키를 누르면 다음 메뉴 옵션으로 이동할 수 있습니다. 이전 옵션으로 이동은 SHIFT+TAB 키 또는 위 화살표 키를 눌러서 할 수 있습니다. 스페이스 키 또는 ENTER 키를 눌러서 메뉴 옵션을 선택할 수 있습니다. 스페이스 키 또는 ENTER 키 또는 오른쪽 화살표 키를 눌러서 하위 메뉴를 열 수 있습니다. 부모 메뉴 항목으로 돌아가려면 ESC 키 또는 왼쪽 화살표 키를 누릅니다. ESC 키를 눌러서 환경-메뉴를 닫습니다.' }, { name: '편집기 목록 박스', legend: '리스트-박스 내에서, 목록의 다음 항목으로 이동하려면 TAB 키 또는 아래쪽 화살표 키를 누릅니다. 목록의 이전 항목으로 이동하려면 SHIFT+TAB 키 또는 위쪽 화살표 키를 누릅니다. 스페이스 키 또는 ENTER 키를 누르면 목록의 해당 옵션을 선택합니다. ESC 키를 눌러서 리스트-박스를 닫을 수 있습니다.' }, { name: '편집기 요소 경로 막대', legend: '${elementsPathFocus}를 눌러서 요소 경로 막대를 탐색할 수 있습니다. 다음 요소로 이동하려면 TAB 키 또는 오른쪽 화살표 키를 누릅니다. SHIFT+TAB 키 또는 왼쪽 화살표 키를 누르면 이전 버튼으로 이동할 수 있습니다. 스페이스 키나 ENTER 키를 누르면 편집기의 해당 항목을 선택합니다.' } ] }, { name: '명령', items: [ { name: ' 명령 실행 취소', legend: '${undo} 누르시오' }, { name: ' 명령 다시 실행', legend: '${redo} 누르시오' }, { name: ' 굵게 명령', legend: '${bold} 누르시오' }, { name: ' 기울임 꼴 명령', legend: '${italic} 누르시오' }, { name: ' 밑줄 명령', legend: '${underline} 누르시오' }, { name: ' 링크 명령', legend: '${link} 누르시오' }, { name: ' 툴바 줄이기 명령', legend: '${toolbarCollapse} 누르시오' }, { name: ' 이전 포커스 공간 접근 명령', legend: '탈자 기호(^) 이전에 ${accessPreviousSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다.' }, { name: '다음 포커스 공간 접근 명령', legend: '탈자 기호(^) 다음에 ${accessNextSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다. ' }, { name: ' 접근성 도움말', legend: '${a11yHelp} 누르시오' } ] } ], backspace: 'Backspace 키', tab: '탭 키', enter: '엔터 키', shift: '시프트 키', ctrl: '컨트롤 키', alt: '알트 키', pause: '일시정지 키', capslock: '캡스 록 키', escape: '이스케이프 키', pageUp: '페이지 업 키', pageDown: '페이지 다운 키', end: '엔드 키', home: '홈 키', leftArrow: '왼쪽 화살표 키', upArrow: '위쪽 화살표 키', rightArrow: '오른쪽 화살표 키', downArrow: '아래쪽 화살표 키', insert: '인서트 키', 'delete': '삭제 키', leftWindowKey: '왼쪽 윈도우 키', rightWindowKey: '오른쪽 윈도우 키', selectKey: '셀렉트 키', numpad0: '숫자 패드 0 키', numpad1: '숫자 패드 1 키', numpad2: '숫자 패드 2 키', numpad3: '숫자 패드 3 키', numpad4: '숫자 패드 4 키', numpad5: '숫자 패드 5 키', numpad6: '숫자 패드 6 키', numpad7: '숫자 패드 7 키', numpad8: '숫자 패드 8 키', numpad9: '숫자 패드 9 키', multiply: '곱셈(*) 키', add: '덧셈(+) 키', subtract: '뺄셈(-) 키', decimalPoint: '온점(.) 키', divide: '나눗셈(/) 키', f1: 'F1 키', f2: 'F2 키', f3: 'F3 키', f4: 'F4 키', f5: 'F5 키', f6: 'F6 키', f7: 'F7 키', f8: 'F8 키', f9: 'F9 키', f10: 'F10 키', f11: 'F11 키', f12: 'F12 키', numLock: 'Num Lock 키', scrollLock: 'Scroll Lock 키', semiColon: '세미콜론(;) 키', equalSign: '등호(=) 키', comma: '쉼표(,) 키', dash: '대시(-) 키', period: '온점(.) 키', forwardSlash: '슬래시(/) 키', graveAccent: '억음 악센트(`) 키', openBracket: '브라켓 열기([) 키', backSlash: '역슬래시(\\\\) 키', closeBracket: '브라켓 닫기(]) 키', singleQuote: '외 따옴표(\') 키' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/zh.js0000644000175000017500000001111414006075350024654 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'zh', { title: '輔助工具指南', contents: '說明內容。若要關閉此對話框請按「ESC」。', legend: [ { name: '一般', items: [ { name: '編輯器工具列', legend: '請按 ${toolbarFocus} 以導覽到工具列。利用 TAB 或 SHIFT+TAB 以便移動到下一個及前一個工具列群組。利用右方向鍵或左方向鍵以便移動到下一個及上一個工具列按鈕。按下空白鍵或 ENTER 鍵啟用工具列按鈕。' }, { name: '編輯器對話方塊', legend: '在對話框中,按下 TAB 鍵以導覽到下一個對話框元素,按下 SHIFT+TAB 以移動到上一個對話框元素,按下 ENTER 以遞交對話框,按下 ESC 以取消對話框。當對話框有多個分頁時,可以使用 ALT+F10 或是在對話框分頁順序中的一部份按下 TAB 以使用分頁列表。焦點在分頁列表上時,分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。' }, { name: '編輯器內容功能表', legend: '請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。' }, { name: '編輯器清單方塊', legend: '在清單方塊中,使用 TAB 或下方向鍵移動到下一個列表項目。使用 SHIFT+TAB 或上方向鍵移動到上一個列表項目。按下空白鍵或 ENTER 以選取列表選項。按下 ESC 以關閉清單方塊。' }, { name: '編輯器元件路徑工具列', legend: '請按 ${elementsPathFocus} 以瀏覽元素路徑列。利用 TAB 或右方向鍵以便移動到下一個元素按鈕。利用 SHIFT 或左方向鍵以便移動到上一個按鈕。按下空白鍵或 ENTER 鍵來選取在編輯器中的元素。' } ] }, { name: '命令', items: [ { name: '復原命令', legend: '請按下「${undo}」' }, { name: '重複命令', legend: '請按下「 ${redo}」' }, { name: '粗體命令', legend: '請按下「${bold}」' }, { name: '斜體', legend: '請按下「${italic}」' }, { name: '底線命令', legend: '請按下「${underline}」' }, { name: '連結', legend: '請按下「${link}」' }, { name: '隱藏工具列', legend: '請按下「${toolbarCollapse}」' }, { name: '存取前一個焦點空間命令', legend: '請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。' }, { name: '存取下一個焦點空間命令', legend: '請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。' }, { name: '協助工具說明', legend: '請按下「${a11yHelp}」' } ] } ], backspace: '退格鍵', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Esc', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: '向左箭號', upArrow: '向上鍵號', rightArrow: '向右鍵號', downArrow: '向下鍵號', insert: '插入', 'delete': '刪除', leftWindowKey: '左方 Windows 鍵', rightWindowKey: '右方 Windows 鍵', selectKey: '選擇鍵', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: '乘號', add: '新增', subtract: '減號', decimalPoint: '小數點', divide: '除號', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: '分號', equalSign: '等號', comma: '逗號', dash: '虛線', period: '句點', forwardSlash: '斜線', graveAccent: '抑音符號', openBracket: '左方括號', backSlash: '反斜線', closeBracket: '右方括號', singleQuote: '單引號' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/es.js0000644000175000017500000001211614006075350024645 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'es', { title: 'Instrucciones de accesibilidad', contents: 'Ayuda. Para cerrar presione ESC.', legend: [ { name: 'General', items: [ { name: 'Barra de herramientas del editor', legend: 'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.' }, { name: 'Editor de diálogo', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor del menú contextual', legend: 'Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC.' }, { name: 'Lista del Editor', legend: 'Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista.' }, { name: 'Barra de Ruta del Elemento en el Editor', legend: 'Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor.' } ] }, { name: 'Comandos', items: [ { name: 'Comando deshacer', legend: 'Presiona ${undo}' }, { name: 'Comando rehacer', legend: 'Presiona ${redo}' }, { name: 'Comando negrita', legend: 'Presiona ${bold}' }, { name: 'Comando itálica', legend: 'Presiona ${italic}' }, { name: 'Comando subrayar', legend: 'Presiona ${underline}' }, { name: 'Comando liga', legend: 'Presiona ${liga}' }, { name: 'Comando colapsar barra de herramientas', legend: 'Presiona ${toolbarCollapse}' }, { name: 'Comando accesar el anterior espacio de foco', legend: 'Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes.' }, { name: 'Comando accesar el siguiente spacio de foco', legend: 'Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes.' }, { name: 'Ayuda de Accesibilidad', legend: 'Presiona ${a11yHelp}' } ] } ], backspace: 'Retroceso', tab: 'Tabulador', enter: 'Ingresar', shift: 'Mayús.', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pausa', capslock: 'Bloq. Mayús.', escape: 'Escape', pageUp: 'Regresar Página', pageDown: 'Avanzar Página', end: 'Fin', home: 'Inicio', leftArrow: 'Flecha Izquierda', upArrow: 'Flecha Arriba', rightArrow: 'Flecha Derecha', downArrow: 'Flecha Abajo', insert: 'Insertar', 'delete': 'Suprimir', leftWindowKey: 'Tecla Windows Izquierda', rightWindowKey: 'Tecla Windows Derecha', selectKey: 'Tecla de Selección', numpad0: 'Tecla 0 del teclado numérico', numpad1: 'Tecla 1 del teclado numérico', numpad2: 'Tecla 2 del teclado numérico', numpad3: 'Tecla 3 del teclado numérico', numpad4: 'Tecla 4 del teclado numérico', numpad5: 'Tecla 5 del teclado numérico', numpad6: 'Tecla 6 del teclado numérico', numpad7: 'Tecla 7 del teclado numérico', numpad8: 'Tecla 8 del teclado numérico', numpad9: 'Tecla 9 del teclado numérico', multiply: 'Multiplicar', add: 'Sumar', subtract: 'Restar', decimalPoint: 'Punto Decimal', divide: 'Dividir', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Punto y coma', equalSign: 'Signo de Igual', comma: 'Coma', dash: 'Guión', period: 'Punto', forwardSlash: 'Diagonal', graveAccent: 'Acento Grave', openBracket: 'Abrir llave', backSlash: 'Diagonal Invertida', closeBracket: 'Cerrar llave', singleQuote: 'Comillas simples' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fo.js0000644000175000017500000001213014006075350024636 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'fo', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'General', // MISSING items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Falda', add: 'Pluss', subtract: 'Frádráttar', decimalPoint: 'Decimal Point', // MISSING divide: 'Býta', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semikolon', equalSign: 'Javnatekn', comma: 'Komma', dash: 'Dash', // MISSING period: 'Punktum', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/tt.js0000644000175000017500000001161714006075350024672 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'tt', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'Гомуми', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Командалар', items: [ { name: 'Кайтару', legend: '${undo} басыгыз' }, { name: 'Кабатлау', legend: '${redo} басыгыз' }, { name: 'Калын', legend: '${bold} басыгыз' }, { name: 'Курсив', legend: '${italic} басыгыз' }, { name: 'Астына сызылган', legend: '${underline} басыгыз' }, { name: 'Сылталама', legend: '${link} басыгыз' }, { name: ' Toolbar Collapse command', // MISSING legend: '${toolbarCollapse} басыгыз' }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: '${a11yHelp} басыгыз' } ] } ], backspace: 'Кайтару', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Тыныш', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Сул якка ук', upArrow: 'Өскә таба ук', rightArrow: 'Уң якка ук', downArrow: 'Аска таба ук', insert: 'Өстәү', 'delete': 'Бетерү', leftWindowKey: 'Сул Windows төймəсе', rightWindowKey: 'Уң Windows төймəсе', selectKey: 'Select төймəсе', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Тапкырлау', add: 'Кушу', subtract: 'Алу', decimalPoint: 'Унарлы нокта', divide: 'Бүлү', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Нокталы өтер', equalSign: 'Тигезлек билгесе', comma: 'Өтер', dash: 'Сызык', period: 'Дәрәҗә', forwardSlash: 'Кыек сызык', graveAccent: 'Гравис', openBracket: 'Җәя ачу', backSlash: 'Кире кыек сызык', closeBracket: 'Җәя ябу', singleQuote: 'Бер иңле куштырнаклар' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/it.js0000644000175000017500000001250314006075350024652 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'it', { title: 'Istruzioni di Accessibilità', contents: 'Contenuti di Aiuto. Per chiudere questa finestra premi ESC.', legend: [ { name: 'Generale', items: [ { name: 'Barra degli strumenti Editor', legend: 'Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti.' }, { name: 'Finestra Editor', legend: 'All\'interno di una finestra di dialogo è possibile premere TAB per passare all\'elemento successivo della finestra, MAIUSC+TAB per passare a quello precedente; premere INVIO per inviare i dati della finestra, oppure ESC per annullare l\'operazione. Quando una finestra di dialogo ha più schede, è possibile passare all\'elenco delle schede sia con ALT+F10 che con TAB, in base all\'ordine delle tabulazioni della finestra. Quando l\'elenco delle schede è attivo, premere la FRECCIA DESTRA o la FRECCIA SINISTRA per passare rispettivamente alla scheda successiva o a quella precedente.' }, { name: 'Menù contestuale Editor', legend: 'Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all\'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all\'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l\'opzione di menu. Apri il sottomenu dell\'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC.' }, { name: 'Box Lista Editor', legend: 'All\'interno di un elenco di opzioni, per spostarsi all\'elemento successivo premere TAB oppure FRECCIA GIÙ. Per spostarsi all\'elemento precedente usare SHIFT+TAB oppure FRECCIA SU. Premere SPAZIO o INVIO per selezionare l\'elemento della lista. Premere ESC per chiudere l\'elenco di opzioni.' }, { name: 'Barra percorso elementi editor', legend: 'Premere ${elementsPathFocus} per passare agli elementi della barra del percorso. Usare TAB o FRECCIA DESTRA per passare al pulsante successivo. Per passare al pulsante precedente premere MAIUSC+TAB o FRECCIA SINISTRA. Premere SPAZIO o INVIO per selezionare l\'elemento nell\'editor.' } ] }, { name: 'Comandi', items: [ { name: ' Annulla comando', legend: 'Premi ${undo}' }, { name: ' Ripeti comando', legend: 'Premi ${redo}' }, { name: ' Comando Grassetto', legend: 'Premi ${bold}' }, { name: ' Comando Corsivo', legend: 'Premi ${italic}' }, { name: ' Comando Sottolineato', legend: 'Premi ${underline}' }, { name: ' Comando Link', legend: 'Premi ${link}' }, { name: ' Comando riduci barra degli strumenti', legend: 'Premi ${toolbarCollapse}' }, { name: 'Comando di accesso al precedente spazio di focus', legend: 'Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.' }, { name: 'Comando di accesso al prossimo spazio di focus', legend: 'Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.' }, { name: ' Aiuto Accessibilità', legend: 'Premi ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Invio', shift: 'Maiusc', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pausa', capslock: 'Bloc Maiusc', escape: 'Esc', pageUp: 'Pagina sù', pageDown: 'Pagina giù', end: 'Fine', home: 'Inizio', leftArrow: 'Freccia sinistra', upArrow: 'Freccia su', rightArrow: 'Freccia destra', downArrow: 'Freccia giù', insert: 'Ins', 'delete': 'Canc', leftWindowKey: 'Tasto di Windows sinistro', rightWindowKey: 'Tasto di Windows destro', selectKey: 'Tasto di selezione', numpad0: '0 sul tastierino numerico', numpad1: '1 sul tastierino numerico', numpad2: '2 sul tastierino numerico', numpad3: '3 sul tastierino numerico', numpad4: '4 sul tastierino numerico', numpad5: '5 sul tastierino numerico', numpad6: '6 sul tastierino numerico', numpad7: '7 sul tastierino numerico', numpad8: '8 sul tastierino numerico', numpad9: '9 sul tastierino numerico', multiply: 'Moltiplicazione', add: 'Più', subtract: 'Sottrazione', decimalPoint: 'Punto decimale', divide: 'Divisione', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Bloc Num', scrollLock: 'Bloc Scorr', semiColon: 'Punto-e-virgola', equalSign: 'Segno di uguale', comma: 'Virgola', dash: 'Trattino', period: 'Punto', forwardSlash: 'Barra', graveAccent: 'Accento grave', openBracket: 'Parentesi quadra aperta', backSlash: 'Barra rovesciata', closeBracket: 'Parentesi quadra chiusa', singleQuote: 'Apostrofo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sv.js0000644000175000017500000001136714006075350024675 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sv', { title: 'Hjälpmedelsinstruktioner', contents: 'Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.', legend: [ { name: 'Allmänt', items: [ { name: 'Editor verktygsfält', legend: 'Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT+TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck SPACE eller ENTER för att aktivera knappen i verktygsfältet.' }, { name: 'Dialogeditor', legend: 'Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan, tryck SKIFT+TAB för att flytta till föregående fält, tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT+F10 eller TAB för att navigera till fliklistan. med fliklistan vald flytta till nästa och föregående flik med HÖGER- eller VÄNSTERPIL.' }, { name: 'Editor för innehållsmeny', legend: 'Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC.' }, { name: 'Editor för list-box', legend: 'Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT+TAB eller UPPIL. Tryck SPACE eller ENTER för att välja listan alternativet. Tryck ESC för att stänga list-boxen.' }, { name: 'Editor för elementens sökväg', legend: 'Tryck på ${elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT+TAB eller VÄNSTERPIL. Tryck SPACE eller ENTER för att välja element i redigeraren.' } ] }, { name: 'Kommandon', items: [ { name: 'Ångra kommando', legend: 'Tryck på ${undo}' }, { name: 'Gör om kommando', legend: 'Tryck på ${redo}' }, { name: 'Kommandot fet stil', legend: 'Tryck på ${bold}' }, { name: 'Kommandot kursiv', legend: 'Tryck på ${italic}' }, { name: 'Kommandot understruken', legend: 'Tryck på ${underline}' }, { name: 'Kommandot länk', legend: 'Tryck på ${link}' }, { name: 'Verktygsfält Dölj kommandot', legend: 'Tryck på ${toolbarCollapse}' }, { name: 'Gå till föregående fokus plats', legend: 'Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa.' }, { name: 'Tillgå nästa fokuskommandots utrymme', legend: 'Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen.' }, { name: 'Hjälp om tillgänglighet', legend: 'Tryck ${a11yHelp}' } ] } ], backspace: 'Backsteg', tab: 'Tab', enter: 'Retur', shift: 'Skift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Paus', capslock: 'Caps lock', escape: 'Escape', pageUp: 'Sida Up', pageDown: 'Sida Ned', end: 'Slut', home: 'Hem', leftArrow: 'Vänsterpil', upArrow: 'Uppil', rightArrow: 'Högerpil', downArrow: 'Nedåtpil', insert: 'Infoga', 'delete': 'Radera', leftWindowKey: 'Vänster Windowstangent', rightWindowKey: 'Höger Windowstangent', selectKey: 'Välj tangent', numpad0: 'Nummer 0', numpad1: 'Nummer 1', numpad2: 'Nummer 2', numpad3: 'Nummer 3', numpad4: 'Nummer 4', numpad5: 'Nummer 5', numpad6: 'Nummer 6', numpad7: 'Nummer 7', numpad8: 'Nummer 8', numpad9: 'Nummer 9', multiply: 'Multiplicera', add: 'Addera', subtract: 'Minus', decimalPoint: 'Decimalpunkt', divide: 'Dividera', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semikolon', equalSign: 'Lika med tecken', comma: 'Komma', dash: 'Minus', period: 'Punkt', forwardSlash: 'Snedstreck framåt', graveAccent: 'Accent', openBracket: 'Öppningsparentes', backSlash: 'Snedstreck bakåt', closeBracket: 'Slutparentes', singleQuote: 'Enkelt Citattecken' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/gu.js0000644000175000017500000001275614006075350024663 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'gu', { title: 'એક્ક્ષેબિલિટી ની વિગતો', contents: 'હેલ્પ. આ બંધ કરવા ESC દબાવો.', legend: [ { name: 'જનરલ', items: [ { name: 'એડિટર ટૂલબાર', legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'એડિટર ડાયલોગ', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'કમાંડસ', items: [ { name: 'અન્ડું કમાંડ', legend: '$ દબાવો {undo}' }, { name: 'ફરી કરો કમાંડ', legend: '$ દબાવો {redo}' }, { name: 'બોલ્દનો કમાંડ', legend: '$ દબાવો {bold}' }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/tr.js0000644000175000017500000001177114006075350024671 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'tr', { title: 'Erişilebilirlik Talimatları', contents: 'Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.', legend: [ { name: 'Genel', items: [ { name: 'Düzenleyici Araç Çubuğu', legend: 'Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT+TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın.' }, { name: 'Diyalog Düzenleyici', legend: 'Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın.' }, { name: 'İçerik Menü Editörü', legend: 'İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU\'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın.' }, { name: 'Liste Kutusu Editörü', legend: 'Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT+TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın.' }, { name: 'Element Yol Çubuğu Editörü', legend: 'Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT+TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın.' } ] }, { name: 'Komutlar', items: [ { name: 'Komutu geri al', legend: '$(undo)\'ya basın' }, { name: 'Komutu geri al', legend: '${redo} basın' }, { name: ' Kalın komut', legend: '${bold} basın' }, { name: ' İtalik komutu', legend: '${italic} basın' }, { name: ' Alttan çizgi komutu', legend: '${underline} basın' }, { name: ' Bağlantı komutu', legend: '${link} basın' }, { name: ' Araç çubuğu Toplama komutu', legend: '${toolbarCollapse} basın' }, { name: 'Önceki komut alanına odaklan', legend: 'Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın.' }, { name: 'Sonraki komut alanına odaklan', legend: 'Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın.' }, { name: 'Erişilebilirlik Yardımı', legend: '${a11yHelp}\'e basın' } ] } ], backspace: 'Silme', tab: 'Sekme tuşu', enter: 'Gir tuşu', shift: '"Shift" Kaydırma tuşu', ctrl: '"Ctrl" Kontrol tuşu', alt: '"Alt" Anahtar tuşu', pause: 'Durdurma tuşu', capslock: 'Büyük harf tuşu', escape: 'Vazgeç tuşu', pageUp: 'Sayfa Yukarı', pageDown: 'Sayfa Aşağı', end: 'Sona', home: 'En başa', leftArrow: 'Sol ok', upArrow: 'Yukarı ok', rightArrow: 'Sağ ok', downArrow: 'Aşağı ok', insert: 'Araya gir', 'delete': 'Silme', leftWindowKey: 'Sol windows tuşu', rightWindowKey: 'Sağ windows tuşu', selectKey: 'Seçme tuşu', numpad0: 'Nümerik 0', numpad1: 'Nümerik 1', numpad2: 'Nümerik 2', numpad3: 'Nümerik 3', numpad4: 'Nümerik 4', numpad5: 'Nümerik 5', numpad6: 'Nümerik 6', numpad7: 'Nümerik 7', numpad8: 'Nümerik 8', numpad9: 'Nümerik 9', multiply: 'Çarpma', add: 'Toplama', subtract: 'Çıkarma', decimalPoint: 'Ondalık işareti', divide: 'Bölme', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lk', scrollLock: 'Scr Lk', semiColon: 'Noktalı virgül', equalSign: 'Eşittir', comma: 'Virgül', dash: 'Eksi', period: 'Nokta', forwardSlash: 'İleri eğik çizgi', graveAccent: 'Üst tırnak', openBracket: 'Parantez aç', backSlash: 'Ters eğik çizgi', closeBracket: 'Parantez kapa', singleQuote: 'Tek tırnak' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pl.js0000644000175000017500000001257714006075350024664 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'pl', { title: 'Instrukcje dotyczące dostępności', contents: 'Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.', legend: [ { name: 'Informacje ogólne', items: [ { name: 'Pasek narzędzi edytora', legend: 'Naciśnij ${toolbarFocus}, by przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT+TAB. Przejdź do następnego i poprzedniego przycisku paska narzędzi za pomocą STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Naciśnij SPACJĘ lub ENTER by aktywować przycisk paska narzędzi.' }, { name: 'Okno dialogowe edytora', legend: 'Wewnątrz okna dialogowego naciśnij TAB, by przejść do kolejnego elementu tego okna lub SHIFT+TAB, by przejść do poprzedniego elementu okna. Naciśnij ENTER w celu zatwierdzenia opcji okna dialogowego lub ESC w celu anulowania zmian. Jeśli okno dialogowe ma kilka zakładek, do listy zakładek można przejść za pomocą ALT+F10 lub TAB. Gdy lista zakładek jest aktywna, możesz przejść do kolejnej i poprzedniej zakładki za pomocą STRZAŁKI W PRAWO i STRZAŁKI W LEWO.' }, { name: 'Menu kontekstowe edytora', legend: 'Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC.' }, { name: 'Lista w edytorze', legend: 'Wewnątrz listy przejdź do kolejnego elementu listy za pomocą przycisku TAB lub STRZAŁKI W DÓŁ. Przejdź do poprzedniego elementu listy za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Naciśnij SPACJĘ lub ENTER w celu wybrania opcji z listy. Naciśnij ESC, by zamknąć listę.' }, { name: 'Pasek ścieżki elementów edytora', legend: 'Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz TAB lub STRZAŁKI W PRAWO. W celu przejścia do poprzedniego elementu naciśnij klawisze SHIFT+TAB lub STRZAŁKI W LEWO. By wybrać element w edytorze, użyj klawisza SPACJI lub ENTER.' } ] }, { name: 'Polecenia', items: [ { name: 'Polecenie Cofnij', legend: 'Naciśnij ${undo}' }, { name: 'Polecenie Ponów', legend: 'Naciśnij ${redo}' }, { name: 'Polecenie Pogrubienie', legend: 'Naciśnij ${bold}' }, { name: 'Polecenie Kursywa', legend: 'Naciśnij ${italic}' }, { name: 'Polecenie Podkreślenie', legend: 'Naciśnij ${underline}' }, { name: 'Polecenie Wstaw/ edytuj odnośnik', legend: 'Naciśnij ${link}' }, { name: 'Polecenie schowaj pasek narzędzi', legend: 'Naciśnij ${toolbarCollapse}' }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: 'Pomoc dotycząca dostępności', legend: 'Naciśnij ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Strzałka w lewo', upArrow: 'Strzałka w górę', rightArrow: 'Strzałka w prawo', downArrow: 'Strzałka w dół', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Lewy klawisz Windows', rightWindowKey: 'Prawy klawisz Windows', selectKey: 'Klawisz wyboru', numpad0: 'Klawisz 0 na klawiaturze numerycznej', numpad1: 'Klawisz 1 na klawiaturze numerycznej', numpad2: 'Klawisz 2 na klawiaturze numerycznej', numpad3: 'Klawisz 3 na klawiaturze numerycznej', numpad4: 'Klawisz 4 na klawiaturze numerycznej', numpad5: 'Klawisz 5 na klawiaturze numerycznej', numpad6: 'Klawisz 6 na klawiaturze numerycznej', numpad7: 'Klawisz 7 na klawiaturze numerycznej', numpad8: 'Klawisz 8 na klawiaturze numerycznej', numpad9: 'Klawisz 9 na klawiaturze numerycznej', multiply: 'Przemnóż', add: 'Plus', subtract: 'Minus', decimalPoint: 'Separator dziesiętny', divide: 'Podziel', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Średnik', equalSign: 'Znak równości', comma: 'Przecinek', dash: 'Pauza', period: 'Kropka', forwardSlash: 'Ukośnik prawy', graveAccent: 'Akcent słaby', openBracket: 'Nawias kwadratowy otwierający', backSlash: 'Ukośnik lewy', closeBracket: 'Nawias kwadratowy zamykający', singleQuote: 'Apostrof' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/nb.js0000644000175000017500000001152114006075350024634 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'nb', { title: 'Instruksjoner for tilgjengelighet', contents: 'Innhold for hjelp. Trykk ESC for å lukke denne dialogen.', legend: [ { name: 'Generelt', items: [ { name: 'Verktøylinje for editor', legend: 'Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen.' }, { name: 'Dialog for editor', legend: 'Mens du er i en dialog, trykk TAB for å navigere til neste dialogelement, trykk SHIFT+TAB for å flytte til forrige dialogelement, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. Når en dialog har flere faner, kan fanelisten nås med enten ALT+F10 eller med TAB. Når fanelisten er fokusert, går man til neste og forrige fane med henholdsvis HØYRE og VENSTRE PILTAST.' }, { name: 'Kontekstmeny for editor', legend: 'Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC.' }, { name: 'Listeboks for editor', legend: 'I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen.' }, { name: 'Verktøylinje for elementsti', legend: 'Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren.' } ] }, { name: 'Hurtigtaster', items: [ { name: 'Angre', legend: 'Trykk ${undo}' }, { name: 'Gjør om', legend: 'Trykk ${redo}' }, { name: 'Fet tekst', legend: 'Trykk ${bold}' }, { name: 'Kursiv tekst', legend: 'Trykk ${italic}' }, { name: 'Understreking', legend: 'Trykk ${underline}' }, { name: 'Lenke', legend: 'Trykk ${link}' }, { name: 'Skjul verktøylinje', legend: 'Trykk ${toolbarCollapse}' }, { name: 'Gå til forrige fokusområde', legend: 'Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' }, { name: 'Gå til neste fokusområde', legend: 'Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' }, { name: 'Hjelp for tilgjengelighet', legend: 'Trykk ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tabulator', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Venstre piltast', upArrow: 'Opp-piltast', rightArrow: 'Høyre piltast', downArrow: 'Ned-piltast', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Venstre Windows-tast', rightWindowKey: 'Høyre Windows-tast', selectKey: 'Velg nøkkel', numpad0: 'Numerisk tastatur 0', numpad1: 'Numerisk tastatur 1', numpad2: 'Numerisk tastatur 2', numpad3: 'Numerisk tastatur 3', numpad4: 'Numerisk tastatur 4', numpad5: 'Numerisk tastatur 5', numpad6: 'Numerisk tastatur 6', numpad7: 'Numerisk tastatur 7', numpad8: 'Numerisk tastatur 8', numpad9: 'Numerisk tastatur 9', multiply: 'Multipliser', add: 'Legg til', subtract: 'Trekk fra', decimalPoint: 'Desimaltegn', divide: 'Divider', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semikolon', equalSign: 'Likhetstegn', comma: 'Komma', dash: 'Bindestrek', period: 'Punktum', forwardSlash: 'Forover skråstrek', graveAccent: 'Grav aksent', openBracket: 'Åpne parentes', backSlash: 'Bakover skråstrek', closeBracket: 'Lukk parentes', singleQuote: 'Enkelt sitattegn' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sl.js0000644000175000017500000001146714006075350024664 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sl', { title: 'Navodila Dostopnosti', contents: 'Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.', legend: [ { name: 'Splošno', items: [ { name: 'Urejevalna Orodna Vrstica', legend: 'Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT+TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice.' }, { name: 'Urejevalno Pogovorno Okno', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Urejevalni Kontekstni Meni', legend: 'Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC.' }, { name: 'Urejevalno Seznamsko Polje', legend: 'Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT+TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam.' }, { name: 'Urejevalna vrstica poti elementa', legend: 'Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT+TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku.' } ] }, { name: 'Ukazi', items: [ { name: 'Razveljavi ukaz', legend: 'Pritisnite ${undo}' }, { name: 'Ponovi ukaz', legend: 'Pritisnite ${redo}' }, { name: 'Krepki ukaz', legend: 'Pritisnite ${bold}' }, { name: 'Ležeči ukaz', legend: 'Pritisnite ${italic}' }, { name: 'Poudarni ukaz', legend: 'Pritisnite ${underline}' }, { name: 'Ukaz povezave', legend: 'Pritisnite ${link}' }, { name: 'Skrči Orodno Vrstico Ukaz', legend: 'Pritisnite ${toolbarCollapse}' }, { name: 'Dostop do prejšnjega ukaza ostrenja', legend: 'Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore.' }, { name: 'Dostop do naslednjega ukaza ostrenja', legend: 'Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore.' }, { name: 'Pomoč Dostopnosti', legend: 'Pritisnite ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Levo puščica', upArrow: 'Gor puščica', rightArrow: 'Desno puščica', downArrow: 'Dol puščica', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Leva Windows tipka', rightWindowKey: 'Desna Windows tipka', selectKey: 'Select tipka', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Zmnoži', add: 'Dodaj', subtract: 'Odštej', decimalPoint: 'Decimalna vejica', divide: 'Deli', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Podpičje', equalSign: 'enačaj', comma: 'Vejica', dash: 'Vezaj', period: 'Pika', forwardSlash: 'Desna poševnica', graveAccent: 'Krativec', openBracket: 'Oklepaj', backSlash: 'Leva poševnica', closeBracket: 'Oklepaj', singleQuote: 'Opuščaj' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fi.js0000644000175000017500000001264714006075350024645 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'fi', { title: 'Saavutettavuus ohjeet', contents: 'Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.', legend: [ { name: 'Yleinen', items: [ { name: 'Editorin työkalupalkki', legend: 'Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT+TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen.' }, { name: 'Editorin dialogi', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editorin oheisvalikko', legend: 'Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella.' }, { name: 'Editorin listalaatikko', legend: 'Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon.' }, { name: 'Editorin elementtipolun palkki', legend: 'Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa.' } ] }, { name: 'Komennot', items: [ { name: 'Peruuta komento', legend: 'Paina ${undo}' }, { name: 'Tee uudelleen komento', legend: 'Paina ${redo}' }, { name: 'Lihavoi komento', legend: 'Paina ${bold}' }, { name: 'Kursivoi komento', legend: 'Paina ${italic}' }, { name: 'Alleviivaa komento', legend: 'Paina ${underline}' }, { name: 'Linkki komento', legend: 'Paina ${link}' }, { name: 'Pienennä työkalupalkki komento', legend: 'Paina ${toolbarCollapse}' }, { name: 'Siirry aiempaan fokustilaan komento', legend: 'Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin.' }, { name: 'Siirry seuraavaan fokustilaan komento', legend: 'Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin.' }, { name: 'Saavutettavuus ohjeet', legend: 'Paina ${a11yHelp}' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numeronäppäimistö 0', numpad1: 'Numeronäppäimistö 1', numpad2: 'Numeronäppäimistö 2', numpad3: 'Numeronäppäimistö 3', numpad4: 'Numeronäppäimistö 4', numpad5: 'Numeronäppäimistö 5', numpad6: 'Numeronäppäimistö 6', numpad7: 'Numeronäppäimistö 7', numpad8: 'Numeronäppäimistö 8', numpad9: 'Numeronäppäimistö 9', multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Puolipiste', equalSign: 'Equal Sign', // MISSING comma: 'Pilkku', dash: 'Dash', // MISSING period: 'Piste', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fr-ca.js0000644000175000017500000001360214006075350025227 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'fr-ca', { title: 'Instructions d\'accessibilité', contents: 'Contenu de l\'aide. Pour fermer cette fenêtre, appuyez sur ESC.', legend: [ { name: 'Général', items: [ { name: 'Barre d\'outil de l\'éditeur', legend: 'Appuyer sur ${toolbarFocus} pour accéder à la barre d\'outils. Se déplacer vers les groupes suivant ou précédent de la barre d\'outil avec les touches TAB et SHIFT+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d\'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d\'espace ou la touche ENTRER pour activer le bouton de barre d\'outils.' }, { name: 'Dialogue de l\'éditeur', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Menu contextuel de l\'éditeur', legend: 'Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l\'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l\'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D\'ESPACE ou la touche ENTREE pour sélectionner l\'option du menu. Oovrir le sous-menu de l\'option courante avec la BARRE D\'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l\'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC.' }, { name: 'Menu déroulant de l\'éditeur', legend: 'A l\'intérieur d\'une liste en menu déroulant, se déplacer vers l\'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l\'élément précédent de la liste avec les touches SHIFT+TAB ou FLECHE HAUT. Appuyer sur la BARRE D\'ESPACE ou sur ENTREE pour sélectionner l\'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant.' }, { name: 'Barre d\'emplacement des éléments de l\'éditeur', legend: 'Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d\'emplacement des éléments de léditeur. Se déplacer vers le bouton d\'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d\'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D\'ESPACE ou sur ENTREE pour sélectionner l\'élément dans l\'éditeur.' } ] }, { name: 'Commandes', items: [ { name: 'Annuler', legend: 'Appuyer sur ${undo}' }, { name: 'Refaire', legend: 'Appuyer sur ${redo}' }, { name: 'Gras', legend: 'Appuyer sur ${bold}' }, { name: 'Italique', legend: 'Appuyer sur ${italic}' }, { name: 'Souligné', legend: 'Appuyer sur ${underline}' }, { name: 'Lien', legend: 'Appuyer sur ${link}' }, { name: 'Enrouler la barre d\'outils', legend: 'Appuyer sur ${toolbarCollapse}' }, { name: 'Accéder à l\'objet de focus précédent', legend: 'Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d\'espaces distantes.' }, { name: 'Accéder au prochain objet de focus', legend: 'Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d\'espaces distantes.' }, { name: 'Aide d\'accessibilité', legend: 'Appuyer sur ${a11yHelp}' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ru.js0000644000175000017500000001451614006075350024672 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ru', { title: 'Горячие клавиши', contents: 'Помощь. Для закрытия этого окна нажмите ESC.', legend: [ { name: 'Основное', items: [ { name: 'Панель инструментов', legend: 'Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT+TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов.' }, { name: 'Диалоги', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Контекстное меню', legend: 'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.' }, { name: 'Редактор списка', legend: 'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.' }, { name: 'Путь к элементу', legend: 'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.' } ] }, { name: 'Команды', items: [ { name: 'Отменить', legend: 'Нажмите ${undo}' }, { name: 'Повторить', legend: 'Нажмите ${redo}' }, { name: 'Полужирный', legend: 'Нажмите ${bold}' }, { name: 'Курсив', legend: 'Нажмите ${italic}' }, { name: 'Подчеркнутый', legend: 'Нажмите ${underline}' }, { name: 'Гиперссылка', legend: 'Нажмите ${link}' }, { name: 'Свернуть панель инструментов', legend: 'Нажмите ${toolbarCollapse}' }, { name: 'Команды доступа к предыдущему фокусному пространству', legend: 'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.' }, { name: 'Команды доступа к следующему фокусному пространству', legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: 'Справка по горячим клавишам', legend: 'Нажмите ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Esc', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Стрелка влево', upArrow: 'Стрелка вверх', rightArrow: 'Стрелка вправо', downArrow: 'Стрелка вниз', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Левая клавиша Windows', rightWindowKey: 'Правая клавиша Windows', selectKey: 'Выбрать', numpad0: 'Цифра 0', numpad1: 'Цифра 1', numpad2: 'Цифра 2', numpad3: 'Цифра 3', numpad4: 'Цифра 4', numpad5: 'Цифра 5', numpad6: 'Цифра 6', numpad7: 'Цифра 7', numpad8: 'Цифра 8', numpad9: 'Цифра 9', multiply: 'Умножить', add: 'Плюс', subtract: 'Вычесть', decimalPoint: 'Десятичная точка', divide: 'Делить', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Точка с запятой', equalSign: 'Равно', comma: 'Запятая', dash: 'Тире', period: 'Точка', forwardSlash: 'Наклонная черта', graveAccent: 'Апостроф', openBracket: 'Открыть скобку', backSlash: 'Обратная наклонная черта', closeBracket: 'Закрыть скобку', singleQuote: 'Одинарная кавычка' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/zh-cn.js0000644000175000017500000001110314006075350025250 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'zh-cn', { title: '辅助功能说明', contents: '帮助内容。要关闭此对话框请按 ESC 键。', legend: [ { name: '常规', items: [ { name: '编辑器工具栏', legend: '按 ${toolbarFocus} 切换到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。' }, { name: '编辑器对话框', legend: '在对话框内,按 TAB 键移动到下一个字段,按 SHIFT + TAB 组合键移动到上一个字段,按 ENTER 键提交对话框,按 ESC 键取消对话框。对于有多选项卡的对话框,可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表,当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。' }, { name: '编辑器上下文菜单', legend: '用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。' }, { name: '编辑器列表框', legend: '在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT+TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。' }, { name: '编辑器元素路径栏', legend: '按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。' } ] }, { name: '命令', items: [ { name: ' 撤消命令', legend: '按 ${undo}' }, { name: ' 重做命令', legend: '按 ${redo}' }, { name: ' 加粗命令', legend: '按 ${bold}' }, { name: ' 倾斜命令', legend: '按 ${italic}' }, { name: ' 下划线命令', legend: '按 ${underline}' }, { name: ' 链接命令', legend: '按 ${link}' }, { name: ' 工具栏折叠命令', legend: '按 ${toolbarCollapse}' }, { name: '访问前一个焦点区域的命令', legend: '按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。' }, { name: '访问下一个焦点区域命令', legend: '按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。' }, { name: '辅助功能帮助', legend: '按 ${a11yHelp}' } ] } ], backspace: '退格键', tab: 'Tab 键', enter: '回车键', shift: 'Shift 键', ctrl: 'Ctrl 键', alt: 'Alt 键', pause: '暂停键', capslock: '大写锁定键', escape: 'Esc 键', pageUp: '上翻页键', pageDown: '下翻页键', end: '行尾键', home: '行首键', leftArrow: '向左箭头键', upArrow: '向上箭头键', rightArrow: '向右箭头键', downArrow: '向下箭头键', insert: '插入键', 'delete': '删除键', leftWindowKey: '左 WIN 键', rightWindowKey: '右 WIN 键', selectKey: '选择键', numpad0: '小键盘 0 键', numpad1: '小键盘 1 键', numpad2: '小键盘 2 键', numpad3: '小键盘 3 键', numpad4: '小键盘 4 键', numpad5: '小键盘 5 键', numpad6: '小键盘 6 键', numpad7: '小键盘 7 键', numpad8: '小键盘 8 键', numpad9: '小键盘 9 键', multiply: '星号键', add: '加号键', subtract: '减号键', decimalPoint: '小数点键', divide: '除号键', f1: 'F1 键', f2: 'F2 键', f3: 'F3 键', f4: 'F4 键', f5: 'F5 键', f6: 'F6 键', f7: 'F7 键', f8: 'F8 键', f9: 'F9 键', f10: 'F10 键', f11: 'F11 键', f12: 'F12 键', numLock: '数字锁定键', scrollLock: '滚动锁定键', semiColon: '分号键', equalSign: '等号键', comma: '逗号键', dash: '短划线键', period: '句号键', forwardSlash: '斜杠键', graveAccent: '重音符键', openBracket: '左中括号键', backSlash: '反斜杠键', closeBracket: '右中括号键', singleQuote: '单引号键' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/cs.js0000644000175000017500000001233114006075350024642 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'cs', { title: 'Instrukce pro přístupnost', contents: 'Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.', legend: [ { name: 'Obecné', items: [ { name: 'Panel nástrojů editoru', legend: 'Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete.' }, { name: 'Dialogové okno editoru', legend: 'Uvnitř dialogového okna stiskněte TAB pro přesunutí na další prvek okna, stiskněte SHIFT+TAB pro přesun na předchozí prvek okna, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT+F10 pro zaměření seznamu karet, nebo TAB, pro posun podle pořadí karet.Při zaměření seznamu karet se můžete jimi posouvat pomocí ŠIPKY VPRAVO a VLEVO.' }, { name: 'Kontextové menu editoru', legend: 'Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC.' }, { name: 'Rámeček seznamu editoru', legend: 'Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT+TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu.' }, { name: 'Lišta cesty prvku v editoru', legend: 'Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí tlačítko se přesunete pomocí SHIFT+TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru.' } ] }, { name: 'Příkazy', items: [ { name: ' Příkaz Zpět', legend: 'Stiskněte ${undo}' }, { name: ' Příkaz Znovu', legend: 'Stiskněte ${redo}' }, { name: ' Příkaz Tučné', legend: 'Stiskněte ${bold}' }, { name: ' Příkaz Kurzíva', legend: 'Stiskněte ${italic}' }, { name: ' Příkaz Podtržení', legend: 'Stiskněte ${underline}' }, { name: ' Příkaz Odkaz', legend: 'Stiskněte ${link}' }, { name: ' Příkaz Skrýt panel nástrojů', legend: 'Stiskněte ${toolbarCollapse}' }, { name: 'Příkaz pro přístup k předchozímu prostoru zaměření', legend: 'Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.' }, { name: 'Příkaz pro přístup k dalšímu prostoru zaměření', legend: 'Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.' }, { name: ' Nápověda přístupnosti', legend: 'Stiskněte ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tabulátor', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pauza', capslock: 'Caps lock', escape: 'Escape', pageUp: 'Stránka nahoru', pageDown: 'Stránka dolů', end: 'Konec', home: 'Domů', leftArrow: 'Šipka vlevo', upArrow: 'Šipka nahoru', rightArrow: 'Šipka vpravo', downArrow: 'Šipka dolů', insert: 'Vložit', 'delete': 'Smazat', leftWindowKey: 'Levá klávesa Windows', rightWindowKey: 'Pravá klávesa Windows', selectKey: 'Vyberte klávesu', numpad0: 'Numerická klávesa 0', numpad1: 'Numerická klávesa 1', numpad2: 'Numerická klávesa 2', numpad3: 'Numerická klávesa 3', numpad4: 'Numerická klávesa 4', numpad5: 'Numerická klávesa 5', numpad6: 'Numerická klávesa 6', numpad7: 'Numerická klávesa 7', numpad8: 'Numerická klávesa 8', numpad9: 'Numerická klávesa 9', multiply: 'Numerická klávesa násobení', add: 'Přidat', subtract: 'Numerická klávesa odečítání', decimalPoint: 'Desetinná tečka', divide: 'Numerická klávesa dělení', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num lock', scrollLock: 'Scroll lock', semiColon: 'Středník', equalSign: 'Rovnítko', comma: 'Čárka', dash: 'Pomlčka', period: 'Tečka', forwardSlash: 'Lomítko', graveAccent: 'Přízvuk', openBracket: 'Otevřená hranatá závorka', backSlash: 'Obrácené lomítko', closeBracket: 'Uzavřená hranatá závorka', singleQuote: 'Jednoduchá uvozovka' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pt.js0000644000175000017500000001235514006075350024666 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'pt', { title: 'Instruções de acessibilidade', contents: 'Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.', legend: [ { name: 'Geral', items: [ { name: 'Barra de ferramentas do editor', legend: 'Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas.' }, { name: 'Janela do Editor', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Menu de Contexto do Editor', legend: 'Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC.' }, { name: 'Editor de caixa em lista', legend: 'Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista.' }, { name: 'Caminho Barra Elemento Editor', legend: 'Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor.' } ] }, { name: 'Comandos', items: [ { name: 'Comando de Anular', legend: 'Carregar ${undo}' }, { name: 'Comando de Refazer', legend: 'Pressione ${redo}' }, { name: 'Comando de Negrito', legend: 'Pressione ${bold}' }, { name: 'Comando de Itálico', legend: 'Pressione ${italic}' }, { name: 'Comando de Sublinhado', legend: 'Pressione ${underline}' }, { name: 'Comando de Hiperligação', legend: 'Pressione ${link}' }, { name: 'Comando de Ocultar Barra de Ferramentas', legend: 'Pressione ${toolbarCollapse}' }, { name: 'Acesso comando do espaço focus anterior', legend: 'Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes.' }, { name: 'Acesso comando do espaço focus seguinte', legend: 'Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes.' }, { name: 'Ajuda a acessibilidade', legend: 'Pressione ${a11yHelp}' } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pausa', capslock: 'Maiúsculas', escape: 'Esc', pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'Fim', home: 'Entrada', leftArrow: 'Seta esquerda', upArrow: 'Seta para cima', rightArrow: 'Seta direita', downArrow: 'Seta para baixo', insert: 'Inserir', 'delete': 'Eliminar', leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiplicar', add: 'Adicionar', subtract: 'Subtrair', decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Vírgula', dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Acento grave', openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pt-br.js0000644000175000017500000001206114006075350025261 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'pt-br', { title: 'Instruções de Acessibilidade', contents: 'Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.', legend: [ { name: 'Geral', items: [ { name: 'Barra de Ferramentas do Editor', legend: 'Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT+TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas.' }, { name: 'Diálogo do Editor', legend: 'Dentro de um diálogo, pressione TAB para navegar para o próximo elemento. Pressione SHIFT+TAB para mover para o elemento anterior. Pressione ENTER ara enviar o diálogo. pressione ESC para cancelar o diálogo. Quando um diálogo tem múltiplas abas, a lista de abas pode ser acessada com ALT+F10 ou TAB, como parte da ordem de tabulação do diálogo. Com a lista de abas em foco, mova para a próxima aba e para a aba anterior com a SETA DIREITA ou SETA ESQUERDA, respectivamente.' }, { name: 'Menu de Contexto do Editor', legend: 'Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC.' }, { name: 'Caixa de Lista do Editor', legend: 'Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista.' }, { name: 'Barra de Caminho do Elementos do Editor', legend: 'Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor.' } ] }, { name: 'Comandos', items: [ { name: ' Comando Desfazer', legend: 'Pressione ${undo}' }, { name: ' Comando Refazer', legend: 'Pressione ${redo}' }, { name: ' Comando Negrito', legend: 'Pressione ${bold}' }, { name: ' Comando Itálico', legend: 'Pressione ${italic}' }, { name: ' Comando Sublinhado', legend: 'Pressione ${underline}' }, { name: ' Comando Link', legend: 'Pressione ${link}' }, { name: ' Comando Fechar Barra de Ferramentas', legend: 'Pressione ${toolbarCollapse}' }, { name: 'Acessar o comando anterior de spaço de foco', legend: 'Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes.' }, { name: 'Acessar próximo fomando de spaço de foco', legend: 'Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes.' }, { name: ' Ajuda de Acessibilidade', legend: 'Pressione ${a11yHelp}' } ] } ], backspace: 'Tecla Backspace', tab: 'Tecla Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Seta à Esquerda', upArrow: 'Seta à Cima', rightArrow: 'Seta à Direita', downArrow: 'Seta à Baixo', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Tecla do Windows Esquerda', rightWindowKey: 'Tecla do Windows Direita', selectKey: 'Tecla Selecionar', numpad0: '0 do Teclado Numérico', numpad1: '1 do Teclado Numérico', numpad2: '2 do Teclado Numérico', numpad3: '3 do Teclado Numérico', numpad4: '4 do Teclado Numérico', numpad5: '5 do Teclado Numérico', numpad6: '6 do Teclado Numérico', numpad7: '7 do Teclado Numérico', numpad8: '8 do Teclado Numérico', numpad9: '9 do Teclado Numérico', multiply: 'Multiplicar', add: 'Mais', subtract: 'Subtrair', decimalPoint: 'Ponto', divide: 'Dividir', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Ponto-e-vírgula', equalSign: 'Igual', comma: 'Vírgula', dash: 'Hífen', period: 'Ponto', forwardSlash: 'Barra', graveAccent: 'Acento Grave', openBracket: 'Abrir Conchetes', backSlash: 'Contra-barra', closeBracket: 'Fechar Colchetes', singleQuote: 'Aspas Simples' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/et.js0000644000175000017500000001262314006075350024651 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'et', { title: 'Accessibility Instructions', // MISSING contents: 'Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.', legend: [ { name: 'Üldine', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/da.js0000644000175000017500000001111214006075350024615 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'da', { title: 'Tilgængelighedsinstrukser', contents: 'Onlinehjælp. For at lukke dette vindue klik ESC', legend: [ { name: 'Generelt', items: [ { name: 'Editor værktøjslinje', legend: 'Tryk ${toolbarFocus} for at navigere til værktøjslinjen. Flyt til næste eller forrige værktøjsline gruppe ved hjælp af TAB eller SHIFT+TAB. Flyt til næste eller forrige værktøjslinje knap med venstre- eller højre piltast. Tryk på SPACE eller ENTER for at aktivere værktøjslinje knappen.' }, { name: 'Editor dialogboks', legend: 'Inde i en dialogboks kan du, trykke på TAB for at navigere til næste element, trykke på SHIFT+TAB for at navigere til forrige element, trykke på ENTER for at afsende eller trykke på ESC for at lukke dialogboksen.\r\nNår en dialogboks har flere faner, fanelisten kan tilgås med ALT+F10 eller med TAB. Hvis fanelisten er i fokus kan du skifte til næste eller forrige tab, med højre- og venstre piltast.' }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Kommandoer', items: [ { name: 'Fortryd kommando', legend: 'Klik på ${undo}' }, { name: 'Gentag kommando', legend: 'Klik ${redo}' }, { name: 'Fed kommando', legend: 'Klik ${bold}' }, { name: 'Kursiv kommando', legend: 'Klik ${italic}' }, { name: 'Understregnings kommando', legend: 'Klik ${underline}' }, { name: 'Link kommando', legend: 'Klik ${link}' }, { name: ' Toolbar Collapse command', // MISSING legend: 'Klik ${toolbarCollapse}' }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: 'Tilgængelighedshjælp', legend: 'Kilk ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Venstre pil', upArrow: 'Pil op', rightArrow: 'Højre pil', downArrow: 'Pil ned', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Venstre Windows tast', rightWindowKey: 'Højre Windows tast', selectKey: 'Select-knap', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Gange', add: 'Plus', subtract: 'Minus', decimalPoint: 'Komma', divide: 'Divider', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semikolon', equalSign: 'Lighedstegn', comma: 'Komma', dash: 'Bindestreg', period: 'Punktum', forwardSlash: 'Skråstreg', graveAccent: 'Accent grave', openBracket: 'Start klamme', backSlash: 'Omvendt skråstreg', closeBracket: 'Slut klamme', singleQuote: 'Enkelt citationstegn' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/af.js0000644000175000017500000001144414006075350024627 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'af', { title: 'Toeganglikheid instruksies', contents: 'Hulp inhoud. Druk ESC om toe te maak.', legend: [ { name: 'Algemeen', items: [ { name: 'Bewerker balk', legend: 'Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig.' }, { name: 'Bewerker dialoog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Bewerkerinhoudmenu', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', alt: 'Alt', pause: 'Pouse', capslock: 'Hoofletterslot', escape: 'Ontsnap', pageUp: 'Blaaiop', pageDown: 'Blaaiaf', end: 'Einde', home: 'Tuis', leftArrow: 'Linkspyl', upArrow: 'Oppyl', rightArrow: 'Regterpyl', downArrow: 'Afpyl', insert: 'Toevoeg', 'delete': 'Verwyder', leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Nommerblok 0', numpad1: 'Nommerblok 1', numpad2: 'Nommerblok 2', numpad3: 'Nommerblok 3', numpad4: 'Nommerblok 4', numpad5: 'Nommerblok 5', numpad6: 'Nommerblok 6', numpad7: 'Nommerblok 7', numpad8: 'Nommerblok 8', numpad9: 'Nommerblok 9', multiply: 'Maal', add: 'Plus', subtract: 'Minus', decimalPoint: 'Desimaalepunt', divide: 'Gedeeldeur', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Nommervergrendel', scrollLock: 'Rolvergrendel', semiColon: 'Kommapunt', equalSign: 'Isgelykaan', comma: 'Komma', dash: 'Koppelteken', period: 'Punt', forwardSlash: 'Skuinsstreep', graveAccent: 'Aksentteken', openBracket: 'Oopblokhakkie', backSlash: 'Trustreep', closeBracket: 'Toeblokhakkie', singleQuote: 'Enkelaanhaalingsteken' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hu.js0000644000175000017500000001216414006075350024655 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'hu', { title: 'Kisegítő utasítások', contents: 'Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.', legend: [ { name: 'Általános', items: [ { name: 'Szerkesztő Eszköztár', legend: 'Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT+TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot.' }, { name: 'Szerkesző párbeszéd ablak', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Szerkesztő helyi menü', legend: 'Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges.' }, { name: 'Szerkesztő lista', legend: 'A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát.' }, { name: 'Szerkesztő elem utak sáv', legend: 'Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben.' } ] }, { name: 'Parancsok', items: [ { name: 'Parancs visszavonása', legend: 'Nyomj ${undo}' }, { name: 'Parancs megismétlése', legend: 'Nyomjon ${redo}' }, { name: 'Félkövér parancs', legend: 'Nyomjon ${bold}' }, { name: 'Dőlt parancs', legend: 'Nyomjon ${italic}' }, { name: 'Aláhúzott parancs', legend: 'Nyomjon ${underline}' }, { name: 'Link parancs', legend: 'Nyomjon ${link}' }, { name: 'Szerkesztősáv összecsukása parancs', legend: 'Nyomjon ${toolbarCollapse}' }, { name: 'Hozzáférés az előző fókusz helyhez parancs', legend: 'Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket.' }, { name: 'Hozzáférés a következő fókusz helyhez parancs', legend: 'Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket.' }, { name: 'Kisegítő súgó', legend: 'Nyomjon ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'balra nyíl', upArrow: 'felfelé nyíl', rightArrow: 'jobbra nyíl', downArrow: 'lefelé nyíl', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'bal Windows-billentyű', rightWindowKey: 'jobb Windows-billentyű', selectKey: 'Billentyű választása', numpad0: 'Számbillentyűk 0', numpad1: 'Számbillentyűk 1', numpad2: 'Számbillentyűk 2', numpad3: 'Számbillentyűk 3', numpad4: 'Számbillentyűk 4', numpad5: 'Számbillentyűk 5', numpad6: 'Számbillentyűk 6', numpad7: 'Számbillentyűk 7', numpad8: 'Számbillentyűk 8', numpad9: 'Számbillentyűk 9', multiply: 'Szorzás', add: 'Hozzáadás', subtract: 'Kivonás', decimalPoint: 'Tizedespont', divide: 'Osztás', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Pontosvessző', equalSign: 'Egyenlőségjel', comma: 'Vessző', dash: 'Kötőjel', period: 'Pont', forwardSlash: 'Perjel', graveAccent: 'Visszafelé dőlő ékezet', openBracket: 'Nyitó szögletes zárójel', backSlash: 'fordított perjel', closeBracket: 'Záró szögletes zárójel', singleQuote: 'szimpla idézőjel' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sr.js0000644000175000017500000001263014006075350024663 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sr', { title: 'Accessibility Instructions', // MISSING contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'Опште', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/nl.js0000644000175000017500000001151514006075350024651 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'nl', { title: 'Toegankelijkheidsinstructies', contents: 'Help-inhoud. Druk op ESC om dit dialoog te sluiten.', legend: [ { name: 'Algemeen', items: [ { name: 'Werkbalk tekstverwerker', legend: 'Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren.' }, { name: 'Dialoog tekstverwerker', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Contextmenu tekstverwerker', legend: 'Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC.' }, { name: 'Keuzelijst tekstverwerker', legend: 'In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten.' }, { name: 'Elementenpad werkbalk tekstverwerker', legend: 'Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker.' } ] }, { name: 'Opdrachten', items: [ { name: 'Ongedaan maken opdracht', legend: 'Druk op ${undo}' }, { name: 'Opnieuw uitvoeren opdracht', legend: 'Druk op ${redo}' }, { name: 'Vetgedrukt opdracht', legend: 'Druk op ${bold}' }, { name: 'Cursief opdracht', legend: 'Druk op ${italic}' }, { name: 'Onderstrepen opdracht', legend: 'Druk op ${underline}' }, { name: 'Link opdracht', legend: 'Druk op ${link}' }, { name: 'Werkbalk inklappen opdracht', legend: 'Druk op ${toolbarCollapse}' }, { name: 'Ga naar vorige focus spatie commando', legend: 'Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken.' }, { name: 'Ga naar volgende focus spatie commando', legend: 'Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken.' }, { name: 'Toegankelijkheidshulp', legend: 'Druk op ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Pijl naar links', upArrow: 'Pijl omhoog', rightArrow: 'Pijl naar rechts', downArrow: 'Pijl naar beneden', insert: 'Invoegen', 'delete': 'Verwijderen', leftWindowKey: 'Linker Windows-toets', rightWindowKey: 'Rechter Windows-toets', selectKey: 'Selecteer toets', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Vermenigvuldigen', add: 'Toevoegen', subtract: 'Aftrekken', decimalPoint: 'Decimaalteken', divide: 'Delen', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Puntkomma', equalSign: 'Is gelijk-teken', comma: 'Komma', dash: 'Koppelteken', period: 'Punt', forwardSlash: 'Slash', graveAccent: 'Accent grave', openBracket: 'Vierkant haakje openen', backSlash: 'Backslash', closeBracket: 'Vierkant haakje sluiten', singleQuote: 'Apostrof' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/vi.js0000644000175000017500000001326714006075350024664 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'vi', { title: 'Hướng dẫn trợ năng', contents: 'Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.', legend: [ { name: 'Chung', items: [ { name: 'Thanh công cụ soạn thảo', legend: 'Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT+TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ.' }, { name: 'Hộp thoại Biên t', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Trình đơn Ngữ cảnh cBộ soạn thảo', legend: 'Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh.' }, { name: 'Hộp danh sách trình biên tập', legend: 'Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím TAB hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím SHIFT+TAB hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím ENTER để chọn các tùy chọn trong danh sách. Nhấn phím ESC để đóng lại danh sách chọn.' }, { name: 'Thanh đường dẫn các đối tượng', legend: 'Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím TAB hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím SHIFT+TAB hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc ENTER để chọn đối tượng trong trình soạn thảo.' } ] }, { name: 'Lệnh', items: [ { name: 'Làm lại lện', legend: 'Ấn ${undo}' }, { name: 'Làm lại lệnh', legend: 'Ấn ${redo}' }, { name: 'Lệnh in đậm', legend: 'Ấn ${bold}' }, { name: 'Lệnh in nghiêng', legend: 'Ấn ${italic}' }, { name: 'Lệnh gạch dưới', legend: 'Ấn ${underline}' }, { name: 'Lệnh liên kết', legend: 'Nhấn ${link}' }, { name: 'Lệnh hiển thị thanh công cụ', legend: 'Nhấn${toolbarCollapse}' }, { name: 'Truy cập đến lệnh tập trung vào khoảng cách trước đó', legend: 'Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách.' }, { name: 'Truy cập phần đối tượng lệnh khoảng trống', legend: 'Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách.' }, { name: 'Trợ giúp liên quan', legend: 'Nhấn ${a11yHelp}' } ] } ], backspace: 'Phím Backspace', tab: 'Phím Tab', enter: 'Phím Tab', shift: 'Phím Shift', ctrl: 'Phím Ctrl', alt: 'Phím Alt', pause: 'Phím Pause', capslock: 'Phím Caps Lock', escape: 'Phím Escape', pageUp: 'Phím Page Up', pageDown: 'Phím Page Down', end: 'Phím End', home: 'Phím Home', leftArrow: 'Phím Left Arrow', upArrow: 'Phím Up Arrow', rightArrow: 'Phím Right Arrow', downArrow: 'Phím Down Arrow', insert: 'Chèn', 'delete': 'Xóa', leftWindowKey: 'Phím Left Windows', rightWindowKey: 'Phím Right Windows ', selectKey: 'Chọn phím', numpad0: 'Phím 0', numpad1: 'Phím 1', numpad2: 'Phím 2', numpad3: 'Phím 3', numpad4: 'Phím 4', numpad5: 'Phím 5', numpad6: 'Phím 6', numpad7: 'Phím 7', numpad8: 'Phím 8', numpad9: 'Phím 9', multiply: 'Nhân', add: 'Thêm', subtract: 'Trừ', decimalPoint: 'Điểm số thập phân', divide: 'Chia', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Dấu chấm phẩy', equalSign: 'Đăng nhập bằng', comma: 'Dấu phẩy', dash: 'Dấu gạch ngang', period: 'Phím .', forwardSlash: 'Phím /', graveAccent: 'Phím `', openBracket: 'Open Bracket', backSlash: 'Dấu gạch chéo ngược', closeBracket: 'Gần giá đỡ', singleQuote: 'Trích dẫn' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ja.js0000644000175000017500000001272414006075350024635 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ja', { title: 'ユーザー補助の説明', contents: 'ヘルプ このダイアログを閉じるには ESCを押してください。', legend: [ { name: '全般', items: [ { name: 'エディターツールバー', legend: '${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。' }, { name: '編集ダイアログ', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'エディターのメニュー', legend: '${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。' }, { name: 'エディターリストボックス', legend: 'リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。' }, { name: 'エディター要素パスバー', legend: '${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。' } ] }, { name: 'コマンド', items: [ { name: '元に戻す', legend: '${undo} をクリック' }, { name: 'やり直し', legend: '${redo} をクリック' }, { name: '太字', legend: '${bold} をクリック' }, { name: '斜体 ', legend: '${italic} をクリック' }, { name: '下線', legend: '${underline} をクリック' }, { name: 'リンク', legend: '${link} をクリック' }, { name: 'ツールバーを縮める', legend: '${toolbarCollapse} をクリック' }, { name: '前のカーソル移動のできないポイントへ', legend: '${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。' }, { name: '次のカーソル移動のできないポイントへ', legend: '${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。' }, { name: 'ユーザー補助ヘルプ', legend: '${a11yHelp} をクリック' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: '左矢印', upArrow: '上矢印', rightArrow: '右矢印', downArrow: '下矢印', insert: 'Insert', 'delete': 'Delete', leftWindowKey: '左Windowキー', rightWindowKey: '右のWindowキー', selectKey: 'Select', numpad0: 'Num 0', numpad1: 'Num 1', numpad2: 'Num 2', numpad3: 'Num 3', numpad4: 'Num 4', numpad5: 'Num 5', numpad6: 'Num 6', numpad7: 'Num 7', numpad8: 'Num 8', numpad9: 'Num 9', multiply: '掛ける', add: '足す', subtract: '引く', decimalPoint: '小数点', divide: '割る', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'セミコロン', equalSign: 'イコール記号', comma: 'カンマ', dash: 'ダッシュ', period: 'ピリオド', forwardSlash: 'フォワードスラッシュ', graveAccent: 'グレイヴアクセント', openBracket: '開きカッコ', backSlash: 'バックスラッシュ', closeBracket: '閉じカッコ', singleQuote: 'シングルクォート' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/id.js0000644000175000017500000001260514006075350024635 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'id', { title: 'Accessibility Instructions', // MISSING contents: 'Bantuan. Tekan ESC untuk menutup dialog ini.', legend: [ { name: 'Umum', items: [ { name: 'Editor Toolbar', // MISSING legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING } ] } ], backspace: 'Backspace', // MISSING tab: 'Tab', // MISSING enter: 'Enter', // MISSING shift: 'Shift', // MISSING ctrl: 'Ctrl', // MISSING alt: 'Alt', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING end: 'End', // MISSING home: 'Home', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // MISSING 'delete': 'Delete', // MISSING leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Add', // MISSING subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', // MISSING f2: 'F2', // MISSING f3: 'F3', // MISSING f4: 'F4', // MISSING f5: 'F5', // MISSING f6: 'F6', // MISSING f7: 'F7', // MISSING f8: 'F8', // MISSING f9: 'F9', // MISSING f10: 'F10', // MISSING f11: 'F11', // MISSING f12: 'F12', // MISSING numLock: 'Num Lock', // MISSING scrollLock: 'Scroll Lock', // MISSING semiColon: 'Semicolon', // MISSING equalSign: 'Equal Sign', // MISSING comma: 'Comma', // MISSING dash: 'Dash', // MISSING period: 'Period', // MISSING forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en-gb.js0000644000175000017500000001076114006075350025232 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'en-gb', { title: 'Accessibility Instructions', contents: 'Help Contents. To close this dialog press ESC.', // MISSING legend: [ { name: 'General', items: [ { name: 'Editor Toolbar', legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Editor Dialog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', items: [ { name: ' Undo command', legend: 'Press ${undo}' }, { name: ' Redo command', legend: 'Press ${redo}' }, { name: ' Bold command', legend: 'Press ${bold}' }, { name: ' Italic command', legend: 'Press ${italic}' }, { name: ' Underline command', legend: 'Press ${underline}' }, { name: ' Link command', legend: 'Press ${link}' }, { name: ' Toolbar Collapse command', legend: 'Press ${toolbarCollapse}' }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', legend: 'Press ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Left Arrow', upArrow: 'Up Arrow', rightArrow: 'Right Arrow', downArrow: 'Down Arrow', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'Left Windows key', rightWindowKey: 'Right Windows key', selectKey: 'Select key', numpad0: 'Numpad 0', numpad1: 'Numpad 1', numpad2: 'Numpad 2', numpad3: 'Numpad 3', numpad4: 'Numpad 4', numpad5: 'Numpad 5', numpad6: 'Numpad 6', numpad7: 'Numpad 7', numpad8: 'Numpad 8', numpad9: 'Numpad 9', multiply: 'Multiply', add: 'Add', subtract: 'Subtract', decimalPoint: 'Decimal Point', divide: 'Divide', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semicolon', equalSign: 'Equal Sign', comma: 'Comma', dash: 'Dash', period: 'Period', forwardSlash: 'Forward Slash', graveAccent: 'Grave Accent', openBracket: 'Open Bracket', backSlash: 'Backslash', closeBracket: 'Close Bracket', singleQuote: 'Single Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sq.js0000644000175000017500000001151314006075350024661 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sq', { title: 'Udhëzimet e Qasjes', contents: 'Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.', legend: [ { name: 'Të përgjithshme', items: [ { name: 'Shiriti i Redaktuesit', legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING }, { name: 'Dialogu i Redaktuesit', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Komandat', items: [ { name: 'Rikthe komandën', legend: 'Shtyp ${undo}' }, { name: 'Ribëj komandën', legend: 'Shtyp ${redo}' }, { name: 'Komanda e trashjes së tekstit', legend: 'Shtyp ${bold}' }, { name: 'Komanda kursive', legend: 'Shtyp ${italic}' }, { name: 'Komanda e nënvijëzimit', legend: 'Shtyp ${underline}' }, { name: 'Komanda e Nyjes', legend: 'Shtyp ${link}' }, { name: ' Toolbar Collapse command', // MISSING legend: 'Shtyp ${toolbarCollapse}' }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: 'Ndihmë Qasjeje', legend: 'Shtyp ${a11yHelp}' } ] } ], backspace: 'Prapa', tab: 'Fletë', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Shenja majtas', upArrow: 'Shenja sipër', rightArrow: 'Shenja djathtas', downArrow: 'Shenja poshtë', insert: 'Shto', 'delete': 'Grise', leftWindowKey: 'Left Windows key', // MISSING rightWindowKey: 'Right Windows key', // MISSING selectKey: 'Select key', // MISSING numpad0: 'Numpad 0', // MISSING numpad1: 'Numpad 1', // MISSING numpad2: 'Numpad 2', // MISSING numpad3: 'Numpad 3', // MISSING numpad4: 'Numpad 4', // MISSING numpad5: 'Numpad 5', // MISSING numpad6: 'Numpad 6', // MISSING numpad7: 'Numpad 7', // MISSING numpad8: 'Numpad 8', // MISSING numpad9: 'Numpad 9', // MISSING multiply: 'Multiply', // MISSING add: 'Shto', subtract: 'Subtract', // MISSING decimalPoint: 'Decimal Point', // MISSING divide: 'Divide', // MISSING f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Semicolon', equalSign: 'Equal Sign', // MISSING comma: 'Presje', dash: 'vizë', period: 'Pikë', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Hape kllapën', backSlash: 'Backslash', // MISSING closeBracket: 'Mbylle kllapën', singleQuote: 'Single Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ku.js0000644000175000017500000001356514006075350024666 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ku', { title: 'ڕێنمای لەبەردەستدابوون', contents: 'پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.', legend: [ { name: 'گشتی', items: [ { name: 'تووڵامرازی دەستكاریكەر', legend: 'کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT+TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز.' }, { name: 'دیالۆگی دەستكاریكەر', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'پێڕستی سەرنووسەر', legend: 'کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە.' }, { name: 'لیستی سنووقی سەرنووسەر', legend: 'لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست.' }, { name: 'تووڵامرازی توخم', legend: 'کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه.' } ] }, { name: 'فەرمانەکان', items: [ { name: 'پووچکردنەوەی فەرمان', legend: 'کلیك ${undo}' }, { name: 'هەڵگەڕانەوەی فەرمان', legend: 'کلیك ${redo}' }, { name: 'فەرمانی دەقی قەڵەو', legend: 'کلیك ${bold}' }, { name: 'فەرمانی دەقی لار', legend: 'کلیك ${italic}' }, { name: 'فەرمانی ژێرهێڵ', legend: 'کلیك ${underline}' }, { name: 'فەرمانی به‌ستەر', legend: 'کلیك ${link}' }, { name: 'شاردەنەوەی تووڵامراز', legend: 'کلیك ${toolbarCollapse}' }, { name: 'چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی', legend: 'کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: 'چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی', legend: 'کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: 'دەستپێگەیشتنی یارمەتی', legend: 'کلیك ${a11yHelp}' } ] } ], backspace: 'Backspace', tab: 'Tab', enter: 'Enter', shift: 'Shift', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', end: 'End', home: 'Home', leftArrow: 'Left Arrow', upArrow: 'Up Arrow', rightArrow: 'Right Arrow', downArrow: 'Down Arrow', insert: 'Insert', 'delete': 'Delete', leftWindowKey: 'پەنجەرەی چەپ', rightWindowKey: 'پەنجەرەی ڕاست', selectKey: 'Select', numpad0: 'Numpad 0', // MISSING numpad1: '1', numpad2: '2', numpad3: '3', numpad4: '4', numpad5: '5', numpad6: '6', numpad7: '7', numpad8: '8', numpad9: '9', multiply: '*', add: '+', subtract: '-', decimalPoint: '.', divide: '/', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: ';', equalSign: '=', comma: ',', dash: '-', period: '.', forwardSlash: '/', graveAccent: '`', openBracket: '[', backSlash: '\\\\', closeBracket: '}', singleQuote: '\'' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fr.js0000644000175000017500000001323214006075350024645 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'fr', { title: 'Instructions d\'accessibilité', contents: 'Contenu de l\'aide. Pour fermer ce dialogue, appuyez sur la touche ÉCHAP (Echappement).', legend: [ { name: 'Général', items: [ { name: 'Barre d\'outils de l\'éditeur', legend: 'Appuyer sur ${toolbarFocus} pour accéder à la barre d\'outils. Se déplacer vers les groupes suivant ou précédent de la barre d\'outil avec les touches MAJ et MAJ+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d\'outils avec les touches FLÈCHE DROITE et FLÈCHE GAUCHE. Appuyer sur la barre d\'espace ou la touche ENTRÉE pour activer le bouton de barre d\'outils.' }, { name: 'Dialogue de l\'éditeur', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Menu contextuel de l\'éditeur', legend: 'Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l\'option suivante du menu avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l\'option précédente avec les touches MAJ+TAB ou FLÈCHE HAUT. appuyer sur la BARRE D\'ESPACE ou la touche ENTRÉE pour sélectionner l\'option du menu. Oovrir le sous-menu de l\'option courante avec la BARRE D\'ESPACE ou les touches ENTRÉE ou FLÈCHE DROITE. Revenir à l\'élément de menu parent avec les touches ÉCHAP ou FLÈCHE GAUCHE. Fermer le menu contextuel avec ÉCHAP.' }, { name: 'Zone de liste de l\'éditeur', legend: 'Dans la liste en menu déroulant, se déplacer vers l\'élément suivant de la liste avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l\'élément précédent de la liste avec les touches MAJ+TAB ou FLÈCHE HAUT. Appuyer sur la BARRE D\'ESPACE ou sur ENTRÉE pour sélectionner l\'option dans la liste. Appuyer sur ÉCHAP pour fermer le menu déroulant.' }, { name: 'Barre d\'emplacement des éléments de l\'éditeur', legend: 'Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d\'emplacement des éléments de l\'éditeur. Se déplacer vers le bouton d\'élément suivant avec les touches TAB ou FLÈCHE DROITE. Se déplacer vers le bouton d\'élément précédent avec les touches MAJ+TAB ou FLÈCHE GAUCHE. Appuyer sur la BARRE D\'ESPACE ou sur ENTRÉE pour sélectionner l\'élément dans l\'éditeur.' } ] }, { name: 'Commandes', items: [ { name: ' Annuler la commande', legend: 'Appuyer sur ${undo}' }, { name: 'Refaire la commande', legend: 'Appuyer sur ${redo}' }, { name: ' Commande gras', legend: 'Appuyer sur ${bold}' }, { name: ' Commande italique', legend: 'Appuyer sur ${italic}' }, { name: ' Commande souligné', legend: 'Appuyer sur ${underline}' }, { name: ' Commande lien', legend: 'Appuyer sur ${link}' }, { name: ' Commande enrouler la barre d\'outils', legend: 'Appuyer sur ${toolbarCollapse}' }, { name: 'Accéder à la précédente commande d\'espace de mise au point', legend: 'Appuyez sur ${accessPreviousSpace} pour accéder à l\'espace hors d\'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants.' }, { name: 'Accès à la prochaine commande de l\'espace de mise au point', legend: 'Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d\'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants.' }, { name: ' Aide Accessibilité', legend: 'Appuyer sur ${a11yHelp}' } ] } ], backspace: 'Retour arrière', tab: 'Tabulation', enter: 'Entrée', shift: 'Majuscule', ctrl: 'Ctrl', alt: 'Alt', pause: 'Pause', capslock: 'Verr. Maj.', escape: 'Échap', pageUp: 'Page supérieure', pageDown: 'Page inférieure', end: 'Fin', home: 'Retour', leftArrow: 'Flèche gauche', upArrow: 'Flèche haute', rightArrow: 'Flèche droite', downArrow: 'Flèche basse', insert: 'Insertion', 'delete': 'Supprimer', leftWindowKey: 'Touche Windows gauche', rightWindowKey: 'Touche Windows droite', selectKey: 'Touche menu', numpad0: 'Pavé numérique 0', numpad1: 'Pavé numérique 1', numpad2: 'Pavé numérique 2', numpad3: 'Pavé numérique 3', numpad4: 'Pavé numérique 4', numpad5: 'Pavé numérique 5', numpad6: 'Pavé numérique 6', numpad7: 'Pavé numérique 7', numpad8: 'Pavé numérique 8', numpad9: 'Pavé numérique 9', multiply: 'Multiplier', add: 'Addition', subtract: 'Soustraire', decimalPoint: 'Point décimal', divide: 'Diviser', f1: 'F1', f2: 'F2', f3: 'F3', f4: 'F4', f5: 'F5', f6: 'F6', f7: 'F7', f8: 'F8', f9: 'F9', f10: 'F10', f11: 'F11', f12: 'F12', numLock: 'Verrouillage numérique', scrollLock: 'Arrêt défilement', semiColon: 'Point virgule', equalSign: 'Signe égal', comma: 'Virgule', dash: 'Tiret', period: 'Point', forwardSlash: 'Barre oblique', graveAccent: 'Accent grave', openBracket: 'Parenthèse ouvrante', backSlash: 'Barre oblique inverse', closeBracket: 'Parenthèse fermante', singleQuote: 'Apostrophe' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/a11yhelp.js0000644000175000017500000001303314006075350024740 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'a11yHelp', function( editor ) { var lang = editor.lang.a11yhelp, id = CKEDITOR.tools.getNextId(); // CharCode <-> KeyChar. var keyMap = { 8: lang.backspace, 9: lang.tab, 13: lang.enter, 16: lang.shift, 17: lang.ctrl, 18: lang.alt, 19: lang.pause, 20: lang.capslock, 27: lang.escape, 33: lang.pageUp, 34: lang.pageDown, 35: lang.end, 36: lang.home, 37: lang.leftArrow, 38: lang.upArrow, 39: lang.rightArrow, 40: lang.downArrow, 45: lang.insert, 46: lang[ 'delete' ], 91: lang.leftWindowKey, 92: lang.rightWindowKey, 93: lang.selectKey, 96: lang.numpad0, 97: lang.numpad1, 98: lang.numpad2, 99: lang.numpad3, 100: lang.numpad4, 101: lang.numpad5, 102: lang.numpad6, 103: lang.numpad7, 104: lang.numpad8, 105: lang.numpad9, 106: lang.multiply, 107: lang.add, 109: lang.subtract, 110: lang.decimalPoint, 111: lang.divide, 112: lang.f1, 113: lang.f2, 114: lang.f3, 115: lang.f4, 116: lang.f5, 117: lang.f6, 118: lang.f7, 119: lang.f8, 120: lang.f9, 121: lang.f10, 122: lang.f11, 123: lang.f12, 144: lang.numLock, 145: lang.scrollLock, 186: lang.semiColon, 187: lang.equalSign, 188: lang.comma, 189: lang.dash, 190: lang.period, 191: lang.forwardSlash, 192: lang.graveAccent, 219: lang.openBracket, 220: lang.backSlash, 221: lang.closeBracket, 222: lang.singleQuote }; // Modifier keys override. keyMap[ CKEDITOR.ALT ] = lang.alt; keyMap[ CKEDITOR.SHIFT ] = lang.shift; keyMap[ CKEDITOR.CTRL ] = lang.ctrl; // Sort in desc. var modifiers = [ CKEDITOR.ALT, CKEDITOR.SHIFT, CKEDITOR.CTRL ]; function representKeyStroke( keystroke ) { var quotient, modifier, presentation = []; for ( var i = 0; i < modifiers.length; i++ ) { modifier = modifiers[ i ]; quotient = keystroke / modifiers[ i ]; if ( quotient > 1 && quotient <= 2 ) { keystroke -= modifier; presentation.push( keyMap[ modifier ] ); } } presentation.push( keyMap[ keystroke ] || String.fromCharCode( keystroke ) ); return presentation.join( '+' ); } var variablesPattern = /\$\{(.*?)\}/g; var replaceVariables = ( function() { // Swaps keystrokes with their commands in object literal. // This makes searching keystrokes by command much easier. var keystrokesByCode = editor.keystrokeHandler.keystrokes, keystrokesByName = {}; for ( var i in keystrokesByCode ) keystrokesByName[ keystrokesByCode[ i ] ] = i; return function( match, name ) { // Return the keystroke representation or leave match untouched // if there's no keystroke for such command. return keystrokesByName[ name ] ? representKeyStroke( keystrokesByName[ name ] ) : match; }; } )(); // Create the help list directly from lang file entries. function buildHelpContents() { var pageTpl = '
      %1
      ' + '' + lang.contents + ' ', sectionTpl = '

      %1

      %2
      ', itemTpl = '
      %1
      %2
      '; var pageHtml = [], sections = lang.legend, sectionLength = sections.length; for ( var i = 0; i < sectionLength; i++ ) { var section = sections[ i ], sectionHtml = [], items = section.items, itemsLength = items.length; for ( var j = 0; j < itemsLength; j++ ) { var item = items[ j ], itemLegend = item.legend.replace( variablesPattern, replaceVariables ); // (#9765) If some commands haven't been replaced in the legend, // most likely their keystrokes are unavailable and we shouldn't include // them in our help list. if ( itemLegend.match( variablesPattern ) ) continue; sectionHtml.push( itemTpl.replace( '%1', item.name ).replace( '%2', itemLegend ) ); } pageHtml.push( sectionTpl.replace( '%1', section.name ).replace( '%2', sectionHtml.join( '' ) ) ); } return pageTpl.replace( '%1', pageHtml.join( '' ) ); } return { title: lang.title, minWidth: 600, minHeight: 400, contents: [ { id: 'info', label: editor.lang.common.generalTab, expand: true, elements: [ { type: 'html', id: 'legends', style: 'white-space:normal;', focus: function() { this.getElement().focus(); }, html: buildHelpContents() + '' } ] } ], buttons: [ CKEDITOR.dialog.cancelButton ] }; } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/0000755000175000017500000000000014006075351022112 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/0000755000175000017500000000000014006075351023556 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/outputforflash.html0000644000175000017500000002314114006075351027532 0ustar domdom Output for Flash — CKEditor Sample

      CKEditor Samples » Producing Flash Compliant HTML Output

      This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

      This sample shows how to configure CKEditor to output HTML code that can be used with Adobe Flash. The code will contain a subset of standard HTML elements like <b>, <i>, and <p> as well as HTML attributes.

      To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard JavaScript call, and define CKEditor features to use HTML elements and attributes.

      For details on how to create this setup check the source code of this sample page.

      To see how it works, create some content in the editing area of CKEditor on the left and send it to the Flash object on the right side of the page by using the Send to Flash button.

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/outputhtml.html0000644000175000017500000001567114006075351026703 0ustar domdom HTML Compliant Output — CKEditor Sample

      CKEditor Samples » Producing HTML Compliant Output

      This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

      This sample shows how to configure CKEditor to output valid HTML 4.01 code. Traditional HTML elements like <b>, <i>, and <font> are used in place of <strong>, <em>, and CSS styles.

      To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes.

      A snippet of the configuration code can be seen below; check the source of this page for full definition:

      CKEDITOR.replace( 'textarea_id', {
      	coreStyles_bold: { element: 'b' },
      	coreStyles_italic: { element: 'i' },
      
      	fontSize_style: {
      		element: 'font',
      		attributes: { 'size': '#(size)' }
      	}
      
      	...
      });

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/0000755000175000017500000000000013776355015025073 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/outputforflash/0000755000175000017500000000000013776355015030160 5ustar domdom././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.flart-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/outputforflash/outputforfl0000644000175000017500000024700013776355015032477 0ustar domdomࡱ> qRoot Entryp|YrRASH>ޱ3q@ContentsLyFP 1 1212997365AS 1 1216047046,(Root Entry5HZEޱ-3q Contentsr9fP 1 1212997365!S 1 1216047046,( -./0123456789:;<=>?@BCDEFGHIJKMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoM 1 1287673773O= x] tEK ʀ . `PG(#;&gQt2-*a=,N<8ΝQi%%A$]鮪ֽ'O< סԘqRZN*c&=S{~@LݦI1#Ǥv͂ﬕoIɵ ꭅrտyyy퐆?g2 yB8!2Kǥ7XXQt\Pjbt{oo\u_$)aN``18 ptc74{ɚ'bE$u5.m7n)sNS2`_,#ɍ{N`q p8> > >D鲩 tk0 Layer 1OO?mimport flash.external.ExternalInterface; FCKTextArea.htmlText = ""; function setData(htData) { FCKTextArea.htmlText = htData; } ExternalInterface.addCallback("setData", this, setData);  Actions3import flash.ext{@|>x,δ2h<<<|F:tF;-Ĥ>{XnuOlj':D呤7ګ~m9vMXgBYp?~N+<'Oȯɉwڜsp-Wnp:'w'8pjRWbcRo]X^+ ,0 ;YVXW./aHLNCuu~Rz\g%D@7<1'`vyQR{^EG0s/'ɦM͔1%,&慠ڨ~ėp<88TN ܽn{lo K'.09 ?ӋW|eʫ!g3 {dx%\\A+ /yƒ/#'¾"8b*kI u r"핹BO]9=#NT{Ň_]tK9Dyrmn|$WVIF|ՇC>+k>qc`G/m 1gjpaz67[͕krVW? 0'J.pl{eE+>D9_l]y8qi0^ϭY(-7$W2XkB6}8_Ɯ1grpĜɉ9o9sQӴW8F$ñ8};/ljyBNiyvUF@J9]Ù? [~mƜr"0:3XX}YqĜ>-nɉb6oHJ >w_+ }8DƜ_~f?pH>v|Eu{OZugsMmGO(br|`s}/g1͛mӶ]q\ 3su^l4:Zܼg_רQc]o9S/x]du:vds uZ4lp͔xk蛲$~mrƜO|ps6h̙sdYDƜM|v̹:z=l#+c>ϒflƇU%;b0g\T(G](XQ~}3Zjm"qH|.۴/=hĮ^G> ̨=zߺ=?}IJwL#L9gt0gp~Qq3vɉiohfr4[uP?=Ѹ[_ù=8@|E3 x}MֲbuM| >|qI\X{V.][<>Ų`1? ò۰Swy89s]k?\1=^qD]K)b>g`p#`X4}8]3S|WC?'JO?gLCF=8tP``:Edd$ǘ o6=,FDHq^s[ޘ/vT`9 ^|v@7[7@>E{}ʉ=QϾ^V8.ro^3z?\3oߘߛ4sSQL?ZG #Ok&1ˬӶyfgp#+gkT'_1 NytbZiXgFK7_D`q4pW)oJ&M"A;:6+M,{ob(\,_^b:)斊9'Ek;cvH)N/ѱιT̙im Nd|6 K4X|X\urĘ[EcGgdt,G)/ۚ$6,ip:&=m߁YWx%}]=HClPḍɉ7l9,g }c!'&lטeJ)NXܖqt#[㶷|}r>Fvpo>"=!%2D5ɉYgXɉRmWh=Hb5MS>կ=iDžcbO c"Ӱv؟{cYˇcñ9q+N{E"/q/bژFMj7+K  u[wι\8cö89Wy8.X{ČѵRsbzO^@`M_uֺL+ p>X`3b&'eCz^qӸC^/Ñ@zE/ۃ_ 5}TCfD>,{#b ^#I~(uΆR3^[Iu=޴2:Lc_&cl`3us^Ӣ_85p9T^ݚ%vi[co>{:s݀ߤ7Frv%Qm**#Fܫ.>Niplo_JګRN 53%E $G$#K/‘W֓'O< T^uD]zQ\27c@qp 9ΜzY3e ,>7}Rq# C1F\DnGVGi s39 XYr g9ܨb8Uz0jh"U-A(%bq5trr_~s^Y*d 8%><%'xxj`.tbB7<OFLw7pH$OoMd?oGF M$džK~{b:EJ$o3&mdbc]{Ƀ?A&aSbc6f!VYf4ÚYglmwgY /y$I@"G4#PublishGifProperties::PaletteOption"PublishPNGProperties::DitherOption0PublishFormatProperties::projectorMacDefaultName1'PublishFormatProperties::pngDefaultName1-PublishFormatProperties::projectorWinFileN "#$%&'()*p-./0123456789:;<=>?@stuvwxyz{|}~M 1 1287673773OS 2 1287674123QM 3 1287674134O= x] tEK ʀ . `PG(#;&gQt2-*a=,N<8ΝQi%%A$]鮪ֽ'O< סԘqRZN*c&=S{~@LݦI1#Ǥv͂ﬕoIɵ ꭅrտyyy퐆?g2 yB8!2Kǥ7XXQt\Pjbt{oo\u_$)aN``18 ptc74{ɚ'bE$u5.m7n)sNS2`_,#ɍ{N`q p8> > >D鲩 tk0x,δ2h<<<|F:tF;-Ĥ>{XnuOlj':D呤7ګ~m9vMXgBYp?~N+<'Oȯɉwڜsp-Wnp:'w'8pjRWbcRo]X^+ ,0 ;YVXW./aHLNCuu~Rz\g%D@7<1'`vyQR{^EG0s/'ɦM͔1%,&慠ڨ~ėp<88TN ܽn{lo K'.09 ?ӋW|eʫ!g3 {dx%\\A+ /yƒ/#'¾"8b*kI u r"핹BO]9=#NT{Ň_]tK9Dyrmn|$WVIF|ՇC>+k>qc`G/m 1gjpaz67[͕krVW? 0'J.pl{eE+>D9_l]y8qi0^ϭY(-7$W2XkB6}8_Ɯ1grpĜɉ9o9sQӴW8F$ñ8};/ljyBNiyvUF@J9]Ù? [~mƜr"0:3XX}YqĜ>-nɉb6oHJ >w_+ }8DƜ_~f?pH>v|Eu{OZugsMmGO(br|`s}/g1͛mӶ]q\ 3su^l4:Zܼg_רQc]o9S/x]du:vds uZ4lp͔xk蛲$~mrƜO|ps6h̙sdYDƜM|v̹:z=l#+c>ϒflƇU%;b0g\T(G](XQ~}3Zjm"qH|.۴/=hĮ^G> ̨=zߺ=?}IJwL#L9gt0gp~Qq3vɉiohfr4[uP?=Ѹ[_ù=8@|E3 x}MֲbuM| >|qI\X{V.][<>Ų`1? ò۰Swy89s]k?\1=^qD]K)b>g`p#`X4}8]3S|WC?'JO?gLCF=8tP``:Edd$ǘ o6=,FDHq^s[ޘ/vT`9 ^|v@7[7@>E{}ʉ=QϾ^V8.ro^3z?\3oߘߛ4sSQL?ZG #Ok&1ˬӶyfgp#+gkT'_1 NytbZiXgFK7_D`q4pW)oJ&M"A;:6+M,{ob(\,_^b:)斊9'Ek;cvH)N/ѱιT̙im Nd|6 K4X|X\urĘ[EcGgdt,G)/ۚ$6,ip:&=m߁YWx%}]=HClPḍɉ7l9,g }c!'&lטeJ)NXܖqt#[㶷|}r>Fvpo>"=!%2D5ɉYgXɉRmWh=Hb5MS>կ=iDžcbO c"Ӱv؟{cYˇcñ9q+N{E"/q/bژFMj7+K  u[wι\8cö89Wy8.X{ČѵRsbzO^@`M_uֺL+ p>X`3b&'eCz^qӸC^/Ñ@zE/ۃ_ 5}TCfD>,{#b ^#I~(uΆR3^[Iu=޴2:Lc_&cl`3us^Ӣ_85p9T^ݚ%vi[co>{:s݀ߤ7Frv%Qm**#Fܫ.>Niplo_JګRN 53%E $G$#K/‘W֓'O< T^uD]zQ\27c@qp 9ΜzY3e ,>7}Rq# C1F\DnGVGi s39 XYr g9ܨb8Uz0jh"U-A(%bq5trr_~s^Y*d 8%><%'xxj`.tbB7<OFLw7pH$OoMd?oGF M$džK~{b:EJ$o3&mdbc]{Ƀ?A&aSbc6f!VYf4ÚYglmwgY /y$I@"G4ntrollerOption0"PublishQTProperties::PausedAtStart0 CColorDef3PfP0PHP`Px333(3f<03CH3F`3Hxf0f30ff(0f5HCPicPage CPicLayer CPicFrame CPicBitmap&? Layer 1OO Layer 1OOCPicPage CPicLayer CPicFrameCPicText X2ArialArialMT@"(The following text has been produced with CKEditor XhArial Arial-BoldMT@"(Flash Output Sample CPicSymbol????K29g&f0'&44 l< #PaaaDDDDdrrD]grrrrrprrprpppp |nnn_XvXQnXXQXQXQXXXQXXX55X555555555XX5XXXXwXwXXwXwXwaaXwa+%&%aDj""&&f<a%8d&6#8' zz[,zzeO,,, bSS,n_S S,S,SYfzzS,SOadozzzzzzzz;.L'l..7.&L))))m -HM)0.0F1 '  EEDBEEBnBBBBuBn1h tl DDDBDDDEEDE8B - ]0>H H H rH H H H XH XH H XrH XH XH XXXH XXoH XXXXX:CPicText (  Myriad-RomanxEthe text editor for Internet?\ Logo FCKeditor.aiOOCPicPage CPicLayer CPicFrameCPicText  X3 Arial(The following text has been produced with FCKeditor CPicSymbol h  X hArial(Flash Output SampleK29g&f0'&44 l<  <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:12:18 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <xmp:CreatorTool>Adobe Flash CS4 Professional</xmp:CreatorTool> <xmp:CreateDate>2010-10-21T17:08:13+02:00</xmp:CreateDate> <xmp:MetadataDate>2010-10-21T17:18:13+02:00</xmp:MetadataDate> <xmp:ModifyDate>2010-10-21T17:18:13+02:00</xmp:ModifyDate> </rdf:Description> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/vnd.adobe.fla</dc:format> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"> <xmpMM:DerivedFrom rdf:parseType="Resource"/> <xmpMM:DocumentID>xmp.did:97FEEC6B26DDDF119CC2FB8A8AACE65D</xmpMM:DocumentID> <xmpMM:InstanceID>xmp.iid:97FEEC6B26DDDF119CC2FB8A8AACE65D</xmpMM:InstanceID> <xmpMM:OriginalDocumentID>xmp.did:97FEEC6B26DDDF119CC2FB8A8AACE65D</xmpMM:OriginalDocumentID> <xmpMM:History> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <stEvt:action>saved</stEvt:action> <stEvt:instanceID>xmp.iid:97FEEC6B26DDDF119CC2FB8A8AACE65D</stEvt:instanceID> <stEvt:when>2010-10-21T17:18:13+02:00</stEvt:when> <stEvt:softwareAgent>Adobe Flash CS4 Professional</stEvt:softwareAgent> <stEvt:changed>/</stEvt:changed> </rdf:li> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?> CSaved by Adobe Flash Windows 10.0 build 544 timecount = 1287674293K@|././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.swfrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/outputforflash/outputforfl0000644000175000017500000003632313776355015032503 0ustar domdomFWS<x_ DC?^ FCKTextAreahtmlTextFCETextAreasetDatathisflashexternalExternalInterfaceaddCallbacksetData*htDataOO NN RxT txRo!=wLfqbEaXdz:pn~hoQ_z~Ro4 :>Xa`T!'l=z=2J0iH4:?cͯՌ2+"K:Qie4 ު\Qf>VGB Ed u(B̿|W7 Arial24%B3>WnTmG  5zWgP(Wv8UaF|/X.7 TlҤʙ!S%d3hwR#'?wX* p0Im& Y匪24UTjN"exʤ~+%< x*FT XמZ:[ g1^tDŽ ^)z#(l/J Xם)7#R74dQe<9'{P$=l _iLz-dl/ CYAtC` =qi J4xWp*L2+:= EWdGYhsK߫D' 8* .>Sz *xn;yT,DڝQj"tuH!Њ*RԊ=T(%@9`  P&.t]aD@\ea`BUuAAƁDhd`52:ԀD8<4 WRʱ|U r ^c^t8G#57PRp2c (cP#`UVU].OQP;*d ʠwb5*I[*I5/ J_"0ۀd @j0@ 8gzPsUMkH!U 4w|4^ TGUQWIlIʴ6"aT&̕J:-Jl䏀 =J\< !pfʨ)J$j]@ zkbX (/sQ*-DlP&jJSBMNQf]@(:'D}Lʣ\?$ p *3L6D|*ˌ 8RkP> k9Rz sU kG U$cv4^ V GGhRQUYQT#P@tU)R `iѼ*+t5 2Ϫ>en [Q mrRA*"UW$$R{Ɉs f`ՅzXWzWz  ozRQ.U$@T@UJ>TAU+twr3^3 T DQW j%H!:&"tC>zܬ a*$X bp nꭻ)R0@\NuPC>F|x &F%TiPCRaY5VxZeU XםeII$0Rَa|f  x2Tu=Vl3TCIM:3[QcUڅ ⵗD| T'i{o菀XZ=TtG <Xם> ZН ҼՒK%H/2K *ARd`U qx3bTiO.W`Sy50\fmUGD| TVz3F*Ud{ +qh++qe*.rI+n(H+P5M9UVP?F~J)V7'd6U YU]CY ~@  F74C4t%)k-Qms2J W ^TBI P2([dTW]YYS:Д -犆] gԨϏQ'\ƥ@^,* 8.@ dZН UeLR4v']hjkfzd1QhpCtV> vzwEA,dGUA&pTKJX@R,UtwRGU1LS+ tRE%# IKkR9#>'R AM1RuLˍ*4`{jf&Wbq"u8Z*wa/Jw\)5ɰ9@ šǀyﲓ% Psm mMS TM0e^I@54tVMDt)GmnvĺU;XB0 7'-7* " (K zg"* )c=^Js/:#p*`zKQ1e@T6fceYN-0 =TtM 4НiGyj{N:1HIGR^yf3Gw芀 )`8yNew2n9 Ml.X e؆o8'};.o$7F^ CEKTabcdefghilnoprstuwxlH` D9\5\50,,(,,D,,,,,(D,9(A L P T Y         F,P,T,V,W,Y,r,v,w,y,,,,,,,,<,< ,",#,`3,44@4 B4XC4XD44M44N44555 5|"5x#5152535475:5B5C5E5F5I5M5!6#6X-6162656>6A6B6C6N67#7x07174273757477:7<7>7@7E7F7M78x"8|#8h#9X":|#:h;;x;";h#;$;X-;X.;h1;h2; 3;45;X7;:;>;4@;DB;4C;4D;4M;4N;4<<x"<|#<h-<.<1<42<C<N<=x#=h>>>> >|">#>%>2>3>47>:>;>A>B>C>E>F>I>M>"?|#?h@x"@x#@hC@AA"Ax#A1A2A3A47A:ABACAEAFAB4BX0B42B45BX:B>B4@B4DB4EBLBMB4NB4CC4CCCCCC"Cx%C4)C0C1C42C45C6C7C:C<C>C@CBCDCICD1D2D7DCDEDEE"E|#Eh1EX5E4>E@EMENE#FhGXG!G0G41GX2Gh5GX6G7GX;G4>G4@G4AGDG4EG4LGNG4#Hh"I|#Ih1JX2JX4J46J7J4Kx"K|Lx"L|MM M41M4M:MAMCMNx"N|#NhOO OX"Ox#O-O1O42O3O@OCODOMO 4 4" 4#  4  A L f |r      x* ,   @=3Bz6BV6B>B*?B6B2B.?Bh2B6BA?B)6>B6B3B(6>B82%?B 6B 6B3B6B6>B3B3B?ArialTypeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reservedqp  2"MT@CQW \5֍^Z:҅0؅*g̅J(W@CE!P無P֍hCb0FVhCE P`-Arial @tZl ? XמлSa"wkcM,+vQ Gq@*K6l2JZ Pjh ññ& t ;`;`Tq쑪VU#7PT@Y V ne]UFU@t ^ ` rZtT TdQQBK, <& mM1N#yUi];eRUWViP]@aD텉aU%74VU+r]3w +Nb2ǀ &!*qQT rFCC "j 8$CnQ2DD!ʬ(+ 4] ]ooY FY`T5Z9Y8`TsK7YT.EPMLШ# z %>Ktv > SL+½S0bVCXR#ᮨt4uFЋi=G`p 5e\WT  e9poɂ(yۃn nц bP)_Y`Ojݦ eU oUUu.^ V EՕD>iBVEYV1FOxIP'E*)Y<J LRp .y{J6bR c@ z) G +^|UT')؀ah )0K*0eXV7B{QGӅNfVxSQ*ݢ]U*dvT5b |XםrP` ;+B{=ҵU+t<R4Hx*W2K*ˎ`T@eCK*:AT$EP 7eAhJ'SҜj& Z)+ʼhwB2BA6>BN6B3>B6BN6Bx6B06>B?Arial BoldTypeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved;hЀ @hqD2(cpBF0ܱM7,x2!@qE2 PװA C   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((( }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzJFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((=" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?R4S%1:}냂 \+ |#]V}6RK&hV` PO3zRZۢ<x {"d0[(^^* iў|ʹ+> i66^?uDKO+.dmח"O'TBxZhHKuf1\~l7FwSЧ߯c]S^QI>9_ 궃N22THrU>k>:i‹rS9 )_ʾuJQ{.X$e7y+zX(=p(((((((ٿ\7~#fM:lP4"?_0ZQi؎zW}%IP~kyZuew׷|ьGui/]&Fm"<I tcjt-r{f2@6}3 E'NIzHS}b.-ңc+FLZ?Ǫ޻sw_&J?v}_r?txeǓtu܇RU =}6^5џe߈:o5(Tb7OL?y Z?}QU9M;lK%n b>˩@>5)^kC>W}i`@m}A;YJJɳ~|銫]57Zx1T?s@udnnd%Zڰ-}_<]7 5fhԬ`2j?A~[ hڬ2T3p~u[#܃ǽzkRu}q$9S=.i6lK\ m/$"8R̀Fp?Z/bɳɺ }\Oq#>$fd==%/l[+XQ'!NԈ/]Eq![(dMm#TZDžtXSX&3#3`}+:k!;mI=#Ry[{;1Hn08y}6ƛM-l;n1LَH\j3Z-v-L9 MU{ TĞ+{x"AX.]tX8aqָ(l-ޯ}n`D Vb]eH8>SƗe'5_i)ϗe!Y|@ο[֢ռ?ͺ8Rp#XGB((1?i%y@" 2+ѧZ<"ռEjۿu+B'8+&(8S5 (((((((((x홻v@g$&ql.nb[QZRY[avcDwRD@w|?x:6*|6L_t'$m.0j YJo{mֲl:fm#&1!qqq\}$l> "ig-4 "ہjssx#e[|RЅs&q^ ED:Е`?Jač|UDMۇѠm#}tKw`r!O<}ݧ<4PB9 Ά( n/&z΍ -MtU( ΍dMMpPFԉ#j} /-ADid~Q0E&\ Ш8fDhF8R (p#E4-KD--c5$9@DfTD"Gef _4 {Q6HF""DJqEMEqJ-j. $#(e@6Q'6a (XKDZ#(S?thO:x]YU<í[@mTDޔyq@.c0/%՘zk-WNKUMFh ,ݓ1@۵ԿM'ٔw!ۭ]kz0nf#oJlc6KKtg?5ng#a|l?.Bĕ+*װ|Z)s\e3,鲗"W֮Vk]jԯ• ,#lTF|fs%>=y?{OχNٸƔ< B[{{}qڷȑj/2(ҥrvDZvulԯZy]ds<*q2+q\-o;EC3dճ>ΓC@C@ L7d:l󱗝)G 3w"(

       H&jT`FCKTextArea@././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/outputforflash/swfobject.jsrt-4.4.4/devel/third-party/ckeditor-src/plugins/htmlwriter/samples/assets/outputforflash/swfobject.j0000644000175000017500000002375313776355015032333 0ustar domdom /* SWFObject v2.2 is released under the MIT License */ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;abHello

      ' * * @class * @extends CKEDITOR.htmlParser.basicWriter */ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass( { base: CKEDITOR.htmlParser.basicWriter, /** * Creates an `htmlWriter` class instance. * * @constructor */ $: function() { // Call the base contructor. this.base(); /** * The characters to be used for each indentation step. * * // Use tab for indentation. * editorInstance.dataProcessor.writer.indentationChars = '\t'; */ this.indentationChars = '\t'; /** * The characters to be used to close "self-closing" elements, like `
      ` or ``. * * // Use HTML4 notation for self-closing elements. * editorInstance.dataProcessor.writer.selfClosingEnd = '>'; */ this.selfClosingEnd = ' />'; /** * The characters to be used for line breaks. * * // Use CRLF for line breaks. * editorInstance.dataProcessor.writer.lineBreakChars = '\r\n'; */ this.lineBreakChars = '\n'; this.sortAttributes = 1; this._.indent = 0; this._.indentation = ''; // Indicate preformatted block context status. (#5789) this._.inPre = 0; this._.rules = {}; var dtd = CKEDITOR.dtd; for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { this.setRules( e, { indent: !dtd[ e ][ '#' ], breakBeforeOpen: 1, breakBeforeClose: !dtd[ e ][ '#' ], breakAfterClose: 1, needsSpace: ( e in dtd.$block ) && !( e in { li: 1, dt: 1, dd: 1 } ) } ); } this.setRules( 'br', { breakAfterOpen: 1 } ); this.setRules( 'title', { indent: 0, breakAfterOpen: 0 } ); this.setRules( 'style', { indent: 0, breakBeforeClose: 1 } ); this.setRules( 'pre', { breakAfterOpen: 1, // Keep line break after the opening tag indent: 0 // Disable indentation on
      .
      		} );
      	},
      
      	proto: {
      		/**
      		 * Writes the tag opening part for an opener tag.
      		 *
      		 *		// Writes ''.
      		 *		writer.openTagClose( 'p', false );
      		 *
      		 *		// Writes ' />'.
      		 *		writer.openTagClose( 'br', true );
      		 *
      		 * @param {String} tagName The element name for this tag.
      		 * @param {Boolean} isSelfClose Indicates that this is a self-closing tag,
      		 * like `
      ` or ``. */ openTagClose: function( tagName, isSelfClose ) { var rules = this._.rules[ tagName ]; if ( isSelfClose ) { this._.output.push( this.selfClosingEnd ); if ( rules && rules.breakAfterClose ) this._.needsSpace = rules.needsSpace; } else { this._.output.push( '>' ); if ( rules && rules.indent ) this._.indentation += this.indentationChars; } if ( rules && rules.breakAfterOpen ) this.lineBreak(); tagName == 'pre' && ( this._.inPre = 1 ); }, /** * Writes an attribute. This function should be called after opening the * tag with {@link #openTagClose}. * * // Writes ' class="MyClass"'. * writer.attribute( 'class', 'MyClass' ); * * @param {String} attName The attribute name. * @param {String} attValue The attribute value. */ attribute: function( attName, attValue ) { if ( typeof attValue == 'string' ) { this.forceSimpleAmpersand && ( attValue = attValue.replace( /&/g, '&' ) ); // Browsers don't always escape special character in attribute values. (#4683, #4719). attValue = CKEDITOR.tools.htmlEncodeAttr( attValue ); } this._.output.push( ' ', attName, '="', attValue, '"' ); }, /** * Writes a closer tag. * * // Writes '

      '. * writer.closeTag( 'p' ); * * @param {String} tagName The element name for this tag. */ closeTag: function( tagName ) { var rules = this._.rules[ tagName ]; if ( rules && rules.indent ) this._.indentation = this._.indentation.substr( this.indentationChars.length ); if ( this._.indent ) this.indentation(); // Do not break if indenting. else if ( rules && rules.breakBeforeClose ) { this.lineBreak(); this.indentation(); } this._.output.push( '' ); tagName == 'pre' && ( this._.inPre = 0 ); if ( rules && rules.breakAfterClose ) { this.lineBreak(); this._.needsSpace = rules.needsSpace; } this._.afterCloser = 1; }, /** * Writes text. * * // Writes 'Hello Word'. * writer.text( 'Hello Word' ); * * @param {String} text The text value */ text: function( text ) { if ( this._.indent ) { this.indentation(); !this._.inPre && ( text = CKEDITOR.tools.ltrim( text ) ); } this._.output.push( text ); }, /** * Writes a comment. * * // Writes "". * writer.comment( ' My comment ' ); * * @param {String} comment The comment text. */ comment: function( comment ) { if ( this._.indent ) this.indentation(); this._.output.push( '' ); }, /** * Writes a line break. It uses the {@link #lineBreakChars} property for it. * * // Writes '\n' (e.g.). * writer.lineBreak(); */ lineBreak: function() { if ( !this._.inPre && this._.output.length > 0 ) this._.output.push( this.lineBreakChars ); this._.indent = 1; }, /** * Writes the current indentation character. It uses the {@link #indentationChars} * property, repeating it for the current indentation steps. * * // Writes '\t' (e.g.). * writer.indentation(); */ indentation: function() { if ( !this._.inPre && this._.indentation ) this._.output.push( this._.indentation ); this._.indent = 0; }, /** * Empties the current output buffer. It also brings back the default * values of the writer flags. * * writer.reset(); */ reset: function() { this._.output = []; this._.indent = 0; this._.indentation = ''; this._.afterCloser = 0; this._.inPre = 0; }, /** * Sets formatting rules for a given element. Possible rules are: * * * `indent` – indent the element content. * * `breakBeforeOpen` – break line before the opener tag for this element. * * `breakAfterOpen` – break line after the opener tag for this element. * * `breakBeforeClose` – break line before the closer tag for this element. * * `breakAfterClose` – break line after the closer tag for this element. * * All rules default to `false`. Each function call overrides rules that are * already present, leaving the undefined ones untouched. * * By default, all elements available in the {@link CKEDITOR.dtd#$block}, * {@link CKEDITOR.dtd#$listItem}, and {@link CKEDITOR.dtd#$tableContent} * lists have all the above rules set to `true`. Additionaly, the `
      ` * element has the `breakAfterOpen` rule set to `true`. * * // Break line before and after "img" tags. * writer.setRules( 'img', { * breakBeforeOpen: true * breakAfterOpen: true * } ); * * // Reset the rules for the "h1" tag. * writer.setRules( 'h1', {} ); * * @param {String} tagName The name of the element for which the rules are set. * @param {Object} rules An object containing the element rules. */ setRules: function( tagName, rules ) { var currentRules = this._.rules[ tagName ]; if ( currentRules ) CKEDITOR.tools.extend( currentRules, rules, true ); else this._.rules[ tagName ] = rules; } } } ); /** * Whether to force using `'&'` instead of `'&'` in element attributes * values. It is not recommended to change this setting for compliance with the * W3C XHTML 1.0 standards ([C.12, XHTML 1.0](http://www.w3.org/TR/xhtml1/#C_12)). * * // Use `'&'` instead of `'&'` * CKEDITOR.config.forceSimpleAmpersand = true; * * @cfg {Boolean} [forceSimpleAmpersand=false] * @member CKEDITOR.config */ /** * The characters to be used for indenting HTML output produced by the editor. * Using characters different from `' '` (space) and `'\t'` (tab) is not recommended * as it will mess the code. * * // No indentation. * CKEDITOR.config.dataIndentationChars = ''; * * // Use two spaces for indentation. * CKEDITOR.config.dataIndentationChars = ' '; * * @cfg {String} [dataIndentationChars='\t'] * @member CKEDITOR.config */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/0000755000175000017500000000000014006075351022061 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/plugin.js0000755000175000017500000002037214006075351023724 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { function noBlockLeft( bqBlock ) { for ( var i = 0, length = bqBlock.getChildCount(), child; i < length && ( child = bqBlock.getChild( i ) ); i++ ) { if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() ) return false; } return true; } var commandObject = { exec: function( editor ) { var state = editor.getCommand( 'blockquote' ).state, selection = editor.getSelection(), range = selection && selection.getRanges()[ 0 ]; if ( !range ) return; var bookmarks = selection.createBookmarks(); // Kludge for #1592: if the bookmark nodes are in the beginning of // blockquote, then move them to the nearest block element in the // blockquote. if ( CKEDITOR.env.ie ) { var bookmarkStart = bookmarks[ 0 ].startNode, bookmarkEnd = bookmarks[ 0 ].endNode, cursor; if ( bookmarkStart && bookmarkStart.getParent().getName() == 'blockquote' ) { cursor = bookmarkStart; while ( ( cursor = cursor.getNext() ) ) { if ( cursor.type == CKEDITOR.NODE_ELEMENT && cursor.isBlockBoundary() ) { bookmarkStart.move( cursor, true ); break; } } } if ( bookmarkEnd && bookmarkEnd.getParent().getName() == 'blockquote' ) { cursor = bookmarkEnd; while ( ( cursor = cursor.getPrevious() ) ) { if ( cursor.type == CKEDITOR.NODE_ELEMENT && cursor.isBlockBoundary() ) { bookmarkEnd.move( cursor ); break; } } } } var iterator = range.createIterator(), block; iterator.enlargeBr = editor.config.enterMode != CKEDITOR.ENTER_BR; if ( state == CKEDITOR.TRISTATE_OFF ) { var paragraphs = []; while ( ( block = iterator.getNextParagraph() ) ) paragraphs.push( block ); // If no paragraphs, create one from the current selection position. if ( paragraphs.length < 1 ) { var para = editor.document.createElement( editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ), firstBookmark = bookmarks.shift(); range.insertNode( para ); para.append( new CKEDITOR.dom.text( '\ufeff', editor.document ) ); range.moveToBookmark( firstBookmark ); range.selectNodeContents( para ); range.collapse( true ); firstBookmark = range.createBookmark(); paragraphs.push( para ); bookmarks.unshift( firstBookmark ); } // Make sure all paragraphs have the same parent. var commonParent = paragraphs[ 0 ].getParent(), tmp = []; for ( var i = 0; i < paragraphs.length; i++ ) { block = paragraphs[ i ]; commonParent = commonParent.getCommonAncestor( block.getParent() ); } // The common parent must not be the following tags: table, tbody, tr, ol, ul. var denyTags = { table: 1, tbody: 1, tr: 1, ol: 1, ul: 1 }; while ( denyTags[ commonParent.getName() ] ) commonParent = commonParent.getParent(); // Reconstruct the block list to be processed such that all resulting blocks // satisfy parentNode.equals( commonParent ). var lastBlock = null; while ( paragraphs.length > 0 ) { block = paragraphs.shift(); while ( !block.getParent().equals( commonParent ) ) block = block.getParent(); if ( !block.equals( lastBlock ) ) tmp.push( block ); lastBlock = block; } // If any of the selected blocks is a blockquote, remove it to prevent // nested blockquotes. while ( tmp.length > 0 ) { block = tmp.shift(); if ( block.getName() == 'blockquote' ) { var docFrag = new CKEDITOR.dom.documentFragment( editor.document ); while ( block.getFirst() ) { docFrag.append( block.getFirst().remove() ); paragraphs.push( docFrag.getLast() ); } docFrag.replace( block ); } else { paragraphs.push( block ); } } // Now we have all the blocks to be included in a new blockquote node. var bqBlock = editor.document.createElement( 'blockquote' ); bqBlock.insertBefore( paragraphs[ 0 ] ); while ( paragraphs.length > 0 ) { block = paragraphs.shift(); bqBlock.append( block ); } } else if ( state == CKEDITOR.TRISTATE_ON ) { var moveOutNodes = [], database = {}; while ( ( block = iterator.getNextParagraph() ) ) { var bqParent = null, bqChild = null; while ( block.getParent() ) { if ( block.getParent().getName() == 'blockquote' ) { bqParent = block.getParent(); bqChild = block; break; } block = block.getParent(); } // Remember the blocks that were recorded down in the moveOutNodes array // to prevent duplicates. if ( bqParent && bqChild && !bqChild.getCustomData( 'blockquote_moveout' ) ) { moveOutNodes.push( bqChild ); CKEDITOR.dom.element.setMarker( database, bqChild, 'blockquote_moveout', true ); } } CKEDITOR.dom.element.clearAllMarkers( database ); var movedNodes = [], processedBlockquoteBlocks = []; database = {}; while ( moveOutNodes.length > 0 ) { var node = moveOutNodes.shift(); bqBlock = node.getParent(); // If the node is located at the beginning or the end, just take it out // without splitting. Otherwise, split the blockquote node and move the // paragraph in between the two blockquote nodes. if ( !node.getPrevious() ) node.remove().insertBefore( bqBlock ); else if ( !node.getNext() ) node.remove().insertAfter( bqBlock ); else { node.breakParent( node.getParent() ); processedBlockquoteBlocks.push( node.getNext() ); } // Remember the blockquote node so we can clear it later (if it becomes empty). if ( !bqBlock.getCustomData( 'blockquote_processed' ) ) { processedBlockquoteBlocks.push( bqBlock ); CKEDITOR.dom.element.setMarker( database, bqBlock, 'blockquote_processed', true ); } movedNodes.push( node ); } CKEDITOR.dom.element.clearAllMarkers( database ); // Clear blockquote nodes that have become empty. for ( i = processedBlockquoteBlocks.length - 1; i >= 0; i-- ) { bqBlock = processedBlockquoteBlocks[ i ]; if ( noBlockLeft( bqBlock ) ) bqBlock.remove(); } if ( editor.config.enterMode == CKEDITOR.ENTER_BR ) { var firstTime = true; while ( movedNodes.length ) { node = movedNodes.shift(); if ( node.getName() == 'div' ) { docFrag = new CKEDITOR.dom.documentFragment( editor.document ); var needBeginBr = firstTime && node.getPrevious() && !( node.getPrevious().type == CKEDITOR.NODE_ELEMENT && node.getPrevious().isBlockBoundary() ); if ( needBeginBr ) docFrag.append( editor.document.createElement( 'br' ) ); var needEndBr = node.getNext() && !( node.getNext().type == CKEDITOR.NODE_ELEMENT && node.getNext().isBlockBoundary() ); while ( node.getFirst() ) node.getFirst().remove().appendTo( docFrag ); if ( needEndBr ) docFrag.append( editor.document.createElement( 'br' ) ); docFrag.replace( node ); firstTime = false; } } } } selection.selectBookmarks( bookmarks ); editor.focus(); }, refresh: function( editor, path ) { // Check if inside of blockquote. var firstBlock = path.block || path.blockLimit; this.setState( editor.elementPath( firstBlock ).contains( 'blockquote', 1 ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); }, context: 'blockquote', allowedContent: 'blockquote', requiredContent: 'blockquote' }; CKEDITOR.plugins.add( 'blockquote', { // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'blockquote', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { if ( editor.blockless ) return; editor.addCommand( 'blockquote', commandObject ); editor.ui.addButton && editor.ui.addButton( 'Blockquote', { label: editor.lang.blockquote.toolbar, command: 'blockquote', toolbar: 'blocks,10' } ); } } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/0000755000175000017500000000000014006075351023002 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/bg.js0000644000175000017500000000035414006075351023732 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'bg', { toolbar: 'Блок за цитат' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/cy.js0000644000175000017500000000034114006075351023751 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'cy', { toolbar: 'Dyfyniad bloc' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/no.js0000644000175000017500000000033614006075351023756 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'no', { toolbar: 'Blokksitat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/hr.js0000644000175000017500000000033614006075351023753 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'hr', { toolbar: 'Blockquote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/th.js0000644000175000017500000000033714006075351023756 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'th', { toolbar: 'Block Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ar.js0000644000175000017500000000034014006075351023737 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ar', { toolbar: 'اقتباس' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/sk.js0000644000175000017500000000033414006075351023755 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'sk', { toolbar: 'Citácia' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ro.js0000644000175000017500000000033114006075351023755 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ro', { toolbar: 'Citat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-ca.js0000644000175000017500000000034214006075351024322 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'en-ca', { toolbar: 'Block Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ug.js0000644000175000017500000000035114006075351023752 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ug', { toolbar: 'بۆلەك نەقىل' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/el.js0000644000175000017500000000036514006075351023744 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'el', { toolbar: 'Περιοχή Παράθεσης' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/de.js0000644000175000017500000000033614006075351023732 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'de', { toolbar: 'Zitatblock' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/uk.js0000644000175000017500000000034014006075351023754 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'uk', { toolbar: 'Цитата' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/sr-latn.js0000644000175000017500000000035714006075351024725 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'sr-latn', { toolbar: 'Block Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/km.js0000644000175000017500000000041214006075351023744 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'km', { toolbar: 'ប្លក់​ពាក្យ​សម្រង់' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/eu.js0000644000175000017500000000034214006075351023750 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'eu', { toolbar: 'Aipamen blokea' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/fa.js0000644000175000017500000000035214006075351023726 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'fa', { toolbar: 'بلوک نقل قول' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/si.js0000644000175000017500000000036314006075351023755 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'si', { toolbar: 'උද්ධෘත කොටස' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/en.js0000644000175000017500000000033714006075351023745 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'en', { toolbar: 'Block Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/he.js0000644000175000017500000000034714006075351023740 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'he', { toolbar: 'בלוק ציטוט' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/lt.js0000644000175000017500000000033214006075351023755 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'lt', { toolbar: 'Citata' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/lv.js0000644000175000017500000000034114006075351023757 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'lv', { toolbar: 'Bloka citāts' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/eo.js0000644000175000017500000000033314006075351023742 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'eo', { toolbar: 'Citaĵo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ca.js0000644000175000017500000000034014006075351023720 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ca', { toolbar: 'Bloc de cita' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/hi.js0000644000175000017500000000035514006075351023743 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'hi', { toolbar: 'ब्लॉक-कोट' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/mk.js0000644000175000017500000000035214006075351023747 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'mk', { toolbar: 'Block Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/mn.js0000644000175000017500000000035114006075351023751 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'mn', { toolbar: 'Ишлэл хэсэг' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/gl.js0000644000175000017500000000033014006075351023736 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'gl', { toolbar: 'Cita' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ko.js0000644000175000017500000000034114006075351023747 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ko', { toolbar: '인용 단락' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/zh.js0000644000175000017500000000034014006075351023756 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'zh', { toolbar: '引用段落' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/es.js0000644000175000017500000000033014006075351023743 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'es', { toolbar: 'Cita' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/is.js0000644000175000017500000000033714006075351023756 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'is', { toolbar: 'Inndráttur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/fo.js0000644000175000017500000000033614006075351023746 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'fo', { toolbar: 'Blockquote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/tt.js0000644000175000017500000000035314006075351023770 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'tt', { toolbar: 'Өземтә блогы' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/it.js0000644000175000017500000000033514006075351023755 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'it', { toolbar: 'Citazione' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/sv.js0000644000175000017500000000033614006075351023772 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'sv', { toolbar: 'Blockcitat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/gu.js0000644000175000017500000000042014006075351023747 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'gu', { toolbar: 'બ્લૉક-કોટ, અવતરણચિહ્નો' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/tr.js0000644000175000017500000000034114006075351023763 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'tr', { toolbar: 'Blok Oluştur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/pl.js0000644000175000017500000000033114006075351023750 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'pl', { toolbar: 'Cytat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/nb.js0000644000175000017500000000033614006075351023741 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'nb', { toolbar: 'Blokksitat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/sl.js0000644000175000017500000000033114006075351023753 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'sl', { toolbar: 'Citat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/fi.js0000644000175000017500000000033314006075351023735 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'fi', { toolbar: 'Lainaus' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/fr-ca.js0000644000175000017500000000033714006075351024333 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'fr-ca', { toolbar: 'Citation' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ru.js0000644000175000017500000000034014006075351023763 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ru', { toolbar: 'Цитата' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ka.js0000644000175000017500000000034614006075351023736 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ka', { toolbar: 'ციტატა' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/zh-cn.js0000644000175000017500000000034014006075351024354 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'zh-cn', { toolbar: '块引用' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/cs.js0000644000175000017500000000033214006075351023743 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'cs', { toolbar: 'Citace' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/pt.js0000644000175000017500000000034614006075351023766 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'pt', { toolbar: 'Bloco de citação' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/pt-br.js0000644000175000017500000000034014006075351024361 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'pt-br', { toolbar: 'Citação' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/et.js0000644000175000017500000000034014006075351023745 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'et', { toolbar: 'Blokktsitaat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/da.js0000644000175000017500000000033514006075351023725 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'da', { toolbar: 'Blokcitat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/af.js0000644000175000017500000000033614006075351023730 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'af', { toolbar: 'Sitaatblok' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/hu.js0000644000175000017500000000034114006075351023752 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'hu', { toolbar: 'Idézet blokk' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/sr.js0000644000175000017500000000035214006075351023764 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'sr', { toolbar: 'Block Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/nl.js0000644000175000017500000000033614006075351023753 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'nl', { toolbar: 'Citaatblok' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/vi.js0000644000175000017500000000034714006075351023762 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'vi', { toolbar: 'Khối trích dẫn' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ja.js0000644000175000017500000000035114006075351023731 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ja', { toolbar: 'ブロック引用文' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/id.js0000644000175000017500000000034014006075351023731 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'id', { toolbar: 'Kutipan Blok' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-gb.js0000644000175000017500000000034214006075351024327 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'en-gb', { toolbar: 'Block Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/sq.js0000644000175000017500000000033314006075351023762 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'sq', { toolbar: 'Citatet' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/bn.js0000644000175000017500000000035214006075351023737 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'bn', { toolbar: 'Block Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-au.js0000644000175000017500000000034214006075351024344 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'en-au', { toolbar: 'Block Quote' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ku.js0000644000175000017500000000041014006075351023752 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ku', { toolbar: 'بەربەستکردنی ووتەی وەرگیراو' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/ms.js0000644000175000017500000000035214006075351023757 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'ms', { toolbar: 'Block Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/fr.js0000644000175000017500000000033414006075351023747 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'fr', { toolbar: 'Citation' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/lang/bs.js0000644000175000017500000000035214006075351023744 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'blockquote', 'bs', { toolbar: 'Block Quote' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/icons/0000755000175000017500000000000014006075351023174 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/blockquote/icons/blockquote.png0000644000175000017500000000163514006075351026057 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8m?H$w?NVnՀF0bHh(QB)ڤMa#b.6!VI&I;+"ͱ;3,qk)J `@oxL&Iz=4 q0Ɛ)~4MqattB0!QvD&!S(}'"h6Hu]Hh6T* Lx# |T4>>.7J 4?ft~~^@(JH2%=`ueeZ0䕤g^V 5qggg}k-ZVWW?5ƌ$Ih4V*&Qn8fwwZaߒh47֖׵z0 덍677533Sp{{;WkkkeR\.SVI...֖ncP>o4k-|l61CIu:?(or]RґyxG_sss%}_ո^ptt_$ -X,H:T*Q*p>$Ii/4}${bz\\8 ÐnFxr$0iscC9K!s5& %#0 S*x7'CkMn饣cc((0]]~KRIRIAk}NI<ϣo$ɯ C G_xȈdY*J@AfxddETh y>;z'ׯ.W,`&٬hF0'\ '{{d{~y24Yԅmsdǎ?+-;."S f2_s啣G~ړH@%~`,t8[m ӳ}EOK4ex(FӌqH箻^D˚1L6z_f7R˩S1%ʶAYw,buWM yp YDeQLkjЮ(Co}Ƙǀ:nN&O޶]~<` ,P{I+gls?޽mc7m#O=e,X kڵ  < =U BʟaWP(DeUL뗯f3dWVg^c'%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/tabletools/0000755000175000017500000000000014006075351022061 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/tabletools/plugin.js0000644000175000017500000007166714006075351023736 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { var cellNodeRegex = /^(?:td|th)$/; function getSelectedCells( selection ) { var ranges = selection.getRanges(); var retval = []; var database = {}; function moveOutOfCellGuard( node ) { // Apply to the first cell only. if ( retval.length > 0 ) return; // If we are exiting from the first , then the td should definitely be // included. if ( node.type == CKEDITOR.NODE_ELEMENT && cellNodeRegex.test( node.getName() ) && !node.getCustomData( 'selected_cell' ) ) { CKEDITOR.dom.element.setMarker( database, node, 'selected_cell', true ); retval.push( node ); } } for ( var i = 0; i < ranges.length; i++ ) { var range = ranges[ i ]; if ( range.collapsed ) { // Walker does not handle collapsed ranges yet - fall back to old API. var startNode = range.getCommonAncestor(); var nearestCell = startNode.getAscendant( 'td', true ) || startNode.getAscendant( 'th', true ); if ( nearestCell ) retval.push( nearestCell ); } else { var walker = new CKEDITOR.dom.walker( range ); var node; walker.guard = moveOutOfCellGuard; while ( ( node = walker.next() ) ) { // If may be possible for us to have a range like this: // ^1^2 // The 2nd td shouldn't be included. // // So we have to take care to include a td we've entered only when we've // walked into its children. if ( node.type != CKEDITOR.NODE_ELEMENT || !node.is( CKEDITOR.dtd.table ) ) { var parent = node.getAscendant( 'td', true ) || node.getAscendant( 'th', true ); if ( parent && !parent.getCustomData( 'selected_cell' ) ) { CKEDITOR.dom.element.setMarker( database, parent, 'selected_cell', true ); retval.push( parent ); } } } } } CKEDITOR.dom.element.clearAllMarkers( database ); return retval; } function getFocusElementAfterDelCells( cellsToDelete ) { var i = 0, last = cellsToDelete.length - 1, database = {}, cell, focusedCell, tr; while ( ( cell = cellsToDelete[ i++ ] ) ) CKEDITOR.dom.element.setMarker( database, cell, 'delete_cell', true ); // 1.first we check left or right side focusable cell row by row; i = 0; while ( ( cell = cellsToDelete[ i++ ] ) ) { if ( ( focusedCell = cell.getPrevious() ) && !focusedCell.getCustomData( 'delete_cell' ) || ( focusedCell = cell.getNext() ) && !focusedCell.getCustomData( 'delete_cell' ) ) { CKEDITOR.dom.element.clearAllMarkers( database ); return focusedCell; } } CKEDITOR.dom.element.clearAllMarkers( database ); // 2. then we check the toppest row (outside the selection area square) focusable cell tr = cellsToDelete[ 0 ].getParent(); if ( ( tr = tr.getPrevious() ) ) return tr.getLast(); // 3. last we check the lowerest row focusable cell tr = cellsToDelete[ last ].getParent(); if ( ( tr = tr.getNext() ) ) return tr.getChild( 0 ); return null; } function insertRow( selection, insertBefore ) { var cells = getSelectedCells( selection ), firstCell = cells[ 0 ], table = firstCell.getAscendant( 'table' ), doc = firstCell.getDocument(), startRow = cells[ 0 ].getParent(), startRowIndex = startRow.$.rowIndex, lastCell = cells[ cells.length - 1 ], endRowIndex = lastCell.getParent().$.rowIndex + lastCell.$.rowSpan - 1, endRow = new CKEDITOR.dom.element( table.$.rows[ endRowIndex ] ), rowIndex = insertBefore ? startRowIndex : endRowIndex, row = insertBefore ? startRow : endRow; var map = CKEDITOR.tools.buildTableMap( table ), cloneRow = map[ rowIndex ], nextRow = insertBefore ? map[ rowIndex - 1 ] : map[ rowIndex + 1 ], width = map[ 0 ].length; var newRow = doc.createElement( 'tr' ); for ( var i = 0; cloneRow[ i ] && i < width; i++ ) { var cell; // Check whether there's a spanning row here, do not break it. if ( cloneRow[ i ].rowSpan > 1 && nextRow && cloneRow[ i ] == nextRow[ i ] ) { cell = cloneRow[ i ]; cell.rowSpan += 1; } else { cell = new CKEDITOR.dom.element( cloneRow[ i ] ).clone(); cell.removeAttribute( 'rowSpan' ); cell.appendBogus(); newRow.append( cell ); cell = cell.$; } i += cell.colSpan - 1; } insertBefore ? newRow.insertBefore( row ) : newRow.insertAfter( row ); } function deleteRows( selectionOrRow ) { if ( selectionOrRow instanceof CKEDITOR.dom.selection ) { var cells = getSelectedCells( selectionOrRow ), firstCell = cells[ 0 ], table = firstCell.getAscendant( 'table' ), map = CKEDITOR.tools.buildTableMap( table ), startRow = cells[ 0 ].getParent(), startRowIndex = startRow.$.rowIndex, lastCell = cells[ cells.length - 1 ], endRowIndex = lastCell.getParent().$.rowIndex + lastCell.$.rowSpan - 1, rowsToDelete = []; // Delete cell or reduce cell spans by checking through the table map. for ( var i = startRowIndex; i <= endRowIndex; i++ ) { var mapRow = map[ i ], row = new CKEDITOR.dom.element( table.$.rows[ i ] ); for ( var j = 0; j < mapRow.length; j++ ) { var cell = new CKEDITOR.dom.element( mapRow[ j ] ), cellRowIndex = cell.getParent().$.rowIndex; if ( cell.$.rowSpan == 1 ) cell.remove(); // Row spanned cell. else { // Span row of the cell, reduce spanning. cell.$.rowSpan -= 1; // Root row of the cell, root cell to next row. if ( cellRowIndex == i ) { var nextMapRow = map[ i + 1 ]; nextMapRow[ j - 1 ] ? cell.insertAfter( new CKEDITOR.dom.element( nextMapRow[ j - 1 ] ) ) : new CKEDITOR.dom.element( table.$.rows[ i + 1 ] ).append( cell, 1 ); } } j += cell.$.colSpan - 1; } rowsToDelete.push( row ); } var rows = table.$.rows; // Where to put the cursor after rows been deleted? // 1. Into next sibling row if any; // 2. Into previous sibling row if any; // 3. Into table's parent element if it's the very last row. var cursorPosition = new CKEDITOR.dom.element( rows[ endRowIndex + 1 ] || ( startRowIndex > 0 ? rows[ startRowIndex - 1 ] : null ) || table.$.parentNode ); for ( i = rowsToDelete.length; i >= 0; i-- ) deleteRows( rowsToDelete[ i ] ); return cursorPosition; } else if ( selectionOrRow instanceof CKEDITOR.dom.element ) { table = selectionOrRow.getAscendant( 'table' ); if ( table.$.rows.length == 1 ) table.remove(); else selectionOrRow.remove(); } return null; } function getCellColIndex( cell, isStart ) { var row = cell.getParent(), rowCells = row.$.cells; var colIndex = 0; for ( var i = 0; i < rowCells.length; i++ ) { var mapCell = rowCells[ i ]; colIndex += isStart ? 1 : mapCell.colSpan; if ( mapCell == cell.$ ) break; } return colIndex - 1; } function getColumnsIndices( cells, isStart ) { var retval = isStart ? Infinity : 0; for ( var i = 0; i < cells.length; i++ ) { var colIndex = getCellColIndex( cells[ i ], isStart ); if ( isStart ? colIndex < retval : colIndex > retval ) retval = colIndex; } return retval; } function insertColumn( selection, insertBefore ) { var cells = getSelectedCells( selection ), firstCell = cells[ 0 ], table = firstCell.getAscendant( 'table' ), startCol = getColumnsIndices( cells, 1 ), lastCol = getColumnsIndices( cells ), colIndex = insertBefore ? startCol : lastCol; var map = CKEDITOR.tools.buildTableMap( table ), cloneCol = [], nextCol = [], height = map.length; for ( var i = 0; i < height; i++ ) { cloneCol.push( map[ i ][ colIndex ] ); var nextCell = insertBefore ? map[ i ][ colIndex - 1 ] : map[ i ][ colIndex + 1 ]; nextCol.push( nextCell ); } for ( i = 0; i < height; i++ ) { var cell; if ( !cloneCol[ i ] ) continue; // Check whether there's a spanning column here, do not break it. if ( cloneCol[ i ].colSpan > 1 && nextCol[ i ] == cloneCol[ i ] ) { cell = cloneCol[ i ]; cell.colSpan += 1; } else { cell = new CKEDITOR.dom.element( cloneCol[ i ] ).clone(); cell.removeAttribute( 'colSpan' ); cell.appendBogus(); cell[ insertBefore ? 'insertBefore' : 'insertAfter' ].call( cell, new CKEDITOR.dom.element( cloneCol[ i ] ) ); cell = cell.$; } i += cell.rowSpan - 1; } } function deleteColumns( selectionOrCell ) { var cells = getSelectedCells( selectionOrCell ), firstCell = cells[ 0 ], lastCell = cells[ cells.length - 1 ], table = firstCell.getAscendant( 'table' ), map = CKEDITOR.tools.buildTableMap( table ), startColIndex, endColIndex, rowsToDelete = []; // Figure out selected cells' column indices. for ( var i = 0, rows = map.length; i < rows; i++ ) { for ( var j = 0, cols = map[ i ].length; j < cols; j++ ) { if ( map[ i ][ j ] == firstCell.$ ) startColIndex = j; if ( map[ i ][ j ] == lastCell.$ ) endColIndex = j; } } // Delete cell or reduce cell spans by checking through the table map. for ( i = startColIndex; i <= endColIndex; i++ ) { for ( j = 0; j < map.length; j++ ) { var mapRow = map[ j ], row = new CKEDITOR.dom.element( table.$.rows[ j ] ), cell = new CKEDITOR.dom.element( mapRow[ i ] ); if ( cell.$ ) { if ( cell.$.colSpan == 1 ) cell.remove(); // Reduce the col spans. else cell.$.colSpan -= 1; j += cell.$.rowSpan - 1; if ( !row.$.cells.length ) rowsToDelete.push( row ); } } } var firstRowCells = table.$.rows[ 0 ] && table.$.rows[ 0 ].cells; // Where to put the cursor after columns been deleted? // 1. Into next cell of the first row if any; // 2. Into previous cell of the first row if any; // 3. Into table's parent element; var cursorPosition = new CKEDITOR.dom.element( firstRowCells[ startColIndex ] || ( startColIndex ? firstRowCells[ startColIndex - 1 ] : table.$.parentNode ) ); // Delete table rows only if all columns are gone (do not remove empty row). if ( rowsToDelete.length == rows ) table.remove(); return cursorPosition; } function insertCell( selection, insertBefore ) { var startElement = selection.getStartElement(); var cell = startElement.getAscendant( 'td', 1 ) || startElement.getAscendant( 'th', 1 ); if ( !cell ) return; // Create the new cell element to be added. var newCell = cell.clone(); newCell.appendBogus(); if ( insertBefore ) newCell.insertBefore( cell ); else newCell.insertAfter( cell ); } function deleteCells( selectionOrCell ) { if ( selectionOrCell instanceof CKEDITOR.dom.selection ) { var cellsToDelete = getSelectedCells( selectionOrCell ); var table = cellsToDelete[ 0 ] && cellsToDelete[ 0 ].getAscendant( 'table' ); var cellToFocus = getFocusElementAfterDelCells( cellsToDelete ); for ( var i = cellsToDelete.length - 1; i >= 0; i-- ) deleteCells( cellsToDelete[ i ] ); if ( cellToFocus ) placeCursorInCell( cellToFocus, true ); else if ( table ) table.remove(); } else if ( selectionOrCell instanceof CKEDITOR.dom.element ) { var tr = selectionOrCell.getParent(); if ( tr.getChildCount() == 1 ) tr.remove(); else selectionOrCell.remove(); } } // Remove filler at end and empty spaces around the cell content. function trimCell( cell ) { var bogus = cell.getBogus(); bogus && bogus.remove(); cell.trim(); } function placeCursorInCell( cell, placeAtEnd ) { var docInner = cell.getDocument(), docOuter = CKEDITOR.document; // Fixing "Unspecified error" thrown in IE10 by resetting // selection the dirty and shameful way (#10308). // We can not apply this hack to IE8 because // it causes error (#11058). if ( CKEDITOR.env.ie && CKEDITOR.env.version == 10 ) { docOuter.focus(); docInner.focus(); } var range = new CKEDITOR.dom.range( docInner ); if ( !range[ 'moveToElementEdit' + ( placeAtEnd ? 'End' : 'Start' ) ]( cell ) ) { range.selectNodeContents( cell ); range.collapse( placeAtEnd ? false : true ); } range.select( true ); } function cellInRow( tableMap, rowIndex, cell ) { var oRow = tableMap[ rowIndex ]; if ( typeof cell == 'undefined' ) return oRow; for ( var c = 0; oRow && c < oRow.length; c++ ) { if ( cell.is && oRow[ c ] == cell.$ ) return c; else if ( c == cell ) return new CKEDITOR.dom.element( oRow[ c ] ); } return cell.is ? -1 : null; } function cellInCol( tableMap, colIndex ) { var oCol = []; for ( var r = 0; r < tableMap.length; r++ ) { var row = tableMap[ r ]; oCol.push( row[ colIndex ] ); // Avoid adding duplicate cells. if ( row[ colIndex ].rowSpan > 1 ) r += row[ colIndex ].rowSpan - 1; } return oCol; } function mergeCells( selection, mergeDirection, isDetect ) { var cells = getSelectedCells( selection ); // Invalid merge request if: // 1. In batch mode despite that less than two selected. // 2. In solo mode while not exactly only one selected. // 3. Cells distributed in different table groups (e.g. from both thead and tbody). var commonAncestor; if ( ( mergeDirection ? cells.length != 1 : cells.length < 2 ) || ( commonAncestor = selection.getCommonAncestor() ) && commonAncestor.type == CKEDITOR.NODE_ELEMENT && commonAncestor.is( 'table' ) ) return false; var cell, firstCell = cells[ 0 ], table = firstCell.getAscendant( 'table' ), map = CKEDITOR.tools.buildTableMap( table ), mapHeight = map.length, mapWidth = map[ 0 ].length, startRow = firstCell.getParent().$.rowIndex, startColumn = cellInRow( map, startRow, firstCell ); if ( mergeDirection ) { var targetCell; try { var rowspan = parseInt( firstCell.getAttribute( 'rowspan' ), 10 ) || 1; var colspan = parseInt( firstCell.getAttribute( 'colspan' ), 10 ) || 1; targetCell = map[ mergeDirection == 'up' ? ( startRow - rowspan ) : mergeDirection == 'down' ? ( startRow + rowspan ) : startRow ][ mergeDirection == 'left' ? ( startColumn - colspan ) : mergeDirection == 'right' ? ( startColumn + colspan ) : startColumn ]; } catch ( er ) { return false; } // 1. No cell could be merged. // 2. Same cell actually. if ( !targetCell || firstCell.$ == targetCell ) return false; // Sort in map order regardless of the DOM sequence. cells[ ( mergeDirection == 'up' || mergeDirection == 'left' ) ? 'unshift' : 'push' ]( new CKEDITOR.dom.element( targetCell ) ); } // Start from here are merging way ignorance (merge up/right, batch merge). var doc = firstCell.getDocument(), lastRowIndex = startRow, totalRowSpan = 0, totalColSpan = 0, // Use a documentFragment as buffer when appending cell contents. frag = !isDetect && new CKEDITOR.dom.documentFragment( doc ), dimension = 0; for ( var i = 0; i < cells.length; i++ ) { cell = cells[ i ]; var tr = cell.getParent(), cellFirstChild = cell.getFirst(), colSpan = cell.$.colSpan, rowSpan = cell.$.rowSpan, rowIndex = tr.$.rowIndex, colIndex = cellInRow( map, rowIndex, cell ); // Accumulated the actual places taken by all selected cells. dimension += colSpan * rowSpan; // Accumulated the maximum virtual spans from column and row. totalColSpan = Math.max( totalColSpan, colIndex - startColumn + colSpan ); totalRowSpan = Math.max( totalRowSpan, rowIndex - startRow + rowSpan ); if ( !isDetect ) { // Trim all cell fillers and check to remove empty cells. if ( trimCell( cell ), cell.getChildren().count() ) { // Merge vertically cells as two separated paragraphs. if ( rowIndex != lastRowIndex && cellFirstChild && !( cellFirstChild.isBlockBoundary && cellFirstChild.isBlockBoundary( { br: 1 } ) ) ) { var last = frag.getLast( CKEDITOR.dom.walker.whitespaces( true ) ); if ( last && !( last.is && last.is( 'br' ) ) ) frag.append( 'br' ); } cell.moveChildren( frag ); } i ? cell.remove() : cell.setHtml( '' ); } lastRowIndex = rowIndex; } if ( !isDetect ) { frag.moveChildren( firstCell ); firstCell.appendBogus(); if ( totalColSpan >= mapWidth ) firstCell.removeAttribute( 'rowSpan' ); else firstCell.$.rowSpan = totalRowSpan; if ( totalRowSpan >= mapHeight ) firstCell.removeAttribute( 'colSpan' ); else firstCell.$.colSpan = totalColSpan; // Swip empty left at the end of table due to the merging. var trs = new CKEDITOR.dom.nodeList( table.$.rows ), count = trs.count(); for ( i = count - 1; i >= 0; i-- ) { var tailTr = trs.getItem( i ); if ( !tailTr.$.cells.length ) { tailTr.remove(); count++; continue; } } return firstCell; } // Be able to merge cells only if actual dimension of selected // cells equals to the caculated rectangle. else { return ( totalRowSpan * totalColSpan ) == dimension; } } function horizontalSplitCell( selection, isDetect ) { var cells = getSelectedCells( selection ); if ( cells.length > 1 ) return false; else if ( isDetect ) return true; var cell = cells[ 0 ], tr = cell.getParent(), table = tr.getAscendant( 'table' ), map = CKEDITOR.tools.buildTableMap( table ), rowIndex = tr.$.rowIndex, colIndex = cellInRow( map, rowIndex, cell ), rowSpan = cell.$.rowSpan, newCell, newRowSpan, newCellRowSpan, newRowIndex; if ( rowSpan > 1 ) { newRowSpan = Math.ceil( rowSpan / 2 ); newCellRowSpan = Math.floor( rowSpan / 2 ); newRowIndex = rowIndex + newRowSpan; var newCellTr = new CKEDITOR.dom.element( table.$.rows[ newRowIndex ] ), newCellRow = cellInRow( map, newRowIndex ), candidateCell; newCell = cell.clone(); // Figure out where to insert the new cell by checking the vitual row. for ( var c = 0; c < newCellRow.length; c++ ) { candidateCell = newCellRow[ c ]; // Catch first cell actually following the column. if ( candidateCell.parentNode == newCellTr.$ && c > colIndex ) { newCell.insertBefore( new CKEDITOR.dom.element( candidateCell ) ); break; } else { candidateCell = null; } } // The destination row is empty, append at will. if ( !candidateCell ) newCellTr.append( newCell ); } else { newCellRowSpan = newRowSpan = 1; newCellTr = tr.clone(); newCellTr.insertAfter( tr ); newCellTr.append( newCell = cell.clone() ); var cellsInSameRow = cellInRow( map, rowIndex ); for ( var i = 0; i < cellsInSameRow.length; i++ ) cellsInSameRow[ i ].rowSpan++; } newCell.appendBogus(); cell.$.rowSpan = newRowSpan; newCell.$.rowSpan = newCellRowSpan; if ( newRowSpan == 1 ) cell.removeAttribute( 'rowSpan' ); if ( newCellRowSpan == 1 ) newCell.removeAttribute( 'rowSpan' ); return newCell; } function verticalSplitCell( selection, isDetect ) { var cells = getSelectedCells( selection ); if ( cells.length > 1 ) return false; else if ( isDetect ) return true; var cell = cells[ 0 ], tr = cell.getParent(), table = tr.getAscendant( 'table' ), map = CKEDITOR.tools.buildTableMap( table ), rowIndex = tr.$.rowIndex, colIndex = cellInRow( map, rowIndex, cell ), colSpan = cell.$.colSpan, newCell, newColSpan, newCellColSpan; if ( colSpan > 1 ) { newColSpan = Math.ceil( colSpan / 2 ); newCellColSpan = Math.floor( colSpan / 2 ); } else { newCellColSpan = newColSpan = 1; var cellsInSameCol = cellInCol( map, colIndex ); for ( var i = 0; i < cellsInSameCol.length; i++ ) cellsInSameCol[ i ].colSpan++; } newCell = cell.clone(); newCell.insertAfter( cell ); newCell.appendBogus(); cell.$.colSpan = newColSpan; newCell.$.colSpan = newCellColSpan; if ( newColSpan == 1 ) cell.removeAttribute( 'colSpan' ); if ( newCellColSpan == 1 ) newCell.removeAttribute( 'colSpan' ); return newCell; } CKEDITOR.plugins.tabletools = { requires: 'table,dialog,contextmenu', init: function( editor ) { var lang = editor.lang.table; function createDef( def ) { return CKEDITOR.tools.extend( def || {}, { contextSensitive: 1, refresh: function( editor, path ) { this.setState( path.contains( { td: 1, th: 1 }, 1 ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); } } ); } function addCmd( name, def ) { var cmd = editor.addCommand( name, def ); editor.addFeature( cmd ); } addCmd( 'cellProperties', new CKEDITOR.dialogCommand( 'cellProperties', createDef( { allowedContent: 'td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]', requiredContent: 'table' } ) ) ); CKEDITOR.dialog.add( 'cellProperties', this.path + 'dialogs/tableCell.js' ); addCmd( 'rowDelete', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); placeCursorInCell( deleteRows( selection ) ); } } ) ); addCmd( 'rowInsertBefore', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); insertRow( selection, true ); } } ) ); addCmd( 'rowInsertAfter', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); insertRow( selection ); } } ) ); addCmd( 'columnDelete', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); var element = deleteColumns( selection ); element && placeCursorInCell( element, true ); } } ) ); addCmd( 'columnInsertBefore', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); insertColumn( selection, true ); } } ) ); addCmd( 'columnInsertAfter', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); insertColumn( selection ); } } ) ); addCmd( 'cellDelete', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); deleteCells( selection ); } } ) ); addCmd( 'cellMerge', createDef( { allowedContent: 'td[colspan,rowspan]', requiredContent: 'td[colspan,rowspan]', exec: function( editor ) { placeCursorInCell( mergeCells( editor.getSelection() ), true ); } } ) ); addCmd( 'cellMergeRight', createDef( { allowedContent: 'td[colspan]', requiredContent: 'td[colspan]', exec: function( editor ) { placeCursorInCell( mergeCells( editor.getSelection(), 'right' ), true ); } } ) ); addCmd( 'cellMergeDown', createDef( { allowedContent: 'td[rowspan]', requiredContent: 'td[rowspan]', exec: function( editor ) { placeCursorInCell( mergeCells( editor.getSelection(), 'down' ), true ); } } ) ); addCmd( 'cellVerticalSplit', createDef( { allowedContent: 'td[rowspan]', requiredContent: 'td[rowspan]', exec: function( editor ) { placeCursorInCell( verticalSplitCell( editor.getSelection() ) ); } } ) ); addCmd( 'cellHorizontalSplit', createDef( { allowedContent: 'td[colspan]', requiredContent: 'td[colspan]', exec: function( editor ) { placeCursorInCell( horizontalSplitCell( editor.getSelection() ) ); } } ) ); addCmd( 'cellInsertBefore', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); insertCell( selection, true ); } } ) ); addCmd( 'cellInsertAfter', createDef( { requiredContent: 'table', exec: function( editor ) { var selection = editor.getSelection(); insertCell( selection ); } } ) ); // If the "menu" plugin is loaded, register the menu items. if ( editor.addMenuItems ) { editor.addMenuItems( { tablecell: { label: lang.cell.menu, group: 'tablecell', order: 1, getItems: function() { var selection = editor.getSelection(), cells = getSelectedCells( selection ); return { tablecell_insertBefore: CKEDITOR.TRISTATE_OFF, tablecell_insertAfter: CKEDITOR.TRISTATE_OFF, tablecell_delete: CKEDITOR.TRISTATE_OFF, tablecell_merge: mergeCells( selection, null, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_merge_right: mergeCells( selection, 'right', true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_merge_down: mergeCells( selection, 'down', true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_split_vertical: verticalSplitCell( selection, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_split_horizontal: horizontalSplitCell( selection, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_properties: cells.length > 0 ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED }; } }, tablecell_insertBefore: { label: lang.cell.insertBefore, group: 'tablecell', command: 'cellInsertBefore', order: 5 }, tablecell_insertAfter: { label: lang.cell.insertAfter, group: 'tablecell', command: 'cellInsertAfter', order: 10 }, tablecell_delete: { label: lang.cell.deleteCell, group: 'tablecell', command: 'cellDelete', order: 15 }, tablecell_merge: { label: lang.cell.merge, group: 'tablecell', command: 'cellMerge', order: 16 }, tablecell_merge_right: { label: lang.cell.mergeRight, group: 'tablecell', command: 'cellMergeRight', order: 17 }, tablecell_merge_down: { label: lang.cell.mergeDown, group: 'tablecell', command: 'cellMergeDown', order: 18 }, tablecell_split_horizontal: { label: lang.cell.splitHorizontal, group: 'tablecell', command: 'cellHorizontalSplit', order: 19 }, tablecell_split_vertical: { label: lang.cell.splitVertical, group: 'tablecell', command: 'cellVerticalSplit', order: 20 }, tablecell_properties: { label: lang.cell.title, group: 'tablecellproperties', command: 'cellProperties', order: 21 }, tablerow: { label: lang.row.menu, group: 'tablerow', order: 1, getItems: function() { return { tablerow_insertBefore: CKEDITOR.TRISTATE_OFF, tablerow_insertAfter: CKEDITOR.TRISTATE_OFF, tablerow_delete: CKEDITOR.TRISTATE_OFF }; } }, tablerow_insertBefore: { label: lang.row.insertBefore, group: 'tablerow', command: 'rowInsertBefore', order: 5 }, tablerow_insertAfter: { label: lang.row.insertAfter, group: 'tablerow', command: 'rowInsertAfter', order: 10 }, tablerow_delete: { label: lang.row.deleteRow, group: 'tablerow', command: 'rowDelete', order: 15 }, tablecolumn: { label: lang.column.menu, group: 'tablecolumn', order: 1, getItems: function() { return { tablecolumn_insertBefore: CKEDITOR.TRISTATE_OFF, tablecolumn_insertAfter: CKEDITOR.TRISTATE_OFF, tablecolumn_delete: CKEDITOR.TRISTATE_OFF }; } }, tablecolumn_insertBefore: { label: lang.column.insertBefore, group: 'tablecolumn', command: 'columnInsertBefore', order: 5 }, tablecolumn_insertAfter: { label: lang.column.insertAfter, group: 'tablecolumn', command: 'columnInsertAfter', order: 10 }, tablecolumn_delete: { label: lang.column.deleteColumn, group: 'tablecolumn', command: 'columnDelete', order: 15 } } ); } // If the "contextmenu" plugin is laoded, register the listeners. if ( editor.contextMenu ) { editor.contextMenu.addListener( function( element, selection, path ) { var cell = path.contains( { 'td': 1, 'th': 1 }, 1 ); if ( cell && !cell.isReadOnly() ) { return { tablecell: CKEDITOR.TRISTATE_OFF, tablerow: CKEDITOR.TRISTATE_OFF, tablecolumn: CKEDITOR.TRISTATE_OFF }; } return null; } ); } }, getSelectedCells: getSelectedCells }; CKEDITOR.plugins.add( 'tabletools', CKEDITOR.plugins.tabletools ); } )(); /** * Create a two-dimension array that reflects the actual layout of table cells, * with cell spans, with mappings to the original td elements. * * @param {CKEDITOR.dom.element} table * @member CKEDITOR.tools */ CKEDITOR.tools.buildTableMap = function( table ) { var aRows = table.$.rows; // Row and Column counters. var r = -1; var aMap = []; for ( var i = 0; i < aRows.length; i++ ) { r++; !aMap[ r ] && ( aMap[ r ] = [] ); var c = -1; for ( var j = 0; j < aRows[ i ].cells.length; j++ ) { var oCell = aRows[ i ].cells[ j ]; c++; while ( aMap[ r ][ c ] ) c++; var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan; var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan; for ( var rs = 0; rs < iRowSpan; rs++ ) { if ( !aMap[ r + rs ] ) aMap[ r + rs ] = []; for ( var cs = 0; cs < iColSpan; cs++ ) { aMap[ r + rs ][ c + cs ] = aRows[ i ].cells[ j ]; } } c += iColSpan - 1; } } return aMap; }; rt-4.4.4/devel/third-party/ckeditor-src/plugins/tabletools/dialogs/0000755000175000017500000000000014006075351023503 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/tabletools/dialogs/tableCell.js0000644000175000017500000003462314006075351025740 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'cellProperties', function( editor ) { var langTable = editor.lang.table, langCell = langTable.cell, langCommon = editor.lang.common, validate = CKEDITOR.dialog.validate, widthPattern = /^(\d+(?:\.\d+)?)(px|%)$/, spacer = { type: 'html', html: ' ' }, rtl = editor.lang.dir == 'rtl', colorDialog = editor.plugins.colordialog; // Returns a function, which runs regular "setup" for all selected cells to find out // whether the initial value of the field would be the same for all cells. If so, // the value is displayed just as if a regular "setup" was executed. Otherwise, // i.e. when there are several cells of different value of the property, a field // gets empty value. // // * @param {Function} setup Setup function which returns a value instead of setting it. // * @returns {Function} A function to be used in dialog definition. function setupCells( setup ) { return function( cells ) { var fieldValue = setup( cells[ 0 ] ); // If one of the cells would have a different value of the // property, set the empty value for a field. for ( var i = 1; i < cells.length; i++ ) { if ( setup( cells[ i ] ) !== fieldValue ) { fieldValue = null; break; } } // Setting meaningful or empty value only makes sense // when setup returns some value. Otherwise, a *default* value // is used for that field. if ( typeof fieldValue != 'undefined' ) { this.setValue( fieldValue ); // The only way to have an empty select value in Firefox is // to set a negative selectedIndex. if ( CKEDITOR.env.gecko && this.type == 'select' && !fieldValue ) this.getInputElement().$.selectedIndex = -1; } }; } // Reads the unit of width property of the table cell. // // * @param {CKEDITOR.dom.element} cell An element representing table cell. // * @returns {String} A unit of width: 'px', '%' or undefined if none. function getCellWidthType( cell ) { var match = widthPattern.exec( cell.getStyle( 'width' ) || cell.getAttribute( 'width' ) ); if ( match ) return match[ 2 ]; } return { title: langCell.title, minWidth: CKEDITOR.env.ie && CKEDITOR.env.quirks ? 450 : 410, minHeight: CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks ) ? 230 : 220, contents: [ { id: 'info', label: langCell.title, accessKey: 'I', elements: [ { type: 'hbox', widths: [ '40%', '5%', '40%' ], children: [ { type: 'vbox', padding: 0, children: [ { type: 'hbox', widths: [ '70%', '30%' ], children: [ { type: 'text', id: 'width', width: '100px', label: langCommon.width, validate: validate.number( langCell.invalidWidth ), // Extra labelling of width unit type. onLoad: function() { var widthType = this.getDialog().getContentElement( 'info', 'widthType' ), labelElement = widthType.getElement(), inputElement = this.getInputElement(), ariaLabelledByAttr = inputElement.getAttribute( 'aria-labelledby' ); inputElement.setAttribute( 'aria-labelledby', [ ariaLabelledByAttr, labelElement.$.id ].join( ' ' ) ); }, setup: setupCells( function( element ) { var widthAttr = parseInt( element.getAttribute( 'width' ), 10 ), widthStyle = parseInt( element.getStyle( 'width' ), 10 ); return !isNaN( widthStyle ) ? widthStyle : !isNaN( widthAttr ) ? widthAttr : ''; } ), commit: function( element ) { var value = parseInt( this.getValue(), 10 ), // There might be no widthType value, i.e. when multiple cells are // selected but some of them have width expressed in pixels and some // of them in percent. Try to re-read the unit from the cell in such // case (#11439). unit = this.getDialog().getValueOf( 'info', 'widthType' ) || getCellWidthType( element ); if ( !isNaN( value ) ) element.setStyle( 'width', value + unit ); else element.removeStyle( 'width' ); element.removeAttribute( 'width' ); }, 'default': '' }, { type: 'select', id: 'widthType', label: editor.lang.table.widthUnit, labelStyle: 'visibility:hidden', 'default': 'px', items: [ [ langTable.widthPx, 'px' ], [ langTable.widthPc, '%' ] ], setup: setupCells( getCellWidthType ) } ] }, { type: 'hbox', widths: [ '70%', '30%' ], children: [ { type: 'text', id: 'height', label: langCommon.height, width: '100px', 'default': '', validate: validate.number( langCell.invalidHeight ), // Extra labelling of height unit type. onLoad: function() { var heightType = this.getDialog().getContentElement( 'info', 'htmlHeightType' ), labelElement = heightType.getElement(), inputElement = this.getInputElement(), ariaLabelledByAttr = inputElement.getAttribute( 'aria-labelledby' ); inputElement.setAttribute( 'aria-labelledby', [ ariaLabelledByAttr, labelElement.$.id ].join( ' ' ) ); }, setup: setupCells( function( element ) { var heightAttr = parseInt( element.getAttribute( 'height' ), 10 ), heightStyle = parseInt( element.getStyle( 'height' ), 10 ); return !isNaN( heightStyle ) ? heightStyle : !isNaN( heightAttr ) ? heightAttr : ''; } ), commit: function( element ) { var value = parseInt( this.getValue(), 10 ); if ( !isNaN( value ) ) element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) ); else element.removeStyle( 'height' ); element.removeAttribute( 'height' ); } }, { id: 'htmlHeightType', type: 'html', html: '
      ' + langTable.widthPx } ] }, spacer, { type: 'select', id: 'wordWrap', label: langCell.wordWrap, 'default': 'yes', items: [ [ langCell.yes, 'yes' ], [ langCell.no, 'no' ] ], setup: setupCells( function( element ) { var wordWrapAttr = element.getAttribute( 'noWrap' ), wordWrapStyle = element.getStyle( 'white-space' ); if ( wordWrapStyle == 'nowrap' || wordWrapAttr ) return 'no'; } ), commit: function( element ) { if ( this.getValue() == 'no' ) element.setStyle( 'white-space', 'nowrap' ); else element.removeStyle( 'white-space' ); element.removeAttribute( 'noWrap' ); } }, spacer, { type: 'select', id: 'hAlign', label: langCell.hAlign, 'default': '', items: [ [ langCommon.notSet, '' ], [ langCommon.alignLeft, 'left' ], [ langCommon.alignCenter, 'center' ], [ langCommon.alignRight, 'right' ], [ langCommon.alignJustify, 'justify' ] ], setup: setupCells( function( element ) { var alignAttr = element.getAttribute( 'align' ), textAlignStyle = element.getStyle( 'text-align' ); return textAlignStyle || alignAttr || ''; } ), commit: function( selectedCell ) { var value = this.getValue(); if ( value ) selectedCell.setStyle( 'text-align', value ); else selectedCell.removeStyle( 'text-align' ); selectedCell.removeAttribute( 'align' ); } }, { type: 'select', id: 'vAlign', label: langCell.vAlign, 'default': '', items: [ [ langCommon.notSet, '' ], [ langCommon.alignTop, 'top' ], [ langCommon.alignMiddle, 'middle' ], [ langCommon.alignBottom, 'bottom' ], [ langCell.alignBaseline, 'baseline' ] ], setup: setupCells( function( element ) { var vAlignAttr = element.getAttribute( 'vAlign' ), vAlignStyle = element.getStyle( 'vertical-align' ); switch ( vAlignStyle ) { // Ignore all other unrelated style values.. case 'top': case 'middle': case 'bottom': case 'baseline': break; default: vAlignStyle = ''; } return vAlignStyle || vAlignAttr || ''; } ), commit: function( element ) { var value = this.getValue(); if ( value ) element.setStyle( 'vertical-align', value ); else element.removeStyle( 'vertical-align' ); element.removeAttribute( 'vAlign' ); } } ] }, spacer, { type: 'vbox', padding: 0, children: [ { type: 'select', id: 'cellType', label: langCell.cellType, 'default': 'td', items: [ [ langCell.data, 'td' ], [ langCell.header, 'th' ] ], setup: setupCells( function( selectedCell ) { return selectedCell.getName(); } ), commit: function( selectedCell ) { selectedCell.renameNode( this.getValue() ); } }, spacer, { type: 'text', id: 'rowSpan', label: langCell.rowSpan, 'default': '', validate: validate.integer( langCell.invalidRowSpan ), setup: setupCells( function( selectedCell ) { var attrVal = parseInt( selectedCell.getAttribute( 'rowSpan' ), 10 ); if ( attrVal && attrVal != 1 ) return attrVal; } ), commit: function( selectedCell ) { var value = parseInt( this.getValue(), 10 ); if ( value && value != 1 ) selectedCell.setAttribute( 'rowSpan', this.getValue() ); else selectedCell.removeAttribute( 'rowSpan' ); } }, { type: 'text', id: 'colSpan', label: langCell.colSpan, 'default': '', validate: validate.integer( langCell.invalidColSpan ), setup: setupCells( function( element ) { var attrVal = parseInt( element.getAttribute( 'colSpan' ), 10 ); if ( attrVal && attrVal != 1 ) return attrVal; } ), commit: function( selectedCell ) { var value = parseInt( this.getValue(), 10 ); if ( value && value != 1 ) selectedCell.setAttribute( 'colSpan', this.getValue() ); else selectedCell.removeAttribute( 'colSpan' ); } }, spacer, { type: 'hbox', padding: 0, widths: [ '60%', '40%' ], children: [ { type: 'text', id: 'bgColor', label: langCell.bgColor, 'default': '', setup: setupCells( function( element ) { var bgColorAttr = element.getAttribute( 'bgColor' ), bgColorStyle = element.getStyle( 'background-color' ); return bgColorStyle || bgColorAttr; } ), commit: function( selectedCell ) { var value = this.getValue(); if ( value ) selectedCell.setStyle( 'background-color', this.getValue() ); else selectedCell.removeStyle( 'background-color' ); selectedCell.removeAttribute( 'bgColor' ); } }, colorDialog ? { type: 'button', id: 'bgColorChoose', 'class': 'colorChooser', // jshint ignore:line label: langCell.chooseColor, onLoad: function() { // Stick the element to the bottom (#5587) this.getElement().getParent().setStyle( 'vertical-align', 'bottom' ); }, onClick: function() { editor.getColorFromDialog( function( color ) { if ( color ) this.getDialog().getContentElement( 'info', 'bgColor' ).setValue( color ); this.focus(); }, this ); } } : spacer ] }, spacer, { type: 'hbox', padding: 0, widths: [ '60%', '40%' ], children: [ { type: 'text', id: 'borderColor', label: langCell.borderColor, 'default': '', setup: setupCells( function( element ) { var borderColorAttr = element.getAttribute( 'borderColor' ), borderColorStyle = element.getStyle( 'border-color' ); return borderColorStyle || borderColorAttr; } ), commit: function( selectedCell ) { var value = this.getValue(); if ( value ) selectedCell.setStyle( 'border-color', this.getValue() ); else selectedCell.removeStyle( 'border-color' ); selectedCell.removeAttribute( 'borderColor' ); } }, colorDialog ? { type: 'button', id: 'borderColorChoose', 'class': 'colorChooser', // jshint ignore:line label: langCell.chooseColor, style: ( rtl ? 'margin-right' : 'margin-left' ) + ': 10px', onLoad: function() { // Stick the element to the bottom (#5587) this.getElement().getParent().setStyle( 'vertical-align', 'bottom' ); }, onClick: function() { editor.getColorFromDialog( function( color ) { if ( color ) this.getDialog().getContentElement( 'info', 'borderColor' ).setValue( color ); this.focus(); }, this ); } } : spacer ] } ] } ] } ] } ], onShow: function() { this.cells = CKEDITOR.plugins.tabletools.getSelectedCells( this._.editor.getSelection() ); this.setupContent( this.cells ); }, onOk: function() { var selection = this._.editor.getSelection(), bookmarks = selection.createBookmarks(); var cells = this.cells; for ( var i = 0; i < cells.length; i++ ) this.commitContent( cells[ i ] ); this._.editor.forceNextSelectionCheck(); selection.selectBookmarks( bookmarks ); this._.editor.selectionChange(); }, onLoad: function() { var saved = {}; // Prevent from changing cell properties when the field's value // remains unaltered, i.e. when selected multiple cells and dialog loaded // only the properties of the first cell (#11439). this.foreach( function( field ) { if ( !field.setup || !field.commit ) return; // Save field's value every time after "setup" is called. field.setup = CKEDITOR.tools.override( field.setup, function( orgSetup ) { return function() { orgSetup.apply( this, arguments ); saved[ field.id ] = field.getValue(); }; } ); // Compare saved value with actual value. Update cell only if value has changed. field.commit = CKEDITOR.tools.override( field.commit, function( orgCommit ) { return function() { if ( saved[ field.id ] !== field.getValue() ) orgCommit.apply( this, arguments ); }; } ); } ); } }; } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/0000755000175000017500000000000014006075351021711 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/plugin.js0000644000175000017500000006054514006075351023557 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'filetools', { lang: 'cs,da,de,en,eo,fr,gl,it,ko,ku,nb,nl,pl,pt-br,ru,sv,tr,zh,zh-cn', // %REMOVE_LINE_CORE% beforeInit: function( editor ) { /** * An instance of the {@link CKEDITOR.fileTools.uploadRepository upload repository}. * It allows you to create and get {@link CKEDITOR.fileTools.fileLoader file loaders}. * * var loader = editor.uploadRepository.create( file ); * loader.loadAndUpload( 'http://foo/bar' ); * * @since 4.5 * @readonly * @property {CKEDITOR.fileTools.uploadRepository} uploadRepository * @member CKEDITOR.editor */ editor.uploadRepository = new UploadRepository( editor ); /** * Event fired when the {@link CKEDITOR.fileTools.fileLoader file loader} should send XHR. If the event is not * {@link CKEDITOR.eventInfo#stop stopped} or {@link CKEDITOR.eventInfo#cancel canceled}, the default request * will be sent. To learn more refer to the [Uploading Dropped or Pasted Files](#!/guide/dev_file_upload) article. * * @since 4.5 * @event fileUploadRequest * @member CKEDITOR.editor * @param data * @param {CKEDITOR.fileTools.fileLoader} data.fileLoader File loader instance. */ editor.on( 'fileUploadRequest', function( evt ) { var fileLoader = evt.data.fileLoader; fileLoader.xhr.open( 'POST', fileLoader.uploadUrl, true ); }, null, null, 5 ); editor.on( 'fileUploadRequest', function( evt ) { var fileLoader = evt.data.fileLoader, formData = new FormData(); formData.append( 'upload', fileLoader.file, fileLoader.fileName ); fileLoader.xhr.send( formData ); }, null, null, 999 ); /** * Event fired when the {CKEDITOR.fileTools.fileLoader file upload} response is received and needs to be parsed. * If the event is not {@link CKEDITOR.eventInfo#stop stopped} or {@link CKEDITOR.eventInfo#cancel canceled}, * the default response handler will be used. To learn more refer to the * [Uploading Dropped or Pasted Files](#!/guide/dev_file_upload) article. * * @since 4.5 * @event fileUploadResponse * @member CKEDITOR.editor * @param data * @param {CKEDITOR.fileTools.fileLoader} data.fileLoader A file loader instance. * @param {String} data.message The message from the server. Needs to be set in the listener — see the example above. * @param {String} data.fileName The file name on server. Needs to be set in the listener — see the example above. * @param {String} data.url The URL to the uploaded file. Needs to be set in the listener — see the example above. */ editor.on( 'fileUploadResponse', function( evt ) { var fileLoader = evt.data.fileLoader, xhr = fileLoader.xhr, data = evt.data; try { var response = JSON.parse( xhr.responseText ); // Error message does not need to mean that upload finished unsuccessfully. // It could mean that ex. file name was changes during upload due to naming collision. if ( response.error && response.error.message ) { data.message = response.error.message; } // But !uploaded means error. if ( !response.uploaded ) { evt.cancel(); } else { data.fileName = response.fileName; data.url = response.url; } } catch ( err ) { // Response parsing error. data.message = fileLoader.lang.filetools.responseError; window.console && window.console.log( xhr.responseText ); evt.cancel(); } }, null, null, 999 ); } } ); /** * File loader repository. It allows you to create and get {@link CKEDITOR.fileTools.fileLoader file loaders}. * * An instance of the repository is available as the {@link CKEDITOR.editor#uploadRepository}. * * var loader = editor.uploadRepository.create( file ); * loader.loadAndUpload( 'http://foo/bar' ); * * To find more information about handling files see the {@link CKEDITOR.fileTools.fileLoader} class. * * @since 4.5 * @class CKEDITOR.fileTools.uploadRepository * @mixins CKEDITOR.event * @constructor Creates an instance of the repository. * @param {CKEDITOR.editor} editor Editor instance. Used only to get the language data. */ function UploadRepository( editor ) { this.editor = editor; this.loaders = []; } UploadRepository.prototype = { /** * Creates a {@link CKEDITOR.fileTools.fileLoader file loader} instance with a unique ID. * The instance can be later retrieved from the repository using the {@link #loaders} array. * * Fires the {@link CKEDITOR.fileTools.uploadRepository#instanceCreated instanceCreated} event. * * @param {Blob/String} fileOrData See {@link CKEDITOR.fileTools.fileLoader}. * @param {String} fileName See {@link CKEDITOR.fileTools.fileLoader}. * @returns {CKEDITOR.fileTools.fileLoader} The created file loader instance. */ create: function( fileOrData, fileName ) { var id = this.loaders.length, loader = new FileLoader( this.editor, fileOrData, fileName ); loader.id = id; this.loaders[ id ] = loader; this.fire( 'instanceCreated', loader ); return loader; }, /** * Returns `true` if all loaders finished their jobs. * * @returns {Boolean} `true` if all loaders finished their job, `false` otherwise. */ isFinished: function() { for ( var id = 0; id < this.loaders.length; ++id ) { if ( !this.loaders[ id ].isFinished() ) { return false; } } return true; } /** * Array of loaders created by the {@link #create} method. Loaders' {@link CKEDITOR.fileTools.fileLoader#id IDs} * are indexes. * * @readonly * @property {CKEDITOR.fileTools.fileLoader[]} loaders */ /** * Event fired when the {@link CKEDITOR.fileTools.fileLoader file loader} is created. * * @event instanceCreated * @param {CKEDITOR.fileTools.fileLoader} data Created file loader. */ }; /** * The `FileLoader` class is a wrapper which handles two file operations: loading the content of the file stored on * the user's device into the memory and uploading the file to the server. * * There are two possible ways to crate a `FileLoader` instance: with a [Blob](https://developer.mozilla.org/en/docs/Web/API/Blob) * (e.g. acquired from the {@link CKEDITOR.plugins.clipboard.dataTransfer#getFile} method) or with data as a Base64 string. * Note that if the constructor gets the data as a Base64 string, there is no need to load the data, the data is already loaded. * * The `FileLoader` is created for a single load and upload process so if you abort the process, * you need to create a new `FileLoader`. * * All process parameters are stored in public properties. * * `FileLoader` implements events so you can listen to them to react to changes. There are two types of events: * events to notify the listeners about changes and an event that lets the listeners synchronize with current {@link #status}. * * The first group of events contains {@link #event-loading}, {@link #event-loaded}, {@link #event-uploading}, * {@link #event-uploaded}, {@link #event-error} and {@link #event-abort}. These events are called only once, * when the {@link #status} changes. * * The second type is the {@link #event-update} event. It is fired every time the {@link #status} changes, the progress changes * or the {@link #method-update} method is called. Is is created to synchronize the visual representation of the loader with * its status. For example if the dialog window shows the upload progress, it should be refreshed on * the {@link #event-update} listener. Then when the user closes and reopens this dialog, the {@link #method-update} method should * be called to refresh the progress. * * Default request and response formats will work with CKFinder 2.4.3 and above. If you need a custom request * or response handling you need to overwrite the default behavior using the {@link CKEDITOR.editor#fileUploadRequest} and * {@link CKEDITOR.editor#fileUploadResponse} events. For more information see their documentation. * * To create a `FileLoader` instance, use the {@link CKEDITOR.fileTools.uploadRepository} class. * * Here is a simple `FileLoader` usage example: * * editor.on( 'paste', function( evt ) { * for ( var i = 0; i < evt.data.dataTransfer.getFilesCount(); i++ ) { * var file = evt.data.dataTransfer.getFile( i ); * * if ( CKEDITOR.fileTools.isTypeSupported( file, /image\/png/ ) ) { * var loader = editor.uploadRepository.create( file ); * * loader.on( 'update', function() { * document.getElementById( 'uploadProgress' ).innerHTML = loader.status; * } ); * * loader.on( 'error', function() { * alert( 'Error!' ); * } ); * * loader.loadAndUpload( 'http://upload.url/' ); * * evt.data.dataValue += 'loading...' * } * } * } ); * * Note that `FileLoader` uses the native file API which is supported **since Internet Explorer 10**. * * @since 4.5 * @class CKEDITOR.fileTools.fileLoader * @mixins CKEDITOR.event * @constructor Creates an instance of the class and sets initial values for all properties. * @param {CKEDITOR.editor} editor The editor instance. Used only to get language data. * @param {Blob/String} fileOrData A [blob object](https://developer.mozilla.org/en/docs/Web/API/Blob) or a data * string encoded with Base64. * @param {String} [fileName] The file name. If not set and the second parameter is a file, then its name will be used. * If not set and the second parameter is a Base64 data string, then the file name will be created based on * the {@link CKEDITOR.config#fileTools_defaultFileName} option. */ function FileLoader( editor, fileOrData, fileName ) { var mimeParts, defaultFileName = editor.config.fileTools_defaultFileName; this.editor = editor; this.lang = editor.lang; if ( typeof fileOrData === 'string' ) { // Data are already loaded from disc. this.data = fileOrData; this.file = dataToFile( this.data ); this.total = this.file.size; this.loaded = this.total; } else { this.data = null; this.file = fileOrData; this.total = this.file.size; this.loaded = 0; } if ( fileName ) { this.fileName = fileName; } else if ( this.file.name ) { this.fileName = this.file.name; } else { mimeParts = this.file.type.split( '/' ); if ( defaultFileName ) { mimeParts[ 0 ] = defaultFileName; } this.fileName = mimeParts.join( '.' ); } this.uploaded = 0; this.status = 'created'; this.abort = function() { this.changeStatus( 'abort' ); }; } /** * The loader status. Possible values: * * * `created` – The loader was created, but neither load nor upload started. * * `loading` – The file is being loaded from the user's storage. * * `loaded` – The file was loaded, the process is finished. * * `uploading` – The file is being uploaded to the server. * * `uploaded` – The file was uploaded, the process is finished. * * `error` – The process stops because of an error, more details are available in the {@link #message} property. * * `abort` – The process was stopped by the user. * * @property {String} status */ /** * String data encoded with Base64. If the `FileLoader` is created with a Base64 string, the `data` is that string. * If a file was passed to the constructor, the data is `null` until loading is completed. * * @readonly * @property {String} data */ /** * File object which represents the handled file. This property is set for both constructor options (file or data). * * @readonly * @property {Blob} file */ /** * The name of the file. If there is no file name, it is created by using the * {@link CKEDITOR.config#fileTools_defaultFileName} option. * * @readonly * @property {String} fileName */ /** * The number of loaded bytes. If the `FileLoader` was created with a data string, * the loaded value equals the {@link #total} value. * * @readonly * @property {Number} loaded */ /** * The number of uploaded bytes. * * @readonly * @property {Number} uploaded */ /** * The total file size in bytes. * * @readonly * @property {Number} total */ /** * The error message or additional information received from the server. * * @readonly * @property {String} message */ /** * The URL to the file when it is uploaded or received from the server. * * @readonly * @property {String} url */ /** * The target of the upload. * * @readonly * @property {String} uploadUrl */ /** * * Native `FileReader` reference used to load the file. * * @readonly * @property {FileReader} reader */ /** * Native `XMLHttpRequest` reference used to upload the file. * * @readonly * @property {XMLHttpRequest} xhr */ /** * If `FileLoader` was created using {@link CKEDITOR.fileTools.uploadRepository}, * it gets an identifier which is stored in this property. * * @readonly * @property {Number} id */ /** * Aborts the process. * * This method has a different behavior depending on the current {@link #status}. * * * If the {@link #status} is `loading` or `uploading`, current operation will be aborted. * * If the {@link #status} is `created`, `loading` or `uploading`, the {@link #status} will be changed to `abort` * and the {@link #event-abort} event will be called. * * If the {@link #status} is `loaded`, `uploaded`, `error` or `abort`, this method will do nothing. * * @method abort */ FileLoader.prototype = { /** * Loads a file from the storage on the user's device to the `data` attribute and uploads it to the server. * * The order of {@link #status statuses} for a successful load and upload is: * * * `created`, * * `loading`, * * `uploading`, * * `uploaded`. * * @param {String} url The upload URL. */ loadAndUpload: function( url ) { var loader = this; this.once( 'loaded', function( evt ) { // Cancel both 'loaded' and 'update' events, // because 'loaded' is terminated state. evt.cancel(); loader.once( 'update', function( evt ) { evt.cancel(); }, null, null, 0 ); // Start uploading. loader.upload( url ); }, null, null, 0 ); this.load(); }, /** * Loads a file from the storage on the user's device to the `data` attribute. * * The order of the {@link #status statuses} for a successful load is: * * * `created`, * * `loading`, * * `loaded`. */ load: function() { var loader = this; this.reader = new FileReader(); var reader = this.reader; loader.changeStatus( 'loading' ); this.abort = function() { loader.reader.abort(); }; reader.onabort = function() { loader.changeStatus( 'abort' ); }; reader.onerror = function() { loader.message = loader.lang.filetools.loadError; loader.changeStatus( 'error' ); }; reader.onprogress = function( evt ) { loader.loaded = evt.loaded; loader.update(); }; reader.onload = function() { loader.loaded = loader.total; loader.data = reader.result; loader.changeStatus( 'loaded' ); }; reader.readAsDataURL( this.file ); }, /** * Uploads a file to the server. * * The order of the {@link #status statuses} for a successful upload is: * * * `created`, * * `uploading`, * * `uploaded`. * * @param {String} url The upload URL. */ upload: function( url ) { if ( !url ) { this.message = this.lang.filetools.noUrlError; this.changeStatus( 'error' ); } else { this.uploadUrl = url; this.xhr = new XMLHttpRequest(); this.attachRequestListeners(); if ( this.editor.fire( 'fileUploadRequest', { fileLoader: this } ) ) { this.changeStatus( 'uploading' ); } } }, /** * Attaches listeners to the XML HTTP request object. * * @private * @param {XMLHttpRequest} xhr XML HTTP request object. */ attachRequestListeners: function() { var loader = this, xhr = this.xhr; loader.abort = function() { xhr.abort(); }; xhr.onabort = function() { loader.changeStatus( 'abort' ); }; xhr.onerror = function() { loader.message = loader.lang.filetools.networkError; loader.changeStatus( 'error' ); }; xhr.onprogress = function( evt ) { loader.uploaded = evt.loaded; loader.update(); }; xhr.onload = function() { loader.uploaded = loader.total; if ( xhr.status < 200 || xhr.status > 299 ) { loader.message = loader.lang.filetools[ 'httpError' + xhr.status ]; if ( !loader.message ) { loader.message = loader.lang.filetools.httpError.replace( '%1', xhr.status ); } loader.changeStatus( 'error' ); } else { var data = { fileLoader: loader }, // Values to copy from event to FileLoader. valuesToCopy = [ 'message', 'fileName', 'url' ], success = loader.editor.fire( 'fileUploadResponse', data ); for ( var i = 0; i < valuesToCopy.length; i++ ) { var key = valuesToCopy[ i ]; if ( typeof data[ key ] === 'string' ) { loader[ key ] = data[ key ]; } } if ( success === false ) { loader.changeStatus( 'error' ); } else { loader.changeStatus( 'uploaded' ); } } }; }, /** * Changes {@link #status} to the new status, updates the {@link #method-abort} method if needed and fires two events: * new status and {@link #event-update}. * * @private * @param {String} newStatus New status to be set. */ changeStatus: function( newStatus ) { this.status = newStatus; if ( newStatus == 'error' || newStatus == 'abort' || newStatus == 'loaded' || newStatus == 'uploaded' ) { this.abort = function() {}; } this.fire( newStatus ); this.update(); }, /** * Updates the state of the `FileLoader` listeners. This method should be called if the state of the visual representation * of the upload process is out of synchronization and needs to be refreshed (e.g. because of an undo operation or * because the dialog window with the upload is closed and reopened). Fires the {@link #event-update} event. */ update: function() { this.fire( 'update' ); }, /** * Returns `true` if the loading and uploading finished (successfully or not), so the {@link #status} is * `loaded`, `uploaded`, `error` or `abort`. * * @returns {Boolean} `true` if the loading and uploading finished. */ isFinished: function() { return !!this.status.match( /^(?:loaded|uploaded|error|abort)$/ ); } /** * Event fired when the {@link #status} changes to `loading`. It will be fired once for the `FileLoader`. * * @event loading */ /** * Event fired when the {@link #status} changes to `loaded`. It will be fired once for the `FileLoader`. * * @event loaded */ /** * Event fired when the {@link #status} changes to `uploading`. It will be fired once for the `FileLoader`. * * @event uploading */ /** * Event fired when the {@link #status} changes to `uploaded`. It will be fired once for the `FileLoader`. * * @event uploaded */ /** * Event fired when the {@link #status} changes to `error`. It will be fired once for the `FileLoader`. * * @event error */ /** * Event fired when the {@link #status} changes to `abort`. It will be fired once for the `FileLoader`. * * @event abort */ /** * Event fired every time the `FileLoader` {@link #status} or progress changes or the {@link #method-update} method is called. * This event was designed to allow showing the visualization of the progress and refresh that visualization * every time the status changes. Note that multiple `update` events may be fired with the same status. * * @event update */ }; CKEDITOR.event.implementOn( UploadRepository.prototype ); CKEDITOR.event.implementOn( FileLoader.prototype ); var base64HeaderRegExp = /^data:(\S*?);base64,/; // Transforms Base64 string data into file and creates name for that file based on the mime type. // // @private // @param {String} data Base64 string data. // @returns {Blob} File. function dataToFile( data ) { var contentType = data.match( base64HeaderRegExp )[ 1 ], base64Data = data.replace( base64HeaderRegExp, '' ), byteCharacters = atob( base64Data ), byteArrays = [], sliceSize = 512, offset, slice, byteNumbers, i, byteArray; for ( offset = 0; offset < byteCharacters.length; offset += sliceSize ) { slice = byteCharacters.slice( offset, offset + sliceSize ); byteNumbers = new Array( slice.length ); for ( i = 0; i < slice.length; i++ ) { byteNumbers[ i ] = slice.charCodeAt( i ); } byteArray = new Uint8Array( byteNumbers ); byteArrays.push( byteArray ); } return new Blob( byteArrays, { type: contentType } ); } // // PUBLIC API ------------------------------------------------------------- // // Two plugins extend this object. if ( !CKEDITOR.fileTools ) { /** * Helpers to load and upload a file. * * @since 4.5 * @singleton * @class CKEDITOR.fileTools */ CKEDITOR.fileTools = {}; } CKEDITOR.tools.extend( CKEDITOR.fileTools, { uploadRepository: UploadRepository, fileLoader: FileLoader, /** * Gets the upload URL from the {@link CKEDITOR.config configuration}. Because of backward compatibility * the URL can be set using multiple configuration options. * * If the `type` is defined, then four configuration options will be checked in the following order * (examples for `type='image'`): * * * `[type]UploadUrl`, e.g. {@link CKEDITOR.config#imageUploadUrl}, * * {@link CKEDITOR.config#uploadUrl}, * * `filebrowser[uppercased type]uploadUrl`, e.g. {@link CKEDITOR.config#filebrowserImageUploadUrl}, * * {@link CKEDITOR.config#filebrowserUploadUrl}. * * If the `type` is not defined, two configuration options will be checked: * * * {@link CKEDITOR.config#uploadUrl}, * * {@link CKEDITOR.config#filebrowserUploadUrl}. * * `filebrowser[type]uploadUrl` and `filebrowserUploadUrl` are checked for backward compatibility with the * `filebrowser` plugin. * * For both `filebrowser[type]uploadUrl` and `filebrowserUploadUrl` `&responseType=json` is added to the end of the URL. * * @param {Object} config The configuration file. * @param {String} [type] Upload file type. * @returns {String/null} Upload URL or `null` if none of the configuration options were defined. */ getUploadUrl: function( config, type ) { var capitalize = CKEDITOR.tools.capitalize; if ( type && config[ type + 'UploadUrl' ] ) { return config[ type + 'UploadUrl' ]; } else if ( config.uploadUrl ) { return config.uploadUrl; } else if ( type && config[ 'filebrowser' + capitalize( type, 1 ) + 'UploadUrl' ] ) { return config[ 'filebrowser' + capitalize( type, 1 ) + 'UploadUrl' ] + '&responseType=json'; } else if ( config.filebrowserUploadUrl ) { return config.filebrowserUploadUrl + '&responseType=json'; } return null; }, /** * Checks if the MIME type of the given file is supported. * * CKEDITOR.fileTools.isTypeSupported( { type: 'image/png' }, /image\/(png|jpeg)/ ); // true * CKEDITOR.fileTools.isTypeSupported( { type: 'image/png' }, /image\/(gif|jpeg)/ ); // false * * @param {Blob} file The file to check. * @param {RegExp} supportedTypes A regular expression to check the MIME type of the file. * @returns {Boolean} `true` if the file type is supported. */ isTypeSupported: function( file, supportedTypes ) { return !!file.type.match( supportedTypes ); } } ); } )(); /** * The URL where files should be uploaded. * * An empty string means that the option is disabled. * * @since 4.5 * @cfg {String} [uploadUrl=''] * @member CKEDITOR.config */ /** * Default file name (without extension) that will be used for files created from a Base64 data string * (for example for files pasted into the editor). * This name will be combined with the MIME type to create the full file name with the extension. * * If `fileTools_defaultFileName` is set to `default-name` and data's MIME type is `image/png`, * the resulting file name will be `default-name.png`. * * If `fileTools_defaultFileName` is not set, the file name will be created using only its MIME type. * For example for `image/png` the file name will be `image.png`. * * @since 4.5.3 * @cfg {String} [fileTools_defaultFileName=''] * @member CKEDITOR.config */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/0000755000175000017500000000000014006075351022632 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/de.js0000644000175000017500000000141414006075351023560 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'de', { loadError: 'Während dem Lesen der Datei ist ein Fehler aufgetreten.', networkError: 'Während dem Hochladen der Datei ist ein Netzwerkfehler aufgetreten.', httpError404: 'Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).', httpError403: 'Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).', httpError: 'Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).', noUrlError: 'Hochlade-URL ist nicht definiert.', responseError: 'Falsche Antwort des Servers.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/en.js0000644000175000017500000000117614006075351023577 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'en', { loadError: 'Error occurred during file read.', networkError: 'Network error occurred during file upload.', httpError404: 'HTTP error occurred during file upload (404: File not found).', httpError403: 'HTTP error occurred during file upload (403: Forbidden).', httpError: 'HTTP error occurred during file upload (error status: %1).', noUrlError: 'Upload URL is not defined.', responseError: 'Incorrect server response.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/eo.js0000644000175000017500000000122714006075351023575 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'eo', { loadError: 'Eraro okazis dum la dosiera legado.', networkError: 'Reta eraro okazis dum la dosiera alŝuto.', httpError404: 'HTTP eraro okazis dum la dosiera alŝuto (404: dosiero ne trovita).', httpError403: 'HTTP eraro okazis dum la dosiera alŝuto (403: malpermesita).', httpError: 'HTTP eraro okazis dum la dosiera alŝuto (erara stato: %1).', noUrlError: 'Alŝuta URL ne estas difinita.', responseError: 'Malĝusta respondo de la servilo.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/gl.js0000644000175000017500000000134614006075351023576 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'gl', { loadError: 'Produciuse un erro durante a lectura do ficheiro.', networkError: 'Produciuse un erro na rede durante o envío do ficheiro.', httpError404: 'Produciuse un erro HTTP durante o envío do ficheiro (404: Ficheiro non atopado).', httpError403: 'Produciuse un erro HTTP durante o envío do ficheiro (403: Acceso denegado).', httpError: 'Produciuse un erro HTTP durante o envío do ficheiro (erro de estado: %1).', noUrlError: 'Non foi definido o URL para o envío.', responseError: 'Resposta incorrecta do servidor.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/ko.js0000644000175000017500000000137014006075351023602 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'ko', { loadError: '파일을 읽는 중 오류가 발생했습니다.', networkError: '파일 업로드 중 네트워크 오류가 발생했습니다.', httpError404: '파일 업로드중 HTTP 오류가 발생했습니다 (404: 파일 찾을수 없음).', httpError403: '파일 업로드중 HTTP 오류가 발생했습니다 (403: 권한 없음).', httpError: '파일 업로드중 HTTP 오류가 발생했습니다 (오류 코드 %1).', noUrlError: '업로드 주소가 정의되어 있지 않습니다.', responseError: '잘못된 서버 응답.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/zh.js0000644000175000017500000000121514006075351023610 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'zh', { loadError: '在讀取檔案時發生錯誤。', networkError: '在上傳檔案時發生網路錯誤。', httpError404: '在上傳檔案時發生 HTTP 錯誤(404:檔案找不到)。', httpError403: '在上傳檔案時發生 HTTP 錯誤(403:禁止)。', httpError: '在上傳檔案時發生 HTTP 錯誤(錯誤狀態:%1)。', noUrlError: '上傳的 URL 未被定義。', responseError: '不正確的伺服器回應。' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/it.js0000644000175000017500000000145114006075351023605 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'it', { loadError: 'Si è verificato un errore durante la lettura del file.', networkError: 'Si è verificato un errore di rete durante il caricamento del file.', httpError404: 'Si è verificato un errore HTTP durante il caricamento del file (404: file non trovato).', httpError403: 'Si è verificato un errore HTTP durante il caricamento del file (403: accesso negato).', httpError: 'Si è verificato un errore HTTP durante il caricamento del file (stato dell\'errore: %1).', noUrlError: 'L\'URL per il caricamento non è stato definito.', responseError: 'La risposta del server non è corretta.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/sv.js0000644000175000017500000000116514006075351023623 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'sv', { loadError: 'Fel uppstod vid filläsning', networkError: 'Nätverksfel uppstod vid filuppladdning.', httpError404: 'HTTP-fel uppstod vid filuppladdning (404: Fil hittades inte).', httpError403: 'HTTP-fel uppstod vid filuppladdning (403: Förbjuden).', httpError: 'HTTP-fel uppstod vid filuppladdning (felstatus: %1).', noUrlError: 'URL för uppladdning inte definierad.', responseError: 'Felaktigt serversvar.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/tr.js0000644000175000017500000000120514006075351023613 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'tr', { loadError: 'Dosya okunurken hata oluştu.', networkError: 'Dosya gönderilirken ağ hatası oluştu.', httpError404: 'Dosya gönderilirken HTTP hatası oluştu (404: Dosya bulunamadı).', httpError403: 'Dosya gönderilirken HTTP hatası oluştu (403: Yasaklı).', httpError: 'Dosya gönderilirken HTTP hatası oluştu (hata durumu: %1).', noUrlError: 'Gönderilecek URL belirtilmedi.', responseError: 'Sunucu cevap veremedi.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/pl.js0000644000175000017500000000125714006075351023610 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'pl', { loadError: 'Błąd podczas odczytu pliku.', networkError: 'W trakcie wysyłania pliku pojawił się błąd sieciowy.', httpError404: 'Błąd HTTP w trakcie wysyłania pliku (404: Nie znaleziono pliku).', httpError403: 'Błąd HTTP w trakcie wysyłania pliku (403: Zabroniony).', httpError: 'Błąd HTTP w trakcie wysyłania pliku (status błędu: %1).', noUrlError: 'Nie zdefiniowano adresu URL do przesłania pliku.', responseError: 'Niepoprawna odpowiedź serwera.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/nb.js0000644000175000017500000000120214006075351023562 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'nb', { loadError: 'Feil oppsto under filinnlesing.', networkError: 'Nettverksfeil oppsto under filopplasting.', httpError404: 'HTTP-feil oppsto under filopplasting (404: Fant ikke filen).', httpError403: 'HTTP-feil oppsto under filopplasting (403: Ikke tillatt).', httpError: 'HTTP-feil oppsto under filopplasting (feilstatus: %1).', noUrlError: 'URL for opplasting er ikke oppgitt.', responseError: 'Ukorrekt svar fra serveren.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/ru.js0000644000175000017500000000141114006075351023613 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'ru', { loadError: 'Ошибка при чтении файла', networkError: 'Сетевая ошибка при загрузке файла', httpError404: 'HTTP ошибка при загрузке файла (404: Файл не найден)', httpError403: 'HTTP ошибка при загрузке файла (403: Запрещено)', httpError: 'HTTP ошибка при загрузке файла (%1)', noUrlError: 'Не определен URL для загрузки файлов', responseError: 'Некорректный ответ сервера' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/zh-cn.js0000644000175000017500000000120714006075351024207 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'zh-cn', { loadError: '读取文件时发生错误。', networkError: '上传文件时发生网络错误。', httpError404: '上传文件时发生 HTTP 错误(404:无法找到文件)。', httpError403: '上传文件时发生 HTTP 错误(403:禁止访问)。', httpError: '上传文件时发生 HTTP 错误(错误代码:%1)。', noUrlError: '上传的 URL 未定义。', responseError: '不正确的服务器响应。' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/cs.js0000644000175000017500000000126114006075351023575 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'cs', { loadError: 'Při čtení souboru došlo k chybě.', networkError: 'Při nahrávání souboru došlo k chybě v síti.', httpError404: 'Při nahrávání souboru došlo k chybě HTTP (404: Soubor nenalezen).', httpError403: 'Při nahrávání souboru došlo k chybě HTTP (403: Zakázáno).', httpError: 'Při nahrávání souboru došlo k chybě HTTP (chybový stav: %1).', noUrlError: 'URL pro nahrání není zadána.', responseError: 'Nesprávná odpověď serveru.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/pt-br.js0000644000175000017500000000131214006075351024211 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'pt-br', { loadError: 'Um erro ocorreu durante a leitura do arquivo.', networkError: 'Um erro de rede ocorreu durante o envio do arquivo.', httpError404: 'Um erro HTTP ocorreu durante o envio do arquivo (404: Arquivo não encontrado).', httpError403: 'Um erro HTTP ocorreu durante o envio do arquivo (403: Proibido).', httpError: 'Um erro HTTP ocorreu durante o envio do arquivo (status do erro: %1)', noUrlError: 'A URL de upload não está definida.', responseError: 'Resposta incorreta do servidor.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/da.js0000644000175000017500000000122714006075351023556 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'da', { loadError: 'Der skete en fejl ved indlæsningen af filen.', networkError: 'Der skete en netværks fejl under uploadingen.', httpError404: 'Der skete en HTTP fejl under uploadingen (404: File not found).', httpError403: 'Der skete en HTTP fejl under uploadingen (403: Forbidden).', httpError: 'Der skete en HTTP fejl under uploadingen (error status: %1).', noUrlError: 'Upload URL er ikke defineret.', responseError: 'Ikke korrekt server svar.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/nl.js0000644000175000017500000000121214006075351023575 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'nl', { loadError: 'Fout tijdens lezen van bestand.', networkError: 'Netwerkfout tijdens uploaden van bestand.', httpError404: 'HTTP fout tijdens uploaden van bestand (404: Bestand niet gevonden).', httpError403: 'HTTP fout tijdens uploaden van bestand (403: Verboden).', httpError: 'HTTP fout tijdens uploaden van bestand (fout status: %1).', noUrlError: 'Upload URL is niet gedefinieerd.', responseError: 'Ongeldig antwoord van server.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/ku.js0000644000175000017500000000164714006075351023617 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'ku', { loadError: 'هەڵەیەک ڕوویدا لە ماوەی خوێندنەوەی پەڕگەکە.', networkError: 'هەڵەیەکی ڕایەڵە ڕوویدا لە ماوەی بارکردنی پەڕگەکە.', httpError404: 'هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (404: پەڕگەکە نەدۆزراوە).', httpError403: 'هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (403: قەدەغەکراو).', httpError: 'هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (دۆخی هەڵە: %1).', noUrlError: 'بەستەری پەڕگەکە پێناسە نەکراوە.', responseError: 'وەڵامێکی نادروستی سێرڤەر.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/lang/fr.js0000644000175000017500000000145414006075351023603 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'filetools', 'fr', { loadError: 'Une erreur est survenue lors de la lecture du fichier.', networkError: 'Une erreur réseau est survenue lors du téléversement du fichier.', httpError404: 'Une erreur HTTP est survenue durant le téléversement du fichier (404: Fichier non trouvé).', httpError403: 'Une erreur HTTP est survenue durant le téléversement du fichier (403: Accès refusé).', httpError: 'Une erreur HTTP est survenue durant le téléversement du fichier (statut de l\'erreur : %1).', noUrlError: 'L\'URL de téléversement n\'est pas spécifiée.', responseError: 'Réponse du serveur incorrecte.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/dev/0000755000175000017500000000000014006075351022467 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/filetools/dev/uploaddebugger.js0000644000175000017500000000237014006075351026020 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ 'use strict'; // Slow down the upload process. // This trick works only on Chrome. ( function() { XMLHttpRequest.prototype.baseSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function( data ) { var baseOnProgress = this.onprogress, baseOnLoad = this.onload; this.onprogress = function() {}; this.onload = function( evt ) { // Total file size. var total = 1163, step = Math.round( total / 10 ), loaded = 0, xhr = this; function progress() { setTimeout( function() { if ( xhr.aborted ) { return; } loaded += step; if ( loaded > total ) { loaded = total; } if ( loaded > step * 4 && xhr.responseText.indexOf( 'incorrectFile' ) > 0 ) { xhr.aborted = true; xhr.onerror(); } else if ( loaded < total ) { evt.loaded = loaded; baseOnProgress( { loaded: loaded } ); progress(); } else { baseOnLoad( evt ); } }, 300 ); } progress(); }; this.abort = function() { this.aborted = true; this.onabort(); }; this.baseSend( data ); }; } )();rt-4.4.4/devel/third-party/ckeditor-src/plugins/entities/0000755000175000017500000000000014006075351021535 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/entities/plugin.js0000644000175000017500000001746414006075351023405 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { // Basic HTML entities. var htmlbase = 'nbsp,gt,lt,amp'; var entities = // Latin-1 entities 'quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' + 'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' + 'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' + // Symbols 'fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,' + 'alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,' + 'forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,' + 'radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,' + 'equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,' + 'rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,' + // Other special characters 'circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,' + 'rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,' + 'euro'; // Latin letters entities var latin = 'Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,' + 'Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,' + 'Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,' + 'agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,' + 'ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,' + 'otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,' + 'OElig,oelig,Scaron,scaron,Yuml'; // Greek letters entities. var greek = 'Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,' + 'Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,' + 'beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,' + 'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' + 'upsih,piv'; // Create a mapping table between one character and its entity form from a list of entity names. // @param reverse {Boolean} Whether to create a reverse map from the entity string form to an actual character. function buildTable( entities, reverse ) { var table = {}, regex = []; // Entities that the browsers' DOM does not automatically transform to the // final character. var specialTable = { nbsp: '\u00A0', // IE | FF shy: '\u00AD', // IE gt: '\u003E', // IE | FF | -- | Opera lt: '\u003C', // IE | FF | Safari | Opera amp: '\u0026', // ALL apos: '\u0027', // IE quot: '\u0022' // IE }; entities = entities.replace( /\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g, function( match, entity ) { var org = reverse ? '&' + entity + ';' : specialTable[ entity ], result = reverse ? specialTable[ entity ] : '&' + entity + ';'; table[ org ] = result; regex.push( org ); return ''; } ); if ( !reverse && entities ) { // Transforms the entities string into an array. entities = entities.split( ',' ); // Put all entities inside a DOM element, transforming them to their // final characters. var div = document.createElement( 'div' ), chars; div.innerHTML = '&' + entities.join( ';&' ) + ';'; chars = div.innerHTML; div = null; // Add all characters to the table. for ( var i = 0; i < chars.length; i++ ) { var charAt = chars.charAt( i ); table[ charAt ] = '&' + entities[ i ] + ';'; regex.push( charAt ); } } table.regex = regex.join( reverse ? '|' : '' ); return table; } CKEDITOR.plugins.add( 'entities', { afterInit: function( editor ) { var config = editor.config; function getChar( character ) { return baseEntitiesTable[ character ]; } function getEntity( character ) { return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ? '&#' + character.charCodeAt( 0 ) + ';' : entitiesTable[ character ]; } var dataProcessor = editor.dataProcessor, htmlFilter = dataProcessor && dataProcessor.htmlFilter; if ( htmlFilter ) { // Mandatory HTML basic entities. var selectedEntities = []; if ( config.basicEntities !== false ) selectedEntities.push( htmlbase ); if ( config.entities ) { if ( selectedEntities.length ) selectedEntities.push( entities ); if ( config.entities_latin ) selectedEntities.push( latin ); if ( config.entities_greek ) selectedEntities.push( greek ); if ( config.entities_additional ) selectedEntities.push( config.entities_additional ); } var entitiesTable = buildTable( selectedEntities.join( ',' ) ); // Create the Regex used to find entities in the text, leave it matches nothing if entities are empty. var entitiesRegex = entitiesTable.regex ? '[' + entitiesTable.regex + ']' : 'a^'; delete entitiesTable.regex; if ( config.entities && config.entities_processNumerical ) entitiesRegex = '[^ -~]|' + entitiesRegex; entitiesRegex = new RegExp( entitiesRegex, 'g' ); // Decode entities that the browsers has transformed // at first place. var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ), true ), baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' ); htmlFilter.addRules( { text: function( text ) { return text.replace( baseEntitiesRegex, getChar ).replace( entitiesRegex, getEntity ); } }, { applyToAll: true, excludeNestedEditable: true } ); } } } ); } )(); /** * Whether to escape basic HTML entities in the document, including: * * * ` ` * * `>` * * `<` * * `&` * * **Note:** This option should not be changed unless when outputting a non-HTML data format like BBCode. * * config.basicEntities = false; * * @cfg {Boolean} [basicEntities=true] * @member CKEDITOR.config */ CKEDITOR.config.basicEntities = true; /** * Whether to use HTML entities in the editor output. * * config.entities = false; * * @cfg {Boolean} [entities=true] * @member CKEDITOR.config */ CKEDITOR.config.entities = true; /** * Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1) * to HTML entities. The list of entities can be found in the * [W3C HTML 4.01 Specification, section 24.2.1](http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1). * * config.entities_latin = false; * * @cfg {Boolean} [entities_latin=true] * @member CKEDITOR.config */ CKEDITOR.config.entities_latin = true; /** * Whether to convert some symbols, mathematical symbols, and Greek letters to * HTML entities. This may be more relevant for users typing text written in Greek. * The list of entities can be found in the * [W3C HTML 4.01 Specification, section 24.3.1](http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1). * * config.entities_greek = false; * * @cfg {Boolean} [entities_greek=true] * @member CKEDITOR.config */ CKEDITOR.config.entities_greek = true; /** * Whether to convert all remaining characters not included in the ASCII * character table to their relative decimal numeric representation of HTML entity. * When set to `force`, it will convert all entities into this format. * * For example the phrase: `'This is Chinese: 汉语.'` would be output * as: `'This is Chinese: 汉语.'` * * config.entities_processNumerical = true; * config.entities_processNumerical = 'force'; // Converts from ' ' into ' '; * * @cfg {Boolean/String} [entities_processNumerical=false] * @member CKEDITOR.config */ /** * A comma-separated list of additional entities to be used. Entity names * or numbers must be used in a form that excludes the `'&'` prefix and the `';'` ending. * * config.entities_additional = '#1049'; // Adds Cyrillic capital letter Short I (Й). * * @cfg {String} [entities_additional='#39' (The single quote (') character)] * @member CKEDITOR.config */ CKEDITOR.config.entities_additional = '#39'; rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/0000755000175000017500000000000014006075351021542 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/samples/0000755000175000017500000000000014006075351023206 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/samples/docprops.html0000644000175000017500000001762314006075351025736 0ustar domdom Document Properties — CKEditor Sample

      CKEditor Samples » Document Properties Plugin

      This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

      This sample shows how to configure CKEditor to use the Document Properties plugin. This plugin allows you to set the metadata of the page, including the page encoding, margins, meta tags, or background.

      Note: This plugin is to be used along with the fullPage configuration.

      The CKEditor instance below is inserted with a JavaScript call using the following code:

      CKEDITOR.replace( 'textarea_id', {
      	fullPage: true,
      	extraPlugins: 'docprops',
      	allowedContent: true
      });
      

      Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

      The allowedContent in the code above is set to true to disable content filtering. Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations.

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/plugin.js0000644000175000017500000000237214006075351023402 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.add( 'docprops', { requires: 'wysiwygarea,dialog,colordialog', // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'docprops,docprops-rtl', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { var cmd = new CKEDITOR.dialogCommand( 'docProps' ); // Only applicable on full page mode. cmd.modes = { wysiwyg: editor.config.fullPage }; cmd.allowedContent = { body: { styles: '*', attributes: 'dir' }, html: { attributes: 'lang,xml:lang' } }; cmd.requiredContent = 'body'; editor.addCommand( 'docProps', cmd ); CKEDITOR.dialog.add( 'docProps', this.path + 'dialogs/docprops.js' ); editor.ui.addButton && editor.ui.addButton( 'DocProps', { label: editor.lang.docprops.label, command: 'docProps', toolbar: 'document,30' } ); } } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/dialogs/0000755000175000017500000000000014006075351023164 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/dialogs/docprops.js0000644000175000017500000004363414006075351025365 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'docProps', function( editor ) { var lang = editor.lang.docprops, langCommon = editor.lang.common, metaHash = {}; function getDialogValue( dialogName, callback ) { var onOk = function() { releaseHandlers( this ); callback( this, this._.parentDialog ); }; var releaseHandlers = function( dialog ) { dialog.removeListener( 'ok', onOk ); dialog.removeListener( 'cancel', releaseHandlers ); }; var bindToDialog = function( dialog ) { dialog.on( 'ok', onOk ); dialog.on( 'cancel', releaseHandlers ); }; editor.execCommand( dialogName ); if ( editor._.storedDialogs.colordialog ) bindToDialog( editor._.storedDialogs.colordialog ); else { CKEDITOR.on( 'dialogDefinition', function( e ) { if ( e.data.name != dialogName ) return; var definition = e.data.definition; e.removeListener(); definition.onLoad = CKEDITOR.tools.override( definition.onLoad, function( orginal ) { return function() { bindToDialog( this ); definition.onLoad = orginal; if ( typeof orginal == 'function' ) orginal.call( this ); }; } ); } ); } } function handleOther() { var dialog = this.getDialog(), other = dialog.getContentElement( 'general', this.id + 'Other' ); if ( !other ) return; if ( this.getValue() == 'other' ) { other.getInputElement().removeAttribute( 'readOnly' ); other.focus(); other.getElement().removeClass( 'cke_disabled' ); } else { other.getInputElement().setAttribute( 'readOnly', true ); other.getElement().addClass( 'cke_disabled' ); } } function commitMeta( name, isHttp, value ) { return function( doc, html, head ) { var hash = metaHash, val = typeof value != 'undefined' ? value : this.getValue(); if ( !val && ( name in hash ) ) hash[ name ].remove(); else if ( val && ( name in hash ) ) hash[ name ].setAttribute( 'content', val ); else if ( val ) { var meta = new CKEDITOR.dom.element( 'meta', editor.document ); meta.setAttribute( isHttp ? 'http-equiv' : 'name', name ); meta.setAttribute( 'content', val ); head.append( meta ); } }; } function setupMeta( name, ret ) { return function() { var hash = metaHash, result = ( name in hash ) ? hash[ name ].getAttribute( 'content' ) || '' : ''; if ( ret ) return result; this.setValue( result ); return null; }; } function commitMargin( name ) { return function( doc, html, head, body ) { body.removeAttribute( 'margin' + name ); var val = this.getValue(); if ( val !== '' ) body.setStyle( 'margin-' + name, CKEDITOR.tools.cssLength( val ) ); else body.removeStyle( 'margin-' + name ); }; } function createMetaHash( doc ) { var hash = {}, metas = doc.getElementsByTag( 'meta' ), count = metas.count(); for ( var i = 0; i < count; i++ ) { var meta = metas.getItem( i ); hash[ meta.getAttribute( meta.hasAttribute( 'http-equiv' ) ? 'http-equiv' : 'name' ).toLowerCase() ] = meta; } return hash; } // We cannot just remove the style from the element, as it might be affected from non-inline stylesheets. // To get the proper result, we should manually set the inline style to its default value. function resetStyle( element, prop, resetVal ) { element.removeStyle( prop ); if ( element.getComputedStyle( prop ) != resetVal ) element.setStyle( prop, resetVal ); } // Utilty to shorten the creation of color fields in the dialog. var colorField = function( id, label, fieldProps ) { return { type: 'hbox', padding: 0, widths: [ '60%', '40%' ], children: [ CKEDITOR.tools.extend( { type: 'text', id: id, label: lang[ label ] }, fieldProps || {}, 1 ), { type: 'button', id: id + 'Choose', label: lang.chooseColor, className: 'colorChooser', onClick: function() { var self = this; getDialogValue( 'colordialog', function( colorDialog ) { var dialog = self.getDialog(); dialog.getContentElement( dialog._.currentTabId, id ).setValue( colorDialog.getContentElement( 'picker', 'selectedColor' ).getValue() ); } ); } } ] }; }; var previewSrc = 'javascript:' + // jshint ignore:line 'void((function(){' + encodeURIComponent( 'document.open();' + ( CKEDITOR.env.ie ? '(' + CKEDITOR.tools.fixDomain + ')();' : '' ) + 'document.write( \'' + lang.previewHtml + '\' );' + 'document.close();' ) + '})())'; return { title: lang.title, minHeight: 330, minWidth: 500, onShow: function() { var doc = editor.document, html = doc.getElementsByTag( 'html' ).getItem( 0 ), head = doc.getHead(), body = doc.getBody(); metaHash = createMetaHash( doc ); this.setupContent( doc, html, head, body ); }, onHide: function() { metaHash = {}; }, onOk: function() { var doc = editor.document, html = doc.getElementsByTag( 'html' ).getItem( 0 ), head = doc.getHead(), body = doc.getBody(); this.commitContent( doc, html, head, body ); }, contents: [ { id: 'general', label: langCommon.generalTab, elements: [ { type: 'text', id: 'title', label: lang.docTitle, setup: function( doc ) { this.setValue( doc.getElementsByTag( 'title' ).getItem( 0 ).data( 'cke-title' ) ); }, commit: function( doc, html, head, body, isPreview ) { if ( isPreview ) return; doc.getElementsByTag( 'title' ).getItem( 0 ).data( 'cke-title', this.getValue() ); } }, { type: 'hbox', children: [ { type: 'select', id: 'dir', label: langCommon.langDir, style: 'width: 100%', items: [ [ langCommon.notSet, '' ], [ langCommon.langDirLtr, 'ltr' ], [ langCommon.langDirRtl, 'rtl' ] ], setup: function( doc, html, head, body ) { this.setValue( body.getDirection() || '' ); }, commit: function( doc, html, head, body ) { var val = this.getValue(); if ( val ) body.setAttribute( 'dir', val ); else body.removeAttribute( 'dir' ); body.removeStyle( 'direction' ); } }, { type: 'text', id: 'langCode', label: langCommon.langCode, setup: function( doc, html ) { this.setValue( html.getAttribute( 'xml:lang' ) || html.getAttribute( 'lang' ) || '' ); }, commit: function( doc, html, head, body, isPreview ) { if ( isPreview ) return; var val = this.getValue(); if ( val ) html.setAttributes( { 'xml:lang': val, lang: val } ); else html.removeAttributes( { 'xml:lang': 1, lang: 1 } ); } } ] }, { type: 'hbox', children: [ { type: 'select', id: 'charset', label: lang.charset, style: 'width: 100%', items: [ [ langCommon.notSet, '' ], [ lang.charsetASCII, 'us-ascii' ], [ lang.charsetCE, 'iso-8859-2' ], [ lang.charsetCT, 'big5' ], [ lang.charsetCR, 'iso-8859-5' ], [ lang.charsetGR, 'iso-8859-7' ], [ lang.charsetJP, 'iso-2022-jp' ], [ lang.charsetKR, 'iso-2022-kr' ], [ lang.charsetTR, 'iso-8859-9' ], [ lang.charsetUN, 'utf-8' ], [ lang.charsetWE, 'iso-8859-1' ], [ lang.other, 'other' ] ], 'default': '', onChange: function() { this.getDialog().selectedCharset = this.getValue() != 'other' ? this.getValue() : ''; handleOther.call( this ); }, setup: function() { this.metaCharset = ( 'charset' in metaHash ); var func = setupMeta( this.metaCharset ? 'charset' : 'content-type', 1, 1 ), val = func.call( this ); !this.metaCharset && val.match( /charset=[^=]+$/ ) && ( val = val.substring( val.indexOf( '=' ) + 1 ) ); if ( val ) { this.setValue( val.toLowerCase() ); if ( !this.getValue() ) { this.setValue( 'other' ); var other = this.getDialog().getContentElement( 'general', 'charsetOther' ); other && other.setValue( val ); } this.getDialog().selectedCharset = val; } handleOther.call( this ); }, commit: function( doc, html, head, body, isPreview ) { if ( isPreview ) return; var value = this.getValue(), other = this.getDialog().getContentElement( 'general', 'charsetOther' ); value == 'other' && ( value = other ? other.getValue() : '' ); value && !this.metaCharset && ( value = ( metaHash[ 'content-type' ] ? metaHash[ 'content-type' ].getAttribute( 'content' ).split( ';' )[ 0 ] : 'text/html' ) + '; charset=' + value ); var func = commitMeta( this.metaCharset ? 'charset' : 'content-type', 1, value ); func.call( this, doc, html, head ); } }, { type: 'text', id: 'charsetOther', label: lang.charsetOther, onChange: function() { this.getDialog().selectedCharset = this.getValue(); } } ] }, { type: 'hbox', children: [ { type: 'select', id: 'docType', label: lang.docType, style: 'width: 100%', items: [ [ langCommon.notSet, '' ], [ 'XHTML 1.1', '' ], [ 'XHTML 1.0 Transitional', '' ], [ 'XHTML 1.0 Strict', '' ], [ 'XHTML 1.0 Frameset', '' ], [ 'HTML 5', '' ], [ 'HTML 4.01 Transitional', '' ], [ 'HTML 4.01 Strict', '' ], [ 'HTML 4.01 Frameset', '' ], [ 'HTML 3.2', '' ], [ 'HTML 2.0', '' ], [ lang.other, 'other' ] ], onChange: handleOther, setup: function() { if ( editor.docType ) { this.setValue( editor.docType ); if ( !this.getValue() ) { this.setValue( 'other' ); var other = this.getDialog().getContentElement( 'general', 'docTypeOther' ); other && other.setValue( editor.docType ); } } handleOther.call( this ); }, commit: function( doc, html, head, body, isPreview ) { if ( isPreview ) return; var value = this.getValue(), other = this.getDialog().getContentElement( 'general', 'docTypeOther' ); editor.docType = value == 'other' ? ( other ? other.getValue() : '' ) : value; } }, { type: 'text', id: 'docTypeOther', label: lang.docTypeOther } ] }, { type: 'checkbox', id: 'xhtmlDec', label: lang.xhtmlDec, setup: function() { this.setValue( !!editor.xmlDeclaration ); }, commit: function( doc, html, head, body, isPreview ) { if ( isPreview ) return; if ( this.getValue() ) { editor.xmlDeclaration = ''; html.setAttribute( 'xmlns', 'http://www.w3.org/1999/xhtml' ); } else { editor.xmlDeclaration = ''; html.removeAttribute( 'xmlns' ); } } } ] }, { id: 'design', label: lang.design, elements: [ { type: 'hbox', widths: [ '60%', '40%' ], children: [ { type: 'vbox', children: [ colorField( 'txtColor', 'txtColor', { setup: function( doc, html, head, body ) { this.setValue( body.getComputedStyle( 'color' ) ); }, commit: function( doc, html, head, body, isPreview ) { if ( this.isChanged() || isPreview ) { body.removeAttribute( 'text' ); var val = this.getValue(); if ( val ) body.setStyle( 'color', val ); else body.removeStyle( 'color' ); } } } ), colorField( 'bgColor', 'bgColor', { setup: function( doc, html, head, body ) { var val = body.getComputedStyle( 'background-color' ) || ''; this.setValue( val == 'transparent' ? '' : val ); }, commit: function( doc, html, head, body, isPreview ) { if ( this.isChanged() || isPreview ) { body.removeAttribute( 'bgcolor' ); var val = this.getValue(); if ( val ) body.setStyle( 'background-color', val ); else resetStyle( body, 'background-color', 'transparent' ); } } } ), { type: 'hbox', widths: [ '60%', '40%' ], padding: 1, children: [ { type: 'text', id: 'bgImage', label: lang.bgImage, setup: function( doc, html, head, body ) { var val = body.getComputedStyle( 'background-image' ) || ''; if ( val == 'none' ) val = ''; else { val = val.replace( /url\(\s*(["']?)\s*([^\)]*)\s*\1\s*\)/i, function( match, quote, url ) { return url; } ); } this.setValue( val ); }, commit: function( doc, html, head, body ) { body.removeAttribute( 'background' ); var val = this.getValue(); if ( val ) body.setStyle( 'background-image', 'url(' + val + ')' ); else resetStyle( body, 'background-image', 'none' ); } }, { type: 'button', id: 'bgImageChoose', label: langCommon.browseServer, style: 'display:inline-block;margin-top:10px;', hidden: true, filebrowser: 'design:bgImage' } ] }, { type: 'checkbox', id: 'bgFixed', label: lang.bgFixed, setup: function( doc, html, head, body ) { this.setValue( body.getComputedStyle( 'background-attachment' ) == 'fixed' ); }, commit: function( doc, html, head, body ) { if ( this.getValue() ) body.setStyle( 'background-attachment', 'fixed' ); else resetStyle( body, 'background-attachment', 'scroll' ); } } ] }, { type: 'vbox', children: [ { type: 'html', id: 'marginTitle', html: '
      ' + lang.margin + '
      ' }, { type: 'text', id: 'marginTop', label: lang.marginTop, style: 'width: 80px; text-align: center', align: 'center', inputStyle: 'text-align: center', setup: function( doc, html, head, body ) { this.setValue( body.getStyle( 'margin-top' ) || body.getAttribute( 'margintop' ) || '' ); }, commit: commitMargin( 'top' ) }, { type: 'hbox', children: [ { type: 'text', id: 'marginLeft', label: lang.marginLeft, style: 'width: 80px; text-align: center', align: 'center', inputStyle: 'text-align: center', setup: function( doc, html, head, body ) { this.setValue( body.getStyle( 'margin-left' ) || body.getAttribute( 'marginleft' ) || '' ); }, commit: commitMargin( 'left' ) }, { type: 'text', id: 'marginRight', label: lang.marginRight, style: 'width: 80px; text-align: center', align: 'center', inputStyle: 'text-align: center', setup: function( doc, html, head, body ) { this.setValue( body.getStyle( 'margin-right' ) || body.getAttribute( 'marginright' ) || '' ); }, commit: commitMargin( 'right' ) } ] }, { type: 'text', id: 'marginBottom', label: lang.marginBottom, style: 'width: 80px; text-align: center', align: 'center', inputStyle: 'text-align: center', setup: function( doc, html, head, body ) { this.setValue( body.getStyle( 'margin-bottom' ) || body.getAttribute( 'marginbottom' ) || '' ); }, commit: commitMargin( 'bottom' ) } ] } ] } ] }, { id: 'meta', label: lang.meta, elements: [ { type: 'textarea', id: 'metaKeywords', label: lang.metaKeywords, setup: setupMeta( 'keywords' ), commit: commitMeta( 'keywords' ) }, { type: 'textarea', id: 'metaDescription', label: lang.metaDescription, setup: setupMeta( 'description' ), commit: commitMeta( 'description' ) }, { type: 'text', id: 'metaAuthor', label: lang.metaAuthor, setup: setupMeta( 'author' ), commit: commitMeta( 'author' ) }, { type: 'text', id: 'metaCopyright', label: lang.metaCopyright, setup: setupMeta( 'copyright' ), commit: commitMeta( 'copyright' ) } ] }, { id: 'preview', label: langCommon.preview, elements: [ { type: 'html', id: 'previewHtml', html: '', onLoad: function() { var iframe = this.getElement(); this.getDialog().on( 'selectPage', function( ev ) { if ( ev.data.page == 'preview' ) { var self = this; setTimeout( function() { var doc = iframe.getFrameDocument(), html = doc.getElementsByTag( 'html' ).getItem( 0 ), head = doc.getHead(), body = doc.getBody(); self.commitContent( doc, html, head, body, 1 ); }, 50 ); } } ); iframe.getAscendant( 'table' ).setStyle( 'height', '100%' ); } } ] } ] }; } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/0000755000175000017500000000000014006075351022463 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/bg.js0000644000175000017500000000333514006075351023415 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'bg', { bgColor: 'Фон', bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'Background Image URL', // MISSING charset: 'Кодова таблица', charsetASCII: 'ASCII', charsetCE: 'Централна европейска', charsetCR: 'Cyrillic', // MISSING charsetCT: 'Китайски традиционен', charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Друга кодова таблица', charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Изберете', design: 'Дизайн', docTitle: 'Заглавие на страницата', docType: 'Document Type Heading', // MISSING docTypeOther: 'Other Document Type Heading', // MISSING label: 'Настройки на документа', margin: 'Page Margins', // MISSING marginBottom: 'Долу', marginLeft: 'Ляво', marginRight: 'Дясно', marginTop: 'Горе', meta: 'Мета етикети', metaAuthor: 'Author', // MISSING metaCopyright: 'Copyright', // MISSING metaDescription: 'Document Description', // MISSING metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING other: 'Други...', previewHtml: '

      This is some sample text. You are using CKEditor.

      ', // MISSING title: 'Настройки на документа', txtColor: 'Цвят на шрифт', xhtmlDec: 'Include XHTML Declarations' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/cy.js0000644000175000017500000000257714006075351023447 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'cy', { bgColor: 'Lliw Cefndir', bgFixed: 'Cefndir Sefydlog (Ddim yn Sgrolio)', bgImage: 'URL Delwedd Cefndir', charset: 'Amgodio Set Nodau', charsetASCII: 'ASCII', charsetCE: 'Ewropeaidd Canol', charsetCR: 'Syrilig', charsetCT: 'Tsieinëeg Traddodiadol (Big5)', charsetGR: 'Groeg', charsetJP: 'Siapanëeg', charsetKR: 'Corëeg', charsetOther: 'Amgodio Set Nodau Arall', charsetTR: 'Tyrceg', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Ewropeaidd Gorllewinol', chooseColor: 'Dewis', design: 'Cynllunio', docTitle: 'Teitl y Dudalen', docType: 'Pennawd Math y Ddogfen', docTypeOther: 'Pennawd Math y Ddogfen Arall', label: 'Priodweddau Dogfen', margin: 'Ffin y Dudalen', marginBottom: 'Gwaelod', marginLeft: 'Chwith', marginRight: 'Dde', marginTop: 'Brig', meta: 'Tagiau Meta', metaAuthor: 'Awdur', metaCopyright: 'Hawlfraint', metaDescription: 'Disgrifiad y Ddogfen', metaKeywords: 'Allweddeiriau Indecsio Dogfen (gwahanu gyda choma)', other: 'Arall...', previewHtml: '

      Dyma ychydig o destun sampl. Rydych chi\'n defnyddio CKEditor.

      ', title: 'Priodweddau Dogfen', txtColor: 'Lliw y Testun', xhtmlDec: 'Cynnwys Datganiadau XHTML' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/no.js0000644000175000017500000000244214006075351023437 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'no', { bgColor: 'Bakgrunnsfarge', bgFixed: 'Lås bakgrunnsbilde', bgImage: 'URL for bakgrunnsbilde', charset: 'Tegnsett', charsetASCII: 'ASCII', charsetCE: 'Sentraleuropeisk', charsetCR: 'Kyrillisk', charsetCT: 'Tradisonell kinesisk(Big5)', charsetGR: 'Gresk', charsetJP: 'Japansk', charsetKR: 'Koreansk', charsetOther: 'Annet tegnsett', charsetTR: 'Tyrkisk', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Vesteuropeisk', chooseColor: 'Velg', design: 'Design', docTitle: 'Sidetittel', docType: 'Dokumenttype header', docTypeOther: 'Annet dokumenttype header', label: 'Dokumentegenskaper', margin: 'Sidemargin', marginBottom: 'Bunn', marginLeft: 'Venstre', marginRight: 'Høyre', marginTop: 'Topp', meta: 'Meta-data', metaAuthor: 'Forfatter', metaCopyright: 'Kopirett', metaDescription: 'Dokumentbeskrivelse', metaKeywords: 'Dokument nøkkelord (kommaseparert)', other: '', previewHtml: '

      Dette er en eksempeltekst. Du bruker CKEditor.

      ', title: 'Dokumentegenskaper', txtColor: 'Tekstfarge', xhtmlDec: 'Inkluder XHTML-deklarasjon' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/hr.js0000644000175000017500000000253714006075351023441 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'hr', { bgColor: 'Boja pozadine', bgFixed: 'Pozadine se ne pomiče', bgImage: 'URL slike pozadine', charset: 'Enkodiranje znakova', charsetASCII: 'ASCII', charsetCE: 'Središnja Europa', charsetCR: 'Ćirilica', charsetCT: 'Tradicionalna kineska (Big5)', charsetGR: 'Grčka', charsetJP: 'Japanska', charsetKR: 'Koreanska', charsetOther: 'Ostalo enkodiranje znakova', charsetTR: 'Turska', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Zapadna Europa', chooseColor: 'Odaberi', design: 'Dizajn', docTitle: 'Naslov stranice', docType: 'Zaglavlje vrste dokumenta', docTypeOther: 'Ostalo zaglavlje vrste dokumenta', label: 'Svojstva dokumenta', margin: 'Margine stranice', marginBottom: 'Dolje', marginLeft: 'Lijevo', marginRight: 'Desno', marginTop: 'Vrh', meta: 'Meta Data', metaAuthor: 'Autor', metaCopyright: 'Autorska prava', metaDescription: 'Opis dokumenta', metaKeywords: 'Ključne riječi dokumenta (odvojene zarezom)', other: '', previewHtml: '

      Ovo je neki primjer teksta. Vi koristite CKEditor.

      ', title: 'Svojstva dokumenta', txtColor: 'Boja teksta', xhtmlDec: 'Ubaci XHTML deklaracije' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/th.js0000644000175000017500000000426014006075351023436 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'th', { bgColor: 'สีพื้นหลัง', bgFixed: 'พื้นหลังแบบไม่มีแถบเลื่อน', bgImage: 'ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)', charset: 'ชุดตัวอักษร', charsetASCII: 'ASCII', charsetCE: 'Central European', charsetCR: 'Cyrillic', charsetCT: 'Chinese Traditional (Big5)', charsetGR: 'Greek', charsetJP: 'Japanese', charsetKR: 'Korean', charsetOther: 'ชุดตัวอักษรอื่นๆ', charsetTR: 'Turkish', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Western European', chooseColor: 'Choose', design: 'ออกแบบ', docTitle: 'ชื่อไตเติ้ล', docType: 'ประเภทของเอกสาร', docTypeOther: 'ประเภทเอกสารอื่นๆ', label: 'คุณสมบัติของเอกสาร', margin: 'ระยะขอบของหน้าเอกสาร', marginBottom: 'ด้านล่าง', marginLeft: 'ด้านซ้าย', marginRight: 'ด้านขวา', marginTop: 'ด้านบน', meta: 'ข้อมูลสำหรับเสิร์ชเอนจิ้น', metaAuthor: 'ผู้สร้างเอกสาร', metaCopyright: 'สงวนลิขสิทธิ์', metaDescription: 'ประโยคอธิบายเกี่ยวกับเอกสาร', metaKeywords: 'คำสำคัญอธิบายเอกสาร (คั่นคำด้วย คอมม่า)', other: '<อื่น ๆ>', previewHtml: '

      นี่เป็น ข้อความตัวอย่าง. คุณกำลังใช้งาน CKEditor.

      ', title: 'คุณสมบัติของเอกสาร', txtColor: 'สีตัวอักษร', xhtmlDec: 'รวมเอา XHTML Declarations ไว้ด้วย' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ar.js0000644000175000017500000000315014006075351023422 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ar', { bgColor: 'لون الخلفية', bgFixed: 'جعلها علامة مائية', bgImage: 'رابط الصورة الخلفية', charset: 'ترميز الحروف', charsetASCII: 'ASCII', charsetCE: 'أوروبا الوسطى', charsetCR: 'السيريلية', charsetCT: 'الصينية التقليدية (Big5)', charsetGR: 'اليونانية', charsetJP: 'اليابانية', charsetKR: 'الكورية', charsetOther: 'ترميز آخر', charsetTR: 'التركية', charsetUN: 'Unicode (UTF-8)', charsetWE: 'أوروبا الغربية', chooseColor: 'اختر', design: 'تصميم', docTitle: 'عنوان الصفحة', docType: 'ترويسة نوع الصفحة', docTypeOther: 'ترويسة نوع صفحة أخرى', label: 'خصائص الصفحة', margin: 'هوامش الصفحة', marginBottom: 'سفلي', marginLeft: 'أيسر', marginRight: 'أيمن', marginTop: 'علوي', meta: 'المعرّفات الرأسية', metaAuthor: 'الكاتب', metaCopyright: 'المالك', metaDescription: 'وصف الصفحة', metaKeywords: 'الكلمات الأساسية (مفصولة بفواصل)َ', other: '<أخرى>', previewHtml: '

      هذه مجرد كتابة بسيطةمن أجل التمثيل. CKEditor.

      ', title: 'خصائص الصفحة', txtColor: 'لون النص', xhtmlDec: 'تضمين إعلانات لغة XHTMLَ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/sk.js0000644000175000017500000000262214006075351023440 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'sk', { bgColor: 'Farba pozadia', bgFixed: 'Fixné pozadie', bgImage: 'URL obrázka na pozadí', charset: 'Znaková sada', charsetASCII: 'ASCII', charsetCE: 'Stredoeurópska', charsetCR: 'Cyrillika', charsetCT: 'Čínština tradičná (Big5)', charsetGR: 'Gréčtina', charsetJP: 'Japončina', charsetKR: 'Korejčina', charsetOther: 'Iná znaková sada', charsetTR: 'Turečtina', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Západná európa', chooseColor: 'Vybrať', design: 'Design', docTitle: 'Titulok stránky', docType: 'Typ záhlavia dokumentu', docTypeOther: 'Iný typ záhlavia dokumentu', label: 'Vlastnosti dokumentu', margin: 'Okraje stránky (margins)', marginBottom: 'Dolný', marginLeft: 'Ľavý', marginRight: 'Pravý', marginTop: 'Horný', meta: 'Meta značky', metaAuthor: 'Autor', metaCopyright: 'Autorské práva (copyright)', metaDescription: 'Popis dokumentu', metaKeywords: 'Indexované kľúčové slová dokumentu (oddelené čiarkou)', other: 'Iný...', previewHtml: '

      Toto je nejaký ukážkový text. Používate CKEditor.

      ', title: 'Vlastnosti dokumentu', txtColor: 'Farba textu', xhtmlDec: 'Vložiť deklarácie XHTML' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ro.js0000644000175000017500000000300014006075351023432 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ro', { bgColor: 'Culoarea fundalului (Background Color)', bgFixed: 'Fundal neflotant, fix (Non-scrolling Background)', bgImage: 'URL-ul imaginii din fundal (Background Image URL)', charset: 'Encoding setului de caractere', charsetASCII: 'ASCII', charsetCE: 'Europa Centrală', charsetCR: 'Chirilic', charsetCT: 'Chinezesc tradiţional (Big5)', charsetGR: 'Grecesc', charsetJP: 'Japonez', charsetKR: 'Corean', charsetOther: 'Alt encoding al setului de caractere', charsetTR: 'Turcesc', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Vest european', chooseColor: 'Alege', design: 'Proiect', docTitle: 'Titlul paginii', docType: 'Tip de document de antet', docTypeOther: 'Alt Document Type Heading', label: 'Proprietăţile documentului', margin: 'Marginile paginii', marginBottom: 'Jos', marginLeft: 'Stânga', marginRight: 'Dreapta', marginTop: 'Sus', meta: 'Tag-uri Meta', metaAuthor: 'Autor', metaCopyright: 'Drepturi de autor', metaDescription: 'Descrierea documentului', metaKeywords: 'Cuvinte cheie după care se va indexa documentul (separate prin virgulă)', other: 'Altele...', previewHtml: '

      Acesta este un text exemplu. Folosiți CKEditor.

      ', title: 'Proprietăţile documentului', txtColor: 'Culoarea textului', xhtmlDec: 'Include declaraţii XHTML' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/en-ca.js0000644000175000017500000000335614006075351024013 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'en-ca', { bgColor: 'Background Color', // MISSING bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'Background Image URL', // MISSING charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Other Character Set Encoding', // MISSING charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', // MISSING design: 'Design', // MISSING docTitle: 'Page Title', // MISSING docType: 'Document Type Heading', // MISSING docTypeOther: 'Other Document Type Heading', // MISSING label: 'Document Properties', // MISSING margin: 'Page Margins', // MISSING marginBottom: 'Bottom', // MISSING marginLeft: 'Left', // MISSING marginRight: 'Right', // MISSING marginTop: 'Top', // MISSING meta: 'Meta Tags', // MISSING metaAuthor: 'Author', // MISSING metaCopyright: 'Copyright', // MISSING metaDescription: 'Document Description', // MISSING metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING other: 'Other...', // MISSING previewHtml: '

      This is some sample text. You are using CKEditor.

      ', // MISSING title: 'Document Properties', // MISSING txtColor: 'Text Color', // MISSING xhtmlDec: 'Include XHTML Declarations' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ug.js0000644000175000017500000000346114006075351023440 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ug', { bgColor: 'تەگلىك رەڭگى', bgFixed: 'تەگلىك سۈرەتنى دومىلاتما', bgImage: 'تەگلىك سۈرەت', charset: 'ھەرپ كودلىنىشى', charsetASCII: 'ASCII', charsetCE: 'ئوتتۇرا ياۋرۇپا', charsetCR: 'سىلاۋيانچە', charsetCT: 'مۇرەككەپ خەنزۇچە (Big5)', charsetGR: 'گىرېكچە', charsetJP: 'ياپونچە', charsetKR: 'كۆرىيەچە', charsetOther: 'باشقا ھەرپ كودلىنىشى', charsetTR: 'تۈركچە', charsetUN: 'يۇنىكود (UTF-8)', charsetWE: 'غەربىي ياۋرۇپا', chooseColor: 'تاللاڭ', design: 'لايىھە', docTitle: 'بەت ماۋزۇسى', docType: 'پۈتۈك تىپى', docTypeOther: 'باشقا پۈتۈك تىپى', label: 'بەت خاسلىقى', margin: 'بەت گىرۋەك', marginBottom: 'ئاستى', marginLeft: 'سول', marginRight: 'ئوڭ', marginTop: 'ئۈستى', meta: 'مېتا سانلىق مەلۇمات', metaAuthor: 'يازغۇچى', metaCopyright: 'نەشر ھوقۇقى', metaDescription: 'بەت يۈزى چۈشەندۈرۈشى', metaKeywords: 'بەت يۈزى ئىندېكىس ھالقىلىق سۆزى (ئىنگلىزچە پەش [,] بىلەن ئايرىلىدۇ)', other: 'باشقا', previewHtml: '

      بۇ بىر قىسىم كۆرسەتمىگە ئىشلىتىدىغان تېكىست سىز نۆۋەتتە CKEditor.نى ئىشلىتىۋاتىسىز.

      ', title: 'بەت خاسلىقى', txtColor: 'تېكىست رەڭگى', xhtmlDec: 'XHTML ئېنىقلىمىسىنى ئۆز ئىچىگە ئالىدۇ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/el.js0000644000175000017500000000372714006075351023432 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'el', { bgColor: 'Χρώμα Φόντου', bgFixed: 'Φόντο Χωρίς Κύλιση (Σταθερό)', bgImage: 'Διεύθυνση Εικόνας Φόντου', charset: 'Κωδικοποίηση Χαρακτήρων', charsetASCII: 'ASCII', charsetCE: 'Κεντρικής Ευρώπης', charsetCR: 'Κυριλλική', charsetCT: 'Παραδοσιακή Κινέζικη (Big5)', charsetGR: 'Ελληνική', charsetJP: 'Ιαπωνική', charsetKR: 'Κορεάτικη', charsetOther: 'Άλλη Κωδικοποίηση Χαρακτήρων', charsetTR: 'Τουρκική', charsetUN: 'Διεθνής (UTF-8)', charsetWE: 'Δυτικής Ευρώπης', chooseColor: 'Επιλέξτε', design: 'Σχεδιασμός', docTitle: 'Τίτλος Σελίδας', docType: 'Κεφαλίδα Τύπου Εγγράφου', docTypeOther: 'Άλλη Κεφαλίδα Τύπου Εγγράφου', label: 'Ιδιότητες Εγγράφου', margin: 'Περιθώρια Σελίδας', marginBottom: 'Κάτω', marginLeft: 'Αριστερά', marginRight: 'Δεξιά', marginTop: 'Κορυφή', meta: 'Μεταδεδομένα', metaAuthor: 'Δημιουργός', metaCopyright: 'Πνευματικά Δικαιώματα', metaDescription: 'Περιγραφή Εγγράφου', metaKeywords: 'Λέξεις κλειδιά δείκτες εγγράφου (διαχωρισμός με κόμμα)', other: 'Άλλο...', previewHtml: '

      Αυτό είναι ένα παραδειγματικό κείμενο. Χρησιμοποιείτε το CKEditor.

      ', title: 'Ιδιότητες Εγγράφου', txtColor: 'Χρώμα Κειμένου', xhtmlDec: 'Να Συμπεριληφθούν οι Δηλώσεις XHTML' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/de.js0000644000175000017500000000262114006075351023412 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'de', { bgColor: 'Hintergrundfarbe', bgFixed: 'Nichtrollender (feststehender) Hintergrund', bgImage: 'Hintergrundbild-URL', charset: 'Zeichensatzkodierung', charsetASCII: 'ASCII', charsetCE: 'Zentraleuropäisch', charsetCR: 'Kyrillisch', charsetCT: 'Traditionelles Chinesisch (Big5)', charsetGR: 'Griechisch', charsetJP: 'Japanisch', charsetKR: 'Koreanisch', charsetOther: 'Andere Zeichensatzkodierung', charsetTR: 'Türkisch', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Westeuropäisch', chooseColor: 'Auswählen', design: 'Design', docTitle: 'Seitentitel', docType: 'Dokumententypüberschrift', docTypeOther: 'Andere Dokumententypüberschrift', label: 'Dokumenteigenschaften', margin: 'Seitenränder', marginBottom: 'Unten', marginLeft: 'Links', marginRight: 'Rechts', marginTop: 'Oben', meta: 'Metadaten', metaAuthor: 'Autor', metaCopyright: 'Copyright', metaDescription: 'Dokumentbeschreibung', metaKeywords: 'Schlüsselwörter (durch Komma getrennt)', other: 'Andere...', previewHtml: '

      Das ist ein Beispieltext. Du schreibst in CKEditor.

      ', title: 'Dokumenteigenschaften', txtColor: 'Textfarbe', xhtmlDec: 'Beziehe XHTML Deklarationen ein' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/uk.js0000644000175000017500000000353514006075351023446 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'uk', { bgColor: 'Колір тла', bgFixed: 'Тло без прокрутки', bgImage: 'URL зображення тла', charset: 'Кодування набору символів', charsetASCII: 'ASCII', charsetCE: 'Центрально-європейська', charsetCR: 'Кирилиця', charsetCT: 'Китайська традиційна (Big5)', charsetGR: 'Грецька', charsetJP: 'Японська', charsetKR: 'Корейська', charsetOther: 'Інше кодування набору символів', charsetTR: 'Турецька', charsetUN: 'Юнікод (UTF-8)', charsetWE: 'Західно-европейская', chooseColor: 'Обрати', design: 'Дизайн', docTitle: 'Заголовок сторінки', docType: 'Заголовок типу документу', docTypeOther: 'Інший заголовок типу документу', label: 'Властивості документа', margin: 'Відступи сторінки', marginBottom: 'Нижній', marginLeft: 'Лівий', marginRight: 'Правий', marginTop: 'Верхній', meta: 'Мета дані', metaAuthor: 'Автор', metaCopyright: 'Авторські права', metaDescription: 'Опис документа', metaKeywords: 'Ключові слова документа (розділені комами)', other: '<інший>', previewHtml: '

      Це прикладтексту. Ви використовуєте CKEditor .

      ', title: 'Властивості документа', txtColor: 'Колір тексту', xhtmlDec: 'Ввімкнути XHTML оголошення' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/sr-latn.js0000644000175000017500000000300214006075351024374 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'sr-latn', { bgColor: 'Boja pozadine', bgFixed: 'Fiksirana pozadina', bgImage: 'URL pozadinske slike', charset: 'Kodiranje skupa karaktera', charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Ostala kodiranja skupa karaktera', charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'Naslov stranice', docType: 'Zaglavlje tipa dokumenta', docTypeOther: 'Ostala zaglavlja tipa dokumenta', label: 'Osobine dokumenta', margin: 'Margine stranice', marginBottom: 'Donja', marginLeft: 'Leva', marginRight: 'Desna', marginTop: 'Gornja', meta: 'Metapodaci', metaAuthor: 'Autor', metaCopyright: 'Autorska prava', metaDescription: 'Opis dokumenta', metaKeywords: 'Ključne reci za indeksiranje dokumenta (razdvojene zarezima)', other: '<остало>', previewHtml: '

      This is some sample text. You are using CKEditor.

      ', // MISSING title: 'Osobine dokumenta', txtColor: 'Boja teksta', xhtmlDec: 'Ukljuci XHTML deklaracije' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/km.js0000644000175000017500000000435214006075351023434 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'km', { bgColor: 'ពណ៌​ផ្ទៃ​ក្រោយ', bgFixed: 'ផ្ទៃ​ក្រោយ​គ្មាន​ការ​រំកិល (នឹង​ថ្កល់)', bgImage: 'URL រូបភាព​ផ្ទៃ​ក្រោយ', charset: 'ការ​អ៊ិនកូដ​តួ​អក្សរ', charsetASCII: 'ASCII', charsetCE: 'អឺរ៉ុប​កណ្ដាល', charsetCR: 'Cyrillic', charsetCT: 'ចិន​បុរាណ (Big5)', charsetGR: 'ក្រិក', charsetJP: 'ជប៉ុន', charsetKR: 'កូរ៉េ', charsetOther: 'កំណត់លេខកូតភាសាផ្សេងទៀត', charsetTR: 'ទួរគី', charsetUN: 'យូនីកូដ (UTF-8)', charsetWE: 'អឺរ៉ុប​ខាង​លិច', chooseColor: 'រើស', design: 'រចនា', docTitle: 'ចំណងជើងទំព័រ', docType: 'ប្រភេទក្បាលទំព័រ​ឯកសារ', docTypeOther: 'ប្រភេទក្បាលទំព័រឯកសារ​ផ្សេងទៀត', label: 'លក្ខណៈ​សម្បត្តិ​ឯកសារ', margin: 'រឹម​ទំព័រ', marginBottom: 'បាត​ក្រោម', marginLeft: 'ឆ្វេង', marginRight: 'ស្ដាំ', marginTop: 'លើ', meta: 'ស្លាក​មេតា', metaAuthor: 'អ្នកនិពន្ធ', metaCopyright: 'រក្សាសិទ្ធិ', metaDescription: 'សេចក្តីអត្ថាធិប្បាយអំពីឯកសារ', metaKeywords: 'ពាក្យនៅក្នុងឯកសារ (ផ្តាច់ពីគ្នាដោយក្បៀស)', other: 'ដទៃ​ទៀត...', previewHtml: '

      នេះ​គឺ​ជាអក្សរ​គំរូ​ខ្លះៗ។ អ្នក​កំពុង​ប្រើ CKEditor

      ', title: 'ការកំណត់ ឯកសារ', txtColor: 'ពណ៌អក្សរ', xhtmlDec: 'បញ្ជូល XHTML' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/eu.js0000644000175000017500000000265214006075351023437 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'eu', { bgColor: 'Atzeko Kolorea', bgFixed: 'Korritze gabeko Atzealdea', bgImage: 'Atzeko Irudiaren URL-a', charset: 'Karaktere Multzoaren Kodeketa', charsetASCII: 'ASCII', charsetCE: 'Erdialdeko Europakoa', charsetCR: 'Zirilikoa', charsetCT: 'Txinatar Tradizionala (Big5)', charsetGR: 'Grekoa', charsetJP: 'Japoniarra', charsetKR: 'Korearra', charsetOther: 'Beste Karaktere Multzoko Kodeketa', charsetTR: 'Turkiarra', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Mendebaldeko Europakoa', chooseColor: 'Choose', design: 'Diseinua', docTitle: 'Orriaren Izenburua', docType: 'Document Type Goiburua', docTypeOther: 'Beste Document Type Goiburua', label: 'Dokumentuaren Ezarpenak', margin: 'Orrialdearen marjinak', marginBottom: 'Behean', marginLeft: 'Ezkerrean', marginRight: 'Eskuman', marginTop: 'Goian', meta: 'Meta Informazioa', metaAuthor: 'Egilea', metaCopyright: 'Copyright', metaDescription: 'Dokumentuaren Deskribapena', metaKeywords: 'Dokumentuaren Gako-hitzak (komarekin bananduta)', other: '', previewHtml: '

      Hau adibideko testua da. CKEditor erabiltzen ari zara.

      ', title: 'Dokumentuaren Ezarpenak', txtColor: 'Testu Kolorea', xhtmlDec: 'XHTML Ezarpenak' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/fa.js0000644000175000017500000000317514006075351023415 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'fa', { bgColor: 'رنگ پس​زمینه', bgFixed: 'پس​زمینهٴ ثابت (بدون حرکت)', bgImage: 'URL تصویر پسزمینه', charset: 'رمزگذاری نویسه​گان', charsetASCII: 'اسکی', charsetCE: 'اروپای مرکزی', charsetCR: 'سیریلیک', charsetCT: 'چینی رسمی (Big5)', charsetGR: 'یونانی', charsetJP: 'ژاپنی', charsetKR: 'کره​ای', charsetOther: 'رمزگذاری نویسه​گان دیگر', charsetTR: 'ترکی', charsetUN: 'یونیکد (UTF-8)', charsetWE: 'اروپای غربی', chooseColor: 'انتخاب', design: 'طراحی', docTitle: 'عنوان صفحه', docType: 'عنوان نوع سند', docTypeOther: 'عنوان نوع سند دیگر', label: 'ویژگی​های سند', margin: 'حاشیه​های صفحه', marginBottom: 'پایین', marginLeft: 'چپ', marginRight: 'راست', marginTop: 'بالا', meta: 'فراداده', metaAuthor: 'نویسنده', metaCopyright: 'حق انتشار', metaDescription: 'توصیف سند', metaKeywords: 'کلیدواژگان نمایه​گذاری سند (با کاما جدا شوند)', other: '<سایر>', previewHtml: '

      این یک متن نمونه است. شما در حال استفاده از CKEditor هستید.

      ', title: 'ویژگی​های سند', txtColor: 'رنگ متن', xhtmlDec: 'شامل تعاریف XHTML' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/si.js0000644000175000017500000000362214006075351023437 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'si', { bgColor: 'පසුබිම් වර්ණය', bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'පසුබිම් ', charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', charsetCE: 'මාධ්‍ය ', charsetCR: 'සිරිලික් හෝඩිය', charsetCT: 'චීන සම්ප්‍රදාය', charsetGR: 'ග්‍රීක', charsetJP: 'ජපාන', charsetKR: 'Korean', // MISSING charsetOther: 'අනෙකුත් අක්ෂර කොටස්', charsetTR: 'තුර්කි', charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'බස්නාහිර ', chooseColor: 'තෝරන්න', design: 'Design', // MISSING docTitle: 'පිටු මාතෘකාව', docType: 'ලිපිගොනු වර්ගයේ මාතෘකාව', docTypeOther: 'අනෙකුත් ලිපිගොනු වර්ගයේ මාතෘකා', label: 'ලිපිගොනු ', margin: 'පිටු සීමාවන්', marginBottom: 'පහල', marginLeft: 'වම', marginRight: 'දකුණ', marginTop: 'ඉ', meta: 'Meta Tags', // MISSING metaAuthor: 'Author', // MISSING metaCopyright: 'ප්‍රකාශන ', metaDescription: 'ලිපිගොනු ', metaKeywords: 'ලිපිගොනු පෙලගේසමේ විශේෂ වචන (කොමා වලින් වෙන්කරන ලද)', other: 'අනෙකුත්', previewHtml: '

      This is some sample text. You are using CKEditor.

      ', // MISSING title: 'පෝරමයේ ගුණ/', txtColor: 'අක්ෂර වර්ණ', xhtmlDec: 'Include XHTML Declarations' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/en.js0000644000175000017500000000253714006075351023432 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'en', { bgColor: 'Background Color', bgFixed: 'Non-scrolling (Fixed) Background', bgImage: 'Background Image URL', charset: 'Character Set Encoding', charsetASCII: 'ASCII', charsetCE: 'Central European', charsetCR: 'Cyrillic', charsetCT: 'Chinese Traditional (Big5)', charsetGR: 'Greek', charsetJP: 'Japanese', charsetKR: 'Korean', charsetOther: 'Other Character Set Encoding', charsetTR: 'Turkish', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Western European', chooseColor: 'Choose', design: 'Design', docTitle: 'Page Title', docType: 'Document Type Heading', docTypeOther: 'Other Document Type Heading', label: 'Document Properties', margin: 'Page Margins', marginBottom: 'Bottom', marginLeft: 'Left', marginRight: 'Right', marginTop: 'Top', meta: 'Meta Tags', metaAuthor: 'Author', metaCopyright: 'Copyright', metaDescription: 'Document Description', metaKeywords: 'Document Indexing Keywords (comma separated)', other: 'Other...', previewHtml: '

      This is some sample text. You are using CKEditor.

      ', title: 'Document Properties', txtColor: 'Text Color', xhtmlDec: 'Include XHTML Declarations' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/he.js0000644000175000017500000000301514006075351023414 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'he', { bgColor: 'צבע רקע', bgFixed: 'רקע לא נגלל (צמוד)', bgImage: 'כתובת של תמונת רקע', charset: 'קידוד תווים', charsetASCII: 'ASCII', charsetCE: 'מרכז אירופאי', charsetCR: 'קירילי', charsetCT: 'סיני מסורתי (Big5)', charsetGR: 'יווני', charsetJP: 'יפני', charsetKR: 'קוריאני', charsetOther: 'קידוד תווים אחר', charsetTR: 'טורקי', charsetUN: 'יוניקוד (UTF-8)', charsetWE: 'מערב אירופאי', chooseColor: 'בחירה', design: 'עיצוב', docTitle: 'כותרת עמוד', docType: 'כותר סוג מסמך', docTypeOther: 'כותר סוג מסמך אחר', label: 'מאפייני מסמך', margin: 'מרווחי עמוד', marginBottom: 'תחתון', marginLeft: 'שמאלי', marginRight: 'ימני', marginTop: 'עליון', meta: 'תגי Meta', metaAuthor: 'מחבר/ת', metaCopyright: 'זכויות יוצרים', metaDescription: 'תיאור המסמך', metaKeywords: 'מילות מפתח של המסמך (מופרדות בפסיק)', other: 'אחר...', previewHtml: '

      זהו טקסט הדגמה. את/ה משתמש/ת בCKEditor.

      ', title: 'מאפייני מסמך', txtColor: 'צבע טקסט', xhtmlDec: 'כלול הכרזות XHTML' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/lt.js0000644000175000017500000000270614006075351023445 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'lt', { bgColor: 'Fono spalva', bgFixed: 'Neslenkantis fonas', bgImage: 'Fono paveikslėlio nuoroda (URL)', charset: 'Simbolių kodavimo lentelė', charsetASCII: 'ASCII', charsetCE: 'Centrinės Europos', charsetCR: 'Kirilica', charsetCT: 'Tradicinės kinų (Big5)', charsetGR: 'Graikų', charsetJP: 'Japonų', charsetKR: 'Korėjiečių', charsetOther: 'Kita simbolių kodavimo lentelė', charsetTR: 'Turkų', charsetUN: 'Unikodas (UTF-8)', charsetWE: 'Vakarų Europos', chooseColor: 'Pasirinkite', design: 'Išdėstymas', docTitle: 'Puslapio antraštė', docType: 'Dokumento tipo antraštė', docTypeOther: 'Kita dokumento tipo antraštė', label: 'Dokumento savybės', margin: 'Puslapio kraštinės', marginBottom: 'Apačioje', marginLeft: 'Kairėje', marginRight: 'Dešinėje', marginTop: 'Viršuje', meta: 'Meta duomenys', metaAuthor: 'Autorius', metaCopyright: 'Autorinės teisės', metaDescription: 'Dokumento apibūdinimas', metaKeywords: 'Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)', other: '', previewHtml: '

      Tai yra pavyzdinis tekstas. Jūs naudojate CKEditor.

      ', title: 'Dokumento savybės', txtColor: 'Teksto spalva', xhtmlDec: 'Įtraukti XHTML deklaracijas' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/lv.js0000644000175000017500000000260014006075351023440 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'lv', { bgColor: 'Fona krāsa', bgFixed: 'Fona attēls ir fiksēts', bgImage: 'Fona attēla hipersaite', charset: 'Simbolu kodējums', charsetASCII: 'ASCII', charsetCE: 'Centrāleiropas', charsetCR: 'Kirilica', charsetCT: 'Ķīniešu tradicionālā (Big5)', charsetGR: 'Grieķu', charsetJP: 'Japāņu', charsetKR: 'Korejiešu', charsetOther: 'Cits simbolu kodējums', charsetTR: 'Turku', charsetUN: 'Unikods (UTF-8)', charsetWE: 'Rietumeiropas', chooseColor: 'Izvēlēties', design: 'Dizains', docTitle: 'Dokumenta virsraksts ', docType: 'Dokumenta tips', docTypeOther: 'Cits dokumenta tips', label: 'Dokumenta īpašības', margin: 'Lapas robežas', marginBottom: 'Apakšā', marginLeft: 'Pa kreisi', marginRight: 'Pa labi', marginTop: 'Augšā', meta: 'META dati', metaAuthor: 'Autors', metaCopyright: 'Autortiesības', metaDescription: 'Dokumenta apraksts', metaKeywords: 'Dokumentu aprakstoši atslēgvārdi (atdalīti ar komatu)', other: '<cits>', previewHtml: '<p>Šis ir <strong>parauga teksts</strong>. Jūs izmantojiet <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Dokumenta īpašības', txtColor: 'Teksta krāsa', xhtmlDec: 'Ietvert XHTML deklarācijas' } ); ��������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/eo.js���������������������������������0000644�0001750�0001750�00000002463�14006075351�023431� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'eo', { bgColor: 'Fona Koloro', bgFixed: 'Neruluma Fono', bgImage: 'URL de Fona Bildo', charset: 'Signara Kodo', charsetASCII: 'ASCII', charsetCE: 'Centra Eŭropa', charsetCR: 'Cirila', charsetCT: 'Tradicia Ĉina (Big5)', charsetGR: 'Greka', charsetJP: 'Japana', charsetKR: 'Korea', charsetOther: 'Alia Signara Kodo', charsetTR: 'Turka', charsetUN: 'Unikodo (UTF-8)', charsetWE: 'Okcidenta Eŭropa', chooseColor: 'Elektu', design: 'Dizajno', docTitle: 'Paĝotitolo', docType: 'Dokumenta Tipo', docTypeOther: 'Alia Dokumenta Tipo', label: 'Dokumentaj Atributoj', margin: 'Paĝaj Marĝenoj', marginBottom: 'Malsupra', marginLeft: 'Maldekstra', marginRight: 'Dekstra', marginTop: 'Supra', meta: 'Metadatenoj', metaAuthor: 'Verkinto', metaCopyright: 'Kopirajto', metaDescription: 'Dokumenta Priskribo', metaKeywords: 'Ŝlosilvortoj de la Dokumento (apartigitaj de komoj)', other: '<alia>', previewHtml: '<p>Tio estas <strong>sampla teksto</strong>. Vi estas uzanta <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Dokumentaj Atributoj', txtColor: 'Teksta Koloro', xhtmlDec: 'Inkluzivi XHTML Deklarojn' } ); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ca.js���������������������������������0000644�0001750�0001750�00000002672�14006075351�023413� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ca', { bgColor: 'Color de fons', bgFixed: 'Fons sense desplaçament (Fixe)', bgImage: 'URL de la imatge de fons', charset: 'Codificació de conjunt de caràcters', charsetASCII: 'ASCII', charsetCE: 'Europeu Central', charsetCR: 'Ciríl·lic', charsetCT: 'Xinès tradicional (Big5)', charsetGR: 'Grec', charsetJP: 'Japonès', charsetKR: 'Coreà', charsetOther: 'Una altra codificació de caràcters', charsetTR: 'Turc', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Europeu occidental', chooseColor: 'Triar', design: 'Disseny', docTitle: 'Títol de la pàgina', docType: 'Capçalera de tipus de document', docTypeOther: 'Un altra capçalera de tipus de document', label: 'Propietats del document', margin: 'Marges de pàgina', marginBottom: 'Peu', marginLeft: 'Esquerra', marginRight: 'Dreta', marginTop: 'Cap', meta: 'Metadades', metaAuthor: 'Autor', metaCopyright: 'Copyright', metaDescription: 'Descripció del document', metaKeywords: 'Paraules clau per a indexació (separats per coma)', other: 'Altre...', previewHtml: '<p>Aquest és un <strong>text d\'exemple</strong>. Estàs utilitzant <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Propietats del document', txtColor: 'Color de Text', xhtmlDec: 'Incloure declaracions XHTML' } ); ����������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/hi.js���������������������������������0000644�0001750�0001750�00000004423�14006075351�023424� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'hi', { bgColor: 'बैक्ग्राउन्ड रंग', bgFixed: 'स्क्रॉल न करने वाला बैक्ग्राउन्ड', bgImage: 'बैक्ग्राउन्ड तस्वीर URL', charset: 'करेक्टर सॅट ऍन्कोडिंग', charsetASCII: 'ASCII', // MISSING charsetCE: 'मध्य यूरोपीय (Central European)', charsetCR: 'सिरीलिक (Cyrillic)', charsetCT: 'चीनी (Chinese Traditional Big5)', charsetGR: 'यवन (Greek)', charsetJP: 'जापानी (Japanese)', charsetKR: 'कोरीयन (Korean)', charsetOther: 'अन्य करेक्टर सॅट ऍन्कोडिंग', charsetTR: 'तुर्की (Turkish)', charsetUN: 'यूनीकोड (UTF-8)', charsetWE: 'पश्चिम यूरोपीय (Western European)', chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'पेज शीर्षक', docType: 'डॉक्यूमॅन्ट प्रकार शीर्षक', docTypeOther: 'अन्य डॉक्यूमॅन्ट प्रकार शीर्षक', label: 'डॉक्यूमॅन्ट प्रॉपर्टीज़', margin: 'पेज मार्जिन', marginBottom: 'नीचे', marginLeft: 'बायें', marginRight: 'दायें', marginTop: 'ऊपर', meta: 'मॅटाडेटा', metaAuthor: 'लेखक', metaCopyright: 'कॉपीराइट', metaDescription: 'डॉक्यूमॅन्ट करॅक्टरन', metaKeywords: 'डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)', other: '<अन्य>', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'डॉक्यूमॅन्ट प्रॉपर्टीज़', txtColor: 'टेक्स्ट रंग', xhtmlDec: 'XHTML सूचना सम्मिलित करें' } ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/mk.js���������������������������������0000644�0001750�0001750�00000003325�14006075351�023433� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'mk', { bgColor: 'Background Color', bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'Background Image URL', // MISSING charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Other Character Set Encoding', // MISSING charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'Page Title', // MISSING docType: 'Document Type Heading', // MISSING docTypeOther: 'Other Document Type Heading', // MISSING label: 'Document Properties', // MISSING margin: 'Page Margins', // MISSING marginBottom: 'Bottom', // MISSING marginLeft: 'Left', // MISSING marginRight: 'Right', // MISSING marginTop: 'Top', // MISSING meta: 'Meta Tags', // MISSING metaAuthor: 'Author', // MISSING metaCopyright: 'Copyright', // MISSING metaDescription: 'Document Description', // MISSING metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING other: 'Other...', // MISSING previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Document Properties', // MISSING txtColor: 'Text Color', // MISSING xhtmlDec: 'Include XHTML Declarations' // MISSING } ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/mn.js���������������������������������0000644�0001750�0001750�00000003434�14006075351�023437� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'mn', { bgColor: 'Фоно өнгө', bgFixed: 'Гүйдэггүй фоно', bgImage: 'Фоно зурагны URL', charset: 'Encoding тэмдэгт', charsetASCII: 'ASCII', // MISSING charsetCE: 'Төв европ', charsetCR: 'Крил', charsetCT: 'Хятадын уламжлалт (Big5)', charsetGR: 'Гред', charsetJP: 'Япон', charsetKR: 'Солонгос', charsetOther: 'Encoding-д өөр тэмдэгт оноох', charsetTR: 'Tурк', charsetUN: 'Юникод (UTF-8)', charsetWE: 'Баруун европ', chooseColor: 'Сонгох', design: 'Design', // MISSING docTitle: 'Хуудасны гарчиг', docType: 'Баримт бичгийн төрөл Heading', docTypeOther: 'Бусад баримт бичгийн төрөл Heading', label: 'Баримт бичиг шинж чанар', margin: 'Хуудасны захын зай', marginBottom: 'Доод тал', marginLeft: 'Зүүн тал', marginRight: 'Баруун тал', marginTop: 'Дээд тал', meta: 'Meta өгөгдөл', metaAuthor: 'Зохиогч', metaCopyright: 'Зохиогчийн эрх', metaDescription: 'Баримт бичгийн тайлбар', metaKeywords: 'Баримт бичгийн индекс түлхүүр үг (таслалаар тусгаарлагдана)', other: '<other>', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Баримт бичиг шинж чанар', txtColor: 'Фонтны өнгө', xhtmlDec: 'XHTML-ийн мэдээллийг агуулах' } ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/gl.js���������������������������������0000644�0001750�0001750�00000002723�14006075351�023427� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'gl', { bgColor: 'Cor do fondo', bgFixed: 'Fondo fixo (non se despraza)', bgImage: 'URL da imaxe do fondo', charset: 'Codificación de caracteres', charsetASCII: 'ASCII', charsetCE: 'Centro europeo', charsetCR: 'Cirílico', charsetCT: 'Chinés tradicional (Big5)', charsetGR: 'Grego', charsetJP: 'Xaponés', charsetKR: 'Coreano', charsetOther: 'Outra codificación de caracteres', charsetTR: 'Turco', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Europeo occidental', chooseColor: 'Escoller', design: 'Deseño', docTitle: 'Título da páxina', docType: 'Cabeceira do tipo de documento', docTypeOther: 'Outra cabeceira do tipo de documento', label: 'Propiedades do documento', margin: 'Marxes da páxina', marginBottom: 'Abaixo', marginLeft: 'Esquerda', marginRight: 'Dereita', marginTop: 'Arriba', meta: 'Meta etiquetas', metaAuthor: 'Autor', metaCopyright: 'Dereito de autoría', metaDescription: 'Descrición do documento', metaKeywords: 'Palabras clave de indexación do documento (separadas por comas)', other: 'Outro...', previewHtml: '<p>Este é un <strong>texto de exemplo</strong>. Vostede esta a empregar o <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Propiedades do documento', txtColor: 'Cor do texto', xhtmlDec: 'Incluír as declaracións XHTML' } ); ���������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ko.js���������������������������������0000644�0001750�0001750�00000002605�14006075351�023435� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ko', { bgColor: '배경 색상', bgFixed: '스크롤 되지 않는(고정된) 배경', bgImage: '배경 이미지 주소(URL)', charset: '문자열 인코딩', charsetASCII: 'ASCII', charsetCE: '중앙 유럽', charsetCR: '키릴 문자', charsetCT: '중국어 (Big5)', charsetGR: '그리스어', charsetJP: '일본어', charsetKR: '한국어', charsetOther: '다른 문자열 인코딩', charsetTR: '터키어', charsetUN: '유니코드 (UTF-8)', charsetWE: '서유럽', chooseColor: '선택', design: '디자인', docTitle: '페이지 이름', docType: '문서 제목', docTypeOther: '다른 문서 제목', label: '문서 속성', margin: '페이지 여백', marginBottom: '아래', marginLeft: '왼쪽', marginRight: '오른쪽', marginTop: '위', meta: '메타 데이터', metaAuthor: '작성자', metaCopyright: '저작권', metaDescription: '문서 설명', metaKeywords: '문서 핵심어 (쉼표로 구분)', other: '기타...', previewHtml: '<p>이것은 <strong>예문</strong>입니다. 여러분은 지금 <a href="javascript:void(0)">CKEditor</a>를 사용하고 있습니다.</p>', title: '문서 속성', txtColor: '글자 색상', xhtmlDec: 'XHTML 문서 정의 포함' } ); ���������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/zh.js���������������������������������0000644�0001750�0001750�00000002456�14006075351�023451� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'zh', { bgColor: '背景顏色', bgFixed: '非捲動 (固定) 背景', bgImage: '背景圖像 URL', charset: '字元集編碼', charsetASCII: 'ASCII', charsetCE: '中歐語系', charsetCR: '斯拉夫文', charsetCT: '正體中文 (Big5)', charsetGR: '希臘文', charsetJP: '日文', charsetKR: '韓文', charsetOther: '其他字元集編碼', charsetTR: '土耳其文', charsetUN: 'Unicode (UTF-8)', charsetWE: '西歐語系', chooseColor: '選擇', design: '設計模式', docTitle: '頁面標題', docType: '文件類型標題', docTypeOther: '其他文件類型標題', label: '文件屬性', margin: '頁面邊界', marginBottom: '底端', marginLeft: '左', marginRight: '右', marginTop: '頂端', meta: 'Meta 標籤', metaAuthor: '作者', metaCopyright: '版權資訊', metaDescription: '文件描述', metaKeywords: '文件索引關鍵字 (以逗號分隔)', other: '其他…', previewHtml: '<p>此為簡短的<strong>範例文字</strong>。您正在使用 <a href="javascript:void(0)">CKEditor</a>。</p>', title: '文件屬性', txtColor: '文字顏色', xhtmlDec: '包含 XHTML 宣告' } ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/es.js���������������������������������0000644�0001750�0001750�00000002622�14006075351�023432� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'es', { bgColor: 'Color de fondo', bgFixed: 'Fondo fijo (no se desplaza)', bgImage: 'Imagen de fondo', charset: 'Codificación de caracteres', charsetASCII: 'ASCII', charsetCE: 'Centro Europeo', charsetCR: 'Ruso', charsetCT: 'Chino Tradicional (Big5)', charsetGR: 'Griego', charsetJP: 'Japonés', charsetKR: 'Koreano', charsetOther: 'Otra codificación de caracteres', charsetTR: 'Turco', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Europeo occidental', chooseColor: 'Elegir', design: 'Diseño', docTitle: 'Título de página', docType: 'Tipo de documento', docTypeOther: 'Otro tipo de documento', label: 'Propiedades del documento', margin: 'Márgenes', marginBottom: 'Inferior', marginLeft: 'Izquierdo', marginRight: 'Derecho', marginTop: 'Superior', meta: 'Meta Tags', metaAuthor: 'Autor', metaCopyright: 'Copyright', metaDescription: 'Descripción del documento', metaKeywords: 'Palabras claves del documento separadas por coma (meta keywords)', other: 'Otro...', previewHtml: '<p>Este es un <strong>texto de ejemplo</strong>. Usted está usando <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Propiedades del documento', txtColor: 'Color del texto', xhtmlDec: 'Incluir declaración XHTML' } ); ��������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/is.js���������������������������������0000644�0001750�0001750�00000002570�14006075351�023440� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'is', { bgColor: 'Bakgrunnslitur', bgFixed: 'Læstur bakgrunnur', bgImage: 'Slóð bakgrunnsmyndar', charset: 'Letursett', charsetASCII: 'ASCII', // MISSING charsetCE: 'Mið-evrópskt', charsetCR: 'Kýrilskt', charsetCT: 'Kínverskt, hefðbundið (Big5)', charsetGR: 'Grískt', charsetJP: 'Japanskt', charsetKR: 'Kóreskt', charsetOther: 'Annað letursett', charsetTR: 'Tyrkneskt', charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Vestur-evrópst', chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'Titill síðu', docType: 'Flokkur skjalategunda', docTypeOther: 'Annar flokkur skjalategunda', label: 'Eigindi skjals', margin: 'Hliðarspássía', marginBottom: 'Neðst', marginLeft: 'Vinstri', marginRight: 'Hægri', marginTop: 'Efst', meta: 'Lýsigögn', metaAuthor: 'Höfundur', metaCopyright: 'Höfundarréttur', metaDescription: 'Lýsing skjals', metaKeywords: 'Lykilorð efnisorðaskrár (aðgreind með kommum)', other: '<annar>', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Eigindi skjals', txtColor: 'Litur texta', xhtmlDec: 'Fella inn XHTML lýsingu' } ); ����������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/fo.js���������������������������������0000644�0001750�0001750�00000002574�14006075351�023435� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'fo', { bgColor: 'Bakgrundslitur', bgFixed: 'Læst bakgrund (rullar ikki)', bgImage: 'Leið til bakgrundsmynd (URL)', charset: 'Teknsett koda', charsetASCII: 'ASCII', charsetCE: 'Miðeuropa', charsetCR: 'Cyrilliskt', charsetCT: 'Kinesiskt traditionelt (Big5)', charsetGR: 'Grikst', charsetJP: 'Japanskt', charsetKR: 'Koreanskt', charsetOther: 'Onnur teknsett koda', charsetTR: 'Turkiskt', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Vestureuropa', chooseColor: 'Vel', design: 'Design', docTitle: 'Síðuheiti', docType: 'Dokumentslag yvirskrift', docTypeOther: 'Annað dokumentslag yvirskrift', label: 'Eginleikar fyri dokument', margin: 'Síðubreddar', marginBottom: 'Niðast', marginLeft: 'Vinstra', marginRight: 'Høgra', marginTop: 'Ovast', meta: 'META-upplýsingar', metaAuthor: 'Høvundur', metaCopyright: 'Upphavsrættindi', metaDescription: 'Dokumentlýsing', metaKeywords: 'Dokument index lyklaorð (sundurbýtt við komma)', other: '<annað>', previewHtml: '<p>Hetta er ein <strong>royndartekstur</strong>. Tygum brúka <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Eginleikar fyri dokument', txtColor: 'Tekstlitur', xhtmlDec: 'Viðfest XHTML deklaratiónir' } ); ������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/tt.js���������������������������������0000644�0001750�0001750�00000003157�14006075351�023456� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'tt', { bgColor: 'Фон төсе', bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'Background Image URL', // MISSING charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', charsetCE: 'Урта Ауропа', charsetCR: 'Кириллик', charsetCT: 'Гадәти кытай (Big5)', charsetGR: 'Грек', charsetJP: 'Япон', charsetKR: 'Корей', charsetOther: 'Other Character Set Encoding', // MISSING charsetTR: 'Төрек', charsetUN: 'Юникод (UTF-8)', charsetWE: 'Көнбатыш Ауропа', chooseColor: 'Сайлау', design: 'Дизайн', docTitle: 'Бит исеме', docType: 'Document Type Heading', // MISSING docTypeOther: 'Other Document Type Heading', // MISSING label: 'Документ үзлекләре', margin: 'Page Margins', // MISSING marginBottom: 'Аска', marginLeft: 'Сул', marginRight: 'Уң як', marginTop: 'Өскә', meta: 'Метатег', metaAuthor: 'Автор', metaCopyright: 'Хокук иясе', metaDescription: 'Документ тасвирламасы', metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING other: 'Башка...', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Документ үзлекләре', txtColor: 'Текст төсе', xhtmlDec: 'Include XHTML Declarations' // MISSING } ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/it.js���������������������������������0000644�0001750�0001750�00000002553�14006075351�023442� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'it', { bgColor: 'Colore di sfondo', bgFixed: 'Sfondo fissato', bgImage: 'Immagine di sfondo', charset: 'Set di caretteri', charsetASCII: 'ASCII', charsetCE: 'Europa Centrale', charsetCR: 'Cirillico', charsetCT: 'Cinese Tradizionale (Big5)', charsetGR: 'Greco', charsetJP: 'Giapponese', charsetKR: 'Coreano', charsetOther: 'Altro set di caretteri', charsetTR: 'Turco', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Europa Occidentale', chooseColor: 'Scegli', design: 'Disegna', docTitle: 'Titolo pagina', docType: 'Intestazione DocType', docTypeOther: 'Altra intestazione DocType', label: 'Proprietà del Documento', margin: 'Margini', marginBottom: 'In Basso', marginLeft: 'A Sinistra', marginRight: 'A Destra', marginTop: 'In Alto', meta: 'Meta Data', metaAuthor: 'Autore', metaCopyright: 'Copyright', metaDescription: 'Descrizione documento', metaKeywords: 'Chiavi di indicizzazione documento (separate da virgola)', other: '<altro>', previewHtml: '<p>Questo è un <strong>testo di esempio</strong>. State usando <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Proprietà del Documento', txtColor: 'Colore testo', xhtmlDec: 'Includi dichiarazione XHTML' } ); �����������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/sv.js���������������������������������0000644�0001750�0001750�00000002461�14006075351�023454� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'sv', { bgColor: 'Bakgrundsfärg', bgFixed: 'Fast bakgrund', bgImage: 'Bakgrundsbildens URL', charset: 'Teckenuppsättningar', charsetASCII: 'ASCII', charsetCE: 'Central Europa', charsetCR: 'Kyrillisk', charsetCT: 'Traditionell Kinesisk (Big5)', charsetGR: 'Grekiska', charsetJP: 'Japanska', charsetKR: 'Koreanska', charsetOther: 'Övriga teckenuppsättningar', charsetTR: 'Turkiska', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Väst Europa', chooseColor: 'Välj', design: 'Design', docTitle: 'Sidtitel', docType: 'Sidhuvud', docTypeOther: 'Övriga sidhuvuden', label: 'Dokumentegenskaper', margin: 'Sidmarginal', marginBottom: 'Botten', marginLeft: 'Vänster', marginRight: 'Höger', marginTop: 'Topp', meta: 'Metadata', metaAuthor: 'Författare', metaCopyright: 'Upphovsrätt', metaDescription: 'Sidans beskrivning', metaKeywords: 'Sidans nyckelord (kommaseparerade)', other: 'Annan...', previewHtml: '<p>Detta är en <strong>exempel text</strong>. Du använder <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Dokumentegenskaper', txtColor: 'Textfärg', xhtmlDec: 'Inkludera XHTML deklaration' } ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/gu.js���������������������������������0000644�0001750�0001750�00000004502�14006075351�023435� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'gu', { bgColor: 'બૅકગ્રાઉન્ડ રંગ', bgFixed: 'સ્ક્રોલ ન થાય તેવું બૅકગ્રાઉન્ડ', bgImage: 'બૅકગ્રાઉન્ડ ચિત્ર URL', charset: 'કેરેક્ટર સેટ એન્કોડિંગ', charsetASCII: 'ASCII', charsetCE: 'મધ્ય યુરોપિઅન (Central European)', charsetCR: 'સિરીલિક (Cyrillic)', charsetCT: 'ચાઇનીઝ (Chinese Traditional Big5)', charsetGR: 'ગ્રીક (Greek)', charsetJP: 'જાપાનિઝ (Japanese)', charsetKR: 'કોરીયન (Korean)', charsetOther: 'અન્ય કેરેક્ટર સેટ એન્કોડિંગ', charsetTR: 'ટર્કિ (Turkish)', charsetUN: 'યૂનિકોડ (UTF-8)', charsetWE: 'પશ્ચિમ યુરોપિઅન (Western European)', chooseColor: 'વિકલ્પ', design: 'ડીસા', docTitle: 'પેજ મથાળું/ટાઇટલ', docType: 'ડૉક્યુમન્ટ પ્રકાર શીર્ષક', docTypeOther: 'અન્ય ડૉક્યુમન્ટ પ્રકાર શીર્ષક', label: 'ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ', margin: 'પેજ માર્જિન', marginBottom: 'નીચે', marginLeft: 'ડાબી', marginRight: 'જમણી', marginTop: 'ઉપર', meta: 'મેટાડૅટા', metaAuthor: 'લેખક', metaCopyright: 'કૉપિરાઇટ', metaDescription: 'ડૉક્યુમન્ટ વર્ણન', metaKeywords: 'ડૉક્યુમન્ટ ઇન્ડેક્સ સંકેતશબ્દ (અલ્પવિરામ (,) થી અલગ કરો)', other: '<other>', previewHtml: '<p>આ એક <strong>સેમ્પલ ટેક્ષ્ત્</strong> છે. તમે <a href="javascript:void(0)">CKEditor</a> વાપરો છો.</p>', title: 'ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ', txtColor: 'શબ્દનો રંગ', xhtmlDec: 'XHTML સૂચના સમાવિષ્ટ કરવી' } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/tr.js���������������������������������0000644�0001750�0001750�00000002566�14006075351�023457� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'tr', { bgColor: 'Arka Plan Rengi', bgFixed: 'Sabit Arka Plan', bgImage: 'Arka Plan Resim URLsi', charset: 'Karakter Kümesi Kodlaması', charsetASCII: 'ASCII', charsetCE: 'Orta Avrupa', charsetCR: 'Kiril', charsetCT: 'Geleneksel Çince (Big5)', charsetGR: 'Yunanca', charsetJP: 'Japonca', charsetKR: 'Korece', charsetOther: 'Diğer Karakter Kümesi Kodlaması', charsetTR: 'Türkçe', charsetUN: 'Evrensel Kod (UTF-8)', charsetWE: 'Batı Avrupa', chooseColor: 'Seçiniz', design: 'Dizayn', docTitle: 'Sayfa Başlığı', docType: 'Belge Türü Başlığı', docTypeOther: 'Diğer Belge Türü Başlığı', label: 'Belge Özellikleri', margin: 'Kenar Boşlukları', marginBottom: 'Alt', marginLeft: 'Sol', marginRight: 'Sağ', marginTop: 'Tepe', meta: 'Tanım Bilgisi (Meta)', metaAuthor: 'Yazar', metaCopyright: 'Telif', metaDescription: 'Belge Tanımı', metaKeywords: 'Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmış)', other: '<diğer>', previewHtml: '<p>Bu bir <strong>örnek metindir</strong>. <a href="javascript:void(0)">CKEditor</a> kullanıyorsunuz.</p>', title: 'Belge Özellikleri', txtColor: 'Yazı Rengi', xhtmlDec: 'XHTML Bildirimlerini Dahil Et' } ); ������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/pl.js���������������������������������0000644�0001750�0001750�00000002637�14006075351�023444� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'pl', { bgColor: 'Kolor tła', bgFixed: 'Tło nieruchome (nieprzewijające się)', bgImage: 'Adres URL obrazka tła', charset: 'Kodowanie znaków', charsetASCII: 'ASCII', charsetCE: 'Środkowoeuropejskie', charsetCR: 'Cyrylica', charsetCT: 'Chińskie tradycyjne (Big5)', charsetGR: 'Greckie', charsetJP: 'Japońskie', charsetKR: 'Koreańskie', charsetOther: 'Inne kodowanie znaków', charsetTR: 'Tureckie', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Zachodnioeuropejskie', chooseColor: 'Wybierz', design: 'Projekt strony', docTitle: 'Tytuł strony', docType: 'Definicja typu dokumentu', docTypeOther: 'Inna definicja typu dokumentu', label: 'Właściwości dokumentu', margin: 'Marginesy strony', marginBottom: 'Dolny', marginLeft: 'Lewy', marginRight: 'Prawy', marginTop: 'Górny', meta: 'Znaczniki meta', metaAuthor: 'Autor', metaCopyright: 'Prawa autorskie', metaDescription: 'Opis dokumentu', metaKeywords: 'Słowa kluczowe dokumentu (oddzielone przecinkami)', other: 'Inne', previewHtml: '<p>To jest <strong>przykładowy tekst</strong>. Korzystasz z programu <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Właściwości dokumentu', txtColor: 'Kolor tekstu', xhtmlDec: 'Uwzględnij deklaracje XHTML' } ); �������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/nb.js���������������������������������0000644�0001750�0001750�00000002443�14006075351�023423� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'nb', { bgColor: 'Bakgrunnsfarge', bgFixed: 'Lås bakgrunnsbilde', bgImage: 'URL for bakgrunnsbilde', charset: 'Tegnsett', charsetASCII: 'ASCII', charsetCE: 'Sentraleuropeisk', charsetCR: 'Kyrillisk', charsetCT: 'Tradisonell kinesisk (Big5)', charsetGR: 'Gresk', charsetJP: 'Japansk', charsetKR: 'Koreansk', charsetOther: 'Annet tegnsett', charsetTR: 'Tyrkisk', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Vesteuropeisk', chooseColor: 'Velg', design: 'Design', docTitle: 'Sidetittel', docType: 'Dokumenttype header', docTypeOther: 'Annet dokumenttype header', label: 'Dokumentegenskaper', margin: 'Sidemargin', marginBottom: 'Bunn', marginLeft: 'Venstre', marginRight: 'Høyre', marginTop: 'Topp', meta: 'Meta-data', metaAuthor: 'Forfatter', metaCopyright: 'Kopirett', metaDescription: 'Dokumentbeskrivelse', metaKeywords: 'Dokument nøkkelord (kommaseparert)', other: '<annen>', previewHtml: '<p>Dette er en <strong>eksempeltekst</strong>. Du bruker <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Dokumentegenskaper', txtColor: 'Tekstfarge', xhtmlDec: 'Inkluder XHTML-deklarasjon' } ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/sl.js���������������������������������0000644�0001750�0001750�00000002466�14006075351�023447� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'sl', { bgColor: 'Barva ozadja', bgFixed: 'Nepremično ozadje', bgImage: 'URL slike za ozadje', charset: 'Kodna tabela', charsetASCII: 'ASCII', charsetCE: 'Srednjeevropsko', charsetCR: 'Cirilica', charsetCT: 'Tradicionalno Kitajsko (Big5)', charsetGR: 'Grško', charsetJP: 'Japonsko', charsetKR: 'Korejsko', charsetOther: 'Druga kodna tabela', charsetTR: 'Turško', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Zahodnoevropsko', chooseColor: 'Izberi', design: 'Oblika', docTitle: 'Naslov strani', docType: 'Glava tipa dokumenta', docTypeOther: 'Druga glava tipa dokumenta', label: 'Lastnosti dokumenta', margin: 'Zamiki strani', marginBottom: 'Spodaj', marginLeft: 'Levo', marginRight: 'Desno', marginTop: 'Na vrhu', meta: 'Meta podatki', metaAuthor: 'Avtor', metaCopyright: 'Avtorske pravice', metaDescription: 'Opis strani', metaKeywords: 'Ključne besede (ločene z vejicami)', other: '<drug>', previewHtml: '<p>Tole je<strong>primer besedila</strong>. Uporabljate <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Lastnosti dokumenta', txtColor: 'Barva besedila', xhtmlDec: 'Vstavi XHTML deklaracije' } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/fi.js���������������������������������0000644�0001750�0001750�00000002503�14006075351�023417� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'fi', { bgColor: 'Taustaväri', bgFixed: 'Paikallaanpysyvä tausta', bgImage: 'Taustakuva', charset: 'Merkistökoodaus', charsetASCII: 'ASCII', charsetCE: 'Keskieurooppalainen', charsetCR: 'Kyrillinen', charsetCT: 'Kiina, perinteinen (Big5)', charsetGR: 'Kreikka', charsetJP: 'Japani', charsetKR: 'Korealainen', charsetOther: 'Muu merkistökoodaus', charsetTR: 'Turkkilainen', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Länsieurooppalainen', chooseColor: 'Valitse', design: 'Sommittelu', docTitle: 'Sivun nimi', docType: 'Dokumentin tyyppi', docTypeOther: 'Muu dokumentin tyyppi', label: 'Dokumentin ominaisuudet', margin: 'Sivun marginaalit', marginBottom: 'Ala', marginLeft: 'Vasen', marginRight: 'Oikea', marginTop: 'Ylä', meta: 'Metatieto', metaAuthor: 'Tekijä', metaCopyright: 'Tekijänoikeudet', metaDescription: 'Kuvaus', metaKeywords: 'Hakusanat (pilkulla erotettuna)', other: '<muu>', previewHtml: '<p>Tämä on <strong>esimerkkitekstiä</strong>. Käytät juuri <a href="javascript:void(0)">CKEditoria</a>.</p>', title: 'Dokumentin ominaisuudet', txtColor: 'Tekstiväri', xhtmlDec: 'Lisää XHTML julistukset' } ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/fr-ca.js������������������������������0000644�0001750�0001750�00000002507�14006075351�024015� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'fr-ca', { bgColor: 'Couleur de fond', bgFixed: 'Image fixe sans défilement', bgImage: 'Image de fond', charset: 'Encodage', charsetASCII: 'ACSII', charsetCE: 'Europe Centrale', charsetCR: 'Cyrillique', charsetCT: 'Chinois Traditionnel (Big5)', charsetGR: 'Grecque', charsetJP: 'Japonais', charsetKR: 'Coréen', charsetOther: 'Autre encodage', charsetTR: 'Turque', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Occidental', chooseColor: 'Sélectionner', design: 'Design', docTitle: 'Titre de la page', docType: 'Type de document', docTypeOther: 'Autre type de document', label: 'Propriétés du document', margin: 'Marges', marginBottom: 'Bas', marginLeft: 'Gauche', marginRight: 'Droite', marginTop: 'Haut', meta: 'Méta-données', metaAuthor: 'Auteur', metaCopyright: 'Copyright', metaDescription: 'Description', metaKeywords: 'Mots-clés (séparés par des virgules)', other: 'Autre...', previewHtml: '<p>Voici un <strong>example de texte</strong>. Vous utilisez <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Propriétés du document', txtColor: 'Couleur de caractère', xhtmlDec: 'Inclure les déclarations XHTML' } ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ru.js���������������������������������0000644�0001750�0001750�00000003646�14006075351�023460� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ru', { bgColor: 'Цвет фона', bgFixed: 'Фон прикреплён (не проматывается)', bgImage: 'Ссылка на фоновое изображение', charset: 'Кодировка набора символов', charsetASCII: 'ASCII', charsetCE: 'Центрально-европейская', charsetCR: 'Кириллица', charsetCT: 'Китайская традиционная (Big5)', charsetGR: 'Греческая', charsetJP: 'Японская', charsetKR: 'Корейская', charsetOther: 'Другая кодировка набора символов', charsetTR: 'Турецкая', charsetUN: 'Юникод (UTF-8)', charsetWE: 'Западно-европейская', chooseColor: 'Выберите', design: 'Дизайн', docTitle: 'Заголовок страницы', docType: 'Заголовок типа документа', docTypeOther: 'Другой заголовок типа документа', label: 'Свойства документа', margin: 'Отступы страницы', marginBottom: 'Нижний', marginLeft: 'Левый', marginRight: 'Правый', marginTop: 'Верхний', meta: 'Метаданные', metaAuthor: 'Автор', metaCopyright: 'Авторские права', metaDescription: 'Описание документа', metaKeywords: 'Ключевые слова документа (через запятую)', other: 'Другой ...', previewHtml: '<p>Это <strong>пример</strong> текста, написанного с помощью <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Свойства документа', txtColor: 'Цвет текста', xhtmlDec: 'Включить объявления XHTML' } ); ������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ka.js���������������������������������0000644�0001750�0001750�00000004334�14006075351�023420� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ka', { bgColor: 'ფონის ფერი', bgFixed: 'უმოძრაო (ფიქსირებული) ფონი', bgImage: 'ფონური სურათის URL', charset: 'კოდირება', charsetASCII: 'ამერიკული (ASCII)', charsetCE: 'ცენტრალურ ევროპული', charsetCR: 'კირილური', charsetCT: 'ტრადიციული ჩინური (Big5)', charsetGR: 'ბერძნული', charsetJP: 'იაპონური', charsetKR: 'კორეული', charsetOther: 'სხვა კოდირებები', charsetTR: 'თურქული', charsetUN: 'უნიკოდი (UTF-8)', charsetWE: 'დასავლეთ ევროპული', chooseColor: 'არჩევა', design: 'დიზაინი', docTitle: 'გვერდის სათაური', docType: 'დოკუმენტის ტიპი', docTypeOther: 'სხვა ტიპის დოკუმენტი', label: 'დოკუმენტის პარამეტრები', margin: 'გვერდის კიდეები', marginBottom: 'ქვედა', marginLeft: 'მარცხენა', marginRight: 'მარჯვენა', marginTop: 'ზედა', meta: 'მეტაTag-ები', metaAuthor: 'ავტორი', metaCopyright: 'Copyright', metaDescription: 'დოკუმენტის აღწერა', metaKeywords: 'დოკუმენტის საკვანძო სიტყვები (მძიმით გამოყოფილი)', other: 'სხვა...', previewHtml: '<p>ეს არის <strong>საცდელი ტექსტი</strong>. თქვენ <a href="javascript:void(0)">CKEditor</a>-ით სარგებლობთ.</p>', title: 'დოკუმენტის პარამეტრები', txtColor: 'ტექსტის ფერი', xhtmlDec: 'XHTML დეკლარაციების ჩართვა' } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/zh-cn.js������������������������������0000644�0001750�0001750�00000002406�14006075351�024042� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'zh-cn', { bgColor: '背景颜色', bgFixed: '不滚动背景图像', bgImage: '背景图像', charset: '字符编码', charsetASCII: 'ASCII', charsetCE: '中欧', charsetCR: '西里尔文', charsetCT: '繁体中文 (Big5)', charsetGR: '希腊文', charsetJP: '日文', charsetKR: '韩文', charsetOther: '其它字符编码', charsetTR: '土耳其文', charsetUN: 'Unicode (UTF-8)', charsetWE: '西欧', chooseColor: '选择', design: '设计', docTitle: '页面标题', docType: '文档类型', docTypeOther: '其它文档类型', label: '页面属性', margin: '页面边距', marginBottom: '下', marginLeft: '左', marginRight: '右', marginTop: '上', meta: 'Meta 数据', metaAuthor: '作者', metaCopyright: '版权', metaDescription: '页面说明', metaKeywords: '页面索引关键字 (用半角逗号[,]分隔)', other: '<其他>', previewHtml: '<p>这是一些<strong>演示用文字</strong>。您当前正在使用<a href="javascript:void(0)">CKEditor</a>。</p>', title: '页面属性', txtColor: '文本颜色', xhtmlDec: '包含 XHTML 声明' } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/cs.js���������������������������������0000644�0001750�0001750�00000002544�14006075351�023433� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'cs', { bgColor: 'Barva pozadí', bgFixed: 'Nerolovatelné (Pevné) pozadí', bgImage: 'URL obrázku na pozadí', charset: 'Znaková sada', charsetASCII: 'ASCII', charsetCE: 'Středoevropské jazyky', charsetCR: 'Cyrilice', charsetCT: 'Tradiční čínština (Big5)', charsetGR: 'Řečtina', charsetJP: 'Japonština', charsetKR: 'Korejština', charsetOther: 'Další znaková sada', charsetTR: 'Turečtina', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Západoevropské jazyky', chooseColor: 'Výběr', design: 'Vzhled', docTitle: 'Titulek stránky', docType: 'Typ dokumentu', docTypeOther: 'Jiný typ dokumetu', label: 'Vlastnosti dokumentu', margin: 'Okraje stránky', marginBottom: 'Dolní', marginLeft: 'Levý', marginRight: 'Pravý', marginTop: 'Horní', meta: 'Metadata', metaAuthor: 'Autor', metaCopyright: 'Autorská práva', metaDescription: 'Popis dokumentu', metaKeywords: 'Klíčová slova (oddělená čárkou)', other: '<jiný>', previewHtml: '<p>Toto je <strong>ukázkový text</strong>. Používáte <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Vlastnosti dokumentu', txtColor: 'Barva textu', xhtmlDec: 'Zahrnout deklarace XHTML' } ); ������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/pt.js���������������������������������0000644�0001750�0001750�00000002656�14006075351�023455� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'pt', { bgColor: 'Cor de Fundo', bgFixed: 'Fundo Fixo', bgImage: 'Caminho para a imagem de fundo', charset: 'Codificação de caracteres', charsetASCII: 'ASCII', charsetCE: 'Europa Central', charsetCR: 'Cirílico', charsetCT: 'Chinês Traditional (Big5)', charsetGR: 'Grego', charsetJP: 'Japonês', charsetKR: 'Coreano', charsetOther: 'Outra Codificação de Caracteres', charsetTR: 'Turco', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Europa Ocidental', chooseColor: 'Choose', design: 'Desenho', docTitle: 'Título da Página', docType: 'Tipo de Cabeçalho do Documento', docTypeOther: 'Outro Tipo de Cabeçalho do Documento', label: 'Propriedades do Documento', margin: 'Margem das Páginas', marginBottom: 'Fundo', marginLeft: 'Esquerda', marginRight: 'Direita', marginTop: 'Topo', meta: 'Meta Data', metaAuthor: 'Autor', metaCopyright: 'Direitos de Autor', metaDescription: 'Descrição do Documento', metaKeywords: 'Palavras de Indexação do Documento (separadas por virgula)', other: '<outro>', previewHtml: '<p>Isto é algum <strong>texto amostra</strong>. Está a usar o <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Propriedades do documento', txtColor: 'Cor do Texto', xhtmlDec: 'Incluir Declarações XHTML' } ); ����������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/pt-br.js������������������������������0000644�0001750�0001750�00000002700�14006075351�024044� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'pt-br', { bgColor: 'Cor do Plano de Fundo', bgFixed: 'Plano de Fundo Fixo', bgImage: 'URL da Imagem de Plano de Fundo', charset: 'Codificação de Caracteres', charsetASCII: 'ASCII', charsetCE: 'Europa Central', charsetCR: 'Cirílico', charsetCT: 'Chinês Tradicional (Big5)', charsetGR: 'Grego', charsetJP: 'Japonês', charsetKR: 'Coreano', charsetOther: 'Outra Codificação de Caracteres', charsetTR: 'Turco', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Europa Ocidental', chooseColor: 'Escolher', design: 'Design', docTitle: 'Título da Página', docType: 'Cabeçalho Tipo de Documento', docTypeOther: 'Outro Tipo de Documento', label: 'Propriedades Documento', margin: 'Margens da Página', marginBottom: 'Inferior', marginLeft: 'Inferior', marginRight: 'Direita', marginTop: 'Superior', meta: 'Meta Dados', metaAuthor: 'Autor', metaCopyright: 'Direitos Autorais', metaDescription: 'Descrição do Documento', metaKeywords: 'Palavras-chave de Indexação do Documento (separadas por vírgula)', other: '<outro>', previewHtml: '<p>Este é um <strong>texto de exemplo</strong>. Você está usando <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Propriedades Documento', txtColor: 'Cor do Texto', xhtmlDec: 'Incluir Declarações XHTML' } ); ����������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/et.js���������������������������������0000644�0001750�0001750�00000002554�14006075351�023437� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'et', { bgColor: 'Taustavärv', bgFixed: 'Mittekeritav tagataust', bgImage: 'Taustapildi URL', charset: 'Märgistiku kodeering', charsetASCII: 'ASCII', charsetCE: 'Kesk-Euroopa', charsetCR: 'Kirillisa', charsetCT: 'Hiina traditsiooniline (Big5)', charsetGR: 'Kreeka', charsetJP: 'Jaapani', charsetKR: 'Korea', charsetOther: 'Ülejäänud märgistike kodeeringud', charsetTR: 'Türgi', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Lääne-Euroopa', chooseColor: 'Vali', design: 'Disain', docTitle: 'Lehekülje tiitel', docType: 'Dokumendi tüüppäis', docTypeOther: 'Teised dokumendi tüüppäised', label: 'Dokumendi omadused', margin: 'Lehekülje äärised', marginBottom: 'Alaserv', marginLeft: 'Vasakserv', marginRight: 'Paremserv', marginTop: 'Ülaserv', meta: 'Meta andmed', metaAuthor: 'Autor', metaCopyright: 'Autoriõigus', metaDescription: 'Dokumendi kirjeldus', metaKeywords: 'Dokumendi võtmesõnad (eraldatud komadega)', other: '<muu>', previewHtml: '<p>See on <strong>näidistekst</strong>. Sa kasutad <a href="javascript:void(0)">CKEditori</a>.</p>', title: 'Dokumendi omadused', txtColor: 'Teksti värv', xhtmlDec: 'Arva kaasa XHTML deklaratsioonid' } ); ����������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/da.js���������������������������������0000644�0001750�0001750�00000002524�14006075351�023410� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'da', { bgColor: 'Baggrundsfarve', bgFixed: 'Fastlåst baggrund', bgImage: 'Baggrundsbillede URL', charset: 'Tegnsætskode', charsetASCII: 'ASCII', charsetCE: 'Centraleuropæisk', charsetCR: 'Kyrillisk', charsetCT: 'Traditionel kinesisk (Big5)', charsetGR: 'Græsk', charsetJP: 'Japansk', charsetKR: 'Koreansk', charsetOther: 'Anden tegnsætskode', charsetTR: 'Tyrkisk', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Vesteuropæisk', chooseColor: 'Vælg', design: 'Design', docTitle: 'Sidetitel', docType: 'Dokumenttype kategori', docTypeOther: 'Anden dokumenttype kategori', label: 'Egenskaber for dokument', margin: 'Sidemargen', marginBottom: 'Nederst', marginLeft: 'Venstre', marginRight: 'Højre', marginTop: 'Øverst', meta: 'Metatags', metaAuthor: 'Forfatter', metaCopyright: 'Copyright', metaDescription: 'Dokumentbeskrivelse', metaKeywords: 'Dokument index nøgleord (kommasepareret)', other: '<anden>', previewHtml: '<p>Dette er et <strong>eksempel på noget tekst</strong>. Du benytter <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Egenskaber for dokument', txtColor: 'Tekstfarve', xhtmlDec: 'Inkludere XHTML deklartion' } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/af.js���������������������������������0000644�0001750�0001750�00000002624�14006075351�023413� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'af', { bgColor: 'Agtergrond kleur', bgFixed: 'Vasgeklemde Agtergrond', bgImage: 'Agtergrond Beeld URL', charset: 'Karakterstel Kodeering', charsetASCII: 'ASCII', // MISSING charsetCE: 'Sentraal Europa', charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinees Traditioneel (Big5)', charsetGR: 'Grieks', charsetJP: 'Japanees', charsetKR: 'Koreans', charsetOther: 'Ander Karakterstel Kodeering', charsetTR: 'Turks', charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Kies', design: 'Design', // MISSING docTitle: 'Bladsy Opskrif', docType: 'Dokument Opskrif Soort', docTypeOther: 'Ander Dokument Opskrif Soort', label: 'Dokument Eienskappe', margin: 'Bladsy Rante', marginBottom: 'Onder', marginLeft: 'Links', marginRight: 'Regs', marginTop: 'Bo', meta: 'Meta Data', metaAuthor: 'Skrywer', metaCopyright: 'Kopiereg', metaDescription: 'Dokument Beskrywing', metaKeywords: 'Dokument Index Sleutelwoorde(comma verdeelt)', other: '<ander>', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Dokument Eienskappe', txtColor: 'Tekskleur', xhtmlDec: 'Voeg XHTML verklaring by' } ); ������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/hu.js���������������������������������0000644�0001750�0001750�00000002550�14006075351�023437� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'hu', { bgColor: 'Háttérszín', bgFixed: 'Nem gördíthető háttér', bgImage: 'Háttérkép cím', charset: 'Karakterkódolás', charsetASCII: 'ASCII', charsetCE: 'Közép-Európai', charsetCR: 'Cyrill', charsetCT: 'Kínai Tradicionális (Big5)', charsetGR: 'Görög', charsetJP: 'Japán', charsetKR: 'Koreai', charsetOther: 'Más karakterkódolás', charsetTR: 'Török', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Nyugat-Európai', chooseColor: 'Válasszon', design: 'Design', docTitle: 'Oldalcím', docType: 'Dokumentum típus fejléc', docTypeOther: 'Más dokumentum típus fejléc', label: 'Dokumentum tulajdonságai', margin: 'Oldal margók', marginBottom: 'Alsó', marginLeft: 'Bal', marginRight: 'Jobb', marginTop: 'Felső', meta: 'Meta adatok', metaAuthor: 'Szerző', metaCopyright: 'Szerzői jog', metaDescription: 'Dokumentum leírás', metaKeywords: 'Dokumentum keresőszavak (vesszővel elválasztva)', other: '<más>', previewHtml: '<p>Ez itt egy <strong>példa</strong>. A <a href="javascript:void(0)">CKEditor</a>-t használod.</p>', title: 'Dokumentum tulajdonságai', txtColor: 'Betűszín', xhtmlDec: 'XHTML deklarációk beillesztése' } ); ��������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/sr.js���������������������������������0000644�0001750�0001750�00000003500�14006075351�023443� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'sr', { bgColor: 'Боја позадине', bgFixed: 'Фиксирана позадина', bgImage: 'УРЛ позадинске слике', charset: 'Кодирање скупа карактера', charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Остала кодирања скупа карактера', charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'Наслов странице', docType: 'Заглавље типа документа', docTypeOther: 'Остала заглавља типа документа', label: 'Особине документа', margin: 'Маргине странице', marginBottom: 'Доња', marginLeft: 'Лева', marginRight: 'Десна', marginTop: 'Горња', meta: 'Метаподаци', metaAuthor: 'Аутор', metaCopyright: 'Ауторска права', metaDescription: 'Опис документа', metaKeywords: 'Кључне речи за индексирање документа (раздвојене зарезом)', other: '<other>', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Особине документа', txtColor: 'Боја текста', xhtmlDec: 'Улључи XHTML декларације' } ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/nl.js���������������������������������0000644�0001750�0001750�00000002550�14006075351�023434� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'nl', { bgColor: 'Achtergrondkleur', bgFixed: 'Niet-scrollend (gefixeerde) achtergrond', bgImage: 'Achtergrondafbeelding URL', charset: 'Tekencodering', charsetASCII: 'ASCII', charsetCE: 'Centraal Europees', charsetCR: 'Cyrillisch', charsetCT: 'Traditioneel Chinees (Big5)', charsetGR: 'Grieks', charsetJP: 'Japans', charsetKR: 'Koreaans', charsetOther: 'Andere tekencodering', charsetTR: 'Turks', charsetUN: 'Unicode (UTF-8)', charsetWE: 'West Europees', chooseColor: 'Kies', design: 'Ontwerp', docTitle: 'Paginatitel', docType: 'Documenttype-definitie', docTypeOther: 'Andere documenttype-definitie', label: 'Documenteigenschappen', margin: 'Pagina marges', marginBottom: 'Onder', marginLeft: 'Links', marginRight: 'Rechts', marginTop: 'Boven', meta: 'Meta tags', metaAuthor: 'Auteur', metaCopyright: 'Auteursrechten', metaDescription: 'Documentbeschrijving', metaKeywords: 'Trefwoorden voor indexering (komma-gescheiden)', other: 'Anders...', previewHtml: '<p>Dit is <strong>voorbeeld tekst</strong>. Je gebruikt <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Documenteigenschappen', txtColor: 'Tekstkleur', xhtmlDec: 'XHTML declaratie invoegen' } ); ��������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/vi.js���������������������������������0000644�0001750�0001750�00000002772�14006075351�023447� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'vi', { bgColor: 'Màu nền', bgFixed: 'Không cuộn nền', bgImage: 'URL của Hình ảnh nền', charset: 'Bảng mã ký tự', charsetASCII: 'ASCII', charsetCE: 'Trung Âu', charsetCR: 'Tiếng Kirin', charsetCT: 'Tiếng Trung Quốc (Big5)', charsetGR: 'Tiếng Hy Lạp', charsetJP: 'Tiếng Nhật', charsetKR: 'Tiếng Hàn', charsetOther: 'Bảng mã ký tự khác', charsetTR: 'Tiếng Thổ Nhĩ Kỳ', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Tây Âu', chooseColor: 'Chọn màu', design: 'Thiết kế', docTitle: 'Tiêu đề Trang', docType: 'Kiểu Đề mục Tài liệu', docTypeOther: 'Kiểu Đề mục Tài liệu khác', label: 'Thuộc tính Tài liệu', margin: 'Đường biên của Trang', marginBottom: 'Dưới', marginLeft: 'Trái', marginRight: 'Phải', marginTop: 'Trên', meta: 'Siêu dữ liệu', metaAuthor: 'Tác giả', metaCopyright: 'Bản quyền', metaDescription: 'Mô tả tài liệu', metaKeywords: 'Các từ khóa chỉ mục tài liệu (phân cách bởi dấu phẩy)', other: '<khác>', previewHtml: '<p>Đây là một số <strong>văn bản mẫu</strong>. Bạn đang sử dụng <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Thuộc tính Tài liệu', txtColor: 'Màu chữ', xhtmlDec: 'Bao gồm cả định nghĩa XHTML' } ); ������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ja.js���������������������������������0000644�0001750�0001750�00000002723�14006075351�023417� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ja', { bgColor: '背景色', bgFixed: 'スクロールしない背景', bgImage: '背景画像 URL', charset: '文字コード', charsetASCII: 'ASCII', charsetCE: 'Central European', charsetCR: 'Cyrillic', charsetCT: 'Chinese Traditional (Big5)', charsetGR: 'Greek', charsetJP: '日本語', charsetKR: 'Korean', charsetOther: '他の文字セット符号化', charsetTR: 'Turkish', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Western European', chooseColor: '色の選択', design: 'デザイン', docTitle: 'ページタイトル', docType: '文書タイプヘッダー', docTypeOther: 'その他文書タイプヘッダー', label: '文書 プロパティ', margin: 'ページ・マージン', marginBottom: '下部', marginLeft: '左', marginRight: '右', marginTop: '上部', meta: 'メタデータ', metaAuthor: '文書の作者', metaCopyright: '文書の著作権', metaDescription: '文書の概要', metaKeywords: '文書のキーワード(カンマ区切り)', other: '<その他の>', previewHtml: '<p>これは<strong>テキストサンプル</strong>です。 あなたは、<a href="javascript:void(0)">CKEditor</a>を使っています。</p>', title: '文書 プロパティ', txtColor: 'テキスト色', xhtmlDec: 'XHTML宣言をインクルード' } ); ���������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/id.js���������������������������������0000644�0001750�0001750�00000003254�14006075351�023421� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'id', { bgColor: 'Warna Latar Belakang', bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'Background Image URL', // MISSING charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Other Character Set Encoding', // MISSING charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Pilih', design: 'Design', // MISSING docTitle: 'Page Title', // MISSING docType: 'Document Type Heading', // MISSING docTypeOther: 'Other Document Type Heading', // MISSING label: 'Document Properties', // MISSING margin: 'Page Margins', // MISSING marginBottom: 'Bawah', marginLeft: 'Kiri', marginRight: 'Kanan', marginTop: 'Atas', meta: 'Meta Tags', // MISSING metaAuthor: 'Author', // MISSING metaCopyright: 'Copyright', // MISSING metaDescription: 'Document Description', // MISSING metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING other: 'Other...', // MISSING previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Document Properties', // MISSING txtColor: 'Text Color', // MISSING xhtmlDec: 'Include XHTML Declarations' // MISSING } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/en-gb.js������������������������������0000644�0001750�0001750�00000002544�14006075351�024016� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'en-gb', { bgColor: 'Background Colour', bgFixed: 'Non-scrolling (Fixed) Background', bgImage: 'Background Image URL', charset: 'Character Set Encoding', charsetASCII: 'ASCII', charsetCE: 'Central European', charsetCR: 'Cyrillic', charsetCT: 'Chinese Traditional (Big5)', charsetGR: 'Greek', charsetJP: 'Japanese', charsetKR: 'Korean', charsetOther: 'Other Character Set Encoding', charsetTR: 'Turkish', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Western European', chooseColor: 'Choose', design: 'Design', docTitle: 'Page Title', docType: 'Document Type Heading', docTypeOther: 'Other Document Type Heading', label: 'Document Properties', margin: 'Page Margins', marginBottom: 'Bottom', marginLeft: 'Left', marginRight: 'Right', marginTop: 'Top', meta: 'Meta Tags', metaAuthor: 'Author', metaCopyright: 'Copyright', metaDescription: 'Document Description', metaKeywords: 'Document Indexing Keywords (comma-separated)', other: 'Other...', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Document Properties', txtColor: 'Text Colour', xhtmlDec: 'Include XHTML Declarations' } ); ������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/sq.js���������������������������������0000644�0001750�0001750�00000003017�14006075351�023445� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'sq', { bgColor: 'Ngjyra e Prapavijës', bgFixed: 'Prapavijë pa zvarritje (fiks)', bgImage: 'URL e Fotografisë së Prapavijës', charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', charsetCE: 'Evropës Qendrore', charsetCR: 'Sllave', charsetCT: 'Kinezisht Tradicional (Big5)', charsetGR: 'Greke', charsetJP: 'Japoneze', charsetKR: 'Koreane', charsetOther: 'Other Character Set Encoding', // MISSING charsetTR: 'Turke', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Evropiano Perëndimor', chooseColor: 'Përzgjidh', design: 'Dizajni', docTitle: 'Titulli i Faqes', docType: 'Document Type Heading', // MISSING docTypeOther: 'Koka e Llojit Tjetër të Dokumentit', label: 'Karakteristikat e Dokumentit', margin: 'Kufijtë e Faqes', marginBottom: 'Poshtë', marginLeft: 'Majtas', marginRight: 'Djathtas', marginTop: 'Lart', meta: 'Meta Tags', // MISSING metaAuthor: 'Autori', metaCopyright: 'Të drejtat e kopjimit', metaDescription: 'Përshkrimi i Dokumentit', metaKeywords: 'Fjalët kyçe të indeksimit të dokumentit (të ndarë me presje)', other: 'Tjera...', previewHtml: '<p>Ky është nje <strong>tekst shembull</strong>. Ju jeni duke shfrytëzuar <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Karakteristikat e Dokumentit', txtColor: 'Ngjyra e Tekstit', xhtmlDec: 'Përfshij XHTML Deklarimet' } ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/bn.js���������������������������������0000644�0001750�0001750�00000004133�14006075351�023421� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'bn', { bgColor: 'ব্যাকগ্রাউন্ড রং', bgFixed: 'স্ক্রলহীন ব্যাকগ্রাউন্ড', bgImage: 'ব্যাকগ্রাউন্ড ছবির URL', charset: 'ক্যারেক্টার সেট এনকোডিং', charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'অন্য ক্যারেক্টার সেট এনকোডিং', charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'পেজ শীর্ষক', docType: 'ডক্যুমেন্ট টাইপ হেডিং', docTypeOther: 'অন্য ডক্যুমেন্ট টাইপ হেডিং', label: 'ডক্যুমেন্ট প্রোপার্টি', margin: 'পেজ মার্জিন', marginBottom: 'নীচে', marginLeft: 'বামে', marginRight: 'ডানে', marginTop: 'উপর', meta: 'মেটাডেটা', metaAuthor: 'লেখক', metaCopyright: 'কপীরাইট', metaDescription: 'ডক্যূমেন্ট বর্ণনা', metaKeywords: 'ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)', other: '<other>', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'ডক্যুমেন্ট প্রোপার্টি', txtColor: 'টেক্স্ট রং', xhtmlDec: 'XHTML ডেক্লারেশন যুক্ত কর' } ); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/en-au.js������������������������������0000644�0001750�0001750�00000003356�14006075351�024035� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'en-au', { bgColor: 'Background Color', // MISSING bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'Background Image URL', // MISSING charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Other Character Set Encoding', // MISSING charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', // MISSING design: 'Design', // MISSING docTitle: 'Page Title', // MISSING docType: 'Document Type Heading', // MISSING docTypeOther: 'Other Document Type Heading', // MISSING label: 'Document Properties', // MISSING margin: 'Page Margins', // MISSING marginBottom: 'Bottom', // MISSING marginLeft: 'Left', // MISSING marginRight: 'Right', // MISSING marginTop: 'Top', // MISSING meta: 'Meta Tags', // MISSING metaAuthor: 'Author', // MISSING metaCopyright: 'Copyright', // MISSING metaDescription: 'Document Description', // MISSING metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING other: 'Other...', // MISSING previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Document Properties', // MISSING txtColor: 'Text Color', // MISSING xhtmlDec: 'Include XHTML Declarations' // MISSING } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ku.js���������������������������������0000644�0001750�0001750�00000003433�14006075351�023443� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ku', { bgColor: 'ڕەنگی پاشبنەما', bgFixed: 'بێ هاتووچوپێکردنی (چەسپاو) پاشبنەمای وێنه', bgImage: 'ناونیشانی بەستەری وێنەی پاشبنەما', charset: 'دەستەی نووسەی بەکۆدکەر', charsetASCII: 'ASCII', charsetCE: 'ناوەڕاستی ئەوروپا', charsetCR: 'سیریلیك', charsetCT: 'چینی(Big5)', charsetGR: 'یۆنانی', charsetJP: 'ژاپۆنی', charsetKR: 'کۆریا', charsetOther: 'دەستەی نووسەی بەکۆدکەری تر', charsetTR: 'تورکی', charsetUN: 'Unicode (UTF-8)', charsetWE: 'ڕۆژئاوای ئەوروپا', chooseColor: 'هەڵبژێرە', design: 'شێوەکار', docTitle: 'سەردێڕی پەڕه', docType: 'سەرپەڕەی جۆری پەڕه', docTypeOther: 'سەرپەڕەی جۆری پەڕەی تر', label: 'خاسییەتی پەڕه', margin: 'تەنیشت پەڕه', marginBottom: 'ژێرەوه', marginLeft: 'چەپ', marginRight: 'ڕاست', marginTop: 'سەرەوه', meta: 'زانیاری مێتا', metaAuthor: 'نووسەر', metaCopyright: 'مافی بڵاوکردنەوەی', metaDescription: 'پێناسەی لاپەڕه', metaKeywords: 'بەڵگەنامەی وشەی کاریگەر(به کۆما لێکیان جیابکەوه)', other: 'هیتر...', previewHtml: '<p>ئەمە وەك نموونەی <strong>دەقه</strong>. تۆ بەکاردەهێنیت <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'خاسییەتی پەڕه', txtColor: 'ڕەنگی دەق', xhtmlDec: 'بەیاننامەکانی XHTML لەگەڵدابێت' } ); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/ms.js���������������������������������0000644�0001750�0001750�00000002746�14006075351�023451� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'ms', { bgColor: 'Warna Latarbelakang', bgFixed: 'Imej Latarbelakang tanpa Skrol', bgImage: 'URL Gambar Latarbelakang', charset: 'Enkod Set Huruf', charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Enkod Set Huruf yang Lain', charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'Tajuk Muka Surat', docType: 'Jenis Kepala Dokumen', docTypeOther: 'Jenis Kepala Dokumen yang Lain', label: 'Ciri-ciri dokumen', margin: 'Margin Muka Surat', marginBottom: 'Bawah', marginLeft: 'Kiri', marginRight: 'Kanan', marginTop: 'Atas', meta: 'Data Meta', metaAuthor: 'Penulis', metaCopyright: 'Hakcipta', metaDescription: 'Keterangan Dokumen', metaKeywords: 'Kata Kunci Indeks Dokumen (dipisahkan oleh koma)', other: '<lain>', previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Ciri-ciri dokumen', txtColor: 'Warna Text', xhtmlDec: 'Masukkan pemula kod XHTML' } ); ��������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/fr.js���������������������������������0000644�0001750�0001750�00000002524�14006075351�023433� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'fr', { bgColor: 'Couleur de fond', bgFixed: 'Image fixe sans défilement', bgImage: 'Image de fond', charset: 'Encodage de caractère', charsetASCII: 'ASCII', charsetCE: 'Europe Centrale', charsetCR: 'Cyrillique', charsetCT: 'Chinois Traditionnel (Big5)', charsetGR: 'Grec', charsetJP: 'Japonais', charsetKR: 'Coréen', charsetOther: 'Autre encodage de caractère', charsetTR: 'Turc', charsetUN: 'Unicode (UTF-8)', charsetWE: 'Occidental', chooseColor: 'Choisissez', design: 'Design', docTitle: 'Titre de la page', docType: 'Type de document', docTypeOther: 'Autre type de document', label: 'Propriétés du document', margin: 'Marges', marginBottom: 'Bas', marginLeft: 'Gauche', marginRight: 'Droite', marginTop: 'Haut', meta: 'Métadonnées', metaAuthor: 'Auteur', metaCopyright: 'Copyright', metaDescription: 'Description', metaKeywords: 'Mots-clés (séparés par des virgules)', other: '<autre>', previewHtml: '<p>Ceci est un <strong>texte d\'exemple</strong>. Vous utilisez <a href="javascript:void(0)">CKEditor</a>.</p>', title: 'Propriétés du document', txtColor: 'Couleur de texte', xhtmlDec: 'Inclure les déclarations XHTML' } ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/lang/bs.js���������������������������������0000644�0001750�0001750�00000003236�14006075351�023431� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'docprops', 'bs', { bgColor: 'Background Color', bgFixed: 'Non-scrolling (Fixed) Background', // MISSING bgImage: 'Background Image URL', // MISSING charset: 'Character Set Encoding', // MISSING charsetASCII: 'ASCII', // MISSING charsetCE: 'Central European', // MISSING charsetCR: 'Cyrillic', // MISSING charsetCT: 'Chinese Traditional (Big5)', // MISSING charsetGR: 'Greek', // MISSING charsetJP: 'Japanese', // MISSING charsetKR: 'Korean', // MISSING charsetOther: 'Other Character Set Encoding', // MISSING charsetTR: 'Turkish', // MISSING charsetUN: 'Unicode (UTF-8)', // MISSING charsetWE: 'Western European', // MISSING chooseColor: 'Choose', design: 'Design', // MISSING docTitle: 'Page Title', // MISSING docType: 'Document Type Heading', // MISSING docTypeOther: 'Other Document Type Heading', // MISSING label: 'Document Properties', // MISSING margin: 'Page Margins', // MISSING marginBottom: 'Dno', marginLeft: 'Lijevo', marginRight: 'Desno', marginTop: 'Vrh', meta: 'Meta Tags', // MISSING metaAuthor: 'Author', // MISSING metaCopyright: 'Copyright', // MISSING metaDescription: 'Document Description', // MISSING metaKeywords: 'Document Indexing Keywords (comma separated)', // MISSING other: 'Other...', // MISSING previewHtml: '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>', // MISSING title: 'Document Properties', // MISSING txtColor: 'Boja teksta', xhtmlDec: 'Include XHTML Declarations' // MISSING } ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/icons/�������������������������������������0000755�0001750�0001750�00000000000�14006075351�022655� 5����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/icons/docprops.png�������������������������0000644�0001750�0001750�00000001514�14006075351�025215� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x��eIDAT8mkFwV~HJ".L``ܬcW04xM!!MZbBXFѤpv/;Ü{92zAmۼWMӐ)YQ5ƘRJ>yV: C ,D@DPJ1yϻG^YYDhI Nd:q$硔2P5y$I1ZNPfgg"|>~~~Fk"B&677 ˲S?fjZ"zx7qp`@~mm &'NWWWZF`1dYNqd2!s|7eY1Qh/�uF`0Y)[g7v]D_;~Nj4�Dg�U* ߽ʲ(hf+Yqqq#rpp$I? Of x<!j8#3MUU1锇*knook8ckk$Mӿ.OOOض}l[�s9EQP%eYwj1%iϙ眝-Hw@$4Mg"���%tEXtdate:create�2013-07-04T17:03:03+02:00Mx���%tEXtdate:modify�2013-07-04T17:03:03+02:00<���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/icons/docprops-rtl.png���������������������0000644�0001750�0001750�00000001510�14006075351�026010� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x��aIDAT8m1K$Y[U]]mUvB'+"(L 2Px~n&,lftI#^ Us9'��<("I3xxx k-KvuODD+5�%yqq9iZ_13U "σ!9/H zka2k-�+͍&Iw~~~VU.nc eY�x"�www&3Ðf1(硋sZho8qB$t:|}GQsi9q1pH t:e+𫵖4MFk-㼪N[o�a@ߧh|D,u@a~�&"?f՟j+uȲ<g}}swccSQlmmieTU|_"BxLlnn!=Ns,[FרǢ(^SK^vyFj1L`7M:3]]U<ɲ c zrS%Ul6d�1U?VW���%tEXtdate:create�2013-07-04T17:03:03+02:00Mx���%tEXtdate:modify�2013-07-04T17:03:03+02:00<���tEXtSoftware�www.inkscape.org<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/icons/hidpi/�������������������������������0000755�0001750�0001750�00000000000�14006075351�023752� 5����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/icons/hidpi/docprops.png�������������������0000644�0001750�0001750�00000003625�14006075351�026317� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� B(x��IDATXÕMl\5gx&p88N"8(vXMEY4u[AtE"+PQJ R( (ZD1`!yb>jkr+͌,�(ZDz_01Z=?>(}}RJƷŕq35�xz޺WKK)z >$ \(P^Y^$R HR裳25A8cUj9OoϜ9Ã{X=+5D[k*{ŋ Iؽ[vsV|nxhT25"KzMFEt^^Eto j?lqҥc?{)ٻ{7=gbmZ d2$: ! /YKPw=eB}`c-Jktuq t۹9ҩ޹Skذ0Pc jJK/hw#38(vrs}}JWY)QJ;eWW1]$9<|Et` b7np9J�J)G:  is ˗Y^^bc?QW"hv :�0dlvk\.S"`*[@DpTmfN>Ky0=8ֺ-OȑLJIw||BZQ"ԯ> @k9#<2O>*?/./A|{ZQ{4v֤Idjj``Æ<63#ɾ>~h&Q"Ǐ;ÿt: ۙj D)VFo鲔w]g=:bk-ָV hc1Au;氲4Z|[5Z}_L.N&,2ܟd2ʄNJ+eP6̶mێEZ)R$21Ͼ,p'ή~�՚'(k d|ÿ5XK-֐XYcV(/mj}ƍ+8f}#z8V*lۺZ5Ҥ 8\.8SըDQ$JD߷O8 JDEQ$zZF>љ\.c..NkLn2-N}ZV) DQD4I+pDQDPZrԩObg5.4ֲ׹H.R STr^\�KA�#[|3??ҚB@*R JkٲYn-�B>;1:Z{MrQ5 1DQD.ݛ71:ZK/GYDsyAJDО70/)E˒N`ܠ `_~?%$| <}kv՝@w;R…?{ Ta5ZmGog B;N7k aHດծd+fQy^;04<o]ܸi33=ݠ>LIe'C֖7/DFqL=TL]i?eqӔt@h**_ 8JBC(r9l.myX䏯‰'�T*8p߿*B;R?kmPvrP���%tEXtdate:create�2013-06-20T11:07:04+02:00I���%tEXtdate:modify�2013-06-20T11:07:04+02:00���tEXtSoftware�www.inkscape.org<����IENDB`�����������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/docprops/icons/hidpi/docprops-rtl.png���������������0000644�0001750�0001750�00000003565�14006075351�027121� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� B(x��IDATXÕKlT2{x Z IRC҂* "uPvuۭY7BD(QtA@A&Tm %ԋ"p{s9\|Hsf~#'Aac-Zk1خF]Ȧ3R)ce*:ژh2 7#SSg٧[T-7N|d9xbqvjb%jןqt~jx3u}v$Nwɏ8 ٍdҥKO%Z O)l/ ?^ ponV=gϳݺz|||v|^f?w.L |A�w]~Pa5*M!JQF<{llv޽dnn sT> 5(8F&>С?߷O6 ;t-pͽU "kTY+Bav|><4DpU +* ܿQ=<6yXȍkoNRשFQ܌1< C.?Ͽ1=TsZrYCRT6d12–|6Bu]Dz6f\p]LB9 p/�J)򃃈Μme1K: yxzPT4#29[|ҩϽ֏>رn)Ȧ8k�1XMzֹR|6LN ~ˮ#;Ѻ2}}/O?@>A<PqZm['Ky?ƈW)<E9q\݂1ѣ<IӠ> N9"b&y60 A|&ϓ<A K3a0kL}kIv82X|E�+�^9u 8عsKZ 0h*a%њl1XGd_T6{)_)8IA:IvW)J_R "vÅ|m*#7os5W)"J$hj%uHChMRɓ2Q$ q#8"Nǒ$ QgftR]1#v60 _u2qn}8)u~}av Fkn *oۅJZhLVT*o�Z>!-YMޅ]۷/(E\p|(8J1??Ϯ kVA 8Ao gt4mJqcCǔJ%>}=g/5nU 8"GV^A@:d q?f+jc50Pik`7h*ފ!6ac;̘$,/-񟹹~UZlŻ/A.jq+s!1$ ]|ߺ:nTmy}0HDz..4:6#7TᑑuccxX4$Zk,8IA<5l+Eli^+Wd!Z2V;@ts{X^Z\.WVp1r p2 "���%tEXtdate:create�2013-06-20T11:07:04+02:00I���%tEXtdate:modify�2013-06-20T11:07:04+02:00���tEXtSoftware�www.inkscape.org<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/wysiwygarea/����������������������������������������0000755�0001750�0001750�00000000000�14006075351�022264� 5����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/wysiwygarea/samples/��������������������������������0000755�0001750�0001750�00000000000�14006075351�023730� 5����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rt-4.4.4/devel/third-party/ckeditor-src/plugins/wysiwygarea/samples/fullpage.html�������������������0000644�0001750�0001750�00000017532�14006075351�026425� 0����������������������������������������������������������������������������������������������������ustar �dom�����������������������������dom��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <!-- Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license --> <html> <head> <meta charset="utf-8"> <title>Full Page Editing — CKEditor Sample

      CKEditor Samples » Full Page Editing

      This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

      This sample shows how to configure CKEditor to edit entire HTML pages, from the <html> tag to the </html> tag.

      The CKEditor instance below is inserted with a JavaScript call using the following code:

      CKEDITOR.replace( 'textarea_id', {
      	fullPage: true,
      	allowedContent: true
      });
      

      Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

      The allowedContent in the code above is set to true to disable content filtering. Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations.

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/wysiwygarea/plugin.js0000644000175000017500000005677714006075351024146 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview The WYSIWYG Area plugin. It registers the "wysiwyg" editing * mode, which handles the main editing area space. */ ( function() { CKEDITOR.plugins.add( 'wysiwygarea', { init: function( editor ) { if ( editor.config.fullPage ) { editor.addFeature( { allowedContent: 'html head title; style [media,type]; body (*)[id]; meta link [*]', requiredContent: 'body' } ); } editor.addMode( 'wysiwyg', function( callback ) { var src = 'document.open();' + // In IE, the document domain must be set any time we call document.open(). ( CKEDITOR.env.ie ? '(' + CKEDITOR.tools.fixDomain + ')();' : '' ) + 'document.close();'; // With IE, the custom domain has to be taken care at first, // for other browers, the 'src' attribute should be left empty to // trigger iframe's 'load' event. // Microsoft Edge throws "Permission Denied" if treated like an IE (#13441). if ( CKEDITOR.env.air ) { src = 'javascript:void(0)'; // jshint ignore:line } else if ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) { src = 'javascript:void(function(){' + encodeURIComponent( src ) + '}())'; // jshint ignore:line } else { src = ''; } var iframe = CKEDITOR.dom.element.createFromHtml( '' ); iframe.setStyles( { width: '100%', height: '100%' } ); iframe.addClass( 'cke_wysiwyg_frame' ).addClass( 'cke_reset' ); var contentSpace = editor.ui.space( 'contents' ); contentSpace.append( iframe ); // Asynchronous iframe loading is only required in IE>8 and Gecko (other reasons probably). // Do not use it on WebKit as it'll break the browser-back navigation. var useOnloadEvent = ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) || CKEDITOR.env.gecko; if ( useOnloadEvent ) iframe.on( 'load', onLoad ); var frameLabel = editor.title, helpLabel = editor.fire( 'ariaEditorHelpLabel', {} ).label; if ( frameLabel ) { if ( CKEDITOR.env.ie && helpLabel ) frameLabel += ', ' + helpLabel; iframe.setAttribute( 'title', frameLabel ); } if ( helpLabel ) { var labelId = CKEDITOR.tools.getNextId(), desc = CKEDITOR.dom.element.createFromHtml( '' + helpLabel + '' ); contentSpace.append( desc, 1 ); iframe.setAttribute( 'aria-describedby', labelId ); } // Remove the ARIA description. editor.on( 'beforeModeUnload', function( evt ) { evt.removeListener(); if ( desc ) desc.remove(); } ); iframe.setAttributes( { tabIndex: editor.tabIndex, allowTransparency: 'true' } ); // Execute onLoad manually for all non IE||Gecko browsers. !useOnloadEvent && onLoad(); editor.fire( 'ariaWidget', iframe ); function onLoad( evt ) { evt && evt.removeListener(); editor.editable( new framedWysiwyg( editor, iframe.$.contentWindow.document.body ) ); editor.setData( editor.getData( 1 ), callback ); } } ); } } ); /** * Adds the path to a stylesheet file to the exisiting {@link CKEDITOR.config#contentsCss} value. * * **Note:** This method is available only with the `wysiwygarea` plugin and only affects * classic editors based on it (so it does not affect inline editors). * * editor.addContentsCss( 'assets/contents.css' ); * * @since 4.4 * @param {String} cssPath The path to the stylesheet file which should be added. * @member CKEDITOR.editor */ CKEDITOR.editor.prototype.addContentsCss = function( cssPath ) { var cfg = this.config, curContentsCss = cfg.contentsCss; // Convert current value into array. if ( !CKEDITOR.tools.isArray( curContentsCss ) ) cfg.contentsCss = curContentsCss ? [ curContentsCss ] : []; cfg.contentsCss.push( cssPath ); }; function onDomReady( win ) { var editor = this.editor, doc = win.document, body = doc.body; // Remove helper scripts from the DOM. var script = doc.getElementById( 'cke_actscrpt' ); script && script.parentNode.removeChild( script ); script = doc.getElementById( 'cke_shimscrpt' ); script && script.parentNode.removeChild( script ); script = doc.getElementById( 'cke_basetagscrpt' ); script && script.parentNode.removeChild( script ); body.contentEditable = true; if ( CKEDITOR.env.ie ) { // Don't display the focus border. body.hideFocus = true; // Disable and re-enable the body to avoid IE from // taking the editing focus at startup. (#141 / #523) body.disabled = true; body.removeAttribute( 'disabled' ); } delete this._.isLoadingData; // Play the magic to alter element reference to the reloaded one. this.$ = body; doc = new CKEDITOR.dom.document( doc ); this.setup(); this.fixInitialSelection(); if ( CKEDITOR.env.ie ) { doc.getDocumentElement().addClass( doc.$.compatMode ); // Prevent IE from leaving new paragraph after deleting all contents in body. (#6966) editor.config.enterMode != CKEDITOR.ENTER_P && this.attachListener( doc, 'selectionchange', function() { var body = doc.getBody(), sel = editor.getSelection(), range = sel && sel.getRanges()[ 0 ]; if ( range && body.getHtml().match( /^

      (?: |
      )<\/p>$/i ) && range.startContainer.equals( body ) ) { // Avoid the ambiguity from a real user cursor position. setTimeout( function() { range = editor.getSelection().getRanges()[ 0 ]; if ( !range.startContainer.equals( 'body' ) ) { body.getFirst().remove( 1 ); range.moveToElementEditEnd( body ); range.select(); } }, 0 ); } } ); } // Fix problem with cursor not appearing in Webkit and IE11+ when clicking below the body (#10945, #10906). // Fix for older IEs (8-10 and QM) is placed inside selection.js. if ( CKEDITOR.env.webkit || ( CKEDITOR.env.ie && CKEDITOR.env.version > 10 ) ) { doc.getDocumentElement().on( 'mousedown', function( evt ) { if ( evt.data.getTarget().is( 'html' ) ) { // IE needs this timeout. Webkit does not, but it does not cause problems too. setTimeout( function() { editor.editable().focus(); } ); } } ); } // Config props: disableObjectResizing and disableNativeTableHandles handler. objectResizeDisabler( editor ); // Enable dragging of position:absolute elements in IE. try { editor.document.$.execCommand( '2D-position', false, true ); } catch ( e ) {} if ( CKEDITOR.env.gecko || CKEDITOR.env.ie && editor.document.$.compatMode == 'CSS1Compat' ) { this.attachListener( this, 'keydown', function( evt ) { var keyCode = evt.data.getKeystroke(); // PageUp OR PageDown if ( keyCode == 33 || keyCode == 34 ) { // PageUp/PageDown scrolling is broken in document // with standard doctype, manually fix it. (#4736) if ( CKEDITOR.env.ie ) { setTimeout( function() { editor.getSelection().scrollIntoView(); }, 0 ); } // Page up/down cause editor selection to leak // outside of editable thus we try to intercept // the behavior, while it affects only happen // when editor contents are not overflowed. (#7955) else if ( editor.window.$.innerHeight > this.$.offsetHeight ) { var range = editor.createRange(); range[ keyCode == 33 ? 'moveToElementEditStart' : 'moveToElementEditEnd' ]( this ); range.select(); evt.data.preventDefault(); } } } ); } if ( CKEDITOR.env.ie ) { // [IE] Iframe will still keep the selection when blurred, if // focus is moved onto a non-editing host, e.g. link or button, but // it becomes a problem for the object type selection, since the resizer // handler attached on it will mark other part of the UI, especially // for the dialog. (#8157) // [IE<8 & Opera] Even worse For old IEs, the cursor will not vanish even if // the selection has been moved to another text input in some cases. (#4716) // // Now the range restore is disabled, so we simply force IE to clean // up the selection before blur. this.attachListener( doc, 'blur', function() { // Error proof when the editor is not visible. (#6375) try { doc.$.selection.empty(); } catch ( er ) {} } ); } if ( CKEDITOR.env.iOS ) { // [iOS] If touch is bound to any parent of the iframe blur happens on any touch // event and body becomes the focused element (#10714). this.attachListener( doc, 'touchend', function() { win.focus(); } ); } var title = editor.document.getElementsByTag( 'title' ).getItem( 0 ); // document.title is malfunctioning on Chrome, so get value from the element (#12402). title.data( 'cke-title', title.getText() ); // [IE] JAWS will not recognize the aria label we used on the iframe // unless the frame window title string is used as the voice label, // backup the original one and restore it on output. if ( CKEDITOR.env.ie ) editor.document.$.title = this._.docTitle; CKEDITOR.tools.setTimeout( function() { // Editable is ready after first setData. if ( this.status == 'unloaded' ) this.status = 'ready'; editor.fire( 'contentDom' ); if ( this._.isPendingFocus ) { editor.focus(); this._.isPendingFocus = false; } setTimeout( function() { editor.fire( 'dataReady' ); }, 0 ); }, 0, this ); } var framedWysiwyg = CKEDITOR.tools.createClass( { $: function() { this.base.apply( this, arguments ); this._.frameLoadedHandler = CKEDITOR.tools.addFunction( function( win ) { // Avoid opening design mode in a frame window thread, // which will cause host page scrolling.(#4397) CKEDITOR.tools.setTimeout( onDomReady, 0, this, win ); }, this ); this._.docTitle = this.getWindow().getFrame().getAttribute( 'title' ); }, base: CKEDITOR.editable, proto: { setData: function( data, isSnapshot ) { var editor = this.editor; if ( isSnapshot ) { this.setHtml( data ); this.fixInitialSelection(); // Fire dataReady for the consistency with inline editors // and because it makes sense. (#10370) editor.fire( 'dataReady' ); } else { this._.isLoadingData = true; editor._.dataStore = { id: 1 }; var config = editor.config, fullPage = config.fullPage, docType = config.docType; // Build the additional stuff to be included into . var headExtra = CKEDITOR.tools.buildStyleHtml( iframeCssFixes() ).replace( /' + '' + ''; var src = CKEDITOR.env.air ? 'javascript:void(0)' : // jshint ignore:line ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) ? 'javascript:void((function(){' + encodeURIComponent( // jshint ignore:line 'document.open();' + '(' + CKEDITOR.tools.fixDomain + ')();' + 'document.close();' ) + '})())"' : ''; var iframe = CKEDITOR.dom.element.createFromHtml( '' ); iframe.on( 'load', function( e ) { e.removeListener(); var doc = iframe.getFrameDocument(); doc.write( htmlToLoad ); editor.focusManager.add( doc.getBody() ); if ( CKEDITOR.env.air ) onPasteFrameLoad.call( this, doc.getWindow().$ ); }, dialog ); iframe.setCustomData( 'dialog', dialog ); var container = this.getElement(); container.setHtml( '' ); container.append( iframe ); // IE need a redirect on focus to make // the cursor blinking inside iframe. (#5461) if ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) { var focusGrabber = CKEDITOR.dom.element.createFromHtml( '' ); focusGrabber.on( 'focus', function() { // Since fixDomain is called in src attribute, // IE needs some slight delay to correctly move focus. setTimeout( function() { iframe.$.contentWindow.focus(); } ); } ); container.append( focusGrabber ); // Override focus handler on field. this.focus = function() { focusGrabber.focus(); this.fire( 'focus' ); }; } this.getInputElement = function() { return iframe; }; // Force container to scale in IE. if ( CKEDITOR.env.ie ) { container.setStyle( 'display', 'block' ); container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' ); } }, commit: function() { var editor = this.getDialog().getParentEditor(), body = this.getInputElement().getFrameDocument().getBody(), bogus = body.getBogus(), html; bogus && bogus.remove(); // Saving the contents so changes until paste is complete will not take place (#7500) html = body.getHtml(); // Opera needs some time to think about what has happened and what it should do now. setTimeout( function() { editor.fire( 'pasteDialogCommit', html ); }, 0 ); } } ] } ] }; } ); /** * Internal event to pass paste dialog's data to the listeners. * * @private * @event pasteDialogCommit * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/0000755000175000017500000000000014006075351022571 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/bg.js0000644000175000017500000000245114006075351023521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'bg', { copy: 'Копирай', copyError: 'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).', cut: 'Отрежи', cutError: 'Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).', paste: 'Вмъкни', pasteArea: 'Зона за вмъкване', pasteMsg: 'Вмъкнете тук съдъжанието с клавиатуарата (Ctrl/Cmd+V) и натиснете OK.', securityMsg: 'Заради настройките за сигурност на Вашия браузър, редакторът не може да прочете данните от клипборда коректно.', title: 'Вмъкни' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/cy.js0000644000175000017500000000170014006075351023540 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'cy', { copy: 'Copïo', copyError: '\'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu\'r golygydd i gynnal \'gweithredoedd copïo\' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).', cut: 'Torri', cutError: 'Nid yw gosodiadau diogelwch eich porwr yn caniatàu\'r golygydd i gynnal \'gweithredoedd torri\' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).', paste: 'Gludo', pasteArea: 'Ardal Gludo', pasteMsg: 'Gludwch i mewn i\'r blwch canlynol gan ddefnyddio\'r bysellfwrdd (Ctrl/Cmd+V) a phwyso Iawn.', securityMsg: 'Oherwydd gosodiadau diogelwch eich porwr, \'dyw\'r porwr ddim yn gallu ennill mynediad i\'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i\'r ffenestr hon.', title: 'Gludo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/no.js0000644000175000017500000000155414006075351023550 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'no', { copy: 'Kopier', copyError: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).', cut: 'Klipp ut', cutError: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).', paste: 'Lim inn', pasteArea: 'Innlimingsområde', pasteMsg: 'Vennligst lim inn i følgende boks med tastaturet (Ctrl/Cmd+V) og trykk OK.', securityMsg: 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.', title: 'Lim inn' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/hr.js0000644000175000017500000000165014006075351023542 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'hr', { copy: 'Kopiraj', copyError: 'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).', cut: 'Izreži', cutError: 'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).', paste: 'Zalijepi', pasteArea: 'Prostor za ljepljenje', pasteMsg: 'Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (Ctrl/Cmd+V) i kliknite OK.', securityMsg: 'Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.', title: 'Zalijepi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/th.js0000644000175000017500000000277714006075351023557 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'th', { copy: 'สำเนา', copyError: 'ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).', cut: 'ตัด', cutError: 'ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).', paste: 'วาง', pasteArea: 'Paste Area', // MISSING pasteMsg: 'กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (Ctrl/Cmd และ V)พร้อมๆกัน และกด OK.', securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'วาง' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ar.js0000644000175000017500000000222314006075351023530 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ar', { copy: 'نسخ', copyError: 'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).', cut: 'قص', cutError: 'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).', paste: 'لصق', pasteArea: 'منطقة اللصق', pasteMsg: 'الصق داخل الصندوق بإستخدام زرائر (Ctrl/Cmd+V) في لوحة المفاتيح، ثم اضغط زر موافق.', securityMsg: 'نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.', title: 'لصق' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/sk.js0000644000175000017500000000171714006075351023552 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'sk', { copy: 'Kopírovať', copyError: 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Prosím, použite na to klávesnicu (Ctrl/Cmd+C).', cut: 'Vystrihnúť', cutError: 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Prosím, použite na to klávesnicu (Ctrl/Cmd+X).', paste: 'Vložiť', pasteArea: 'Miesto pre vloženie', pasteMsg: 'Prosím, vložte nasledovný rámček použitím klávesnice (Ctrl/Cmd+V) a stlačte OK.', securityMsg: 'Kvôli vašim bezpečnostným nastaveniam prehliadača editor nie je schopný pristupovať k vašej schránke na kopírovanie priamo. Vložte to preto do tohto okna.', title: 'Vložiť' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ro.js0000644000175000017500000000205114006075351023545 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ro', { copy: 'Copiază', copyError: 'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).', cut: 'Taie', cutError: 'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).', paste: 'Adaugă', pasteArea: 'Suprafața de adăugare', pasteMsg: 'Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (Ctrl/Cmd+V) şi apăsaţi OK', securityMsg: 'Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.', title: 'Adaugă' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-ca.js0000644000175000017500000000161614006075351024116 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'en-ca', { copy: 'Copy', copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', cut: 'Cut', cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', paste: 'Paste', pasteArea: 'Paste Area', // MISSING pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', title: 'Paste' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ug.js0000644000175000017500000000276314006075351023552 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ug', { copy: 'نەشر ھوقۇقىغا ئىگە بەلگىسى', copyError: 'تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ', cut: 'كەس', cutError: 'تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ', paste: 'چاپلا', pasteArea: 'چاپلاش دائىرىسى', pasteMsg: 'ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+V) نى ئىشلىتىپ مەزمۇننى تۆۋەندىكى رامكىغا كۆچۈرۈڭ، ئاندىن جەزملەنى بېسىڭ', securityMsg: 'توركۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى سەۋەبىدىن بۇ تەھرىرلىگۈچ چاپلاش تاختىسىدىكى مەزمۇننى بىۋاستە زىيارەت قىلالمايدۇ، بۇ كۆزنەكتە قايتا بىر قېتىم چاپلىشىڭىز كېرەك.', title: 'چاپلا' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/el.js0000644000175000017500000000264714006075351023540 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'el', { copy: 'Αντιγραφή', copyError: 'Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).', cut: 'Αποκοπή', cutError: 'Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).', paste: 'Επικόλληση', pasteArea: 'Περιοχή Επικόλλησης', pasteMsg: 'Παρακαλώ επικολλήστε στο ακόλουθο κουτί χρησιμοποιώντας το πληκτρολόγιο (Ctrl/Cmd+V) και πατήστε OK.', securityMsg: 'Λόγων των ρυθμίσεων ασφάλειας του περιηγητή σας, ο επεξεργαστής δεν μπορεί να έχει πρόσβαση στην μνήμη επικόλλησης. Χρειάζεται να επικολλήσετε ξανά σε αυτό το παράθυρο.', title: 'Επικόλληση' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/de.js0000644000175000017500000000203714006075351023521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'de', { copy: 'Kopieren', copyError: 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).', cut: 'Ausschneiden', cutError: 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).', paste: 'Einfügen', pasteArea: 'Einfügebereich', pasteMsg: 'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit Strg+V) ein und bestätigen Sie mit OK.', securityMsg: 'Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.', title: 'Einfügen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/uk.js0000644000175000017500000000277314006075351023557 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'uk', { copy: 'Копіювати', copyError: 'Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).', cut: 'Вирізати', cutError: 'Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)', paste: 'Вставити', pasteArea: 'Область вставки', pasteMsg: 'Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (Ctrl/Cmd+V), та натисніть OK.', securityMsg: 'Редактор не може отримати прямий доступ до буферу обміну у зв\'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.', title: 'Вставити' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/sr-latn.js0000644000175000017500000000174714006075351024520 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'sr-latn', { copy: 'Kopiraj', copyError: 'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).', cut: 'Iseci', cutError: 'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).', paste: 'Zalepi', pasteArea: 'Prostor za lepljenje', pasteMsg: 'Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (Ctrl/Cmd+V) i da pritisnete OK.', securityMsg: 'Zbog sigurnosnih postavki vašeg pregledača, editor nije u mogućnosti da direktno pristupi podacima u klipbordu. Potrebno je da zalepite još jednom u ovom prozoru.', title: 'Zalepi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/km.js0000644000175000017500000000376414006075351023550 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'km', { copy: 'ចម្លង', copyError: 'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។', cut: 'កាត់យក', cutError: 'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។', paste: 'បិទ​ភ្ជាប់', pasteArea: 'តំបន់​បិទ​ភ្ជាប់', pasteMsg: 'សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(Ctrl/Cmd+V) ហើយចុច OK ។', securityMsg: 'ព្រោះតែ​ការកំណត់​សុវត្ថិភាព ប្រអប់សរសេរ​មិន​អាចចាប់​យកទិន្នន័យពីក្តារតម្បៀតខ្ទាស់​អ្នក​​ដោយផ្ទាល់​បានទេ។ អ្នក​ត្រូវចំលង​ដាក់វាម្តង​ទៀត ក្នុងផ្ទាំងនេះ។', title: 'បិទ​ភ្ជាប់' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/eu.js0000644000175000017500000000160114006075351023536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'eu', { copy: 'Kopiatu', copyError: 'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).', cut: 'Ebaki', cutError: 'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).', paste: 'Itsatsi', pasteArea: 'Itsasteko Area', pasteMsg: 'Mesedez teklatua erabilita (Ctrl/Cmd+V) ondorego eremuan testua itsatsi eta OK sakatu.', securityMsg: 'Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.', title: 'Itsatsi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/fa.js0000644000175000017500000000251214006075351023515 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'fa', { copy: 'رونوشت', copyError: 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).', cut: 'برش', cutError: 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).', paste: 'چسباندن', pasteArea: 'محل چسباندن', pasteMsg: 'لطفا متن را با کلیدهای (Ctrl/Cmd+V) در این جعبهٴ متنی بچسبانید و پذیرش را بزنید.', securityMsg: 'به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.', title: 'چسباندن' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/si.js0000644000175000017500000000201614006075351023541 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'si', { copy: 'පිටපත් කරන්න', copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', // MISSING cut: 'කපාගන්න', cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', // MISSING paste: 'අලවන්න', pasteArea: 'අලවන ප්‍රදේශ', pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', // MISSING securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'අලවන්න' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/en.js0000644000175000017500000000160014006075351023526 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'en', { copy: 'Copy', copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', cut: 'Cut', cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', paste: 'Paste', pasteArea: 'Paste Area', pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', title: 'Paste' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/he.js0000644000175000017500000000201514006075351023521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'he', { copy: 'העתקה', copyError: 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).', cut: 'גזירה', cutError: 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).', paste: 'הדבקה', pasteArea: 'איזור הדבקה', pasteMsg: 'נא להדביק בתוך הקופסה באמצעות (Ctrl/Cmd+V) וללחוץ על אישור.', securityMsg: 'עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.', title: 'הדבקה' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/lt.js0000644000175000017500000000172714006075351023555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'lt', { copy: 'Kopijuoti', copyError: 'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).', cut: 'Iškirpti', cutError: 'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).', paste: 'Įdėti', pasteArea: 'Įkelti dalį', pasteMsg: 'Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (Ctrl/Cmd+V) ir paspauskite mygtuką OK.', securityMsg: 'Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.', title: 'Įdėti' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/lv.js0000644000175000017500000000175014006075351023553 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'lv', { copy: 'Kopēt', copyError: 'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.', cut: 'Izgriezt', cutError: 'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.', paste: 'Ielīmēt', pasteArea: 'Ielīmēšanas zona', pasteMsg: 'Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (Ctrl/Cmd+V) un apstipriniet ar Darīts!.', securityMsg: 'Jūsu pārlūka drošības uzstādījumu dēļ, nav iespējams tieši piekļūt jūsu starpliktuvei. Jums jāielīmē atkārtoti šajā logā.', title: 'Ievietot' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/eo.js0000644000175000017500000000160714006075351023536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'eo', { copy: 'Kopii', copyError: 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).', cut: 'Eltondi', cutError: 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).', paste: 'Interglui', pasteArea: 'Intergluoareo', pasteMsg: 'Bonvolu glui la tekston en la jenan areon per uzado de la klavaro (Ctrl/Cmd+V) kaj premu OK', securityMsg: 'Pro la sekurecagordo de via TTT-legilo, la redaktilo ne povas rekte atingi viajn datenojn en la poŝo. Bonvolu denove interglui la datenojn en tiun fenestron.', title: 'Interglui' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ca.js0000644000175000017500000000170614006075351023516 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ca', { copy: 'Copiar', copyError: 'La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).', cut: 'Retallar', cutError: 'La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).', paste: 'Enganxar', pasteArea: 'Àrea d\'enganxat', pasteMsg: 'Si us plau, enganxi dins del següent camp utilitzant el teclat (Ctrl/Cmd+V) i premi OK.', securityMsg: 'A causa de la configuració de seguretat del vostre navegador, l\'editor no pot accedir a les dades del porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.', title: 'Enganxar' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/hi.js0000644000175000017500000000260514006075351023532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'hi', { copy: 'कॉपी', copyError: 'आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।', cut: 'कट', cutError: 'आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।', paste: 'पेस्ट', pasteArea: 'Paste Area', // MISSING pasteMsg: 'Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.', securityMsg: 'आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.', title: 'पेस्ट' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/mk.js0000644000175000017500000000174314006075351023543 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'mk', { copy: 'Copy', // MISSING copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', // MISSING cut: 'Cut', // MISSING cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', // MISSING paste: 'Paste', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', // MISSING securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'Paste' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/mn.js0000644000175000017500000000230214006075351023536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'mn', { copy: 'Хуулах', copyError: 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.', cut: 'Хайчлах', cutError: 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.', paste: 'Буулгах', pasteArea: 'Paste Area', // MISSING pasteMsg: '(Ctrl/Cmd+V) товчийг ашиглан paste хийнэ үү. Мөн OK дар.', securityMsg: 'Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.', title: 'Буулгах' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/gl.js0000644000175000017500000000157214006075351023536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'gl', { copy: 'Copiar', copyError: 'Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).', cut: 'Cortar', cutError: 'Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).', paste: 'Pegar', pasteArea: 'Zona de pegado', pasteMsg: 'Pegue dentro do seguinte cadro usando o teclado (Ctrl/Cmd+V) e prema en Aceptar', securityMsg: 'Por mor da configuración de seguranza do seu navegador, o editor non ten acceso ao portapapeis. É necesario pegalo novamente nesta xanela.', title: 'Pegar' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ko.js0000644000175000017500000000162614006075351023545 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ko', { copy: '복사', copyError: '브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.', cut: '잘라내기', cutError: '브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오', paste: '붙여넣기', pasteArea: '붙여넣기 범위', pasteMsg: '키보드(Ctrl/Cmd+V)를 이용해서 상자안에 붙여넣고 확인 를 누르세요.', securityMsg: '브라우저 보안 설정으로 인해, 클립보드에 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.', title: '붙여넣기' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/zh.js0000644000175000017500000000147414006075351023556 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'zh', { copy: '複製', copyError: '瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。', cut: '剪下', cutError: '瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。', paste: '貼上', pasteArea: '貼上區', pasteMsg: '請使用鍵盤快捷鍵 (Ctrl/Cmd+V) 貼到下方區域中並按下「確定」。', securityMsg: '因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。', title: '貼上' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/es.js0000644000175000017500000000166614006075351023547 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'es', { copy: 'Copiar', copyError: 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).', cut: 'Cortar', cutError: 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).', paste: 'Pegar', pasteArea: 'Zona de pegado', pasteMsg: 'Por favor pegue dentro del cuadro utilizando el teclado (Ctrl/Cmd+V);\r\nluego presione Aceptar.', securityMsg: 'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.', title: 'Pegar' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/is.js0000644000175000017500000000156214006075351023546 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'is', { copy: 'Afrita', copyError: 'Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).', cut: 'Klippa', cutError: 'Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).', paste: 'Líma', pasteArea: 'Paste Area', // MISSING pasteMsg: 'Límdu í svæðið hér að neðan og (Ctrl/Cmd+V) og smelltu á OK.', securityMsg: 'Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.', title: 'Líma' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/fo.js0000644000175000017500000000163314006075351023536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'fo', { copy: 'Avrita', copyError: 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).', cut: 'Kvett', cutError: 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).', paste: 'Innrita', pasteArea: 'Avritingarumráði', pasteMsg: 'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (Ctrl/Cmd+V) og klikk á Góðtak.', securityMsg: 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.', title: 'Innrita' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/tt.js0000644000175000017500000000207114006075351023556 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'tt', { copy: 'Күчермәләү', copyError: 'Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.', cut: 'Кисеп алу', cutError: 'Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.', paste: 'Өстәү', pasteArea: 'Өстәү мәйданы', pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', // MISSING securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'Өстәү' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/it.js0000644000175000017500000000163414006075351023547 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'it', { copy: 'Copia', copyError: 'Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).', cut: 'Taglia', cutError: 'Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).', paste: 'Incolla', pasteArea: 'Incolla', pasteMsg: 'Incolla il testo all\'interno dell\'area sottostante usando la scorciatoia di tastiere (Ctrl/Cmd+V) e premi OK.', securityMsg: 'A causa delle impostazioni di sicurezza del browser,l\'editor non è in grado di accedere direttamente agli appunti. E\' pertanto necessario incollarli di nuovo in questa finestra.', title: 'Incolla' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/sv.js0000644000175000017500000000152014006075351023555 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'sv', { copy: 'Kopiera', copyError: 'Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.', cut: 'Klipp ut', cutError: 'Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.', paste: 'Klistra in', pasteArea: 'Paste Area', pasteMsg: 'Var god och klistra in Er text i rutan nedan genom att använda (Ctrl/Cmd+V) klicka sen på OK.', securityMsg: 'På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.', title: 'Klistra in' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/gu.js0000644000175000017500000000241114006075351023540 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'gu', { copy: 'નકલ', copyError: 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का प्रयोग करें।', cut: 'કાપવું', cutError: 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.', paste: 'પેસ્ટ', pasteArea: 'પેસ્ટ કરવાની જગ્યા', pasteMsg: 'Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો', securityMsg: 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.', title: 'પેસ્ટ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/tr.js0000644000175000017500000000171114006075351023554 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'tr', { copy: 'Kopyala', copyError: 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.', cut: 'Kes', cutError: 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.', paste: 'Yapıştır', pasteArea: 'Yapıştırma Alanı', pasteMsg: 'Lütfen aşağıdaki kutunun içine yapıştırın. (Ctrl/Cmd+V) ve Tamam butonunu tıklayın.', securityMsg: 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..', title: 'Yapıştır' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/pl.js0000644000175000017500000000157014006075351023545 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'pl', { copy: 'Kopiuj', copyError: 'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.', cut: 'Wytnij', cutError: 'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.', paste: 'Wklej', pasteArea: 'Obszar wklejania', pasteMsg: 'Wklej tekst w poniższym polu, używając skrótu klawiaturowego (Ctrl/Cmd+V), i kliknij OK.', securityMsg: 'Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.', title: 'Wklej' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/nb.js0000644000175000017500000000157414006075351023535 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'nb', { copy: 'Kopier', copyError: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).', cut: 'Klipp ut', cutError: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).', paste: 'Lim inn', pasteArea: 'Innlimingsområde', pasteMsg: 'Vennligst lim inn i følgende boks med tastaturet (Ctrl/Cmd+V) og trykk OK.', securityMsg: 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.', title: 'Lim inn' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/sl.js0000644000175000017500000000157414006075351023554 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'sl', { copy: 'Kopiraj', copyError: 'Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).', cut: 'Izreži', cutError: 'Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).', paste: 'Prilepi', pasteArea: 'Prilepi Prostor', pasteMsg: 'Prosim prilepite v sleči okvir s pomočjo tipkovnice (Ctrl/Cmd+V) in pritisnite V redu.', securityMsg: 'Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.', title: 'Prilepi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/fi.js0000644000175000017500000000145214006075351023527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'fi', { copy: 'Kopioi', copyError: 'Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).', cut: 'Leikkaa', cutError: 'Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).', paste: 'Liitä', pasteArea: 'Leikealue', pasteMsg: 'Liitä painamalla (Ctrl+V) ja painamalla OK.', securityMsg: 'Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.', title: 'Liitä' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/fr-ca.js0000644000175000017500000000176214006075351024125 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'fr-ca', { copy: 'Copier', copyError: 'Les paramètres de sécurité de votre navigateur empêchent l\'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).', cut: 'Couper', cutError: 'Les paramètres de sécurité de votre navigateur empêchent l\'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).', paste: 'Coller', pasteArea: 'Coller la zone', pasteMsg: 'Veuillez coller dans la zone ci-dessous en utilisant le clavier (Ctrl/Cmd+V) et appuyer sur OK.', securityMsg: 'A cause des paramètres de sécurité de votre navigateur, l\'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.', title: 'Coller' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ru.js0000644000175000017500000000263314006075351023561 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ru', { copy: 'Копировать', copyError: 'Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).', cut: 'Вырезать', cutError: 'Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).', paste: 'Вставить', pasteArea: 'Зона для вставки', pasteMsg: 'Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (Ctrl/Cmd+V) и нажмите кнопку "OK".', securityMsg: 'Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.', title: 'Вставить' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ka.js0000644000175000017500000000332214006075351023522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ka', { copy: 'ასლი', copyError: 'თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).', cut: 'ამოჭრა', cutError: 'თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).', paste: 'ჩასმა', pasteArea: 'ჩასმის არე', pasteMsg: 'ჩასვით ამ არის შიგნით კლავიატურის გამოყენებით (Ctrl/Cmd+V) და დააჭირეთ OK-ს', securityMsg: 'თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა clipboard-ის მონაცემების წვდომის უფლებას. კიდევ უნდა ჩასვათ ტექსტი ამ ფანჯარაში.', title: 'ჩასმა' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/zh-cn.js0000644000175000017500000000154014006075351024146 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'zh-cn', { copy: '复制', copyError: '您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl/Cmd+C)来完成。', cut: '剪切', cutError: '您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl/Cmd+X)来完成。', paste: '粘贴', pasteArea: '粘贴区域', pasteMsg: '请使用键盘快捷键(Ctrl/Cmd+V)把内容粘贴到下面的方框里,再按 确定', securityMsg: '因为您的浏览器的安全设置原因,本编辑器不能直接访问您的剪贴板内容,你需要在本窗口重新粘贴一次。', title: '粘贴' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/cs.js0000644000175000017500000000207314006075351023536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'cs', { copy: 'Kopírovat', copyError: 'Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).', cut: 'Vyjmout', cutError: 'Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).', paste: 'Vložit', pasteArea: 'Oblast vkládání', pasteMsg: 'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (Ctrl/Cmd+V) a stiskněte OK.', securityMsg: 'Z důvodů nastavení bezpečnosti vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.', title: 'Vložit' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/pt.js0000644000175000017500000000164314006075351023556 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'pt', { copy: 'Copiar', copyError: 'A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).', cut: 'Cortar', cutError: 'A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).', paste: 'Colar', pasteArea: 'Colar área', pasteMsg: 'Por favor, cole dentro da seguinte caixa usando o teclado (Ctrl/Cmd+V) e prima OK.', securityMsg: 'Devido ás definições de segurança do teu browser, o editor não pode aceder ao clipboard diretamente. É necessário que voltes a colar as informações nesta janela.', title: 'Colar' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/pt-br.js0000644000175000017500000000176714006075351024166 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'pt-br', { copy: 'Copiar', copyError: 'As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).', cut: 'Recortar', cutError: 'As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).', paste: 'Colar', pasteArea: 'Área para Colar', pasteMsg: 'Transfira o link usado na caixa usando o teclado com (Ctrl/Cmd+V) e OK.', securityMsg: 'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.', title: 'Colar' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/et.js0000644000175000017500000000164314006075351023543 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'et', { copy: 'Kopeeri', copyError: 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).', cut: 'Lõika', cutError: 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).', paste: 'Aseta', pasteArea: 'Asetamise ala', pasteMsg: 'Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+V) ja vajuta seejärel OK.', securityMsg: 'Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.', title: 'Asetamine' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/da.js0000644000175000017500000000171514006075351023517 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'da', { copy: 'Kopiér', copyError: 'Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.

      Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).', cut: 'Klip', cutError: 'Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.

      Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).', paste: 'Indsæt', pasteArea: 'Indsæt område', pasteMsg: 'Indsæt i feltet herunder (Ctrl/Cmd+V) og klik på OK.', securityMsg: 'Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.

      Du skal indsætte udklipsholderens indhold i dette vindue igen.', title: 'Indsæt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/af.js0000644000175000017500000000150414006075351023515 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'af', { copy: 'Kopiëer', copyError: 'U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).', cut: 'Knip', cutError: 'U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).', paste: 'Plak', pasteArea: 'Plak-area', pasteMsg: 'Plak die teks in die volgende teks-area met die sleutelbordkombinasie (Ctrl/Cmd+V) en druk OK.', securityMsg: 'Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.', title: 'Byvoeg' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/hu.js0000644000175000017500000000176014006075351023547 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'hu', { copy: 'Másolás', copyError: 'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).', cut: 'Kivágás', cutError: 'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).', paste: 'Beillesztés', pasteArea: 'Beszúrás mező', pasteMsg: 'Másolja be az alábbi mezőbe a Ctrl/Cmd+V billentyűk lenyomásával, majd nyomjon Rendben-t.', securityMsg: 'A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.', title: 'Beillesztés' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/sr.js0000644000175000017500000000254214006075351023556 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'sr', { copy: 'Копирај', copyError: 'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).', cut: 'Исеци', cutError: 'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).', paste: 'Залепи', pasteArea: 'Залепи зону', pasteMsg: 'Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (Ctrl/Cmd+V) и да притиснете OK.', securityMsg: 'Због сигурносних подешавања претраживача, едитор не може да приступи оставу. Требате да га поново залепите у овом прозору.', title: 'Залепи' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/nl.js0000644000175000017500000000165614006075351023550 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'nl', { copy: 'Kopiëren', copyError: 'De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.', cut: 'Knippen', cutError: 'De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.', paste: 'Plakken', pasteArea: 'Plakgebied', pasteMsg: 'Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (Ctrl/Cmd+V) en klik op OK.', securityMsg: 'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.', title: 'Plakken' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/vi.js0000644000175000017500000000210614006075351023544 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'vi', { copy: 'Sao chép', copyError: 'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).', cut: 'Cắt', cutError: 'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).', paste: 'Dán', pasteArea: 'Khu vực dán', pasteMsg: 'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (Ctrl/Cmd+V) và nhấn vào nút Đồng ý.', securityMsg: 'Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.', title: 'Dán' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ja.js0000644000175000017500000000226714006075351023530 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ja', { copy: 'コピー', copyError: 'ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。', cut: '切り取り', cutError: 'ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。', paste: '貼り付け', pasteArea: '貼り付け場所', pasteMsg: 'キーボード(Ctrl/Cmd+V)を使用して、次の入力エリア内で貼り付けて、OKを押してください。', securityMsg: 'ブラウザのセキュリティ設定により、エディタはクリップボードデータに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。', title: '貼り付け' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/id.js0000644000175000017500000000165214006075351023527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'id', { copy: 'Salin', copyError: 'Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)', cut: 'Potong', cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', // MISSING paste: 'Tempel', pasteArea: 'Area Tempel', pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', // MISSING securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'Tempel' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-gb.js0000644000175000017500000000160314006075351024117 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'en-gb', { copy: 'Copy', copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', cut: 'Cut', cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', paste: 'Paste', pasteArea: 'Paste Area', pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', title: 'Paste' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/sq.js0000644000175000017500000000205214006075351023551 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'sq', { copy: 'Kopjo', copyError: 'Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).', cut: 'Preje', cutError: 'Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).', paste: 'Hidhe', pasteArea: 'Hapësira Hedhëse', pasteMsg: 'Ju lutemi hidhni brenda kutizës në vijim duke shfrytëzuar tastierën (Ctrl/Cmd+V) dhe shtypni Mirë.', securityMsg: 'Për shkak të dhënave të sigurisë së shfletuesit tuaj, redaktuesi nuk është në gjendje të i qaset drejtpërdrejtë të dhanve të tabelës suaj të punës. Ju duhet të hidhni atë përsëri në këtë dritare.', title: 'Hidhe' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/bn.js0000644000175000017500000000263314006075351023532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'bn', { copy: 'কপি', copyError: 'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।', cut: 'কাট', cutError: 'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।', paste: 'পেস্ট', pasteArea: 'Paste Area', // MISSING pasteMsg: 'অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (Ctrl/Cmd+V) পেস্ট করুন এবং OK চাপ দিন', securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'পেস্ট' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-au.js0000644000175000017500000000161614006075351024140 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'en-au', { copy: 'Copy', copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', cut: 'Cut', cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', paste: 'Paste', pasteArea: 'Paste Area', // MISSING pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', title: 'Paste' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ku.js0000644000175000017500000000247614006075351023557 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ku', { copy: 'لەبەرگرتنەوە', copyError: 'پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).', cut: 'بڕین', cutError: 'پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).', paste: 'لکاندن', pasteArea: 'ناوچەی لکاندن', pasteMsg: 'تکایە بیلکێنە لەناوەوەی ئەم سنوقە لەڕێی تەختەکلیلەکەت بە بەکارهێنانی کلیلی (Ctrl/Cmd+V) دووای کلیکی باشە بکە.', securityMsg: 'بەهۆی شێوەپێدانی پارێزی وێبگەڕەکەت، سەرنووسەکه ناتوانێت دەستبگەیەنێت بەهەڵگیراوەکە ڕاستەوخۆ. بۆیه پێویسته دووباره بیلکێنیت لەم پەنجەرەیه.', title: 'لکاندن' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/ms.js0000644000175000017500000000156114006075351023551 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'ms', { copy: 'Salin', copyError: 'Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).', cut: 'Potong', cutError: 'Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).', paste: 'Tampal', pasteArea: 'Paste Area', // MISSING pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', // MISSING securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'Tampal' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/fr.js0000644000175000017500000000211014006075351023530 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'fr', { copy: 'Copier', copyError: 'Les paramètres de sécurité de votre navigateur ne permettent pas à l\'éditeur d\'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).', cut: 'Couper', cutError: 'Les paramètres de sécurité de votre navigateur ne permettent pas à l\'éditeur d\'exécuter automatiquement l\'opération "couper". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).', paste: 'Coller', pasteArea: 'Coller la zone', pasteMsg: 'Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (Ctrl/Cmd+V) et cliquez sur OK.', securityMsg: 'A cause des paramètres de sécurité de votre navigateur, l\'éditeur n\'est pas en mesure d\'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.', title: 'Coller' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/lang/bs.js0000644000175000017500000000164214006075351023536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'clipboard', 'bs', { copy: 'Kopiraj', copyError: 'Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).', cut: 'Izreži', cutError: 'Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).', paste: 'Zalijepi', pasteArea: 'Paste Area', // MISSING pasteMsg: 'Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK', // MISSING securityMsg: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING title: 'Zalijepi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/dev/0000755000175000017500000000000014006075351022426 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/dev/dnd.html0000644000175000017500000003342614006075351024071 0ustar domdom Manual test for #11460

      Manual test for #11460

      Description (hide/show)

      Test internal D&D in the editor, dropping content from an external source (helpers, MS Word) and D&D between editors. Keep in mind that internal D&D is the most complex operation because editor have to handle two ranges at the same time.

      Expected behavior:

      • proper drop position,
      • in the internal and cross editor D&D: dragged content should be removed,
      • dropped content should be (more less) the same as dragged content,
      • paste event should be fired,
      • undo should work properly (one undo operation for one D&D),
      • no crashes, nor errors,

      Drag scenarios:

      • drag simple text,
      • drag table cell/cells,
      • drag link,
      • drag helpers textarea content,
      • drag helpers html content,
      • drag content from MS Word.

      Drop scenarios:

      • drop in the different paragraph (before and after),
      • drop in the same paragraph (before and after),
      • drop in the same text node (before and after),
      • drop between text lines,
      • drop on the whitespace next to the header,
      • drop on the whitespace on the left side from the quote,
      • drop into a cell.

      Known issues (not part of this ticket):

      • because of #11636 dragged content is not correct in some cases (e.g. when you drag part of the link),
      • drag position needs clean up after D&D (e.g. remove empty paragraphs, fix table),
      • drop position needs clean up after D&D (e.g. add spaces before/after dropped content, apply parents styles, break paragraph when one paragraph is dropped at the end to the other paragraph),
      • in the external D&D: Chrome add plenty of addition tags.

      Helpers (hide/show)

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. In commodo vulputate tempor. Sed <b>at elit</b> vel ligula mollis aliquet a ac odio.
      Aenean cursus egestas ipsum.
      				

      Classic editor (hide/show)

      Inline editor (hide/show)

      Saturn V carrying Apollo 11 Apollo 11

      Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

      Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

      Broadcasting and quotes

      Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

      One small step for [a] man, one giant leap for mankind.

      Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

      [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

      Technical details

      Mission crew
      Position Astronaut
      Commander Neil A. Armstrong
      Command Module Pilot Michael Collins
      Lunar Module Pilot Edwin "Buzz" E. Aldrin, Jr.

      Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

      1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
      2. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
      3. Lunar Module for landing on the Moon.

      After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.


      Source: Wikipedia.org

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/dev/clipboard.html0000644000175000017500000001271514006075351025261 0ustar domdom Clipboard playground – CKEditor Sample

      CKEditor Sample — clipboard plugin playground

      Editor 6

      Content content content.

      Styled by .someClass.

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/dev/console.js0000644000175000017500000000206514006075351024431 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /* global CKCONSOLE */ 'use strict'; ( function() { var pasteType, pasteValue; CKCONSOLE.add( 'paste', { panels: [ { type: 'box', content: '
        ' + '
      • type:
      • ' + '
      • value:
      • ' + '
      ', refresh: function() { return { header: 'Paste', type: pasteType, value: pasteValue }; }, refreshOn: function( editor, refresh ) { editor.on( 'paste', function( evt ) { pasteType = evt.data.type; pasteValue = CKEDITOR.tools.htmlEncode( evt.data.dataValue ); refresh(); } ); } }, { type: 'log', on: function( editor, log, logFn ) { editor.on( 'paste', function( evt ) { logFn( 'paste; type:' + evt.data.type )(); } ); } } ] } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/0000755000175000017500000000000014006075351022763 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/cut.png0000644000175000017500000000200714006075351024263 0ustar domdomPNG  IHDRabKGD pHYs B(x IDAT8EMLcuGc#]:%4=[]3\I;q,p1QbbH$Dc$"y`j IޜG (.ֈD"Vjh˲y1T*h4RZò"Ƚd2 5lۆmZ#L"d-Hk ,RFGGQ.;GGG$ot? |allj]~W5zzzaB"ֺ$NτaxnۉDŝ<3DDyQF|Ngb^P(\3Kȫ"bR J2=p]$055\%y&:99y5;;yO?,"Kd]}; C J%c{{!\|KSR6} @~mmkqA|HfIn$_(888IEINb jQ%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/paste.png0000644000175000017500000000132414006075351024605 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8}JAYfu֛a\AL+yz$Yî(23L導u,XYY{O#fYP6*1eY{B v)vplhl t$]UU9]8sbWcUm[<{@4̊x]HieUUF]m n^.7c 91HibY9Ge8PeY|Ix֒eiFI%q,HI${$a!I& UU][H"ƸErv`9$#!l6kZDu˪%˲1B{OuV /7k-tfy`vb$Wu)瞣m7}k$)ϣ.c֎7 @OfY777ItXޟ\>~? .!H?R5!#_/@%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/copy-rtl.png0000644000175000017500000000125414006075351025244 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8}Qj@ Eϝ%mqCՐutQAe@>B v)vplhl t$]UU9]8sbWcUm[<{@4̊x]HieUUF]m n^.7c 91HibY9Ge8PeY|Ix֒eiFI%q,HI${$a!I& UU][H"ƸErv`9$#!l6kZDu˪%˲1B{OuV /7k-tfy`vb$Wu)瞣m7}k$)ϣ.c֎7 @OfY777ItXޟ\>~? .!H?R5!#_/@%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/cut-rtl.png0000644000175000017500000000200714006075351025062 0ustar domdomPNG  IHDRabKGD pHYs B(x IDAT8EMLcuGc#]:%4=[]3\I;q,p1QbbH$Dc$"y`j IޜG (.ֈD"Vjh˲y1T*h4RZò"Ƚd2 5lۆmZ#L"d-Hk ,RFGGQ.;GGG$ot? |allj]~W5zzzaB"ֺ$NτaxnۉDŝ<3DDyQF|Ngb^P(\3Kȫ"bR J2=p]$055\%y&:99y5;;yO?,"Kd]}; C J%c{{!\|KSR6} @~mmkqA|HfIn$_(888IEINb jQ%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/paste-rtl.png0000644000175000017500000000132414006075351025404 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8}JAYfu֛a\AL+yz$Yî(23L導u,XYY{O#fYP6*1eY{_x ]$ Yq]lq]\\B$!_q[AX$Ih>0~4If2dr9,F!,) *Bd:c;ΥdY4"4wܽ{_|#D$lQi'<}UWu(iضa '7ވZg$4$!T` 7ԛL& 6a4/\T~'_[ƲṞgLӧO ު(+;ܻzp\ Hwѫ7LR J`fk}|ޙ\[;hYt߷o60UU9!.֌\6 T+~lihlX]=!( ,#reY}}Ot>j9Bzd IBVU`ݏ? X?x2c-¶mrnْyղ!{<%!< o}L&O[8sTLM ɿB d5k\&ExUaqa뫀z׬(~?B*G|sjdy@$Iu&!KVU .=K% L>jҤMZ<禉ix<j&N$뷊 v{=u)]ǰ& B Kz) D$܎Ųm4N<6cƌw?nR),ˢuummkjQ SUdIB~?ÈiӪ|sN$|[|saѣGΞ=[)-+cf"fMa {a$|u4<f**KV>P0Hc֭@ '`-`,^P(tD"\;9LZa|ݻCC M3aD{{zw7OB8eYd2LwpU^w\w֭[kg͚xpÆ a74%>k1zş0 ~X \ ^Us=Ce$!2[GQlǡ'I@5mNkʾ-/C!iIgpowin[n݈-!G"G|цL&u7 ) x<wy@h-}')opfMsΉmx"{$dN&[ ʀOWj0E_^W1a;置\jNb,%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/paste.png0000644000175000017500000000364714006075351025714 0ustar domdomPNG  IHDR szzbKGD pHYs B(xIDATXÝߋW?M$o4:3PfJvlem_0c ŋ^Zzۛ^htQZ հ+jaWˌ ΏM7sN/&Ll8$o<|s%B @)c-XNodk_k8&T}ϩ7ZcZwd}ҩFkj-3fz_}cZ-,LͲPZ*E&F*EdZZk dA92 \~ݻW>a zNW&&8xP_ۻwSS}𡝟s0D'egRB.8 GNd>s,6EbeX9{6QccGN8 ȑB.R[$ N:01QkårQQ !(V(" CA FGE\k(\H9R:v)Hڵk;٬}8;}h} r9 DOfg'ϝ.fN̰g|qk 8E\Sիv_g 8kqGk ^&#/?G| (zHˏ-k2a7f_1dIeooG&Yz}lZ!$ՠR)C:*fƍZ&،k-8N&j61Z#$8 P@_I )e-K++ (j7 D!t?()R2a6ufA Z240,֭i}] tdfdQ.cevHɋsɢK"tkC)W*JV#ɴ 7۬\}L M(HRmםLy7[!>sGYk{cm<ЉS1=f6ܞZZcRbkd4`>V%zǟ}4bFjN! 2`C G)% R$T 7AJJ|;~|PRߌ{As8۶:Y+Y n;ۜ$rm2bZ?^r 0L0k"O )3k-iGZNݾ!%R/qWvu@2MDzqp>xp_AENds75JI9 1DGE͡<8|20DvDd-LEfoQjn,kRiB[}AO>y:qޑ7<{vO<اbk h J%~R1zIBP145B-BۻW,S*Z9UB+WVMkSR)A?ܹu?~͛H_׈DHk 0W3plYV?%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/copy.png0000644000175000017500000000302614006075351025541 0ustar domdomPNG  IHDR szzbKGD pHYs B(x/IDATXÝoe?;3N-^ G.JRܐscZ< ʅDZMA#(bnggnwv'd>~g䷙^ؿ筷Յ:`Eg?fyu8Iֲp1]]J)AkMOo/-,+`&cX ]p-PcV@믷4RVq9r;?? `-8Rl7w鋢H$Gw j><7o?YZ"ذ(O>x'bfg1֦ ݛHg2In18$Aٵo VŋSΟglttR@ I˱c<tbqns<z{wp(N/,],syTk DAI{8cϧ 9Ã֘kl^MxQ yKkϞzҥ)8J myMtJ)n>iAc ٩ɓ<74S,ʖh!VJW,{xBOt)ج 7O`R.1Ƥ2|ZP}z_Si.,LĖ,jQoݶ_޸+WlǩSn"= ΂qLRN9rt_EruDI"$`][/.ji*cgNk勫W4v@xAs%uQt9ccrՆ]޹-N("h<|C.*ӲɜR)?GɋJapps4 t a3<0@qZ7lRwB!9噑J:tHl.R"~g䷙^ؿ筷Յ:`Eg?fyu8Iֲp1]]J)AkMOo/-,+`&cX ]p-PcV@믷4RVq9r;?? `-8Rl7w鋢H$Gw j><7o?YZ"ذ(O>x'bfg1֦ ݛHg2In18$Aٵo VŋSΟglttR@ I˱c<tbqns<z{wp(N/,],syTk DAI{8cϧ 9Ã֘kl^MxQ yKkϞzҥ)8J myMtJ)n>iAc ٩ɓ<74S,ʖh!VJW,{xBOt)ج 7O`R.1Ƥ2|ZP}z_Si.,LĖ,jQoݶ_޸+WlǩSn"= ΂qLRN9rt_EruDI"$`][/.ji*cgNk勫W4v@xAs%uQt9ccrՆ]޹-N("h<|C.*ӲɜR)?GɋJapps4 t a3<0@qZ7lRwB!9噑J:tHl.R"_x ]$ Yq]lq]\\B$!_q[AX$Ih>0~4If2dr9,F!,) *Bd:c;ΥdY4"4wܽ{_|#D$lQi'<}UWu(iضa '7ވZg$4$!T` 7ԛL& 6a4/\T~'_[ƲṞgLӧO ު(+;ܻzp\ Hwѫ7LR J`fk}|ޙ\[;hYt߷o60UU9!.֌\6 T+~lihlX]=!( ,#reY}}Ot>j9Bzd IBVU`ݏ? X?x2c-¶mrnْyղ!{<%!< o}L&O[8sTLM ɿB d5k\&ExUaqa뫀z׬(~?B*G|sjdy@$Iu&!KVU .=K% L>jҤMZ<禉ix<j&N$뷊 v{=u)]ǰ& B Kz) D$܎Ųm4N<6cƌw?nR),ˢuummkjQ SUdIB~?ÈiӪ|sN$|[|saѣGΞ=[)-+cf"fMa {a$|u4<f**KV>P0Hc֭@ '`-`,^P(tD"\;9LZa|ݻCC M3aD{{zw7OB8eYd2LwpU^w\w֭[kg͚xpÆ a74%>k1zş0 ~X \ ^Us=Ce$!2[GQlǡ'I@5mNkʾ-/C!iIgpowin[n݈-!G"G|цL&u7 ) x<wy@h-}')opfMsΉmx"{$dN&[ ʀOWj0E_^W1a;置\jNb,%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/paste-rtl.png0000644000175000017500000000364714006075351026513 0ustar domdomPNG  IHDR szzbKGD pHYs B(xIDATXÝߋW?M$o4:3PfJvlem_0c ŋ^Zzۛ^htQZ հ+jaWˌ ΏM7sN/&Ll8$o<|s%B @)c-XNodk_k8&T}ϩ7ZcZwd}ҩFkj-3fz_}cZ-,LͲPZ*E&F*EdZZk dA92 \~ݻW>a zNW&&8xP_ۻwSS}𡝟s0D'egRB.8 GNd>s,6EbeX9{6QccGN8 ȑB.R[$ N:01QkårQQ !(V(" CA FGE\k(\H9R:v)Hڵk;٬}8;}h} r9 DOfg'ϝ.fN̰g|qk 8E\Sիv_g 8kqGk ^&#/?G| (zHˏ-k2a7f_1dIeooG&Yz}lZ!$ՠR)C:*fƍZ&،k-8N&j61Z#$8 P@_I )e-K++ (j7 D!t?()R2a6ufA Z240,֭i}] tdfdQ.cevHɋsɢK"tkC)W*JV#ɴ 7۬\}L M(HRmםLy7[!>sGYk{cm<ЉS1=f6ܞZZcRbkd4`>V%zǟ}4bFjN! 2`C G)% R$T 7AJJ|;~|PRߌ{As8۶:Y+Y n;ۜ$rm2bZ?^r 0L0k"O )3k-iGZNݾ!%R/qWvu@2MDzqp>xp_AENds75JI9 1DGE͡<8|20DvDd-LEfoQjn,kRiB[}AO>y:qޑ7<{vO<اbk h J%~R1zIBP145B-BۻW,S*Z9UB+WVMkSR)A?ܹu?~͛H_׈DHk 0W3plYV?%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/dialog/0000755000175000017500000000000014006075351021150 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/dialog/dialogDefinition.js0000644000175000017500000006102614006075351024763 0ustar domdom// jscs:disable disallowMixedSpacesAndTabs /** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview Defines the "virtual" dialog, dialog content and dialog button * definition classes. */ /** * The definition of a dialog window. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create dialogs. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * CKEDITOR.dialog.add( 'testOnly', function( editor ) { * return { * title: 'Test Dialog', * resizable: CKEDITOR.DIALOG_RESIZE_BOTH, * minWidth: 500, * minHeight: 400, * contents: [ * { * id: 'tab1', * label: 'First Tab', * title: 'First Tab Title', * accessKey: 'Q', * elements: [ * { * type: 'text', * label: 'Test Text 1', * id: 'testText1', * 'default': 'hello world!' * } * ] * } * ] * }; * } ); * * @class CKEDITOR.dialog.definition */ /** * The dialog title, displayed in the dialog's header. Required. * * @property {String} title */ /** * How the dialog can be resized, must be one of the four contents defined below. * * * {@link CKEDITOR#DIALOG_RESIZE_NONE} * * {@link CKEDITOR#DIALOG_RESIZE_WIDTH} * * {@link CKEDITOR#DIALOG_RESIZE_HEIGHT} * * {@link CKEDITOR#DIALOG_RESIZE_BOTH} * * @property {Number} [resizable=CKEDITOR.DIALOG_RESIZE_NONE] */ /** * The minimum width of the dialog, in pixels. * * @property {Number} [minWidth=600] */ /** * The minimum height of the dialog, in pixels. * * @property {Number} [minHeight=400] */ /** * The initial width of the dialog, in pixels. * * @since 3.5.3 * @property {Number} [width=CKEDITOR.dialog.definition#minWidth] */ /** * The initial height of the dialog, in pixels. * * @since 3.5.3 * @property {Number} [height=CKEDITOR.dialog.definition.minHeight] */ /** * The buttons in the dialog, defined as an array of * {@link CKEDITOR.dialog.definition.button} objects. * * @property {Array} [buttons=[ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ]] */ /** * The contents in the dialog, defined as an array of * {@link CKEDITOR.dialog.definition.content} objects. Required. * * @property {Array} contents */ /** * The function to execute when OK is pressed. * * @property {Function} onOk */ /** * The function to execute when Cancel is pressed. * * @property {Function} onCancel */ /** * The function to execute when the dialog is displayed for the first time. * * @property {Function} onLoad */ /** * The function to execute when the dialog is loaded (executed every time the dialog is opened). * * @property {Function} onShow */ /** * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create dialog content pages. * * @class CKEDITOR.dialog.definition.content. */ /** * The id of the content page. * * @property {String} id */ /** * The tab label of the content page. * * @property {String} label */ /** * The popup message of the tab label. * * @property {String} title */ /** * The CTRL hotkey for switching to the tab. * * contentDefinition.accessKey = 'Q'; // Switch to this page when CTRL-Q is pressed. * * @property {String} accessKey */ /** * The UI elements contained in this content page, defined as an array of * {@link CKEDITOR.dialog.definition.uiElement} objects. * * @property {Array} elements */ /** * The definition of user interface element (textarea, radio etc). * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create dialog UI elements. * * @class CKEDITOR.dialog.definition.uiElement * @see CKEDITOR.ui.dialog.uiElement */ /** * The id of the UI element. * * @property {String} id */ /** * The type of the UI element. Required. * * @property {String} type */ /** * The popup label of the UI element. * * @property {String} title */ /** * The content that needs to be allowed to enable this UI element. * All formats accepted by {@link CKEDITOR.filter#check} may be used. * * When all UI elements in a tab are disabled, this tab will be disabled automatically. * * @property {String/Object/CKEDITOR.style} requiredContent */ /** * CSS class names to append to the UI element. * * @property {String} className */ /** * Inline CSS classes to append to the UI element. * * @property {String} style */ /** * Horizontal alignment (in container) of the UI element. * * @property {String} align */ /** * Function to execute the first time the UI element is displayed. * * @property {Function} onLoad */ /** * Function to execute whenever the UI element's parent dialog is displayed. * * @property {Function} onShow */ /** * Function to execute whenever the UI element's parent dialog is closed. * * @property {Function} onHide */ /** * Function to execute whenever the UI element's parent * dialog's {@link CKEDITOR.dialog#setupContent} method is executed. * It usually takes care of the respective UI element as a standalone element. * * @property {Function} setup */ /** * Function to execute whenever the UI element's parent * dialog's {@link CKEDITOR.dialog#commitContent} method is executed. * It usually takes care of the respective UI element as a standalone element. * * @property {Function} commit */ // ----- hbox ----------------------------------------------------------------- /** * Horizontal layout box for dialog UI elements, auto-expends to available width of container. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create horizontal layouts. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.hbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'hbox', * widths: [ '25%', '25%', '50%' ], * children: [ * { * type: 'text', * id: 'id1', * width: '40px', * }, * { * type: 'text', * id: 'id2', * width: '40px', * }, * { * type: 'text', * id: 'id3' * } * ] * } * * @class CKEDITOR.dialog.definition.hbox * @extends CKEDITOR.dialog.definition.uiElement */ /** * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. * * @property {Array} children */ /** * (Optional) The widths of child cells. * * @property {Array} widths */ /** * (Optional) The height of the layout. * * @property {Number} height */ /** * The CSS styles to apply to this element. * * @property {String} styles */ /** * (Optional) The padding width inside child cells. Example: 0, 1. * * @property {Number} padding */ /** * (Optional) The alignment of the whole layout. Example: center, top. * * @property {String} align */ // ----- vbox ----------------------------------------------------------------- /** * Vertical layout box for dialog UI elements. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create vertical layouts. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.vbox} object and can * be accessed with {@link CKEDITOR.dialog#getContentElement}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'vbox', * align: 'right', * width: '200px', * children: [ * { * type: 'text', * id: 'age', * label: 'Age' * }, * { * type: 'text', * id: 'sex', * label: 'Sex' * }, * { * type: 'text', * id: 'nationality', * label: 'Nationality' * } * ] * } * * @class CKEDITOR.dialog.definition.vbox * @extends CKEDITOR.dialog.definition.uiElement */ /** * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. * * @property {Array} children */ /** * (Optional) The width of the layout. * * @property {Array} width */ /** * (Optional) The heights of individual cells. * * @property {Number} heights */ /** * The CSS styles to apply to this element. * * @property {String} styles */ /** * (Optional) The padding width inside child cells. Example: 0, 1. * * @property {Number} padding */ /** * (Optional) The alignment of the whole layout. Example: center, top. * * @property {String} align */ /** * (Optional) Whether the layout should expand vertically to fill its container. * * @property {Boolean} expand */ // ----- labeled element ------------------------------------------------------ /** * The definition of labeled user interface element (textarea, textInput etc). * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create dialog UI elements. * * @class CKEDITOR.dialog.definition.labeledElement * @extends CKEDITOR.dialog.definition.uiElement * @see CKEDITOR.ui.dialog.labeledElement */ /** * The label of the UI element. * * { * type: 'text', * label: 'My Label' * } * * @property {String} label */ /** * (Optional) Specify the layout of the label. Set to `'horizontal'` for horizontal layout. * The default layout is vertical. * * { * type: 'text', * label: 'My Label', * labelLayout: 'horizontal' * } * * @property {String} labelLayout */ /** * (Optional) Applies only to horizontal layouts: a two elements array of lengths to specify the widths of the * label and the content element. See also {@link CKEDITOR.dialog.definition.labeledElement#labelLayout}. * * { * type: 'text', * label: 'My Label', * labelLayout: 'horizontal', * widths: [100, 200] * } * * @property {Array} widths */ /** * Specify the inline style of the uiElement label. * * { * type: 'text', * label: 'My Label', * labelStyle: 'color: red' * } * * @property {String} labelStyle */ /** * Specify the inline style of the input element. * * { * type: 'text', * label: 'My Label', * inputStyle: 'text-align: center' * } * * @since 3.6.1 * @property {String} inputStyle */ /** * Specify the inline style of the input element container. * * { * type: 'text', * label: 'My Label', * controlStyle: 'width: 3em' * } * * @since 3.6.1 * @property {String} controlStyle */ // ----- button --------------------------------------------------------------- /** * The definition of a button. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create buttons. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.button} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'button', * id: 'buttonId', * label: 'Click me', * title: 'My title', * onClick: function() { * // this = CKEDITOR.ui.dialog.button * alert( 'Clicked: ' + this.id ); * } * } * * @class CKEDITOR.dialog.definition.button * @extends CKEDITOR.dialog.definition.uiElement */ /** * Whether the button is disabled. * * @property {Boolean} disabled */ /** * The label of the UI element. * * @property {String} label */ // ----- checkbox ------ /** * The definition of a checkbox element. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create groups of checkbox buttons. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.checkbox} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'checkbox', * id: 'agree', * label: 'I agree', * 'default': 'checked', * onClick: function() { * // this = CKEDITOR.ui.dialog.checkbox * alert( 'Checked: ' + this.getValue() ); * } * } * * @class CKEDITOR.dialog.definition.checkbox * @extends CKEDITOR.dialog.definition.uiElement */ /** * (Optional) The validation function. * * @property {Function} validate */ /** * The label of the UI element. * * @property {String} label */ /** * The default state. * * @property {String} [default='' (unchecked)] */ // ----- file ----------------------------------------------------------------- /** * The definition of a file upload input. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create file upload elements. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.file} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'file', * id: 'upload', * label: 'Select file from your computer', * size: 38 * }, * { * type: 'fileButton', * id: 'fileId', * label: 'Upload file', * 'for': [ 'tab1', 'upload' ], * filebrowser: { * onSelect: function( fileUrl, data ) { * alert( 'Successfully uploaded: ' + fileUrl ); * } * } * } * * @class CKEDITOR.dialog.definition.file * @extends CKEDITOR.dialog.definition.labeledElement */ /** * (Optional) The validation function. * * @property {Function} validate */ /** * (Optional) The action attribute of the form element associated with this file upload input. * If empty, CKEditor will use path to server connector for currently opened folder. * * @property {String} action */ /** * The size of the UI element. * * @property {Number} size */ // ----- fileButton ----------------------------------------------------------- /** * The definition of a button for submitting the file in a file upload input. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create a button for submitting the file in a file upload input. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.fileButton} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * @class CKEDITOR.dialog.definition.fileButton * @extends CKEDITOR.dialog.definition.uiElement */ /** * (Optional) The validation function. * * @property {Function} validate */ /** * The label of the UI element. * * @property {String} label */ /** * The instruction for CKEditor how to deal with file upload. * By default, the file and fileButton elements will not work "as expected" if this attribute is not set. * * // Update field with id 'txtUrl' in the 'tab1' tab when file is uploaded. * filebrowser: 'tab1:txtUrl' * * // Call custom onSelect function when file is successfully uploaded. * filebrowser: { * onSelect: function( fileUrl, data ) { * alert( 'Successfully uploaded: ' + fileUrl ); * } * } * * @property {String} filebrowser/Object */ /** * An array that contains pageId and elementId of the file upload input element for which this button is created. * * [ pageId, elementId ] * * @property {String} for */ // ----- html ----------------------------------------------------------------- /** * The definition of a raw HTML element. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create elements made from raw HTML code. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.html} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * To access HTML elements use {@link CKEDITOR.dom.document#getById}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example 1: * { * type: 'html', * html: '

      This is some sample HTML content.

      ' * } * * // Example 2: * // Complete sample with document.getById() call when the "Ok" button is clicked. * var dialogDefinition = { * title: 'Sample dialog', * minWidth: 300, * minHeight: 200, * onOk: function() { * // "this" is now a CKEDITOR.dialog object. * var document = this.getElement().getDocument(); * // document = CKEDITOR.dom.document * var element = document.getById( 'myDiv' ); * if ( element ) * alert( element.getHtml() ); * }, * contents: [ * { * id: 'tab1', * label: '', * title: '', * elements: [ * { * type: 'html', * html: '
      Sample text.
      Another div.
      ' * } * ] * } * ], * buttons: [ CKEDITOR.dialog.cancelButton, CKEDITOR.dialog.okButton ] * }; * * @class CKEDITOR.dialog.definition.html * @extends CKEDITOR.dialog.definition.uiElement */ /** * (Required) HTML code of this element. * * @property {String} html */ // ----- radio ---------------------------------------------------------------- /** * The definition of a radio group. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create groups of radio buttons. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.radio} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'radio', * id: 'country', * label: 'Which country is bigger', * items: [ [ 'France', 'FR' ], [ 'Germany', 'DE' ] ], * style: 'color: green', * 'default': 'DE', * onClick: function() { * // this = CKEDITOR.ui.dialog.radio * alert( 'Current value: ' + this.getValue() ); * } * } * * @class CKEDITOR.dialog.definition.radio * @extends CKEDITOR.dialog.definition.labeledElement */ /** * The default value. * * @property {String} default */ /** * (Optional) The validation function. * * @property {Function} validate */ /** * An array of options. Each option is a 1- or 2-item array of format `[ 'Description', 'Value' ]`. * If `'Value'` is missing, then the value would be assumed to be the same as the description. * * @property {Array} items */ // ----- selectElement -------------------------------------------------------- /** * The definition of a select element. * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create select elements. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.select} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'select', * id: 'sport', * label: 'Select your favourite sport', * items: [ [ 'Basketball' ], [ 'Baseball' ], [ 'Hockey' ], [ 'Football' ] ], * 'default': 'Football', * onChange: function( api ) { * // this = CKEDITOR.ui.dialog.select * alert( 'Current value: ' + this.getValue() ); * } * } * * @class CKEDITOR.dialog.definition.select * @extends CKEDITOR.dialog.definition.labeledElement */ /** * The default value. * * @property {String} default */ /** * (Optional) The validation function. * * @property {Function} validate */ /** * An array of options. Each option is a 1- or 2-item array of format `[ 'Description', 'Value' ]`. * If `'Value'` is missing, then the value would be assumed to be the same as the description. * * @property {Array} items */ /** * (Optional) Set this to true if you'd like to have a multiple-choice select box. * * @property {Boolean} [multiple=false] */ /** * (Optional) The number of items to display in the select box. * * @property {Number} size */ // ----- textInput ------------------------------------------------------------ /** * The definition of a text field (single line). * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create text fields. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textInput} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * { * type: 'text', * id: 'name', * label: 'Your name', * 'default': '', * validate: function() { * if ( !this.getValue() ) { * api.openMsgDialog( '', 'Name cannot be empty.' ); * return false; * } * } * } * * @class CKEDITOR.dialog.definition.textInput * @extends CKEDITOR.dialog.definition.labeledElement */ /** * The default value. * * @property {String} default */ /** * (Optional) The maximum length. * * @property {Number} maxLength */ /** * (Optional) The size of the input field. * * @property {Number} size */ /** * (Optional) The validation function. * * @property {Function} validate */ /** * @property bidi * @inheritdoc CKEDITOR.dialog.definition.textarea#bidi */ // ----- textarea ------------------------------------------------------------- /** * The definition of a text field (multiple lines). * * This class is not really part of the API. It just illustrates the properties * that developers can use to define and create textarea. * * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textarea} object * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. * * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. * * // There is no constructor for this class, the user just has to define an * // object with the appropriate properties. * * // Example: * { * type: 'textarea', * id: 'message', * label: 'Your comment', * 'default': '', * validate: function() { * if ( this.getValue().length < 5 ) { * api.openMsgDialog( 'The comment is too short.' ); * return false; * } * } * } * * @class CKEDITOR.dialog.definition.textarea * @extends CKEDITOR.dialog.definition.labeledElement */ /** * The number of rows. * * @property {Number} rows */ /** * The number of columns. * * @property {Number} cols */ /** * (Optional) The validation function. * * @property {Function} validate */ /** * The default value. * * @property {String} default */ /** * Whether the text direction of this input should be togglable using the following keystrokes: * * * *Shift+Alt+End* – switch to Right-To-Left, * * *Shift+Alt+Home* – switch to Left-To-Right. * * By default the input will be loaded without any text direction set, which means that * the direction will be inherited from the editor's text direction. * * If the direction was set, a marker will be prepended to every non-empty value of this input: * * * [`\u202A`](http://unicode.org/cldr/utility/character.jsp?a=202A) – for Right-To-Left, * * [`\u202B`](http://unicode.org/cldr/utility/character.jsp?a=202B) – for Left-To-Right. * * This marker allows for restoring the same text direction upon the next dialog opening. * * @since 4.5 * @property {Boolean} bidi */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/dialog/samples/0000755000175000017500000000000014006075351022614 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/dialog/samples/dialog.html0000644000175000017500000001576314006075351024755 0ustar domdom Using API to Customize Dialog Windows — CKEditor Sample

      CKEditor Samples » Using CKEditor Dialog API

      This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

      This sample shows how to use the CKEditor Dialog API to customize CKEditor dialog windows without changing the original editor code. The following customizations are being done in the example below:

      For details on how to create this setup check the source code of this sample page.

      A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

      1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
      2. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.

      The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

      1. Adding dialog tab – Add new tab "My Tab" to dialog window.
      2. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
      3. Adding dialog window fields – Add "My Custom Field" to the dialog window.
      4. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
      5. Setting default values for dialog window fields – Set default value of "Text Field" text field.
      6. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
      rt-4.4.4/devel/third-party/ckeditor-src/plugins/dialog/samples/assets/0000755000175000017500000000000014006075351024116 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/dialog/samples/assets/my_dialog.js0000644000175000017500000000155214006075351026423 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'myDialog', function() { return { title: 'My Dialog', minWidth: 400, minHeight: 200, contents: [ { id: 'tab1', label: 'First Tab', title: 'First Tab', elements: [ { id: 'input1', type: 'text', label: 'Text Field' }, { id: 'select1', type: 'select', label: 'Select Field', items: [ [ 'option1', 'value1' ], [ 'option2', 'value2' ] ] } ] }, { id: 'tab2', label: 'Second Tab', title: 'Second Tab', elements: [ { id: 'button1', type: 'button', label: 'Button Field' } ] } ] }; } ); // %LEAVE_UNMINIFIED% %REMOVE_LINE% rt-4.4.4/devel/third-party/ckeditor-src/plugins/dialog/plugin.js0000644000175000017500000031640314006075351023013 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview The floating dialog plugin. */ /** * No resize for this dialog. * * @readonly * @property {Number} [=0] * @member CKEDITOR */ CKEDITOR.DIALOG_RESIZE_NONE = 0; /** * Only allow horizontal resizing for this dialog, disable vertical resizing. * * @readonly * @property {Number} [=1] * @member CKEDITOR */ CKEDITOR.DIALOG_RESIZE_WIDTH = 1; /** * Only allow vertical resizing for this dialog, disable horizontal resizing. * * @readonly * @property {Number} [=2] * @member CKEDITOR */ CKEDITOR.DIALOG_RESIZE_HEIGHT = 2; /** * Allow the dialog to be resized in both directions. * * @readonly * @property {Number} [=3] * @member CKEDITOR */ CKEDITOR.DIALOG_RESIZE_BOTH = 3; /** * Dialog state when idle. * * @readonly * @property {Number} [=1] * @member CKEDITOR */ CKEDITOR.DIALOG_STATE_IDLE = 1; /** * Dialog state when busy. * * @readonly * @property {Number} [=2] * @member CKEDITOR */ CKEDITOR.DIALOG_STATE_BUSY = 2; ( function() { var cssLength = CKEDITOR.tools.cssLength; function isTabVisible( tabId ) { return !!this._.tabs[ tabId ][ 0 ].$.offsetHeight; } function getPreviousVisibleTab() { var tabId = this._.currentTabId, length = this._.tabIdList.length, tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ) + length; for ( var i = tabIndex - 1; i > tabIndex - length; i-- ) { if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) return this._.tabIdList[ i % length ]; } return null; } function getNextVisibleTab() { var tabId = this._.currentTabId, length = this._.tabIdList.length, tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ); for ( var i = tabIndex + 1; i < tabIndex + length; i++ ) { if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) return this._.tabIdList[ i % length ]; } return null; } function clearOrRecoverTextInputValue( container, isRecover ) { var inputs = container.$.getElementsByTagName( 'input' ); for ( var i = 0, length = inputs.length; i < length; i++ ) { var item = new CKEDITOR.dom.element( inputs[ i ] ); if ( item.getAttribute( 'type' ).toLowerCase() == 'text' ) { if ( isRecover ) { item.setAttribute( 'value', item.getCustomData( 'fake_value' ) || '' ); item.removeCustomData( 'fake_value' ); } else { item.setCustomData( 'fake_value', item.getAttribute( 'value' ) ); item.setAttribute( 'value', '' ); } } } } // Handle dialog element validation state UI changes. function handleFieldValidated( isValid, msg ) { var input = this.getInputElement(); if ( input ) isValid ? input.removeAttribute( 'aria-invalid' ) : input.setAttribute( 'aria-invalid', true ); if ( !isValid ) { if ( this.select ) this.select(); else this.focus(); } msg && alert( msg ); // jshint ignore:line this.fire( 'validated', { valid: isValid, msg: msg } ); } function resetField() { var input = this.getInputElement(); input && input.removeAttribute( 'aria-invalid' ); } var templateSource = ''; function buildDialog( editor ) { var element = CKEDITOR.dom.element.createFromHtml( CKEDITOR.addTemplate( 'dialog', templateSource ).output( { id: CKEDITOR.tools.getNextNumber(), editorId: editor.id, langDir: editor.lang.dir, langCode: editor.langCode, editorDialogClass: 'cke_editor_' + editor.name.replace( /\./g, '\\.' ) + '_dialog', closeTitle: editor.lang.common.close, hidpi: CKEDITOR.env.hidpi ? 'cke_hidpi' : '' } ) ); // TODO: Change this to getById(), so it'll support custom templates. var body = element.getChild( [ 0, 0, 0, 0, 0 ] ), title = body.getChild( 0 ), close = body.getChild( 1 ); // Don't allow dragging on dialog (#13184). editor.plugins.clipboard && CKEDITOR.plugins.clipboard.preventDefaultDropOnElement( body ); // IFrame shim for dialog that masks activeX in IE. (#7619) if ( CKEDITOR.env.ie && !CKEDITOR.env.quirks && !CKEDITOR.env.edge ) { var src = 'javascript:void(function(){' + encodeURIComponent( 'document.open();(' + CKEDITOR.tools.fixDomain + ')();document.close();' ) + '}())', // jshint ignore:line iframe = CKEDITOR.dom.element.createFromHtml( '' ); iframe.appendTo( body.getParent() ); } // Make the Title and Close Button unselectable. title.unselectable(); close.unselectable(); return { element: element, parts: { dialog: element.getChild( 0 ), title: title, close: close, tabs: body.getChild( 2 ), contents: body.getChild( [ 3, 0, 0, 0 ] ), footer: body.getChild( [ 3, 0, 1, 0 ] ) } }; } /** * This is the base class for runtime dialog objects. An instance of this * class represents a single named dialog for a single editor instance. * * var dialogObj = new CKEDITOR.dialog( editor, 'smiley' ); * * @class * @constructor Creates a dialog class instance. * @param {Object} editor The editor which created the dialog. * @param {String} dialogName The dialog's registered name. */ CKEDITOR.dialog = function( editor, dialogName ) { // Load the dialog definition. var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], defaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ), buttonsOrder = editor.config.dialog_buttonsOrder || 'OS', dir = editor.lang.dir, tabsToRemove = {}, i, processed, stopPropagation; if ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) || // The buttons in MacOS Apps are in reverse order (#4750) ( buttonsOrder == 'rtl' && dir == 'ltr' ) || ( buttonsOrder == 'ltr' && dir == 'rtl' ) ) defaultDefinition.buttons.reverse(); // Completes the definition with the default values. definition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition ); // Clone a functionally independent copy for this dialog. definition = CKEDITOR.tools.clone( definition ); // Create a complex definition object, extending it with the API // functions. definition = new definitionObject( this, definition ); var themeBuilt = buildDialog( editor ); // Initialize some basic parameters. this._ = { editor: editor, element: themeBuilt.element, name: dialogName, contentSize: { width: 0, height: 0 }, size: { width: 0, height: 0 }, contents: {}, buttons: {}, accessKeyMap: {}, // Initialize the tab and page map. tabs: {}, tabIdList: [], currentTabId: null, currentTabIndex: null, pageCount: 0, lastTab: null, tabBarMode: false, // Initialize the tab order array for input widgets. focusList: [], currentFocusIndex: 0, hasFocus: false }; this.parts = themeBuilt.parts; CKEDITOR.tools.setTimeout( function() { editor.fire( 'ariaWidget', this.parts.contents ); }, 0, this ); // Set the startup styles for the dialog, avoiding it enlarging the // page size on the dialog creation. var startStyles = { position: CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed', top: 0, visibility: 'hidden' }; startStyles[ dir == 'rtl' ? 'right' : 'left' ] = 0; this.parts.dialog.setStyles( startStyles ); // Call the CKEDITOR.event constructor to initialize this instance. CKEDITOR.event.call( this ); // Fire the "dialogDefinition" event, making it possible to customize // the dialog definition. this.definition = definition = CKEDITOR.fire( 'dialogDefinition', { name: dialogName, definition: definition }, editor ).definition; // Cache tabs that should be removed. if ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs ) { var removeContents = editor.config.removeDialogTabs.split( ';' ); for ( i = 0; i < removeContents.length; i++ ) { var parts = removeContents[ i ].split( ':' ); if ( parts.length == 2 ) { var removeDialogName = parts[ 0 ]; if ( !tabsToRemove[ removeDialogName ] ) tabsToRemove[ removeDialogName ] = []; tabsToRemove[ removeDialogName ].push( parts[ 1 ] ); } } editor._.removeDialogTabs = tabsToRemove; } // Remove tabs of this dialog. if ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) ) { for ( i = 0; i < tabsToRemove.length; i++ ) definition.removeContents( tabsToRemove[ i ] ); } // Initialize load, show, hide, ok and cancel events. if ( definition.onLoad ) this.on( 'load', definition.onLoad ); if ( definition.onShow ) this.on( 'show', definition.onShow ); if ( definition.onHide ) this.on( 'hide', definition.onHide ); if ( definition.onOk ) { this.on( 'ok', function( evt ) { // Dialog confirm might probably introduce content changes (#5415). editor.fire( 'saveSnapshot' ); setTimeout( function() { editor.fire( 'saveSnapshot' ); }, 0 ); if ( definition.onOk.call( this, evt ) === false ) evt.data.hide = false; } ); } // Set default dialog state. this.state = CKEDITOR.DIALOG_STATE_IDLE; if ( definition.onCancel ) { this.on( 'cancel', function( evt ) { if ( definition.onCancel.call( this, evt ) === false ) evt.data.hide = false; } ); } var me = this; // Iterates over all items inside all content in the dialog, calling a // function for each of them. var iterContents = function( func ) { var contents = me._.contents, stop = false; for ( var i in contents ) { for ( var j in contents[ i ] ) { stop = func.call( this, contents[ i ][ j ] ); if ( stop ) return; } } }; this.on( 'ok', function( evt ) { iterContents( function( item ) { if ( item.validate ) { var retval = item.validate( this ), invalid = ( typeof retval == 'string' ) || retval === false; if ( invalid ) { evt.data.hide = false; evt.stop(); } handleFieldValidated.call( item, !invalid, typeof retval == 'string' ? retval : undefined ); return invalid; } } ); }, this, null, 0 ); this.on( 'cancel', function( evt ) { iterContents( function( item ) { if ( item.isChanged() ) { if ( !editor.config.dialog_noConfirmCancel && !confirm( editor.lang.common.confirmCancel ) ) // jshint ignore:line evt.data.hide = false; return true; } } ); }, this, null, 0 ); this.parts.close.on( 'click', function( evt ) { if ( this.fire( 'cancel', { hide: true } ).hide !== false ) this.hide(); evt.data.preventDefault(); }, this ); // Sort focus list according to tab order definitions. function setupFocus() { var focusList = me._.focusList; focusList.sort( function( a, b ) { // Mimics browser tab order logics; if ( a.tabIndex != b.tabIndex ) return b.tabIndex - a.tabIndex; // Sort is not stable in some browsers, // fall-back the comparator to 'focusIndex'; else return a.focusIndex - b.focusIndex; } ); var size = focusList.length; for ( var i = 0; i < size; i++ ) focusList[ i ].focusIndex = i; } // Expects 1 or -1 as an offset, meaning direction of the offset change. function changeFocus( offset ) { var focusList = me._.focusList; offset = offset || 0; if ( focusList.length < 1 ) return; var startIndex = me._.currentFocusIndex; if ( me._.tabBarMode && offset < 0 ) { // If we are in tab mode, we need to mimic that we started tabbing back from the first // focusList (so it will go to the last one). startIndex = 0; } // Trigger the 'blur' event of any input element before anything, // since certain UI updates may depend on it. try { focusList[ startIndex ].getInputElement().$.blur(); } catch ( e ) {} var currentIndex = startIndex, hasTabs = me._.pageCount > 1; do { currentIndex = currentIndex + offset; if ( hasTabs && !me._.tabBarMode && ( currentIndex == focusList.length || currentIndex == -1 ) ) { // If the dialog was not in tab mode, then focus the first tab (#13027). me._.tabBarMode = true; me._.tabs[ me._.currentTabId ][ 0 ].focus(); me._.currentFocusIndex = -1; // Early return, in order to avoid accessing focusList[ -1 ]. return; } currentIndex = ( currentIndex + focusList.length ) % focusList.length; if ( currentIndex == startIndex ) { break; } } while ( offset && !focusList[ currentIndex ].isFocusable() ); focusList[ currentIndex ].focus(); // Select whole field content. if ( focusList[ currentIndex ].type == 'text' ) focusList[ currentIndex ].select(); } this.changeFocus = changeFocus; function keydownHandler( evt ) { // If I'm not the top dialog, ignore. if ( me != CKEDITOR.dialog._.currentTop ) return; var keystroke = evt.data.getKeystroke(), rtl = editor.lang.dir == 'rtl', arrowKeys = [ 37, 38, 39, 40 ], button; processed = stopPropagation = 0; if ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 ) { var shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 ); changeFocus( shiftPressed ? -1 : 1 ); processed = 1; } else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode && me.getPageCount() > 1 ) { // Alt-F10 puts focus into the current tab item in the tab bar. me._.tabBarMode = true; me._.tabs[ me._.currentTabId ][ 0 ].focus(); me._.currentFocusIndex = -1; processed = 1; } else if ( CKEDITOR.tools.indexOf( arrowKeys, keystroke ) != -1 && me._.tabBarMode ) { // Array with key codes that activate previous tab. var prevKeyCodes = [ // Depending on the lang dir: right or left key rtl ? 39 : 37, // Top/bot arrow: actually for both cases it's the same. 38 ], nextId = CKEDITOR.tools.indexOf( prevKeyCodes, keystroke ) != -1 ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ); me.selectPage( nextId ); me._.tabs[ nextId ][ 0 ].focus(); processed = 1; } else if ( ( keystroke == 13 || keystroke == 32 ) && me._.tabBarMode ) { this.selectPage( this._.currentTabId ); this._.tabBarMode = false; this._.currentFocusIndex = -1; changeFocus( 1 ); processed = 1; } // If user presses enter key in a text box, it implies clicking OK for the dialog. else if ( keystroke == 13 /*ENTER*/ ) { // Don't do that for a target that handles ENTER. var target = evt.data.getTarget(); if ( !target.is( 'a', 'button', 'select', 'textarea' ) && ( !target.is( 'input' ) || target.$.type != 'button' ) ) { button = this.getButton( 'ok' ); button && CKEDITOR.tools.setTimeout( button.click, 0, button ); processed = 1; } stopPropagation = 1; // Always block the propagation (#4269) } else if ( keystroke == 27 /*ESC*/ ) { button = this.getButton( 'cancel' ); // If there's a Cancel button, click it, else just fire the cancel event and hide the dialog. if ( button ) CKEDITOR.tools.setTimeout( button.click, 0, button ); else { if ( this.fire( 'cancel', { hide: true } ).hide !== false ) this.hide(); } stopPropagation = 1; // Always block the propagation (#4269) } else { return; } keypressHandler( evt ); } function keypressHandler( evt ) { if ( processed ) evt.data.preventDefault( 1 ); else if ( stopPropagation ) evt.data.stopPropagation(); } var dialogElement = this._.element; editor.focusManager.add( dialogElement, 1 ); // Add the dialog keyboard handlers. this.on( 'show', function() { dialogElement.on( 'keydown', keydownHandler, this ); // Some browsers instead, don't cancel key events in the keydown, but in the // keypress. So we must do a longer trip in those cases. (#4531,#8985) if ( CKEDITOR.env.gecko ) dialogElement.on( 'keypress', keypressHandler, this ); } ); this.on( 'hide', function() { dialogElement.removeListener( 'keydown', keydownHandler ); if ( CKEDITOR.env.gecko ) dialogElement.removeListener( 'keypress', keypressHandler ); // Reset fields state when closing dialog. iterContents( function( item ) { resetField.apply( item ); } ); } ); this.on( 'iframeAdded', function( evt ) { var doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document ); doc.on( 'keydown', keydownHandler, this, null, 0 ); } ); // Auto-focus logic in dialog. this.on( 'show', function() { // Setup tabIndex on showing the dialog instead of on loading // to allow dynamic tab order happen in dialog definition. setupFocus(); var hasTabs = me._.pageCount > 1; if ( editor.config.dialog_startupFocusTab && hasTabs ) { me._.tabBarMode = true; me._.tabs[ me._.currentTabId ][ 0 ].focus(); me._.currentFocusIndex = -1; } else if ( !this._.hasFocus ) { // http://dev.ckeditor.com/ticket/13114#comment:4. this._.currentFocusIndex = hasTabs ? -1 : this._.focusList.length - 1; // Decide where to put the initial focus. if ( definition.onFocus ) { var initialFocus = definition.onFocus.call( this ); // Focus the field that the user specified. initialFocus && initialFocus.focus(); } // Focus the first field in layout order. else { changeFocus( 1 ); } } }, this, null, 0xffffffff ); // IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (#2661). // This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken. if ( CKEDITOR.env.ie6Compat ) { this.on( 'load', function() { var outer = this.getElement(), inner = outer.getFirst(); inner.remove(); inner.appendTo( outer ); }, this ); } initDragAndDrop( this ); initResizeHandles( this ); // Insert the title. ( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title ); // Insert the tabs and contents. for ( i = 0; i < definition.contents.length; i++ ) { var page = definition.contents[ i ]; page && this.addPage( page ); } this.parts.tabs.on( 'click', function( evt ) { var target = evt.data.getTarget(); // If we aren't inside a tab, bail out. if ( target.hasClass( 'cke_dialog_tab' ) ) { // Get the ID of the tab, without the 'cke_' prefix and the unique number suffix. var id = target.$.id; this.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) ); if ( this._.tabBarMode ) { this._.tabBarMode = false; this._.currentFocusIndex = -1; changeFocus( 1 ); } evt.data.preventDefault(); } }, this ); // Insert buttons. var buttonsHtml = [], buttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this, { type: 'hbox', className: 'cke_dialog_footer_buttons', widths: [], children: definition.buttons }, buttonsHtml ).getChild(); this.parts.footer.setHtml( buttonsHtml.join( '' ) ); for ( i = 0; i < buttons.length; i++ ) this._.buttons[ buttons[ i ].id ] = buttons[ i ]; /** * Current state of the dialog. Use the {@link #setState} method to update it. * See the {@link #event-state} event to know more. * * @readonly * @property {Number} [state=CKEDITOR.DIALOG_STATE_IDLE] */ }; // Focusable interface. Use it via dialog.addFocusable. function Focusable( dialog, element, index ) { this.element = element; this.focusIndex = index; // TODO: support tabIndex for focusables. this.tabIndex = 0; this.isFocusable = function() { return !element.getAttribute( 'disabled' ) && element.isVisible(); }; this.focus = function() { dialog._.currentFocusIndex = this.focusIndex; this.element.focus(); }; // Bind events element.on( 'keydown', function( e ) { if ( e.data.getKeystroke() in { 32: 1, 13: 1 } ) this.fire( 'click' ); } ); element.on( 'focus', function() { this.fire( 'mouseover' ); } ); element.on( 'blur', function() { this.fire( 'mouseout' ); } ); } // Re-layout the dialog on window resize. function resizeWithWindow( dialog ) { var win = CKEDITOR.document.getWindow(); function resizeHandler() { dialog.layout(); } win.on( 'resize', resizeHandler ); dialog.on( 'hide', function() { win.removeListener( 'resize', resizeHandler ); } ); } CKEDITOR.dialog.prototype = { destroy: function() { this.hide(); this._.element.remove(); }, /** * Resizes the dialog. * * dialogObj.resize( 800, 640 ); * * @method * @param {Number} width The width of the dialog in pixels. * @param {Number} height The height of the dialog in pixels. */ resize: ( function() { return function( width, height ) { if ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height ) return; CKEDITOR.dialog.fire( 'resize', { dialog: this, width: width, height: height }, this._.editor ); this.fire( 'resize', { width: width, height: height }, this._.editor ); var contents = this.parts.contents; contents.setStyles( { width: width + 'px', height: height + 'px' } ); // Update dialog position when dimension get changed in RTL. if ( this._.editor.lang.dir == 'rtl' && this._.position ) this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - this._.contentSize.width - parseInt( this._.element.getFirst().getStyle( 'right' ), 10 ); this._.contentSize = { width: width, height: height }; }; } )(), /** * Gets the current size of the dialog in pixels. * * var width = dialogObj.getSize().width; * * @returns {Object} * @returns {Number} return.width * @returns {Number} return.height */ getSize: function() { var element = this._.element.getFirst(); return { width: element.$.offsetWidth || 0, height: element.$.offsetHeight || 0 }; }, /** * Moves the dialog to an `(x, y)` coordinate relative to the window. * * dialogObj.move( 10, 40 ); * * @method * @param {Number} x The target x-coordinate. * @param {Number} y The target y-coordinate. * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up. */ move: function( x, y, save ) { // The dialog may be fixed positioned or absolute positioned. Ask the // browser what is the current situation first. var element = this._.element.getFirst(), rtl = this._.editor.lang.dir == 'rtl'; var isFixed = element.getComputedStyle( 'position' ) == 'fixed'; // (#8888) In some cases of a very small viewport, dialog is incorrectly // positioned in IE7. It also happens that it remains sticky and user cannot // scroll down/up to reveal dialog's content below/above the viewport; this is // cumbersome. // The only way to fix this is to move mouse out of the browser and // go back to see that dialog position is automagically fixed. No events, // no style change - pure magic. This is a IE7 rendering issue, which can be // fixed with dummy style redraw on each move. if ( CKEDITOR.env.ie ) element.setStyle( 'zoom', '100%' ); if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y ) return; // Save the current position. this._.position = { x: x, y: y }; // If not fixed positioned, add scroll position to the coordinates. if ( !isFixed ) { var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition(); x += scrollPosition.x; y += scrollPosition.y; } // Translate coordinate for RTL. if ( rtl ) { var dialogSize = this.getSize(), viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(); x = viewPaneSize.width - dialogSize.width - x; } var styles = { 'top': ( y > 0 ? y : 0 ) + 'px' }; styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px'; element.setStyles( styles ); save && ( this._.moved = 1 ); }, /** * Gets the dialog's position in the window. * * var dialogX = dialogObj.getPosition().x; * * @returns {Object} * @returns {Number} return.x * @returns {Number} return.y */ getPosition: function() { return CKEDITOR.tools.extend( {}, this._.position ); }, /** * Shows the dialog box. * * dialogObj.show(); */ show: function() { // Insert the dialog's element to the root document. var element = this._.element; var definition = this.definition; if ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) ) element.appendTo( CKEDITOR.document.getBody() ); else element.setStyle( 'display', 'block' ); // First, set the dialog to an appropriate size. this.resize( this._.contentSize && this._.contentSize.width || definition.width || definition.minWidth, this._.contentSize && this._.contentSize.height || definition.height || definition.minHeight ); // Reset all inputs back to their default value. this.reset(); // Select the first tab by default. this.selectPage( this.definition.contents[ 0 ].id ); // Set z-index. if ( CKEDITOR.dialog._.currentZIndex === null ) CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex; this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 ); // Maintain the dialog ordering and dialog cover. if ( CKEDITOR.dialog._.currentTop === null ) { CKEDITOR.dialog._.currentTop = this; this._.parentDialog = null; showCover( this._.editor ); } else { this._.parentDialog = CKEDITOR.dialog._.currentTop; var parentElement = this._.parentDialog.getElement().getFirst(); parentElement.$.style.zIndex -= Math.floor( this._.editor.config.baseFloatZIndex / 2 ); CKEDITOR.dialog._.currentTop = this; } element.on( 'keydown', accessKeyDownHandler ); element.on( 'keyup', accessKeyUpHandler ); // Reset the hasFocus state. this._.hasFocus = false; for ( var i in definition.contents ) { if ( !definition.contents[ i ] ) continue; var content = definition.contents[ i ], tab = this._.tabs[ content.id ], requiredContent = content.requiredContent, enableElements = 0; if ( !tab ) continue; for ( var j in this._.contents[ content.id ] ) { var elem = this._.contents[ content.id ][ j ]; if ( elem.type == 'hbox' || elem.type == 'vbox' || !elem.getInputElement() ) continue; if ( elem.requiredContent && !this._.editor.activeFilter.check( elem.requiredContent ) ) elem.disable(); else { elem.enable(); enableElements++; } } if ( !enableElements || ( requiredContent && !this._.editor.activeFilter.check( requiredContent ) ) ) tab[ 0 ].addClass( 'cke_dialog_tab_disabled' ); else tab[ 0 ].removeClass( 'cke_dialog_tab_disabled' ); } CKEDITOR.tools.setTimeout( function() { this.layout(); resizeWithWindow( this ); this.parts.dialog.setStyle( 'visibility', '' ); // Execute onLoad for the first show. this.fireOnce( 'load', {} ); CKEDITOR.ui.fire( 'ready', this ); this.fire( 'show', {} ); this._.editor.fire( 'dialogShow', this ); if ( !this._.parentDialog ) this._.editor.focusManager.lock(); // Save the initial values of the dialog. this.foreach( function( contentObj ) { contentObj.setInitValue && contentObj.setInitValue(); } ); }, 100, this ); }, /** * Rearrange the dialog to its previous position or the middle of the window. * * @since 3.5 */ layout: function() { var el = this.parts.dialog; var dialogSize = this.getSize(); var win = CKEDITOR.document.getWindow(), viewSize = win.getViewPaneSize(); var posX = ( viewSize.width - dialogSize.width ) / 2, posY = ( viewSize.height - dialogSize.height ) / 2; // Switch to absolute position when viewport is smaller than dialog size. if ( !CKEDITOR.env.ie6Compat ) { if ( dialogSize.height + ( posY > 0 ? posY : 0 ) > viewSize.height || dialogSize.width + ( posX > 0 ? posX : 0 ) > viewSize.width ) { el.setStyle( 'position', 'absolute' ); } else { el.setStyle( 'position', 'fixed' ); } } this.move( this._.moved ? this._.position.x : posX, this._.moved ? this._.position.y : posY ); }, /** * Executes a function for each UI element. * * @param {Function} fn Function to execute for each UI element. * @returns {CKEDITOR.dialog} The current dialog object. */ foreach: function( fn ) { for ( var i in this._.contents ) { for ( var j in this._.contents[ i ] ) { fn.call( this, this._.contents[i][j] ); } } return this; }, /** * Resets all input values in the dialog. * * dialogObj.reset(); * * @method * @chainable */ reset: ( function() { var fn = function( widget ) { if ( widget.reset ) widget.reset( 1 ); }; return function() { this.foreach( fn ); return this; }; } )(), /** * Calls the {@link CKEDITOR.dialog.definition.uiElement#setup} method of each * of the UI elements, with the arguments passed through it. * It is usually being called when the dialog is opened, to put the initial value inside the field. * * dialogObj.setupContent(); * * var timestamp = ( new Date() ).valueOf(); * dialogObj.setupContent( timestamp ); */ setupContent: function() { var args = arguments; this.foreach( function( widget ) { if ( widget.setup ) widget.setup.apply( widget, args ); } ); }, /** * Calls the {@link CKEDITOR.dialog.definition.uiElement#commit} method of each * of the UI elements, with the arguments passed through it. * It is usually being called when the user confirms the dialog, to process the values. * * dialogObj.commitContent(); * * var timestamp = ( new Date() ).valueOf(); * dialogObj.commitContent( timestamp ); */ commitContent: function() { var args = arguments; this.foreach( function( widget ) { // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915) if ( CKEDITOR.env.ie && this._.currentFocusIndex == widget.focusIndex ) widget.getInputElement().$.blur(); if ( widget.commit ) widget.commit.apply( widget, args ); } ); }, /** * Hides the dialog box. * * dialogObj.hide(); */ hide: function() { if ( !this.parts.dialog.isVisible() ) return; this.fire( 'hide', {} ); this._.editor.fire( 'dialogHide', this ); // Reset the tab page. this.selectPage( this._.tabIdList[ 0 ] ); var element = this._.element; element.setStyle( 'display', 'none' ); this.parts.dialog.setStyle( 'visibility', 'hidden' ); // Unregister all access keys associated with this dialog. unregisterAccessKey( this ); // Close any child(top) dialogs first. while ( CKEDITOR.dialog._.currentTop != this ) CKEDITOR.dialog._.currentTop.hide(); // Maintain dialog ordering and remove cover if needed. if ( !this._.parentDialog ) hideCover( this._.editor ); else { var parentElement = this._.parentDialog.getElement().getFirst(); parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) ); } CKEDITOR.dialog._.currentTop = this._.parentDialog; // Deduct or clear the z-index. if ( !this._.parentDialog ) { CKEDITOR.dialog._.currentZIndex = null; // Remove access key handlers. element.removeListener( 'keydown', accessKeyDownHandler ); element.removeListener( 'keyup', accessKeyUpHandler ); var editor = this._.editor; editor.focus(); // Give a while before unlock, waiting for focus to return to the editable. (#172) setTimeout( function() { editor.focusManager.unlock(); // Fixed iOS focus issue (#12381). // Keep in mind that editor.focus() does not work in this case. if ( CKEDITOR.env.iOS ) { editor.window.focus(); } }, 0 ); } else { CKEDITOR.dialog._.currentZIndex -= 10; } delete this._.parentDialog; // Reset the initial values of the dialog. this.foreach( function( contentObj ) { contentObj.resetInitValue && contentObj.resetInitValue(); } ); // Reset dialog state back to IDLE, if busy (#13213). this.setState( CKEDITOR.DIALOG_STATE_IDLE ); }, /** * Adds a tabbed page into the dialog. * * @param {Object} contents Content definition. */ addPage: function( contents ) { if ( contents.requiredContent && !this._.editor.filter.check( contents.requiredContent ) ) return; var pageHtml = [], titleHtml = contents.label ? ' title="' + CKEDITOR.tools.htmlEncode( contents.label ) + '"' : '', vbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this, { type: 'vbox', className: 'cke_dialog_page_contents', children: contents.elements, expand: !!contents.expand, padding: contents.padding, style: contents.style || 'width: 100%;' }, pageHtml ); var contentMap = this._.contents[ contents.id ] = {}, cursor, children = vbox.getChild(), enabledFields = 0; while ( ( cursor = children.shift() ) ) { // Count all allowed fields. if ( !cursor.notAllowed && cursor.type != 'hbox' && cursor.type != 'vbox' ) enabledFields++; contentMap[ cursor.id ] = cursor; if ( typeof cursor.getChild == 'function' ) children.push.apply( children, cursor.getChild() ); } // If all fields are disabled (because they are not allowed) hide this tab. if ( !enabledFields ) contents.hidden = true; // Create the HTML for the tab and the content block. var page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) ); page.setAttribute( 'role', 'tabpanel' ); var env = CKEDITOR.env; var tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(), tab = CKEDITOR.dom.element.createFromHtml( [ ' 0 ? ' cke_last' : 'cke_first' ), titleHtml, ( !!contents.hidden ? ' style="display:none"' : '' ), ' id="', tabId, '"', env.gecko && !env.hc ? '' : ' href="javascript:void(0)"', ' tabIndex="-1"', ' hidefocus="true"', ' role="tab">', contents.label, '' ].join( '' ) ); page.setAttribute( 'aria-labelledby', tabId ); // Take records for the tabs and elements created. this._.tabs[ contents.id ] = [ tab, page ]; this._.tabIdList.push( contents.id ); !contents.hidden && this._.pageCount++; this._.lastTab = tab; this.updateStyle(); // Attach the DOM nodes. page.setAttribute( 'name', contents.id ); page.appendTo( this.parts.contents ); tab.unselectable(); this.parts.tabs.append( tab ); // Add access key handlers if access key is defined. if ( contents.accessKey ) { registerAccessKey( this, this, 'CTRL+' + contents.accessKey, tabAccessKeyDown, tabAccessKeyUp ); this._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id; } }, /** * Activates a tab page in the dialog by its id. * * dialogObj.selectPage( 'tab_1' ); * * @param {String} id The id of the dialog tab to be activated. */ selectPage: function( id ) { if ( this._.currentTabId == id ) return; if ( this._.tabs[ id ][ 0 ].hasClass( 'cke_dialog_tab_disabled' ) ) return; // If event was canceled - do nothing. if ( this.fire( 'selectPage', { page: id, currentPage: this._.currentTabId } ) === false ) return; // Hide the non-selected tabs and pages. for ( var i in this._.tabs ) { var tab = this._.tabs[ i ][ 0 ], page = this._.tabs[ i ][ 1 ]; if ( i != id ) { tab.removeClass( 'cke_dialog_tab_selected' ); page.hide(); } page.setAttribute( 'aria-hidden', i != id ); } var selected = this._.tabs[ id ]; selected[ 0 ].addClass( 'cke_dialog_tab_selected' ); // [IE] an invisible input[type='text'] will enlarge it's width // if it's value is long when it shows, so we clear it's value // before it shows and then recover it (#5649) if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) { clearOrRecoverTextInputValue( selected[ 1 ] ); selected[ 1 ].show(); setTimeout( function() { clearOrRecoverTextInputValue( selected[ 1 ], 1 ); }, 0 ); } else { selected[ 1 ].show(); } this._.currentTabId = id; this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id ); }, /** * Dialog state-specific style updates. */ updateStyle: function() { // If only a single page shown, a different style is used in the central pane. this.parts.dialog[ ( this._.pageCount === 1 ? 'add' : 'remove' ) + 'Class' ]( 'cke_single_page' ); }, /** * Hides a page's tab away from the dialog. * * dialog.hidePage( 'tab_3' ); * * @param {String} id The page's Id. */ hidePage: function( id ) { var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; if ( !tab || this._.pageCount == 1 || !tab.isVisible() ) return; // Switch to other tab first when we're hiding the active tab. else if ( id == this._.currentTabId ) this.selectPage( getPreviousVisibleTab.call( this ) ); tab.hide(); this._.pageCount--; this.updateStyle(); }, /** * Unhides a page's tab. * * dialog.showPage( 'tab_2' ); * * @param {String} id The page's Id. */ showPage: function( id ) { var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; if ( !tab ) return; tab.show(); this._.pageCount++; this.updateStyle(); }, /** * Gets the root DOM element of the dialog. * * var dialogElement = dialogObj.getElement().getFirst(); * dialogElement.setStyle( 'padding', '5px' ); * * @returns {CKEDITOR.dom.element} The `` element containing this dialog. */ getElement: function() { return this._.element; }, /** * Gets the name of the dialog. * * var dialogName = dialogObj.getName(); * * @returns {String} The name of this dialog. */ getName: function() { return this._.name; }, /** * Gets a dialog UI element object from a dialog page. * * dialogObj.getContentElement( 'tabId', 'elementId' ).setValue( 'Example' ); * * @param {String} pageId id of dialog page. * @param {String} elementId id of UI element. * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element. */ getContentElement: function( pageId, elementId ) { var page = this._.contents[ pageId ]; return page && page[ elementId ]; }, /** * Gets the value of a dialog UI element. * * alert( dialogObj.getValueOf( 'tabId', 'elementId' ) ); * * @param {String} pageId id of dialog page. * @param {String} elementId id of UI element. * @returns {Object} The value of the UI element. */ getValueOf: function( pageId, elementId ) { return this.getContentElement( pageId, elementId ).getValue(); }, /** * Sets the value of a dialog UI element. * * dialogObj.setValueOf( 'tabId', 'elementId', 'Example' ); * * @param {String} pageId id of the dialog page. * @param {String} elementId id of the UI element. * @param {Object} value The new value of the UI element. */ setValueOf: function( pageId, elementId, value ) { return this.getContentElement( pageId, elementId ).setValue( value ); }, /** * Gets the UI element of a button in the dialog's button row. * * @returns {CKEDITOR.ui.dialog.button} The button object. * * @param {String} id The id of the button. */ getButton: function( id ) { return this._.buttons[ id ]; }, /** * Simulates a click to a dialog button in the dialog's button row. * * @returns The return value of the dialog's `click` event. * * @param {String} id The id of the button. */ click: function( id ) { return this._.buttons[ id ].click(); }, /** * Disables a dialog button. * * @param {String} id The id of the button. */ disableButton: function( id ) { return this._.buttons[ id ].disable(); }, /** * Enables a dialog button. * * @param {String} id The id of the button. */ enableButton: function( id ) { return this._.buttons[ id ].enable(); }, /** * Gets the number of pages in the dialog. * * @returns {Number} Page count. */ getPageCount: function() { return this._.pageCount; }, /** * Gets the editor instance which opened this dialog. * * @returns {CKEDITOR.editor} Parent editor instances. */ getParentEditor: function() { return this._.editor; }, /** * Gets the element that was selected when opening the dialog, if any. * * @returns {CKEDITOR.dom.element} The element that was selected, or `null`. */ getSelectedElement: function() { return this.getParentEditor().getSelection().getSelectedElement(); }, /** * Adds element to dialog's focusable list. * * @param {CKEDITOR.dom.element} element * @param {Number} [index] */ addFocusable: function( element, index ) { if ( typeof index == 'undefined' ) { index = this._.focusList.length; this._.focusList.push( new Focusable( this, element, index ) ); } else { this._.focusList.splice( index, 0, new Focusable( this, element, index ) ); for ( var i = index + 1; i < this._.focusList.length; i++ ) this._.focusList[ i ].focusIndex++; } }, /** * Sets the dialog {@link #property-state}. * * @since 4.5 * @param {Number} state Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}. */ setState: function( state ) { var oldState = this.state; if ( oldState == state ) { return; } this.state = state; if ( state == CKEDITOR.DIALOG_STATE_BUSY ) { // Insert the spinner on demand. if ( !this.parts.spinner ) { var dir = this.getParentEditor().lang.dir, spinnerDef = { attributes: { 'class': 'cke_dialog_spinner' }, styles: { 'float': dir == 'rtl' ? 'right' : 'left' } }; spinnerDef.styles[ 'margin-' + ( dir == 'rtl' ? 'left' : 'right' ) ] = '8px'; this.parts.spinner = CKEDITOR.document.createElement( 'div', spinnerDef ); this.parts.spinner.setHtml( '⌛' ); this.parts.spinner.appendTo( this.parts.title, 1 ); } // Finally, show the spinner. this.parts.spinner.show(); this.getButton( 'ok' ).disable(); } else if ( state == CKEDITOR.DIALOG_STATE_IDLE ) { // Hide the spinner. But don't do anything if there is no spinner yet. this.parts.spinner && this.parts.spinner.hide(); this.getButton( 'ok' ).enable(); } this.fire( 'state', state ); } }; CKEDITOR.tools.extend( CKEDITOR.dialog, { /** * Registers a dialog. * * // Full sample plugin, which does not only register a dialog window but also adds an item to the context menu. * // To open the dialog window, choose "Open dialog" in the context menu. * CKEDITOR.plugins.add( 'myplugin', { * init: function( editor ) { * editor.addCommand( 'mydialog',new CKEDITOR.dialogCommand( 'mydialog' ) ); * * if ( editor.contextMenu ) { * editor.addMenuGroup( 'mygroup', 10 ); * editor.addMenuItem( 'My Dialog', { * label: 'Open dialog', * command: 'mydialog', * group: 'mygroup' * } ); * editor.contextMenu.addListener( function( element ) { * return { 'My Dialog': CKEDITOR.TRISTATE_OFF }; * } ); * } * * CKEDITOR.dialog.add( 'mydialog', function( api ) { * // CKEDITOR.dialog.definition * var dialogDefinition = { * title: 'Sample dialog', * minWidth: 390, * minHeight: 130, * contents: [ * { * id: 'tab1', * label: 'Label', * title: 'Title', * expand: true, * padding: 0, * elements: [ * { * type: 'html', * html: '

      This is some sample HTML content.

      ' * }, * { * type: 'textarea', * id: 'textareaId', * rows: 4, * cols: 40 * } * ] * } * ], * buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ], * onOk: function() { * // "this" is now a CKEDITOR.dialog object. * // Accessing dialog elements: * var textareaObj = this.getContentElement( 'tab1', 'textareaId' ); * alert( "You have entered: " + textareaObj.getValue() ); * } * }; * * return dialogDefinition; * } ); * } * } ); * * CKEDITOR.replace( 'editor1', { extraPlugins: 'myplugin' } ); * * @static * @param {String} name The dialog's name. * @param {Function/String} dialogDefinition * A function returning the dialog's definition, or the URL to the `.js` file holding the function. * The function should accept an argument `editor` which is the current editor instance, and * return an object conforming to {@link CKEDITOR.dialog.definition}. * @see CKEDITOR.dialog.definition */ add: function( name, dialogDefinition ) { // Avoid path registration from multiple instances override definition. if ( !this._.dialogDefinitions[ name ] || typeof dialogDefinition == 'function' ) this._.dialogDefinitions[ name ] = dialogDefinition; }, /** * @static * @todo */ exists: function( name ) { return !!this._.dialogDefinitions[ name ]; }, /** * @static * @todo */ getCurrent: function() { return CKEDITOR.dialog._.currentTop; }, /** * Check whether tab wasn't removed by {@link CKEDITOR.config#removeDialogTabs}. * * @since 4.1 * @static * @param {CKEDITOR.editor} editor * @param {String} dialogName * @param {String} tabName * @returns {Boolean} */ isTabEnabled: function( editor, dialogName, tabName ) { var cfg = editor.config.removeDialogTabs; return !( cfg && cfg.match( new RegExp( '(?:^|;)' + dialogName + ':' + tabName + '(?:$|;)', 'i' ) ) ); }, /** * The default OK button for dialogs. Fires the `ok` event and closes the dialog if the event succeeds. * * @static * @method */ okButton: ( function() { var retval = function( editor, override ) { override = override || {}; return CKEDITOR.tools.extend( { id: 'ok', type: 'button', label: editor.lang.common.ok, 'class': 'cke_dialog_ui_button_ok', onClick: function( evt ) { var dialog = evt.data.dialog; if ( dialog.fire( 'ok', { hide: true } ).hide !== false ) dialog.hide(); } }, override, true ); }; retval.type = 'button'; retval.override = function( override ) { return CKEDITOR.tools.extend( function( editor ) { return retval( editor, override ); }, { type: 'button' }, true ); }; return retval; } )(), /** * The default cancel button for dialogs. Fires the `cancel` event and * closes the dialog if no UI element value changed. * * @static * @method */ cancelButton: ( function() { var retval = function( editor, override ) { override = override || {}; return CKEDITOR.tools.extend( { id: 'cancel', type: 'button', label: editor.lang.common.cancel, 'class': 'cke_dialog_ui_button_cancel', onClick: function( evt ) { var dialog = evt.data.dialog; if ( dialog.fire( 'cancel', { hide: true } ).hide !== false ) dialog.hide(); } }, override, true ); }; retval.type = 'button'; retval.override = function( override ) { return CKEDITOR.tools.extend( function( editor ) { return retval( editor, override ); }, { type: 'button' }, true ); }; return retval; } )(), /** * Registers a dialog UI element. * * @static * @param {String} typeName The name of the UI element. * @param {Function} builder The function to build the UI element. */ addUIElement: function( typeName, builder ) { this._.uiElementBuilders[ typeName ] = builder; } } ); CKEDITOR.dialog._ = { uiElementBuilders: {}, dialogDefinitions: {}, currentTop: null, currentZIndex: null }; // "Inherit" (copy actually) from CKEDITOR.event. CKEDITOR.event.implementOn( CKEDITOR.dialog ); CKEDITOR.event.implementOn( CKEDITOR.dialog.prototype ); var defaultDialogDefinition = { resizable: CKEDITOR.DIALOG_RESIZE_BOTH, minWidth: 600, minHeight: 400, buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ] }; // Tool function used to return an item from an array based on its id // property. var getById = function( array, id, recurse ) { for ( var i = 0, item; ( item = array[ i ] ); i++ ) { if ( item.id == id ) return item; if ( recurse && item[ recurse ] ) { var retval = getById( item[ recurse ], id, recurse ); if ( retval ) return retval; } } return null; }; // Tool function used to add an item into an array. var addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound ) { if ( nextSiblingId ) { for ( var i = 0, item; ( item = array[ i ] ); i++ ) { if ( item.id == nextSiblingId ) { array.splice( i, 0, newItem ); return newItem; } if ( recurse && item[ recurse ] ) { var retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true ); if ( retval ) return retval; } } if ( nullIfNotFound ) return null; } array.push( newItem ); return newItem; }; // Tool function used to remove an item from an array based on its id. var removeById = function( array, id, recurse ) { for ( var i = 0, item; ( item = array[ i ] ); i++ ) { if ( item.id == id ) return array.splice( i, 1 ); if ( recurse && item[ recurse ] ) { var retval = removeById( item[ recurse ], id, recurse ); if ( retval ) return retval; } } return null; }; /** * This class is not really part of the API. It is the `definition` property value * passed to `dialogDefinition` event handlers. * * CKEDITOR.on( 'dialogDefinition', function( evt ) { * var definition = evt.data.definition; * var content = definition.getContents( 'page1' ); * // ... * } ); * * @private * @class CKEDITOR.dialog.definitionObject * @extends CKEDITOR.dialog.definition * @constructor Creates a definitionObject class instance. */ var definitionObject = function( dialog, dialogDefinition ) { // TODO : Check if needed. this.dialog = dialog; // Transform the contents entries in contentObjects. var contents = dialogDefinition.contents; for ( var i = 0, content; ( content = contents[ i ] ); i++ ) contents[ i ] = content && new contentObject( dialog, content ); CKEDITOR.tools.extend( this, dialogDefinition ); }; definitionObject.prototype = { /** * Gets a content definition. * * @param {String} id The id of the content definition. * @returns {CKEDITOR.dialog.definition.content} The content definition matching id. */ getContents: function( id ) { return getById( this.contents, id ); }, /** * Gets a button definition. * * @param {String} id The id of the button definition. * @returns {CKEDITOR.dialog.definition.button} The button definition matching id. */ getButton: function( id ) { return getById( this.buttons, id ); }, /** * Adds a content definition object under this dialog definition. * * @param {CKEDITOR.dialog.definition.content} contentDefinition The * content definition. * @param {String} [nextSiblingId] The id of an existing content * definition which the new content definition will be inserted * before. Omit if the new content definition is to be inserted as * the last item. * @returns {CKEDITOR.dialog.definition.content} The inserted content definition. */ addContents: function( contentDefinition, nextSiblingId ) { return addById( this.contents, contentDefinition, nextSiblingId ); }, /** * Adds a button definition object under this dialog definition. * * @param {CKEDITOR.dialog.definition.button} buttonDefinition The * button definition. * @param {String} [nextSiblingId] The id of an existing button * definition which the new button definition will be inserted * before. Omit if the new button definition is to be inserted as * the last item. * @returns {CKEDITOR.dialog.definition.button} The inserted button definition. */ addButton: function( buttonDefinition, nextSiblingId ) { return addById( this.buttons, buttonDefinition, nextSiblingId ); }, /** * Removes a content definition from this dialog definition. * * @param {String} id The id of the content definition to be removed. * @returns {CKEDITOR.dialog.definition.content} The removed content definition. */ removeContents: function( id ) { removeById( this.contents, id ); }, /** * Removes a button definition from the dialog definition. * * @param {String} id The id of the button definition to be removed. * @returns {CKEDITOR.dialog.definition.button} The removed button definition. */ removeButton: function( id ) { removeById( this.buttons, id ); } }; /** * This class is not really part of the API. It is the template of the * objects representing content pages inside the * CKEDITOR.dialog.definitionObject. * * CKEDITOR.on( 'dialogDefinition', function( evt ) { * var definition = evt.data.definition; * var content = definition.getContents( 'page1' ); * content.remove( 'textInput1' ); * // ... * } ); * * @private * @class CKEDITOR.dialog.definition.contentObject * @constructor Creates a contentObject class instance. */ function contentObject( dialog, contentDefinition ) { this._ = { dialog: dialog }; CKEDITOR.tools.extend( this, contentDefinition ); } contentObject.prototype = { /** * Gets a UI element definition under the content definition. * * @param {String} id The id of the UI element definition. * @returns {CKEDITOR.dialog.definition.uiElement} */ get: function( id ) { return getById( this.elements, id, 'children' ); }, /** * Adds a UI element definition to the content definition. * * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition The * UI elemnet definition to be added. * @param {String} nextSiblingId The id of an existing UI element * definition which the new UI element definition will be inserted * before. Omit if the new button definition is to be inserted as * the last item. * @returns {CKEDITOR.dialog.definition.uiElement} The element definition inserted. */ add: function( elementDefinition, nextSiblingId ) { return addById( this.elements, elementDefinition, nextSiblingId, 'children' ); }, /** * Removes a UI element definition from the content definition. * * @param {String} id The id of the UI element definition to be removed. * @returns {CKEDITOR.dialog.definition.uiElement} The element definition removed. */ remove: function( id ) { removeById( this.elements, id, 'children' ); } }; function initDragAndDrop( dialog ) { var lastCoords = null, abstractDialogCoords = null, editor = dialog.getParentEditor(), magnetDistance = editor.config.dialog_magnetDistance, margins = CKEDITOR.skin.margins || [ 0, 0, 0, 0 ]; if ( typeof magnetDistance == 'undefined' ) magnetDistance = 20; function mouseMoveHandler( evt ) { var dialogSize = dialog.getSize(), viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(), x = evt.data.$.screenX, y = evt.data.$.screenY, dx = x - lastCoords.x, dy = y - lastCoords.y, realX, realY; lastCoords = { x: x, y: y }; abstractDialogCoords.x += dx; abstractDialogCoords.y += dy; if ( abstractDialogCoords.x + margins[ 3 ] < magnetDistance ) realX = -margins[ 3 ]; else if ( abstractDialogCoords.x - margins[ 1 ] > viewPaneSize.width - dialogSize.width - magnetDistance ) realX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[ 1 ] ); else realX = abstractDialogCoords.x; if ( abstractDialogCoords.y + margins[ 0 ] < magnetDistance ) realY = -margins[ 0 ]; else if ( abstractDialogCoords.y - margins[ 2 ] > viewPaneSize.height - dialogSize.height - magnetDistance ) realY = viewPaneSize.height - dialogSize.height + margins[ 2 ]; else realY = abstractDialogCoords.y; dialog.move( realX, realY, 1 ); evt.data.preventDefault(); } function mouseUpHandler() { CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); if ( CKEDITOR.env.ie6Compat ) { var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); coverDoc.removeListener( 'mousemove', mouseMoveHandler ); coverDoc.removeListener( 'mouseup', mouseUpHandler ); } } dialog.parts.title.on( 'mousedown', function( evt ) { lastCoords = { x: evt.data.$.screenX, y: evt.data.$.screenY }; CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); CKEDITOR.document.on( 'mouseup', mouseUpHandler ); abstractDialogCoords = dialog.getPosition(); if ( CKEDITOR.env.ie6Compat ) { var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); coverDoc.on( 'mousemove', mouseMoveHandler ); coverDoc.on( 'mouseup', mouseUpHandler ); } evt.data.preventDefault(); }, dialog ); } function initResizeHandles( dialog ) { var def = dialog.definition, resizable = def.resizable; if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ) return; var editor = dialog.getParentEditor(); var wrapperWidth, wrapperHeight, viewSize, origin, startSize, dialogCover; var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) { startSize = dialog.getSize(); var content = dialog.parts.contents, iframeDialog = content.$.getElementsByTagName( 'iframe' ).length; // Shim to help capturing "mousemove" over iframe. if ( iframeDialog ) { dialogCover = CKEDITOR.dom.element.createFromHtml( '
      ' ); content.append( dialogCover ); } // Calculate the offset between content and chrome size. wrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height', !( CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.quirks ) ); wrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 ); origin = { x: $event.screenX, y: $event.screenY }; viewSize = CKEDITOR.document.getWindow().getViewPaneSize(); CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); CKEDITOR.document.on( 'mouseup', mouseUpHandler ); if ( CKEDITOR.env.ie6Compat ) { var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); coverDoc.on( 'mousemove', mouseMoveHandler ); coverDoc.on( 'mouseup', mouseUpHandler ); } $event.preventDefault && $event.preventDefault(); } ); // Prepend the grip to the dialog. dialog.on( 'load', function() { var direction = ''; if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH ) direction = ' cke_resizer_horizontal'; else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT ) direction = ' cke_resizer_vertical'; var resizer = CKEDITOR.dom.element.createFromHtml( '' + // BLACK LOWER RIGHT TRIANGLE (ltr) // BLACK LOWER LEFT TRIANGLE (rtl) ( editor.lang.dir == 'ltr' ? '\u25E2' : '\u25E3' ) + '
    ' ); dialog.parts.footer.append( resizer, 1 ); } ); editor.on( 'destroy', function() { CKEDITOR.tools.removeFunction( mouseDownFn ); } ); function mouseMoveHandler( evt ) { var rtl = editor.lang.dir == 'rtl', dx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ), dy = evt.data.$.screenY - origin.y, width = startSize.width, height = startSize.height, internalWidth = width + dx * ( dialog._.moved ? 1 : 2 ), internalHeight = height + dy * ( dialog._.moved ? 1 : 2 ), element = dialog._.element.getFirst(), right = rtl && element.getComputedStyle( 'right' ), position = dialog.getPosition(); if ( position.y + internalHeight > viewSize.height ) internalHeight = viewSize.height - position.y; if ( ( rtl ? right : position.x ) + internalWidth > viewSize.width ) internalWidth = viewSize.width - ( rtl ? right : position.x ); // Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL. if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) ) width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth ); if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) height = Math.max( def.minHeight || 0, internalHeight - wrapperHeight ); dialog.resize( width, height ); if ( !dialog._.moved ) dialog.layout(); evt.data.preventDefault(); } function mouseUpHandler() { CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); if ( dialogCover ) { dialogCover.remove(); dialogCover = null; } if ( CKEDITOR.env.ie6Compat ) { var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); coverDoc.removeListener( 'mouseup', mouseUpHandler ); coverDoc.removeListener( 'mousemove', mouseMoveHandler ); } } } var resizeCover; // Caching resuable covers and allowing only one cover // on screen. var covers = {}, currentCover; function cancelEvent( ev ) { ev.data.preventDefault( 1 ); } function showCover( editor ) { var win = CKEDITOR.document.getWindow(); var config = editor.config, backgroundColorStyle = config.dialog_backgroundCoverColor || 'white', backgroundCoverOpacity = config.dialog_backgroundCoverOpacity, baseFloatZIndex = config.baseFloatZIndex, coverKey = CKEDITOR.tools.genKey( backgroundColorStyle, backgroundCoverOpacity, baseFloatZIndex ), coverElement = covers[ coverKey ]; if ( !coverElement ) { var html = [ '
    ' ]; if ( CKEDITOR.env.ie6Compat ) { // Support for custom document.domain in IE. var iframeHtml = ''; html.push( '' + '' ); } html.push( '
    ' ); coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) ); coverElement.setOpacity( backgroundCoverOpacity !== undefined ? backgroundCoverOpacity : 0.5 ); coverElement.on( 'keydown', cancelEvent ); coverElement.on( 'keypress', cancelEvent ); coverElement.on( 'keyup', cancelEvent ); coverElement.appendTo( CKEDITOR.document.getBody() ); covers[ coverKey ] = coverElement; } else { coverElement.show(); } // Makes the dialog cover a focus holder as well. editor.focusManager.add( coverElement ); currentCover = coverElement; var resizeFunc = function() { var size = win.getViewPaneSize(); coverElement.setStyles( { width: size.width + 'px', height: size.height + 'px' } ); }; var scrollFunc = function() { var pos = win.getScrollPosition(), cursor = CKEDITOR.dialog._.currentTop; coverElement.setStyles( { left: pos.x + 'px', top: pos.y + 'px' } ); if ( cursor ) { do { var dialogPos = cursor.getPosition(); cursor.move( dialogPos.x, dialogPos.y ); } while ( ( cursor = cursor._.parentDialog ) ); } }; resizeCover = resizeFunc; win.on( 'resize', resizeFunc ); resizeFunc(); // Using Safari/Mac, focus must be kept where it is (#7027) if ( !( CKEDITOR.env.mac && CKEDITOR.env.webkit ) ) coverElement.focus(); if ( CKEDITOR.env.ie6Compat ) { // IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll. // So we need to invent a really funny way to make it work. var myScrollHandler = function() { scrollFunc(); arguments.callee.prevScrollHandler.apply( this, arguments ); }; win.$.setTimeout( function() { myScrollHandler.prevScrollHandler = window.onscroll || function() {}; window.onscroll = myScrollHandler; }, 0 ); scrollFunc(); } } function hideCover( editor ) { if ( !currentCover ) return; editor.focusManager.remove( currentCover ); var win = CKEDITOR.document.getWindow(); currentCover.hide(); win.removeListener( 'resize', resizeCover ); if ( CKEDITOR.env.ie6Compat ) { win.$.setTimeout( function() { var prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler; window.onscroll = prevScrollHandler || null; }, 0 ); } resizeCover = null; } function removeCovers() { for ( var coverId in covers ) covers[ coverId ].remove(); covers = {}; } var accessKeyProcessors = {}; var accessKeyDownHandler = function( evt ) { var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, alt = evt.data.$.altKey, shift = evt.data.$.shiftKey, key = String.fromCharCode( evt.data.$.keyCode ), keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; if ( !keyProcessor || !keyProcessor.length ) return; keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; keyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); evt.data.preventDefault(); }; var accessKeyUpHandler = function( evt ) { var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, alt = evt.data.$.altKey, shift = evt.data.$.shiftKey, key = String.fromCharCode( evt.data.$.keyCode ), keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; if ( !keyProcessor || !keyProcessor.length ) return; keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; if ( keyProcessor.keyup ) { keyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); evt.data.preventDefault(); } }; var registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc ) { var procList = accessKeyProcessors[ key ] || ( accessKeyProcessors[ key ] = [] ); procList.push( { uiElement: uiElement, dialog: dialog, key: key, keyup: upFunc || uiElement.accessKeyUp, keydown: downFunc || uiElement.accessKeyDown } ); }; var unregisterAccessKey = function( obj ) { for ( var i in accessKeyProcessors ) { var list = accessKeyProcessors[ i ]; for ( var j = list.length - 1; j >= 0; j-- ) { if ( list[ j ].dialog == obj || list[ j ].uiElement == obj ) list.splice( j, 1 ); } if ( list.length === 0 ) delete accessKeyProcessors[ i ]; } }; var tabAccessKeyUp = function( dialog, key ) { if ( dialog._.accessKeyMap[ key ] ) dialog.selectPage( dialog._.accessKeyMap[ key ] ); }; var tabAccessKeyDown = function() {}; ( function() { CKEDITOR.ui.dialog = { /** * The base class of all dialog UI elements. * * @class CKEDITOR.ui.dialog.uiElement * @constructor Creates a uiElement class instance. * @param {CKEDITOR.dialog} dialog Parent dialog object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element * definition. * * Accepted fields: * * * `id` (Required) The id of the UI element. See {@link CKEDITOR.dialog#getContentElement}. * * `type` (Required) The type of the UI element. The * value to this field specifies which UI element class will be used to * generate the final widget. * * `title` (Optional) The popup tooltip for the UI * element. * * `hidden` (Optional) A flag that tells if the element * should be initially visible. * * `className` (Optional) Additional CSS class names * to add to the UI element. Separated by space. * * `style` (Optional) Additional CSS inline styles * to add to the UI element. A semicolon (;) is required after the last * style declaration. * * `accessKey` (Optional) The alphanumeric access key * for this element. Access keys are automatically prefixed by CTRL. * * `on*` (Optional) Any UI element definition field that * starts with `on` followed immediately by a capital letter and * probably more letters is an event handler. Event handlers may be further * divided into registered event handlers and DOM event handlers. Please * refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and * {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more information. * * @param {Array} htmlList * List of HTML code to be added to the dialog's content area. * @param {Function/String} [nodeNameArg='div'] * A function returning a string, or a simple string for the node name for * the root DOM node. * @param {Function/Object} [stylesArg={}] * A function returning an object, or a simple object for CSS styles applied * to the DOM node. * @param {Function/Object} [attributesArg={}] * A fucntion returning an object, or a simple object for attributes applied * to the DOM node. * @param {Function/String} [contentsArg=''] * A function returning a string, or a simple string for the HTML code inside * the root DOM node. Default is empty string. */ uiElement: function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg ) { if ( arguments.length < 4 ) return; var nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div', html = [ '<', nodeName, ' ' ], styles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {}, attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {}, innerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '', domId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement', i; if ( elementDefinition.requiredContent && !dialog.getParentEditor().filter.check( elementDefinition.requiredContent ) ) { styles.display = 'none'; this.notAllowed = true; } // Set the id, a unique id is required for getElement() to work. attributes.id = domId; // Set the type and definition CSS class names. var classes = {}; if ( elementDefinition.type ) classes[ 'cke_dialog_ui_' + elementDefinition.type ] = 1; if ( elementDefinition.className ) classes[ elementDefinition.className ] = 1; if ( elementDefinition.disabled ) classes.cke_disabled = 1; var attributeClasses = ( attributes[ 'class' ] && attributes[ 'class' ].split ) ? attributes[ 'class' ].split( ' ' ) : []; for ( i = 0; i < attributeClasses.length; i++ ) { if ( attributeClasses[ i ] ) classes[ attributeClasses[ i ] ] = 1; } var finalClasses = []; for ( i in classes ) finalClasses.push( i ); attributes[ 'class' ] = finalClasses.join( ' ' ); // Set the popup tooltop. if ( elementDefinition.title ) attributes.title = elementDefinition.title; // Write the inline CSS styles. var styleStr = ( elementDefinition.style || '' ).split( ';' ); // Element alignment support. if ( elementDefinition.align ) { var align = elementDefinition.align; styles[ 'margin-left' ] = align == 'left' ? 0 : 'auto'; styles[ 'margin-right' ] = align == 'right' ? 0 : 'auto'; } for ( i in styles ) styleStr.push( i + ':' + styles[ i ] ); if ( elementDefinition.hidden ) styleStr.push( 'display:none' ); for ( i = styleStr.length - 1; i >= 0; i-- ) { if ( styleStr[ i ] === '' ) styleStr.splice( i, 1 ); } if ( styleStr.length > 0 ) attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' ); // Write the attributes. for ( i in attributes ) html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[ i ] ) + '" ' ); // Write the content HTML. html.push( '>', innerHTML, '' ); // Add contents to the parent HTML array. htmlList.push( html.join( '' ) ); ( this._ || ( this._ = {} ) ).dialog = dialog; // Override isChanged if it is defined in element definition. if ( typeof elementDefinition.isChanged == 'boolean' ) this.isChanged = function() { return elementDefinition.isChanged; }; if ( typeof elementDefinition.isChanged == 'function' ) this.isChanged = elementDefinition.isChanged; // Overload 'get(set)Value' on definition. if ( typeof elementDefinition.setValue == 'function' ) { this.setValue = CKEDITOR.tools.override( this.setValue, function( org ) { return function( val ) { org.call( this, elementDefinition.setValue.call( this, val ) ); }; } ); } if ( typeof elementDefinition.getValue == 'function' ) { this.getValue = CKEDITOR.tools.override( this.getValue, function( org ) { return function() { return elementDefinition.getValue.call( this, org.call( this ) ); }; } ); } // Add events. CKEDITOR.event.implementOn( this ); this.registerEvents( elementDefinition ); if ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey ) registerAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey ); var me = this; dialog.on( 'load', function() { var input = me.getInputElement(); if ( input ) { var focusClass = me.type in { 'checkbox': 1, 'ratio': 1 } && CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? 'cke_dialog_ui_focused' : ''; input.on( 'focus', function() { dialog._.tabBarMode = false; dialog._.hasFocus = true; me.fire( 'focus' ); focusClass && this.addClass( focusClass ); } ); input.on( 'blur', function() { me.fire( 'blur' ); focusClass && this.removeClass( focusClass ); } ); } } ); // Completes this object with everything we have in the // definition. CKEDITOR.tools.extend( this, elementDefinition ); // Register the object as a tab focus if it can be included. if ( this.keyboardFocusable ) { this.tabIndex = elementDefinition.tabIndex || 0; this.focusIndex = dialog._.focusList.push( this ) - 1; this.on( 'focus', function() { dialog._.currentFocusIndex = me.focusIndex; } ); } }, /** * Horizontal layout box for dialog UI elements, auto-expends to available width of container. * * @class CKEDITOR.ui.dialog.hbox * @extends CKEDITOR.ui.dialog.uiElement * @constructor Creates a hbox class instance. * @param {CKEDITOR.dialog} dialog Parent dialog object. * @param {Array} childObjList * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. * @param {Array} childHtmlList * Array of HTML code that correspond to the HTML output of all the * objects in childObjList. * @param {Array} htmlList * Array of HTML code that this element will output to. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `widths` (Optional) The widths of child cells. * * `height` (Optional) The height of the layout. * * `padding` (Optional) The padding width inside child cells. * * `align` (Optional) The alignment of the whole layout. */ hbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { if ( arguments.length < 4 ) return; this._ || ( this._ = {} ); var children = this._.children = childObjList, widths = elementDefinition && elementDefinition.widths || null, height = elementDefinition && elementDefinition.height || null, styles = {}, i; /** @ignore */ var innerHTML = function() { var html = [ '' ]; for ( i = 0; i < childHtmlList.length; i++ ) { var className = 'cke_dialog_ui_hbox_child', styles = []; if ( i === 0 ) { className = 'cke_dialog_ui_hbox_first'; } if ( i == childHtmlList.length - 1 ) { className = 'cke_dialog_ui_hbox_last'; } html.push( ' 0 ) { html.push( 'style="' + styles.join( '; ' ) + '" ' ); } html.push( '>', childHtmlList[ i ], '' ); } html.push( '' ); return html.join( '' ); }; var attribs = { role: 'presentation' }; elementDefinition && elementDefinition.align && ( attribs.align = elementDefinition.align ); CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'hbox' }, htmlList, 'table', styles, attribs, innerHTML ); }, /** * Vertical layout box for dialog UI elements. * * @class CKEDITOR.ui.dialog.vbox * @extends CKEDITOR.ui.dialog.hbox * @constructor Creates a vbox class instance. * @param {CKEDITOR.dialog} dialog Parent dialog object. * @param {Array} childObjList * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. * @param {Array} childHtmlList * Array of HTML code that correspond to the HTML output of all the * objects in childObjList. * @param {Array} htmlList Array of HTML code that this element will output to. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `width` (Optional) The width of the layout. * * `heights` (Optional) The heights of individual cells. * * `align` (Optional) The alignment of the layout. * * `padding` (Optional) The padding width inside child cells. * * `expand` (Optional) Whether the layout should expand * vertically to fill its container. */ vbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { if ( arguments.length < 3 ) return; this._ || ( this._ = {} ); var children = this._.children = childObjList, width = elementDefinition && elementDefinition.width || null, heights = elementDefinition && elementDefinition.heights || null; /** @ignore */ var innerHTML = function() { var html = [ '' ); for ( var i = 0; i < childHtmlList.length; i++ ) { var styles = []; html.push( '' ); } html.push( '
    0 ) html.push( 'style="', styles.join( '; ' ), '" ' ); html.push( ' class="cke_dialog_ui_vbox_child">', childHtmlList[ i ], '
    ' ); return html.join( '' ); }; CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'vbox' }, htmlList, 'div', null, { role: 'presentation' }, innerHTML ); } }; } )(); /** @class CKEDITOR.ui.dialog.uiElement */ CKEDITOR.ui.dialog.uiElement.prototype = { /** * Gets the root DOM element of this dialog UI object. * * uiElement.getElement().hide(); * * @returns {CKEDITOR.dom.element} Root DOM element of UI object. */ getElement: function() { return CKEDITOR.document.getById( this.domId ); }, /** * Gets the DOM element that the user inputs values. * * This function is used by {@link #setValue}, {@link #getValue} and {@link #focus}. It should * be overrided in child classes where the input element isn't the root * element. * * var rawValue = textInput.getInputElement().$.value; * * @returns {CKEDITOR.dom.element} The element where the user input values. */ getInputElement: function() { return this.getElement(); }, /** * Gets the parent dialog object containing this UI element. * * var dialog = uiElement.getDialog(); * * @returns {CKEDITOR.dialog} Parent dialog object. */ getDialog: function() { return this._.dialog; }, /** * Sets the value of this dialog UI object. * * uiElement.setValue( 'Dingo' ); * * @chainable * @param {Object} value The new value. * @param {Boolean} noChangeEvent Internal commit, to supress `change` event on this element. */ setValue: function( value, noChangeEvent ) { this.getInputElement().setValue( value ); !noChangeEvent && this.fire( 'change', { value: value } ); return this; }, /** * Gets the current value of this dialog UI object. * * var myValue = uiElement.getValue(); * * @returns {Object} The current value. */ getValue: function() { return this.getInputElement().getValue(); }, /** * Tells whether the UI object's value has changed. * * if ( uiElement.isChanged() ) * confirm( 'Value changed! Continue?' ); * * @returns {Boolean} `true` if changed, `false` if not changed. */ isChanged: function() { // Override in input classes. return false; }, /** * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods. * * focus : function() { * this.selectParentTab(); * // do something else. * } * * @chainable */ selectParentTab: function() { var element = this.getInputElement(), cursor = element, tabId; while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 ) { } // Some widgets don't have parent tabs (e.g. OK and Cancel buttons). if ( !cursor ) return this; tabId = cursor.getAttribute( 'name' ); // Avoid duplicate select. if ( this._.dialog._.currentTabId != tabId ) this._.dialog.selectPage( tabId ); return this; }, /** * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page. * * uiElement.focus(); * * @chainable */ focus: function() { this.selectParentTab().getInputElement().focus(); return this; }, /** * Registers the `on*` event handlers defined in the element definition. * * The default behavior of this function is: * * 1. If the on* event is defined in the class's eventProcesors list, * then the registration is delegated to the corresponding function * in the eventProcessors list. * 2. If the on* event is not defined in the eventProcessors list, then * register the event handler under the corresponding DOM event of * the UI element's input DOM element (as defined by the return value * of {@link #getInputElement}). * * This function is only called at UI element instantiation, but can * be overridded in child classes if they require more flexibility. * * @chainable * @param {CKEDITOR.dialog.definition.uiElement} definition The UI element * definition. */ registerEvents: function( definition ) { var regex = /^on([A-Z]\w+)/, match; var registerDomEvent = function( uiElement, dialog, eventName, func ) { dialog.on( 'load', function() { uiElement.getInputElement().on( eventName, func, uiElement ); } ); }; for ( var i in definition ) { if ( !( match = i.match( regex ) ) ) continue; if ( this.eventProcessors[ i ] ) this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); else registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); } return this; }, /** * The event processor list used by * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element * instantiation. The default list defines three `on*` events: * * 1. `onLoad` - Called when the element's parent dialog opens for the * first time. * 2. `onShow` - Called whenever the element's parent dialog opens. * 3. `onHide` - Called whenever the element's parent dialog closes. * * // This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick * // handlers in the UI element's definitions. * CKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {}, * CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, * { onClick : function( dialog, func ) { this.on( 'click', func ); } }, * true * ); * * @property {Object} */ eventProcessors: { onLoad: function( dialog, func ) { dialog.on( 'load', func, this ); }, onShow: function( dialog, func ) { dialog.on( 'show', func, this ); }, onHide: function( dialog, func ) { dialog.on( 'hide', func, this ); } }, /** * The default handler for a UI element's access key down event, which * tries to put focus to the UI element. * * Can be overridded in child classes for more sophisticaed behavior. * * @param {CKEDITOR.dialog} dialog The parent dialog object. * @param {String} key The key combination pressed. Since access keys * are defined to always include the `CTRL` key, its value should always * include a `'CTRL+'` prefix. */ accessKeyDown: function() { this.focus(); }, /** * The default handler for a UI element's access key up event, which * does nothing. * * Can be overridded in child classes for more sophisticated behavior. * * @param {CKEDITOR.dialog} dialog The parent dialog object. * @param {String} key The key combination pressed. Since access keys * are defined to always include the `CTRL` key, its value should always * include a `'CTRL+'` prefix. */ accessKeyUp: function() {}, /** * Disables a UI element. */ disable: function() { var element = this.getElement(), input = this.getInputElement(); input.setAttribute( 'disabled', 'true' ); element.addClass( 'cke_disabled' ); }, /** * Enables a UI element. */ enable: function() { var element = this.getElement(), input = this.getInputElement(); input.removeAttribute( 'disabled' ); element.removeClass( 'cke_disabled' ); }, /** * Determines whether an UI element is enabled or not. * * @returns {Boolean} Whether the UI element is enabled. */ isEnabled: function() { return !this.getElement().hasClass( 'cke_disabled' ); }, /** * Determines whether an UI element is visible or not. * * @returns {Boolean} Whether the UI element is visible. */ isVisible: function() { return this.getInputElement().isVisible(); }, /** * Determines whether an UI element is focus-able or not. * Focus-able is defined as being both visible and enabled. * * @returns {Boolean} Whether the UI element can be focused. */ isFocusable: function() { if ( !this.isEnabled() || !this.isVisible() ) return false; return true; } }; /** @class CKEDITOR.ui.dialog.hbox */ CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { /** * Gets a child UI element inside this container. * * var checkbox = hbox.getChild( [0,1] ); * checkbox.setValue( true ); * * @param {Array/Number} indices An array or a single number to indicate the child's * position in the container's descendant tree. Omit to get all the children in an array. * @returns {Array/CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container * if no argument given, or the specified UI element if indices is given. */ getChild: function( indices ) { // If no arguments, return a clone of the children array. if ( arguments.length < 1 ) return this._.children.concat(); // If indices isn't array, make it one. if ( !indices.splice ) indices = [ indices ]; // Retrieve the child element according to tree position. if ( indices.length < 2 ) return this._.children[ indices[ 0 ] ]; else return ( this._.children[ indices[ 0 ] ] && this._.children[ indices[ 0 ] ].getChild ) ? this._.children[ indices[ 0 ] ].getChild( indices.slice( 1, indices.length ) ) : null; } }, true ); CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox(); ( function() { var commonBuilder = { build: function( dialog, elementDefinition, output ) { var children = elementDefinition.children, child, childHtmlList = [], childObjList = []; for ( var i = 0; ( i < children.length && ( child = children[ i ] ) ); i++ ) { var childHtml = []; childHtmlList.push( childHtml ); childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); } return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition ); } }; CKEDITOR.dialog.addUIElement( 'hbox', commonBuilder ); CKEDITOR.dialog.addUIElement( 'vbox', commonBuilder ); } )(); /** * Generic dialog command. It opens a specific dialog when executed. * * // Register the "link" command, which opens the "link" dialog. * editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link' ) ); * * @class * @constructor Creates a dialogCommand class instance. * @extends CKEDITOR.commandDefinition * @param {String} dialogName The name of the dialog to open when executing * this command. * @param {Object} [ext] Additional command definition's properties. */ CKEDITOR.dialogCommand = function( dialogName, ext ) { this.dialogName = dialogName; CKEDITOR.tools.extend( this, ext, true ); }; CKEDITOR.dialogCommand.prototype = { exec: function( editor ) { editor.openDialog( this.dialogName ); }, // Dialog commands just open a dialog ui, thus require no undo logic, // undo support should dedicate to specific dialog implementation. canUndo: false, editorFocus: 1 }; ( function() { var notEmptyRegex = /^([a]|[^a])+$/, integerRegex = /^\d*$/, numberRegex = /^\d*(?:\.\d+)?$/, htmlLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, cssLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, inlineStyleRegex = /^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/; CKEDITOR.VALIDATE_OR = 1; CKEDITOR.VALIDATE_AND = 2; CKEDITOR.dialog.validate = { functions: function() { var args = arguments; return function() { /** * It's important for validate functions to be able to accept the value * as argument in addition to this.getValue(), so that it is possible to * combine validate functions together to make more sophisticated * validators. */ var value = this && this.getValue ? this.getValue() : args[ 0 ]; var msg, relation = CKEDITOR.VALIDATE_AND, functions = [], i; for ( i = 0; i < args.length; i++ ) { if ( typeof args[ i ] == 'function' ) functions.push( args[ i ] ); else break; } if ( i < args.length && typeof args[ i ] == 'string' ) { msg = args[ i ]; i++; } if ( i < args.length && typeof args[ i ] == 'number' ) relation = args[ i ]; var passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false ); for ( i = 0; i < functions.length; i++ ) { if ( relation == CKEDITOR.VALIDATE_AND ) passed = passed && functions[ i ]( value ); else passed = passed || functions[ i ]( value ); } return !passed ? msg : true; }; }, regex: function( regex, msg ) { /* * Can be greatly shortened by deriving from functions validator if code size * turns out to be more important than performance. */ return function() { var value = this && this.getValue ? this.getValue() : arguments[ 0 ]; return !regex.test( value ) ? msg : true; }; }, notEmpty: function( msg ) { return this.regex( notEmptyRegex, msg ); }, integer: function( msg ) { return this.regex( integerRegex, msg ); }, 'number': function( msg ) { return this.regex( numberRegex, msg ); }, 'cssLength': function( msg ) { return this.functions( function( val ) { return cssLengthRegex.test( CKEDITOR.tools.trim( val ) ); }, msg ); }, 'htmlLength': function( msg ) { return this.functions( function( val ) { return htmlLengthRegex.test( CKEDITOR.tools.trim( val ) ); }, msg ); }, 'inlineStyle': function( msg ) { return this.functions( function( val ) { return inlineStyleRegex.test( CKEDITOR.tools.trim( val ) ); }, msg ); }, equals: function( value, msg ) { return this.functions( function( val ) { return val == value; }, msg ); }, notEqual: function( value, msg ) { return this.functions( function( val ) { return val != value; }, msg ); } }; CKEDITOR.on( 'instanceDestroyed', function( evt ) { // Remove dialog cover on last instance destroy. if ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) ) { var currentTopDialog; while ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) ) currentTopDialog.hide(); removeCovers(); } var dialogs = evt.editor._.storedDialogs; for ( var name in dialogs ) dialogs[ name ].destroy(); } ); } )(); // Extend the CKEDITOR.editor class with dialog specific functions. CKEDITOR.tools.extend( CKEDITOR.editor.prototype, { /** * Loads and opens a registered dialog. * * CKEDITOR.instances.editor1.openDialog( 'smiley' ); * * @member CKEDITOR.editor * @param {String} dialogName The registered name of the dialog. * @param {Function} callback The function to be invoked after dialog instance created. * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed. * `null` if the dialog name is not registered. * @see CKEDITOR.dialog#add */ openDialog: function( dialogName, callback ) { var dialog = null, dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; if ( CKEDITOR.dialog._.currentTop === null ) showCover( this ); // If the dialogDefinition is already loaded, open it immediately. if ( typeof dialogDefinitions == 'function' ) { var storedDialogs = this._.storedDialogs || ( this._.storedDialogs = {} ); dialog = storedDialogs[ dialogName ] || ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) ); callback && callback.call( dialog, dialog ); dialog.show(); } else if ( dialogDefinitions == 'failed' ) { hideCover( this ); throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' ); } else if ( typeof dialogDefinitions == 'string' ) { CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ), function() { var dialogDefinition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; // In case of plugin error, mark it as loading failed. if ( typeof dialogDefinition != 'function' ) CKEDITOR.dialog._.dialogDefinitions[ dialogName ] = 'failed'; this.openDialog( dialogName, callback ); }, this, 0, 1 ); } CKEDITOR.skin.loadPart( 'dialog' ); return dialog; } } ); } )(); CKEDITOR.plugins.add( 'dialog', { requires: 'dialogui', init: function( editor ) { editor.on( 'doubleclick', function( evt ) { if ( evt.data.dialog ) editor.openDialog( evt.data.dialog ); }, null, null, 999 ); } } ); // Dialog related configurations. /** * The color of the dialog background cover. It should be a valid CSS color string. * * config.dialog_backgroundCoverColor = 'rgb(255, 254, 253)'; * * @cfg {String} [dialog_backgroundCoverColor='white'] * @member CKEDITOR.config */ /** * The opacity of the dialog background cover. It should be a number within the * range `[0.0, 1.0]`. * * config.dialog_backgroundCoverOpacity = 0.7; * * @cfg {Number} [dialog_backgroundCoverOpacity=0.5] * @member CKEDITOR.config */ /** * If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened. * * config.dialog_startupFocusTab = true; * * @cfg {Boolean} [dialog_startupFocusTab=false] * @member CKEDITOR.config */ /** * The distance of magnetic borders used in moving and resizing dialogs, * measured in pixels. * * config.dialog_magnetDistance = 30; * * @cfg {Number} [dialog_magnetDistance=20] * @member CKEDITOR.config */ /** * The guideline to follow when generating the dialog buttons. There are 3 possible options: * * * `'OS'` - the buttons will be displayed in the default order of the user's OS; * * `'ltr'` - for Left-To-Right order; * * `'rtl'` - for Right-To-Left order. * * Example: * * config.dialog_buttonsOrder = 'rtl'; * * @since 3.5 * @cfg {String} [dialog_buttonsOrder='OS'] * @member CKEDITOR.config */ /** * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. * * Separate each pair with semicolon (see example). * * **Note:** All names are case-sensitive. * * **Note:** Be cautious when specifying dialog tabs that are mandatory, * like `'info'`, dialog functionality might be broken because of this! * * config.removeDialogTabs = 'flash:advanced;image:Link'; * * @since 3.5 * @cfg {String} [removeDialogTabs=''] * @member CKEDITOR.config */ /** * Tells if user should not be asked to confirm close, if any dialog field was modified. * By default it is set to `false` meaning that the confirmation dialog will be shown. * * config.dialog_noConfirmCancel = true; * * @since 4.3 * @cfg {Boolean} [dialog_noConfirmCancel=false] * @member CKEDITOR.config */ /** * Event fired when a dialog definition is about to be used to create a dialog into * an editor instance. This event makes it possible to customize the definition * before creating it. * * Note that this event is called only the first time a specific dialog is * opened. Successive openings will use the cached dialog, and this event will * not get fired. * * @event dialogDefinition * @member CKEDITOR * @param {CKEDITOR.dialog.definition} data The dialog defination that * is being loaded. * @param {CKEDITOR.editor} editor The editor instance that will use the dialog. */ /** * Event fired when a tab is going to be selected in a dialog. * * @event selectPage * @member CKEDITOR.dialog * @param data * @param {String} data.page The id of the page that it's gonna be selected. * @param {String} data.currentPage The id of the current page. */ /** * Event fired when the user tries to dismiss a dialog. * * @event cancel * @member CKEDITOR.dialog * @param data * @param {Boolean} data.hide Whether the event should proceed or not. */ /** * Event fired when the user tries to confirm a dialog. * * @event ok * @member CKEDITOR.dialog * @param data * @param {Boolean} data.hide Whether the event should proceed or not. */ /** * Event fired when a dialog is shown. * * @event show * @member CKEDITOR.dialog */ /** * Event fired when a dialog is shown. * * @event dialogShow * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param {CKEDITOR.dialog} data The opened dialog instance. */ /** * Event fired when a dialog is hidden. * * @event hide * @member CKEDITOR.dialog */ /** * Event fired when a dialog is hidden. * * @event dialogHide * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param {CKEDITOR.dialog} data The hidden dialog instance. */ /** * Event fired when a dialog is being resized. The event is fired on * both the {@link CKEDITOR.dialog} object and the dialog instance * since 3.5.3, previously it was only available in the global object. * * @static * @event resize * @member CKEDITOR.dialog * @param data * @param {CKEDITOR.dialog} data.dialog The dialog being resized (if * it is fired on the dialog itself, this parameter is not sent). * @param {String} data.skin The skin name. * @param {Number} data.width The new width. * @param {Number} data.height The new height. */ /** * Event fired when a dialog is being resized. The event is fired on * both the {@link CKEDITOR.dialog} object and the dialog instance * since 3.5.3, previously it was only available in the global object. * * @since 3.5 * @event resize * @member CKEDITOR.dialog * @param data * @param {Number} data.width The new width. * @param {Number} data.height The new height. */ /** * Event fired when the dialog state changes, usually by {@link CKEDITOR.dialog#setState}. * * @since 4.5 * @event state * @member CKEDITOR.dialog * @param data * @param {Number} data The new state. Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}. */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/0000755000175000017500000000000014006075351021174 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/plugin.js0000644000175000017500000037772614006075351023056 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview [Widget](http://ckeditor.com/addon/widget) plugin. */ 'use strict'; ( function() { var DRAG_HANDLER_SIZE = 15; CKEDITOR.plugins.add( 'widget', { // jscs:disable maximumLineLength lang: 'af,ar,bg,ca,cs,cy,da,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,ko,ku,lv,nb,nl,no,pl,pt,pt-br,ru,sk,sl,sq,sv,tr,tt,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength requires: 'lineutils,clipboard', onLoad: function() { CKEDITOR.addCss( '.cke_widget_wrapper{' + 'position:relative;' + 'outline:none' + '}' + '.cke_widget_inline{' + 'display:inline-block' + '}' + '.cke_widget_wrapper:hover>.cke_widget_element{' + 'outline:2px solid yellow;' + 'cursor:default' + '}' + '.cke_widget_wrapper:hover .cke_widget_editable{' + 'outline:2px solid yellow' + '}' + '.cke_widget_wrapper.cke_widget_focused>.cke_widget_element,' + // We need higher specificity than hover style. '.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{' + 'outline:2px solid #ace' + '}' + '.cke_widget_editable{' + 'cursor:text' + '}' + '.cke_widget_drag_handler_container{' + 'position:absolute;' + 'width:' + DRAG_HANDLER_SIZE + 'px;' + 'height:0;' + // Initially drag handler should not be visible, until its position will be // calculated (#11177). // We need to hide unpositined handlers, so they don't extend // widget's outline far to the left (#12024). 'display:none;' + 'opacity:0.75;' + 'transition:height 0s 0.2s;' + // Delay hiding drag handler. // Prevent drag handler from being misplaced (#11198). 'line-height:0' + '}' + '.cke_widget_wrapper:hover>.cke_widget_drag_handler_container{' + 'height:' + DRAG_HANDLER_SIZE + 'px;' + 'transition:none' + '}' + '.cke_widget_drag_handler_container:hover{' + 'opacity:1' + '}' + 'img.cke_widget_drag_handler{' + 'cursor:move;' + 'width:' + DRAG_HANDLER_SIZE + 'px;' + 'height:' + DRAG_HANDLER_SIZE + 'px;' + 'display:inline-block' + '}' + '.cke_widget_mask{' + 'position:absolute;' + 'top:0;' + 'left:0;' + 'width:100%;' + 'height:100%;' + 'display:block' + '}' + '.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{' + 'cursor:move !important' + '}' ); }, beforeInit: function( editor ) { /** * An instance of widget repository. It contains all * {@link CKEDITOR.plugins.widget.repository#registered registered widget definitions} and * {@link CKEDITOR.plugins.widget.repository#instances initialized instances}. * * editor.widgets.add( 'someName', { * // Widget definition... * } ); * * editor.widgets.registered.someName; // -> Widget definition * * @since 4.3 * @readonly * @property {CKEDITOR.plugins.widget.repository} widgets * @member CKEDITOR.editor */ editor.widgets = new Repository( editor ); }, afterInit: function( editor ) { addWidgetButtons( editor ); setupContextMenu( editor ); } } ); /** * Widget repository. It keeps track of all {@link #registered registered widget definitions} and * {@link #instances initialized instances}. An instance of the repository is available under * the {@link CKEDITOR.editor#widgets} property. * * @class CKEDITOR.plugins.widget.repository * @mixins CKEDITOR.event * @constructor Creates a widget repository instance. Note that the widget plugin automatically * creates a repository instance which is available under the {@link CKEDITOR.editor#widgets} property. * @param {CKEDITOR.editor} editor The editor instance for which the repository will be created. */ function Repository( editor ) { /** * The editor instance for which this repository was created. * * @readonly * @property {CKEDITOR.editor} editor */ this.editor = editor; /** * A hash of registered widget definitions (definition name => {@link CKEDITOR.plugins.widget.definition}). * * To register a definition use the {@link #add} method. * * @readonly */ this.registered = {}; /** * An object containing initialized widget instances (widget id => {@link CKEDITOR.plugins.widget}). * * @readonly */ this.instances = {}; /** * An array of selected widget instances. * * @readonly * @property {CKEDITOR.plugins.widget[]} selected */ this.selected = []; /** * The focused widget instance. See also {@link CKEDITOR.plugins.widget#event-focus} * and {@link CKEDITOR.plugins.widget#event-blur} events. * * editor.on( 'selectionChange', function() { * if ( editor.widgets.focused ) { * // Do something when a widget is focused... * } * } ); * * @readonly * @property {CKEDITOR.plugins.widget} focused */ this.focused = null; /** * The widget instance that contains the nested editable which is currently focused. * * @readonly * @property {CKEDITOR.plugins.widget} widgetHoldingFocusedEditable */ this.widgetHoldingFocusedEditable = null; this._ = { nextId: 0, upcasts: [], upcastCallbacks: [], filters: {} }; setupWidgetsLifecycle( this ); setupSelectionObserver( this ); setupMouseObserver( this ); setupKeyboardObserver( this ); setupDragAndDrop( this ); setupNativeCutAndCopy( this ); } Repository.prototype = { /** * Minimum interval between selection checks. * * @private */ MIN_SELECTION_CHECK_INTERVAL: 500, /** * Adds a widget definition to the repository. Fires the {@link CKEDITOR.editor#widgetDefinition} event * which allows to modify the widget definition which is going to be registered. * * @param {String} name The name of the widget definition. * @param {CKEDITOR.plugins.widget.definition} widgetDef Widget definition. * @returns {CKEDITOR.plugins.widget.definition} */ add: function( name, widgetDef ) { // Create prototyped copy of original widget definition, so we won't modify it. widgetDef = CKEDITOR.tools.prototypedCopy( widgetDef ); widgetDef.name = name; widgetDef._ = widgetDef._ || {}; this.editor.fire( 'widgetDefinition', widgetDef ); if ( widgetDef.template ) widgetDef.template = new CKEDITOR.template( widgetDef.template ); addWidgetCommand( this.editor, widgetDef ); addWidgetProcessors( this, widgetDef ); this.registered[ name ] = widgetDef; return widgetDef; }, /** * Adds a callback for element upcasting. Each callback will be executed * for every element which is later tested by upcast methods. If a callback * returns `false`, the element will not be upcasted. * * // Images with the "banner" class will not be upcasted (e.g. to the image widget). * editor.widgets.addUpcastCallback( function( element ) { * if ( element.name == 'img' && element.hasClass( 'banner' ) ) * return false; * } ); * * @param {Function} callback * @param {CKEDITOR.htmlParser.element} callback.element */ addUpcastCallback: function( callback ) { this._.upcastCallbacks.push( callback ); }, /** * Checks the selection to update widget states (selection and focus). * * This method is triggered by the {@link #event-checkSelection} event. */ checkSelection: function() { var sel = this.editor.getSelection(), selectedElement = sel.getSelectedElement(), updater = stateUpdater( this ), widget; // Widget is focused so commit and finish checking. if ( selectedElement && ( widget = this.getByElement( selectedElement, true ) ) ) return updater.focus( widget ).select( widget ).commit(); var range = sel.getRanges()[ 0 ]; // No ranges or collapsed range mean that nothing is selected, so commit and finish checking. if ( !range || range.collapsed ) return updater.commit(); // Range is not empty, so create walker checking for wrappers. var walker = new CKEDITOR.dom.walker( range ), wrapper; walker.evaluator = Widget.isDomWidgetWrapper; while ( ( wrapper = walker.next() ) ) updater.select( this.getByElement( wrapper ) ); updater.commit(); }, /** * Checks if all widget instances are still present in the DOM. * Destroys those instances that are not present. * Reinitializes widgets on widget wrappers for which widget instances * cannot be found. Takes nested widgets into account, too. * * This method triggers the {@link #event-checkWidgets} event whose listeners * can cancel the method's execution or modify its options. * * @param [options] The options object. * @param {Boolean} [options.initOnlyNew] Initializes widgets only on newly wrapped * widget elements (those which still have the `cke_widget_new` class). When this option is * set to `true`, widgets which were invalidated (e.g. by replacing with a cloned DOM structure) * will not be reinitialized. This makes the check faster. * @param {Boolean} [options.focusInited] If only one widget is initialized by * the method, it will be focused. */ checkWidgets: function( options ) { this.fire( 'checkWidgets', CKEDITOR.tools.copy( options || {} ) ); }, /** * Removes the widget from the editor and moves the selection to the closest * editable position if the widget was focused before. * * @param {CKEDITOR.plugins.widget} widget The widget instance to be deleted. */ del: function( widget ) { if ( this.focused === widget ) { var editor = widget.editor, range = editor.createRange(), found; // If haven't found place for caret on the default side, // try to find it on the other side. if ( !( found = range.moveToClosestEditablePosition( widget.wrapper, true ) ) ) found = range.moveToClosestEditablePosition( widget.wrapper, false ); if ( found ) editor.getSelection().selectRanges( [ range ] ); } widget.wrapper.remove(); this.destroy( widget, true ); }, /** * Destroys the widget instance and all its nested widgets (widgets inside its nested editables). * * @param {CKEDITOR.plugins.widget} widget The widget instance to be destroyed. * @param {Boolean} [offline] Whether the widget is offline (detached from the DOM tree) — * in this case the DOM (attributes, classes, etc.) will not be cleaned up. */ destroy: function( widget, offline ) { if ( this.widgetHoldingFocusedEditable === widget ) setFocusedEditable( this, widget, null, offline ); widget.destroy( offline ); delete this.instances[ widget.id ]; this.fire( 'instanceDestroyed', widget ); }, /** * Destroys all widget instances. * * @param {Boolean} [offline] Whether the widgets are offline (detached from the DOM tree) — * in this case the DOM (attributes, classes, etc.) will not be cleaned up. * @param {CKEDITOR.dom.element} [container] The container within widgets will be destroyed. * This option will be ignored if the `offline` flag was set to `true`, because in such case * it is not possible to find widgets within the passed block. */ destroyAll: function( offline, container ) { var widget, id, instances = this.instances; if ( container && !offline ) { var wrappers = container.find( '.cke_widget_wrapper' ), l = wrappers.count(), i = 0; // Length is constant, because this is not a live node list. // Note: since querySelectorAll returns nodes in document order, // outer widgets are always placed before their nested widgets and therefore // are destroyed before them. for ( ; i < l; ++i ) { widget = this.getByElement( wrappers.getItem( i ), true ); // Widget might not be found, because it could be a nested widget, // which would be destroyed when destroying its parent. if ( widget ) this.destroy( widget ); } return; } for ( id in instances ) { widget = instances[ id ]; this.destroy( widget, offline ); } }, /** * Finalizes a process of widget creation. This includes: * * * inserting widget element into editor, * * marking widget instance as ready (see {@link CKEDITOR.plugins.widget#event-ready}), * * focusing widget instance. * * This method is used by the default widget's command and is called * after widget's dialog (if set) is closed. It may also be used in a * customized process of widget creation and insertion. * * widget.once( 'edit', function() { * // Finalize creation only of not ready widgets. * if ( widget.isReady() ) * return; * * // Cancel edit event to prevent automatic widget insertion. * evt.cancel(); * * CustomDialog.open( widget.data, function saveCallback( savedData ) { * // Cache the container, because widget may be destroyed while saving data, * // if this process will require some deep transformations. * var container = widget.wrapper.getParent(); * * widget.setData( savedData ); * * // Widget will be retrieved from container and inserted into editor. * editor.widgets.finalizeCreation( container ); * } ); * } ); * * @param {CKEDITOR.dom.element/CKEDITOR.dom.documentFragment} container The element * or document fragment which contains widget wrapper. The container is used, so before * finalizing creation the widget can be freely transformed (even destroyed and reinitialized). */ finalizeCreation: function( container ) { var wrapper = container.getFirst(); if ( wrapper && Widget.isDomWidgetWrapper( wrapper ) ) { this.editor.insertElement( wrapper ); var widget = this.getByElement( wrapper ); // Fire postponed #ready event. widget.ready = true; widget.fire( 'ready' ); widget.focus(); } }, /** * Finds a widget instance which contains a given element. The element will be the {@link CKEDITOR.plugins.widget#wrapper wrapper} * of the returned widget or a descendant of this {@link CKEDITOR.plugins.widget#wrapper wrapper}. * * editor.widgets.getByElement( someWidget.wrapper ); // -> someWidget * editor.widgets.getByElement( someWidget.parts.caption ); // -> someWidget * * // Check wrapper only: * editor.widgets.getByElement( someWidget.wrapper, true ); // -> someWidget * editor.widgets.getByElement( someWidget.parts.caption, true ); // -> null * * @param {CKEDITOR.dom.element} element The element to be checked. * @param {Boolean} [checkWrapperOnly] If set to `true`, the method will not check wrappers' descendants. * @returns {CKEDITOR.plugins.widget} The widget instance or `null`. */ getByElement: ( function() { var validWrapperElements = { div: 1, span: 1 }; function getWidgetId( element ) { return element.is( validWrapperElements ) && element.data( 'cke-widget-id' ); } return function( element, checkWrapperOnly ) { if ( !element ) return null; var id = getWidgetId( element ); // There's no need to check element parents if element is a wrapper. if ( !checkWrapperOnly && !id ) { var limit = this.editor.editable(); // Try to find a closest ascendant which is a widget wrapper. do { element = element.getParent(); } while ( element && !element.equals( limit ) && !( id = getWidgetId( element ) ) ); } return this.instances[ id ] || null; }; } )(), /** * Initializes a widget on a given element if the widget has not been initialized on it yet. * * @param {CKEDITOR.dom.element} element The future widget element. * @param {String/CKEDITOR.plugins.widget.definition} [widgetDef] Name of a widget or a widget definition. * The widget definition should be previously registered by using the * {@link CKEDITOR.plugins.widget.repository#add} method. * @param [startupData] Widget startup data (has precedence over default one). * @returns {CKEDITOR.plugins.widget} The widget instance or `null` if a widget could not be initialized on * a given element. */ initOn: function( element, widgetDef, startupData ) { if ( !widgetDef ) widgetDef = this.registered[ element.data( 'widget' ) ]; else if ( typeof widgetDef == 'string' ) widgetDef = this.registered[ widgetDef ]; if ( !widgetDef ) return null; // Wrap element if still wasn't wrapped (was added during runtime by method that skips dataProcessor). var wrapper = this.wrapElement( element, widgetDef.name ); if ( wrapper ) { // Check if widget wrapper is new (widget hasn't been initialized on it yet). // This class will be removed by widget constructor to avoid locking snapshot twice. if ( wrapper.hasClass( 'cke_widget_new' ) ) { var widget = new Widget( this, this._.nextId++, element, widgetDef, startupData ); // Widget could be destroyed when initializing it. if ( widget.isInited() ) { this.instances[ widget.id ] = widget; return widget; } else { return null; } } // Widget already has been initialized, so try to get widget by element. // Note - it may happen that other instance will returned than the one created above, // if for example widget was destroyed and reinitialized. return this.getByElement( element ); } // No wrapper means that there's no widget for this element. return null; }, /** * Initializes widgets on all elements which were wrapped by {@link #wrapElement} and * have not been initialized yet. * * @param {CKEDITOR.dom.element} [container=editor.editable()] The container which will be checked for not * initialized widgets. Defaults to editor's {@link CKEDITOR.editor#editable editable} element. * @returns {CKEDITOR.plugins.widget[]} Array of widget instances which have been initialized. * Note: Only first-level widgets are returned — without nested widgets. */ initOnAll: function( container ) { var newWidgets = ( container || this.editor.editable() ).find( '.cke_widget_new' ), newInstances = [], instance; for ( var i = newWidgets.count(); i--; ) { instance = this.initOn( newWidgets.getItem( i ).getFirst( Widget.isDomWidgetElement ) ); if ( instance ) newInstances.push( instance ); } return newInstances; }, /** * Allows to listen to events on specific types of widgets, even if they are not created yet. * * Please note that this method inherits parameters from the {@link CKEDITOR.event#method-on} method with one * extra parameter at the beginning which is the widget name. * * editor.widgets.onWidget( 'image', 'action', function( evt ) { * // Event `action` occurs on `image` widget. * } ); * * @since 4.5 * @param {String} widgetName * @param {String} eventName * @param {Function} listenerFunction * @param {Object} [scopeObj] * @param {Object} [listenerData] * @param {Number} [priority=10] */ onWidget: function( widgetName ) { var args = Array.prototype.slice.call( arguments ); args.shift(); for ( var i in this.instances ) { var instance = this.instances[ i ]; if ( instance.name == widgetName ) { instance.on.apply( instance, args ); } } this.on( 'instanceCreated', function( evt ) { var widget = evt.data; if ( widget.name == widgetName ) { widget.on.apply( widget, args ); } } ); }, /** * Parses element classes string and returns an object * whose keys contain class names. Skips all `cke_*` classes. * * This method is used by the {@link CKEDITOR.plugins.widget#getClasses} method and * may be used when overriding that method. * * @since 4.4 * @param {String} classes String (value of `class` attribute). * @returns {Object} Object containing classes or `null` if no classes found. */ parseElementClasses: function( classes ) { if ( !classes ) return null; classes = CKEDITOR.tools.trim( classes ).split( /\s+/ ); var cl, obj = {}, hasClasses = 0; while ( ( cl = classes.pop() ) ) { if ( cl.indexOf( 'cke_' ) == -1 ) obj[ cl ] = hasClasses = 1; } return hasClasses ? obj : null; }, /** * Wraps an element with a widget's non-editable container. * * If this method is called on an {@link CKEDITOR.htmlParser.element}, then it will * also take care of fixing the DOM after wrapping (the wrapper may not be allowed in element's parent). * * @param {CKEDITOR.dom.element/CKEDITOR.htmlParser.element} element The widget element to be wrapped. * @param {String} [widgetName] The name of the widget definition. Defaults to element's `data-widget` * attribute value. * @returns {CKEDITOR.dom.element/CKEDITOR.htmlParser.element} The wrapper element or `null` if * the widget definition of this name is not registered. */ wrapElement: function( element, widgetName ) { var wrapper = null, widgetDef, isInline; if ( element instanceof CKEDITOR.dom.element ) { widgetDef = this.registered[ widgetName || element.data( 'widget' ) ]; if ( !widgetDef ) return null; // Do not wrap already wrapped element. wrapper = element.getParent(); if ( wrapper && wrapper.type == CKEDITOR.NODE_ELEMENT && wrapper.data( 'cke-widget-wrapper' ) ) return wrapper; // If attribute isn't already set (e.g. for pasted widget), set it. if ( !element.hasAttribute( 'data-cke-widget-keep-attr' ) ) element.data( 'cke-widget-keep-attr', element.data( 'widget' ) ? 1 : 0 ); if ( widgetName ) element.data( 'widget', widgetName ); isInline = isWidgetInline( widgetDef, element.getName() ); wrapper = new CKEDITOR.dom.element( isInline ? 'span' : 'div' ); wrapper.setAttributes( getWrapperAttributes( isInline ) ); wrapper.data( 'cke-display-name', widgetDef.pathName ? widgetDef.pathName : element.getName() ); // Replace element unless it is a detached one. if ( element.getParent( true ) ) wrapper.replace( element ); element.appendTo( wrapper ); } else if ( element instanceof CKEDITOR.htmlParser.element ) { widgetDef = this.registered[ widgetName || element.attributes[ 'data-widget' ] ]; if ( !widgetDef ) return null; wrapper = element.parent; if ( wrapper && wrapper.type == CKEDITOR.NODE_ELEMENT && wrapper.attributes[ 'data-cke-widget-wrapper' ] ) return wrapper; // If attribute isn't already set (e.g. for pasted widget), set it. if ( !( 'data-cke-widget-keep-attr' in element.attributes ) ) element.attributes[ 'data-cke-widget-keep-attr' ] = element.attributes[ 'data-widget' ] ? 1 : 0; if ( widgetName ) element.attributes[ 'data-widget' ] = widgetName; isInline = isWidgetInline( widgetDef, element.name ); wrapper = new CKEDITOR.htmlParser.element( isInline ? 'span' : 'div', getWrapperAttributes( isInline ) ); wrapper.attributes[ 'data-cke-display-name' ] = widgetDef.pathName ? widgetDef.pathName : element.name; var parent = element.parent, index; // Don't detach already detached element. if ( parent ) { index = element.getIndex(); element.remove(); } wrapper.add( element ); // Insert wrapper fixing DOM (splitting parents if wrapper is not allowed inside them). parent && insertElement( parent, index, wrapper ); } return wrapper; }, // Expose for tests. _tests_createEditableFilter: createEditableFilter }; CKEDITOR.event.implementOn( Repository.prototype ); /** * An event fired when a widget instance is created, but before it is fully initialized. * * @event instanceCreated * @param {CKEDITOR.plugins.widget} data The widget instance. */ /** * An event fired when a widget instance was destroyed. * * See also {@link CKEDITOR.plugins.widget#event-destroy}. * * @event instanceDestroyed * @param {CKEDITOR.plugins.widget} data The widget instance. */ /** * An event fired to trigger the selection check. * * See the {@link #method-checkSelection} method. * * @event checkSelection */ /** * An event fired by the the {@link #method-checkWidgets} method. * * It can be canceled in order to stop the {@link #method-checkWidgets} * method execution or the event listener can modify the method's options. * * @event checkWidgets * @param [data] * @param {Boolean} [data.initOnlyNew] Initialize widgets only on newly wrapped * widget elements (those which still have the `cke_widget_new` class). When this option is * set to `true`, widgets which were invalidated (e.g. by replacing with a cloned DOM structure) * will not be reinitialized. This makes the check faster. * @param {Boolean} [data.focusInited] If only one widget is initialized by * the method, it will be focused. */ /** * An instance of a widget. Together with {@link CKEDITOR.plugins.widget.repository} these * two classes constitute the core of the Widget System. * * Note that neither the repository nor the widget instances can be created by using their constructors. * A repository instance is automatically set up by the Widget plugin and is accessible under * {@link CKEDITOR.editor#widgets}, while widget instances are created and destroyed by the repository. * * To create a widget, first you need to {@link CKEDITOR.plugins.widget.repository#add register} its * {@link CKEDITOR.plugins.widget.definition definition}: * * editor.widgets.add( 'simplebox', { * upcast: function( element ) { * // Defines which elements will become widgets. * if ( element.hasClass( 'simplebox' ) ) * return true; * }, * init: function() { * // ... * } * } ); * * Once the widget definition is registered, widgets will be automatically * created when loading data: * * editor.setData( '
    foo
    ', function() { * console.log( editor.widgets.instances ); // -> An object containing one instance. * } ); * * It is also possible to create instances during runtime by using a command * (if a {@link CKEDITOR.plugins.widget.definition#template} property was defined): * * // You can execute an automatically defined command to * // insert a new simplebox widget or edit the one currently focused. * editor.execCommand( 'simplebox' ); * * Note: Since CKEditor 4.5 widget's `startupData` can be passed as the command argument: * * editor.execCommand( 'simplebox', { * startupData: { * align: 'left' * } * } ); * * A widget can also be created in a completely custom way: * * var element = editor.document.createElement( 'div' ); * editor.insertElement( element ); * var widget = editor.widgets.initOn( element, 'simplebox' ); * * @since 4.3 * @class CKEDITOR.plugins.widget * @mixins CKEDITOR.event * @extends CKEDITOR.plugins.widget.definition * @constructor Creates an instance of the widget class. Do not use it directly, but instead initialize widgets * by using the {@link CKEDITOR.plugins.widget.repository#initOn} method or by the upcasting system. * @param {CKEDITOR.plugins.widget.repository} widgetsRepo * @param {Number} id Unique ID of this widget instance. * @param {CKEDITOR.dom.element} element The widget element. * @param {CKEDITOR.plugins.widget.definition} widgetDef Widget's registered definition. * @param [startupData] Initial widget data. This data object will overwrite the default data and * the data loaded from the DOM. */ function Widget( widgetsRepo, id, element, widgetDef, startupData ) { var editor = widgetsRepo.editor; // Extend this widget with widgetDef-specific methods and properties. CKEDITOR.tools.extend( this, widgetDef, { /** * The editor instance. * * @readonly * @property {CKEDITOR.editor} */ editor: editor, /** * This widget's unique (per editor instance) ID. * * @readonly * @property {Number} */ id: id, /** * Whether this widget is an inline widget (based on an inline element unless * forced otherwise by {@link CKEDITOR.plugins.widget.definition#inline}). * * **Note:** This option does not allow to turn a block element into an inline widget. * However, it makes it possible to turn an inline element into a block widget or to * force a correct type in case when automatic recognition fails. * * @readonly * @property {Boolean} */ inline: element.getParent().getName() == 'span', /** * The widget element — the element on which the widget was initialized. * * @readonly * @property {CKEDITOR.dom.element} element */ element: element, /** * Widget's data object. * * The data can only be set by using the {@link #setData} method. * Changes made to the data fire the {@link #event-data} event. * * @readonly */ data: CKEDITOR.tools.extend( {}, typeof widgetDef.defaults == 'function' ? widgetDef.defaults() : widgetDef.defaults ), /** * Indicates if a widget is data-ready. Set to `true` when data from all sources * ({@link CKEDITOR.plugins.widget.definition#defaults}, set in the * {@link #init} method, loaded from the widget's element and startup data coming from the constructor) * are finally loaded. This is immediately followed by the first {@link #event-data}. * * @readonly */ dataReady: false, /** * Whether a widget instance was initialized. This means that: * * * An instance was created, * * Its properties were set, * * The `init` method was executed. * * **Note**: The first {@link #event-data} event could not be fired yet which * means that the widget's DOM has not been set up yet. Wait for the {@link #event-ready} * event to be notified when a widget is fully initialized and ready. * * **Note**: Use the {@link #isInited} method to check whether a widget is initialized and * has not been destroyed. * * @readonly */ inited: false, /** * Whether a widget instance is ready. This means that the widget is {@link #inited} and * that its DOM was finally set up. * * **Note:** Use the {@link #isReady} method to check whether a widget is ready and * has not been destroyed. * * @readonly */ ready: false, // Revert what widgetDef could override (automatic #edit listener). edit: Widget.prototype.edit, /** * The nested editable element which is currently focused. * * @readonly * @property {CKEDITOR.plugins.widget.nestedEditable} */ focusedEditable: null, /** * The widget definition from which this instance was created. * * @readonly * @property {CKEDITOR.plugins.widget.definition} definition */ definition: widgetDef, /** * Link to the widget repository which created this instance. * * @readonly * @property {CKEDITOR.plugins.widget.repository} repository */ repository: widgetsRepo, draggable: widgetDef.draggable !== false, // WAAARNING: Overwrite widgetDef's priv object, because otherwise violent unicorn's gonna visit you. _: { downcastFn: ( widgetDef.downcast && typeof widgetDef.downcast == 'string' ) ? widgetDef.downcasts[ widgetDef.downcast ] : widgetDef.downcast } }, true ); /** * An object of widget component elements. * * For every `partName => selector` pair in {@link CKEDITOR.plugins.widget.definition#parts}, * one `partName => element` pair is added to this object during the widget initialization. * * @readonly * @property {Object} parts */ /** * The template which will be used to create a new widget element (when the widget's command is executed). * It will be populated with {@link #defaults default values}. * * @readonly * @property {CKEDITOR.template} template */ /** * The widget wrapper — a non-editable `div` or `span` element (depending on {@link #inline}) * which is a parent of the {@link #element} and widget compontents like the drag handler and the {@link #mask}. * It is the outermost widget element. * * @readonly * @property {CKEDITOR.dom.element} wrapper */ widgetsRepo.fire( 'instanceCreated', this ); setupWidget( this, widgetDef ); this.init && this.init(); // Finally mark widget as inited. this.inited = true; setupWidgetData( this, startupData ); // If at some point (e.g. in #data listener) widget hasn't been destroyed // and widget is already attached to document then fire #ready. if ( this.isInited() && editor.editable().contains( this.wrapper ) ) { this.ready = true; this.fire( 'ready' ); } } Widget.prototype = { /** * Adds a class to the widget element. This method is used by * the {@link #applyStyle} method and should be overriden by widgets * which should handle classes differently (e.g. add them to other elements). * * **Note**: This method should not be used directly. Use the {@link #setData} method to * set the `classes` property. Read more in the {@link #setData} documentation. * * See also: {@link #removeClass}, {@link #hasClass}, {@link #getClasses}. * * @since 4.4 * @param {String} className The class name to be added. */ addClass: function( className ) { this.element.addClass( className ); }, /** * Applies the specified style to the widget. It is highly recommended to use the * {@link CKEDITOR.editor#applyStyle} or {@link CKEDITOR.style#apply} methods instead of * using this method directly, because unlike editor's and style's methods, this one * does not perform any checks. * * By default this method handles only classes defined in the style. It clones existing * classes which are stored in the {@link #property-data widget data}'s `classes` property, * adds new classes, and calls the {@link #setData} method if at least one new class was added. * Then, using the {@link #event-data} event listener widget applies modifications passing * new classes to the {@link #addClass} method. * * If you need to handle classes differently than in the default way, you can override the * {@link #addClass} and related methods. You can also handle other style properties than `classes` * by overriding this method. * * See also: {@link #checkStyleActive}, {@link #removeStyle}. * * @since 4.4 * @param {CKEDITOR.style} style The custom widget style to be applied. */ applyStyle: function( style ) { applyRemoveStyle( this, style, 1 ); }, /** * Checks if the specified style is applied to this widget. It is highly recommended to use the * {@link CKEDITOR.style#checkActive} method instead of using this method directly, * because unlike style's method, this one does not perform any checks. * * By default this method handles only classes defined in the style and passes * them to the {@link #hasClass} method. You can override these methods to handle classes * differently or to handle more of the style properties. * * See also: {@link #applyStyle}, {@link #removeStyle}. * * @since 4.4 * @param {CKEDITOR.style} style The custom widget style to be checked. * @returns {Boolean} Whether the style is applied to this widget. */ checkStyleActive: function( style ) { var classes = getStyleClasses( style ), cl; if ( !classes ) return false; while ( ( cl = classes.pop() ) ) { if ( !this.hasClass( cl ) ) return false; } return true; }, /** * Destroys this widget instance. * * Use {@link CKEDITOR.plugins.widget.repository#destroy} when possible instead of this method. * * This method fires the {#event-destroy} event. * * @param {Boolean} [offline] Whether a widget is offline (detached from the DOM tree) — * in this case the DOM (attributes, classes, etc.) will not be cleaned up. */ destroy: function( offline ) { this.fire( 'destroy' ); if ( this.editables ) { for ( var name in this.editables ) this.destroyEditable( name, offline ); } if ( !offline ) { if ( this.element.data( 'cke-widget-keep-attr' ) == '0' ) this.element.removeAttribute( 'data-widget' ); this.element.removeAttributes( [ 'data-cke-widget-data', 'data-cke-widget-keep-attr' ] ); this.element.removeClass( 'cke_widget_element' ); this.element.replace( this.wrapper ); } this.wrapper = null; }, /** * Destroys a nested editable and all nested widgets. * * @param {String} editableName Nested editable name. * @param {Boolean} [offline] See {@link #method-destroy} method. */ destroyEditable: function( editableName, offline ) { var editable = this.editables[ editableName ]; editable.removeListener( 'focus', onEditableFocus ); editable.removeListener( 'blur', onEditableBlur ); this.editor.focusManager.remove( editable ); if ( !offline ) { this.repository.destroyAll( false, editable ); editable.removeClass( 'cke_widget_editable' ); editable.removeClass( 'cke_widget_editable_focused' ); editable.removeAttributes( [ 'contenteditable', 'data-cke-widget-editable', 'data-cke-enter-mode' ] ); } delete this.editables[ editableName ]; }, /** * Starts widget editing. * * This method fires the {@link CKEDITOR.plugins.widget#event-edit} event * which may be canceled in order to prevent it from opening a dialog window. * * The dialog window name is obtained from the event's data `dialog` property or * from {@link CKEDITOR.plugins.widget.definition#dialog}. * * @returns {Boolean} Returns `true` if a dialog window was opened. */ edit: function() { var evtData = { dialog: this.dialog }, that = this; // Edit event was blocked or there's no dialog to be automatically opened. if ( this.fire( 'edit', evtData ) === false || !evtData.dialog ) return false; this.editor.openDialog( evtData.dialog, function( dialog ) { var showListener, okListener; // Allow to add a custom dialog handler. if ( that.fire( 'dialog', dialog ) === false ) return; showListener = dialog.on( 'show', function() { dialog.setupContent( that ); } ); okListener = dialog.on( 'ok', function() { // Commit dialog's fields, but prevent from // firing data event for every field. Fire only one, // bulk event at the end. var dataChanged, dataListener = that.on( 'data', function( evt ) { dataChanged = 1; evt.cancel(); }, null, null, 0 ); // Create snapshot preceeding snapshot with changed widget... // TODO it should not be required, but it is and I found similar // code in dialog#ok listener in dialog/plugin.js. that.editor.fire( 'saveSnapshot' ); dialog.commitContent( that ); dataListener.removeListener(); if ( dataChanged ) { that.fire( 'data', that.data ); that.editor.fire( 'saveSnapshot' ); } } ); dialog.once( 'hide', function() { showListener.removeListener(); okListener.removeListener(); } ); } ); return true; }, /** * Returns widget element classes parsed to an object. This method * is used to populate the `classes` property of widget's {@link #property-data}. * * This method reuses {@link CKEDITOR.plugins.widget.repository#parseElementClasses}. * It should be overriden if a widget should handle classes differently (e.g. on other elements). * * See also: {@link #removeClass}, {@link #addClass}, {@link #hasClass}. * * @since 4.4 * @returns {Object} */ getClasses: function() { return this.repository.parseElementClasses( this.element.getAttribute( 'class' ) ); }, /** * Checks if the widget element has specified class. This method is used by * the {@link #checkStyleActive} method and should be overriden by widgets * which should handle classes differently (e.g. on other elements). * * See also: {@link #removeClass}, {@link #addClass}, {@link #getClasses}. * * @since 4.4 * @param {String} className The class to be checked. * @param {Boolean} Whether a widget has specified class. */ hasClass: function( className ) { return this.element.hasClass( className ); }, /** * Initializes a nested editable. * * **Note**: Only elements from {@link CKEDITOR.dtd#$editable} may become editables. * * @param {String} editableName The nested editable name. * @param {CKEDITOR.plugins.widget.nestedEditable.definition} definition The definition of the nested editable. * @returns {Boolean} Whether an editable was successfully initialized. */ initEditable: function( editableName, definition ) { // Don't fetch just first element which matched selector but look for a correct one. (#13334) var editable = this._findOneNotNested( definition.selector ); if ( editable && editable.is( CKEDITOR.dtd.$editable ) ) { editable = new NestedEditable( this.editor, editable, { filter: createEditableFilter.call( this.repository, this.name, editableName, definition ) } ); this.editables[ editableName ] = editable; editable.setAttributes( { contenteditable: 'true', 'data-cke-widget-editable': editableName, 'data-cke-enter-mode': editable.enterMode } ); if ( editable.filter ) editable.data( 'cke-filter', editable.filter.id ); editable.addClass( 'cke_widget_editable' ); // This class may be left when d&ding widget which // had focused editable. Clean this class here, not in // cleanUpWidgetElement for performance and code size reasons. editable.removeClass( 'cke_widget_editable_focused' ); if ( definition.pathName ) editable.data( 'cke-display-name', definition.pathName ); this.editor.focusManager.add( editable ); editable.on( 'focus', onEditableFocus, this ); CKEDITOR.env.ie && editable.on( 'blur', onEditableBlur, this ); // Finally, process editable's data. This data wasn't processed when loading // editor's data, becuase they need to be processed separately, with its own filters and settings. editable._.initialSetData = true; editable.setData( editable.getHtml() ); return true; } return false; }, /** * Looks inside wrapper element to find a node that * matches given selector and is not nested in other widget. (#13334) * * @since 4.5 * @private * @param {String} selector Selector to match. * @returns {CKEDITOR.dom.element} Matched element or `null` if a node has not been found. */ _findOneNotNested: function( selector ) { var matchedElements = this.wrapper.find( selector ), match, closestWrapper; for ( var i = 0; i < matchedElements.count(); i++ ) { match = matchedElements.getItem( i ); closestWrapper = match.getAscendant( Widget.isDomWidgetWrapper ); // The closest ascendant-wrapper of this match defines to which widget // this match belongs. If the ascendant is this widget's wrapper // it means that the match is not nested in other widget. if ( this.wrapper.equals( closestWrapper ) ) { return match; } } return null; }, /** * Checks if a widget has already been initialized and has not been destroyed yet. * * See {@link #inited} for more details. * * @returns {Boolean} */ isInited: function() { return !!( this.wrapper && this.inited ); }, /** * Checks if a widget is ready and has not been destroyed yet. * * See {@link #property-ready} for more details. * * @returns {Boolean} */ isReady: function() { return this.isInited() && this.ready; }, /** * Focuses a widget by selecting it. */ focus: function() { var sel = this.editor.getSelection(); // Fake the selection before focusing editor, to avoid unpreventable viewports scrolling // on Webkit/Blink/IE which is done because there's no selection or selection was somewhere else than widget. if ( sel ) { var isDirty = this.editor.checkDirty(); sel.fake( this.wrapper ); !isDirty && this.editor.resetDirty(); } // Always focus editor (not only when focusManger.hasFocus is false) (because of #10483). this.editor.focus(); }, /** * Removes a class from the widget element. This method is used by * the {@link #removeStyle} method and should be overriden by widgets * which should handle classes differently (e.g. on other elements). * * **Note**: This method should not be used directly. Use the {@link #setData} method to * set the `classes` property. Read more in the {@link #setData} documentation. * * See also: {@link #hasClass}, {@link #addClass}. * * @since 4.4 * @param {String} className The class to be removed. */ removeClass: function( className ) { this.element.removeClass( className ); }, /** * Removes the specified style from the widget. It is highly recommended to use the * {@link CKEDITOR.editor#removeStyle} or {@link CKEDITOR.style#remove} methods instead of * using this method directly, because unlike editor's and style's methods, this one * does not perform any checks. * * Read more about how applying/removing styles works in the {@link #applyStyle} method documentation. * * See also {@link #checkStyleActive}, {@link #applyStyle}, {@link #getClasses}. * * @since 4.4 * @param {CKEDITOR.style} style The custom widget style to be removed. */ removeStyle: function( style ) { applyRemoveStyle( this, style, 0 ); }, /** * Sets widget value(s) in the {@link #property-data} object. * If the given value(s) modifies current ones, the {@link #event-data} event is fired. * * this.setData( 'align', 'left' ); * this.data.align; // -> 'left' * * this.setData( { align: 'right', opened: false } ); * this.data.align; // -> 'right' * this.data.opened; // -> false * * Set values are stored in {@link #element}'s attribute (`data-cke-widget-data`), * in a JSON string, therefore {@link #property-data} should contain * only serializable data. * * **Note:** A special data property, `classes`, exists. It contains an object with * classes which were returned by the {@link #getClasses} method during the widget initialization. * This property is then used by the {@link #applyStyle} and {@link #removeStyle} methods. * When it is changed (the reference to object must be changed!), the widget updates its classes by * using the {@link #addClass} and {@link #removeClass} methods. * * // Adding a new class. * var classes = CKEDITOR.tools.clone( widget.data.classes ); * classes.newClass = 1; * widget.setData( 'classes', classes ); * * // Removing a class. * var classes = CKEDITOR.tools.clone( widget.data.classes ); * delete classes.newClass; * widget.setData( 'classes', classes ); * * @param {String/Object} keyOrData * @param {Object} value * @chainable */ setData: function( key, value ) { var data = this.data, modified = 0; if ( typeof key == 'string' ) { if ( data[ key ] !== value ) { data[ key ] = value; modified = 1; } } else { var newData = key; for ( key in newData ) { if ( data[ key ] !== newData[ key ] ) { modified = 1; data[ key ] = newData[ key ]; } } } // Block firing data event and overwriting data element before setupWidgetData is executed. if ( modified && this.dataReady ) { writeDataToElement( this ); this.fire( 'data', data ); } return this; }, /** * Changes the widget's focus state. This method is executed automatically after * a widget was focused by the {@link #method-focus} method or the selection was moved * out of the widget. * * This is a low-level method which is not integrated with e.g. the undo manager. * Use the {@link #method-focus} method instead. * * @param {Boolean} selected Whether to select or deselect this widget. * @chainable */ setFocused: function( focused ) { this.wrapper[ focused ? 'addClass' : 'removeClass' ]( 'cke_widget_focused' ); this.fire( focused ? 'focus' : 'blur' ); return this; }, /** * Changes the widget's select state. This method is executed automatically after * a widget was selected by the {@link #method-focus} method or the selection * was moved out of the widget. * * This is a low-level method which is not integrated with e.g. the undo manager. * Use the {@link #method-focus} method instead or simply change the selection. * * @param {Boolean} selected Whether to select or deselect this widget. * @chainable */ setSelected: function( selected ) { this.wrapper[ selected ? 'addClass' : 'removeClass' ]( 'cke_widget_selected' ); this.fire( selected ? 'select' : 'deselect' ); return this; }, /** * Repositions drag handler according to the widget's element position. Should be called from events, like mouseover. */ updateDragHandlerPosition: function() { var editor = this.editor, domElement = this.element.$, oldPos = this._.dragHandlerOffset, newPos = { x: domElement.offsetLeft, y: domElement.offsetTop - DRAG_HANDLER_SIZE }; if ( oldPos && newPos.x == oldPos.x && newPos.y == oldPos.y ) return; // We need to make sure that dirty state is not changed (#11487). var initialDirty = editor.checkDirty(); editor.fire( 'lockSnapshot' ); this.dragHandlerContainer.setStyles( { top: newPos.y + 'px', left: newPos.x + 'px', display: 'block' } ); editor.fire( 'unlockSnapshot' ); !initialDirty && editor.resetDirty(); this._.dragHandlerOffset = newPos; } }; CKEDITOR.event.implementOn( Widget.prototype ); /** * Gets the {@link #isDomNestedEditable nested editable} * (returned as a {@link CKEDITOR.dom.element}, not as a {@link CKEDITOR.plugins.widget.nestedEditable}) * closest to the `node` or the `node` if it is a nested editable itself. * * @since 4.5 * @static * @param {CKEDITOR.dom.element} guard Stop ancestor search on this node (usually editor's editable). * @param {CKEDITOR.dom.node} node Start the search from this node. * @returns {CKEDITOR.dom.element/null} Element or `null` if not found. */ Widget.getNestedEditable = function( guard, node ) { if ( !node || node.equals( guard ) ) return null; if ( Widget.isDomNestedEditable( node ) ) return node; return Widget.getNestedEditable( guard, node.getParent() ); }; /** * Checks whether the `node` is a widget's drag handle element. * * @since 4.5 * @static * @param {CKEDITOR.dom.node} node * @returns {Boolean} */ Widget.isDomDragHandler = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.hasAttribute( 'data-cke-widget-drag-handler' ); }; /** * Checks whether the `node` is a container of the widget's drag handle element. * * @since 4.5 * @static * @param {CKEDITOR.dom.node} node * @returns {Boolean} */ Widget.isDomDragHandlerContainer = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.hasClass( 'cke_widget_drag_handler_container' ); }; /** * Checks whether the `node` is a {@link CKEDITOR.plugins.widget#editables nested editable}. * Note that this function only checks whether it is the right element, not whether * the passed `node` is an instance of {@link CKEDITOR.plugins.widget.nestedEditable}. * * @since 4.5 * @static * @param {CKEDITOR.dom.node} node * @returns {Boolean} */ Widget.isDomNestedEditable = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.hasAttribute( 'data-cke-widget-editable' ); }; /** * Checks whether the `node` is a {@link CKEDITOR.plugins.widget#element widget element}. * * @since 4.5 * @static * @param {CKEDITOR.dom.node} node * @returns {Boolean} */ Widget.isDomWidgetElement = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.hasAttribute( 'data-widget' ); }; /** * Checks whether the `node` is a {@link CKEDITOR.plugins.widget#wrapper widget wrapper}. * * @since 4.5 * @static * @param {CKEDITOR.dom.element} node * @returns {Boolean} */ Widget.isDomWidgetWrapper = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.hasAttribute( 'data-cke-widget-wrapper' ); }; /** * Checks whether the `node` is a {@link CKEDITOR.plugins.widget#element widget element}. * * @since 4.5 * @static * @param {CKEDITOR.htmlParser.node} node * @returns {Boolean} */ Widget.isParserWidgetElement = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && !!node.attributes[ 'data-widget' ]; }; /** * Checks whether the `node` is a {@link CKEDITOR.plugins.widget#wrapper widget wrapper}. * * @since 4.5 * @static * @param {CKEDITOR.htmlParser.element} node * @returns {Boolean} */ Widget.isParserWidgetWrapper = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && !!node.attributes[ 'data-cke-widget-wrapper' ]; }; /** * An event fired when a widget is ready (fully initialized). This event is fired after: * * * {@link #init} is called, * * The first {@link #event-data} event is fired, * * A widget is attached to the document. * * Therefore, in case of widget creation with a command which opens a dialog window, this event * will be delayed after the dialog window is closed and the widget is finally inserted into the document. * * **Note**: If your widget does not use automatic dialog window binding (i.e. you open the dialog window manually) * or another situation in which the widget wrapper is not attached to document at the time when it is * initialized occurs, you need to take care of firing {@link #event-ready} yourself. * * See also {@link #property-ready} and {@link #property-inited} properties, and * {@link #isReady} and {@link #isInited} methods. * * @event ready */ /** * An event fired when a widget is about to be destroyed, but before it is * fully torn down. * * @event destroy */ /** * An event fired when a widget is focused. * * Widget can be focused by executing {@link #method-focus}. * * @event focus */ /** * An event fired when a widget is blurred. * * @event blur */ /** * An event fired when a widget is selected. * * @event select */ /** * An event fired when a widget is deselected. * * @event deselect */ /** * An event fired by the {@link #method-edit} method. It can be canceled * in order to stop the default action (opening a dialog window and/or * {@link CKEDITOR.plugins.widget.repository#finalizeCreation finalizing widget creation}). * * @event edit * @param data * @param {String} data.dialog Defaults to {@link CKEDITOR.plugins.widget.definition#dialog} * and can be changed or set by the listener. */ /** * An event fired when a dialog window for widget editing is opened. * This event can be canceled in order to handle the editing dialog in a custom manner. * * @event dialog * @param {CKEDITOR.dialog} data The opened dialog window instance. */ /** * An event fired when a key is pressed on a focused widget. * This event is forwarded from the {@link CKEDITOR.editor#key} event and * has the ability to block editor keystrokes if it is canceled. * * @event key * @param data * @param {Number} data.keyCode A number representing the key code (or combination). */ /** * An event fired when a widget is double clicked. * * **Note:** If a default editing action is executed on double click (i.e. a widget has a * {@link CKEDITOR.plugins.widget.definition#dialog dialog} defined and the {@link #event-doubleclick} event was not * canceled), this event will be automatically canceled, so a listener added with the default priority (10) * will not be executed. Use a listener with low priority (e.g. 5) to be sure that it will be executed. * * widget.on( 'doubleclick', function( evt ) { * console.log( 'widget#doubleclick' ); * }, null, null, 5 ); * * If your widget handles double click in a special way (so the default editing action is not executed), * make sure you cancel this event, because otherwise it will be propagated to {@link CKEDITOR.editor#doubleclick} * and another feature may step in (e.g. a Link dialog window may be opened if your widget was inside a link). * * @event doubleclick * @param data * @param {CKEDITOR.dom.element} data.element The double-clicked element. */ /** * An event fired when the context menu is opened for a widget. * * @event contextMenu * @param data The object containing context menu options to be added * for this widget. See {@link CKEDITOR.plugins.contextMenu#addListener}. */ /** * An event fired when the widget data changed. See the {@link #setData} method and the {@link #property-data} property. * * @event data */ /** * The wrapper class for editable elements inside widgets. * * Do not use directly. Use {@link CKEDITOR.plugins.widget.definition#editables} or * {@link CKEDITOR.plugins.widget#initEditable}. * * @class CKEDITOR.plugins.widget.nestedEditable * @extends CKEDITOR.dom.element * @constructor * @param {CKEDITOR.editor} editor * @param {CKEDITOR.dom.element} element * @param config * @param {CKEDITOR.filter} [config.filter] */ function NestedEditable( editor, element, config ) { // Call the base constructor. CKEDITOR.dom.element.call( this, element.$ ); this.editor = editor; this._ = {}; var filter = this.filter = config.filter; // If blockless editable - always use BR mode. if ( !CKEDITOR.dtd[ this.getName() ].p ) this.enterMode = this.shiftEnterMode = CKEDITOR.ENTER_BR; else { this.enterMode = filter ? filter.getAllowedEnterMode( editor.enterMode ) : editor.enterMode; this.shiftEnterMode = filter ? filter.getAllowedEnterMode( editor.shiftEnterMode, true ) : editor.shiftEnterMode; } } NestedEditable.prototype = CKEDITOR.tools.extend( CKEDITOR.tools.prototypedCopy( CKEDITOR.dom.element.prototype ), { /** * Sets the editable data. The data will be passed through the {@link CKEDITOR.editor#dataProcessor} * and the {@link CKEDITOR.editor#filter}. This ensures that the data was filtered and prepared to be * edited like the {@link CKEDITOR.editor#method-setData editor data}. * * Before content is changed, all nested widgets are destroyed. Afterwards, after new content is loaded, * all nested widgets are initialized. * * @param {String} data */ setData: function( data ) { // For performance reasons don't call destroyAll when initializing a nested editable, // because there are no widgets inside. if ( !this._.initialSetData ) { // Destroy all nested widgets before setting data. this.editor.widgets.destroyAll( false, this ); } this._.initialSetData = false; data = this.editor.dataProcessor.toHtml( data, { context: this.getName(), filter: this.filter, enterMode: this.enterMode } ); this.setHtml( data ); this.editor.widgets.initOnAll( this ); }, /** * Gets the editable data. Like {@link #setData}, this method will process and filter the data. * * @returns {String} */ getData: function() { return this.editor.dataProcessor.toDataFormat( this.getHtml(), { context: this.getName(), filter: this.filter, enterMode: this.enterMode } ); } } ); /** * The editor instance. * * @readonly * @property {CKEDITOR.editor} editor */ /** * The filter instance if allowed content rules were defined. * * @readonly * @property {CKEDITOR.filter} filter */ /** * The enter mode active in this editable. * It is determined from editable's name (whether it is a blockless editable), * its allowed content rules (if defined) and the default editor's mode. * * @readonly * @property {Number} enterMode */ /** * The shift enter move active in this editable. * * @readonly * @property {Number} shiftEnterMode */ // // REPOSITORY helpers ----------------------------------------------------- // function addWidgetButtons( editor ) { var widgets = editor.widgets.registered, widget, widgetName, widgetButton; for ( widgetName in widgets ) { widget = widgets[ widgetName ]; // Create button if defined. widgetButton = widget.button; if ( widgetButton && editor.ui.addButton ) { editor.ui.addButton( CKEDITOR.tools.capitalize( widget.name, true ), { label: widgetButton, command: widget.name, toolbar: 'insert,10' } ); } } } // Create a command creating and editing widget. // // @param editor // @param {CKEDITOR.plugins.widget.definition} widgetDef function addWidgetCommand( editor, widgetDef ) { editor.addCommand( widgetDef.name, { exec: function( editor, commandData ) { var focused = editor.widgets.focused; // If a widget of the same type is focused, start editing. if ( focused && focused.name == widgetDef.name ) focused.edit(); // Otherwise... // ... use insert method is was defined. else if ( widgetDef.insert ) widgetDef.insert(); // ... or create a brand-new widget from template. else if ( widgetDef.template ) { var defaults = typeof widgetDef.defaults == 'function' ? widgetDef.defaults() : widgetDef.defaults, element = CKEDITOR.dom.element.createFromHtml( widgetDef.template.output( defaults ) ), instance, wrapper = editor.widgets.wrapElement( element, widgetDef.name ), temp = new CKEDITOR.dom.documentFragment( wrapper.getDocument() ); // Append wrapper to a temporary document. This will unify the environment // in which #data listeners work when creating and editing widget. temp.append( wrapper ); instance = editor.widgets.initOn( element, widgetDef, commandData && commandData.startupData ); // Instance could be destroyed during initialization. // In this case finalize creation if some new widget // was left in temporary document fragment. if ( !instance ) { finalizeCreation(); return; } // Listen on edit to finalize widget insertion. // // * If dialog was set, then insert widget after dialog was successfully saved or destroy this // temporary instance. // * If dialog wasn't set and edit wasn't canceled, insert widget. var editListener = instance.once( 'edit', function( evt ) { if ( evt.data.dialog ) { instance.once( 'dialog', function( evt ) { var dialog = evt.data, okListener, cancelListener; // Finalize creation AFTER (20) new data was set. okListener = dialog.once( 'ok', finalizeCreation, null, null, 20 ); cancelListener = dialog.once( 'cancel', function( evt ) { if ( !( evt.data && evt.data.hide === false ) ) { editor.widgets.destroy( instance, true ); } } ); dialog.once( 'hide', function() { okListener.removeListener(); cancelListener.removeListener(); } ); } ); } else { // Dialog hasn't been set, so insert widget now. finalizeCreation(); } }, null, null, 999 ); instance.edit(); // Remove listener in case someone canceled it before this // listener was executed. editListener.removeListener(); } function finalizeCreation() { editor.widgets.finalizeCreation( temp ); } }, allowedContent: widgetDef.allowedContent, requiredContent: widgetDef.requiredContent, contentForms: widgetDef.contentForms, contentTransformations: widgetDef.contentTransformations } ); } function addWidgetProcessors( widgetsRepo, widgetDef ) { var upcast = widgetDef.upcast, upcasts, priority = widgetDef.upcastPriority || 10; if ( !upcast ) return; // Multiple upcasts defined in string. if ( typeof upcast == 'string' ) { upcasts = upcast.split( ',' ); while ( upcasts.length ) { addUpcast( widgetDef.upcasts[ upcasts.pop() ], widgetDef.name, priority ); } } // Single rule which is automatically activated. else { addUpcast( upcast, widgetDef.name, priority ); } function addUpcast( upcast, name, priority ) { // Find index of the first higher (in terms of value) priority upcast. var index = CKEDITOR.tools.getIndex( widgetsRepo._.upcasts, function( element ) { return element[ 2 ] > priority; } ); // Add at the end if it is the highest priority so far. if ( index < 0 ) { index = widgetsRepo._.upcasts.length; } widgetsRepo._.upcasts.splice( index, 0, [ upcast, name, priority ] ); } } function blurWidget( widgetsRepo, widget ) { widgetsRepo.focused = null; if ( widget.isInited() ) { var isDirty = widget.editor.checkDirty(); // Widget could be destroyed in the meantime - e.g. data could be set. widgetsRepo.fire( 'widgetBlurred', { widget: widget } ); widget.setFocused( false ); !isDirty && widget.editor.resetDirty(); } } function checkWidgets( evt ) { var options = evt.data; if ( this.editor.mode != 'wysiwyg' ) return; var editable = this.editor.editable(), instances = this.instances, newInstances, i, count, wrapper, notYetInitialized; if ( !editable ) return; // Remove widgets which have no corresponding elements in DOM. for ( i in instances ) { // #13410 Remove widgets that are ready. This prevents from destroying widgets that are during loading process. if ( instances[ i ].isReady() && !editable.contains( instances[ i ].wrapper ) ) this.destroy( instances[ i ], true ); } // Init on all (new) if initOnlyNew option was passed. if ( options && options.initOnlyNew ) newInstances = this.initOnAll(); else { var wrappers = editable.find( '.cke_widget_wrapper' ); newInstances = []; // Create widgets on existing wrappers if they do not exists. for ( i = 0, count = wrappers.count(); i < count; i++ ) { wrapper = wrappers.getItem( i ); notYetInitialized = !this.getByElement( wrapper, true ); // Check if: // * there's no instance for this widget // * wrapper is not inside some temporary element like copybin (#11088) // * it was a nested widget's wrapper which has been detached from DOM, // when nested editable has been initialized (it overwrites its innerHTML // and initializes nested widgets). if ( notYetInitialized && !findParent( wrapper, isDomTemp ) && editable.contains( wrapper ) ) { // Add cke_widget_new class because otherwise // widget will not be created on such wrapper. wrapper.addClass( 'cke_widget_new' ); newInstances.push( this.initOn( wrapper.getFirst( Widget.isDomWidgetElement ) ) ); } } } // If only single widget was initialized and focusInited was passed, focus it. if ( options && options.focusInited && newInstances.length == 1 ) newInstances[ 0 ].focus(); } // Unwraps widget element and clean up element. // // This function is used to clean up pasted widgets. // It should have similar result to widget#destroy plus // some additional adjustments, specific for pasting. // // @param {CKEDITOR.htmlParser.element} el function cleanUpWidgetElement( el ) { var parent = el.parent; if ( parent.type == CKEDITOR.NODE_ELEMENT && parent.attributes[ 'data-cke-widget-wrapper' ] ) parent.replaceWith( el ); } // Similar to cleanUpWidgetElement, but works on DOM and finds // widget elements by its own. // // Unlike cleanUpWidgetElement it will wrap element back. // // @param {CKEDITOR.dom.element} container function cleanUpAllWidgetElements( widgetsRepo, container ) { var wrappers = container.find( '.cke_widget_wrapper' ), wrapper, element, i = 0, l = wrappers.count(); for ( ; i < l; ++i ) { wrapper = wrappers.getItem( i ); element = wrapper.getFirst( Widget.isDomWidgetElement ); // If wrapper contains widget element - unwrap it and wrap again. if ( element.type == CKEDITOR.NODE_ELEMENT && element.data( 'widget' ) ) { element.replace( wrapper ); widgetsRepo.wrapElement( element ); } else { // Otherwise - something is wrong... clean this up. wrapper.remove(); } } } // Creates {@link CKEDITOR.filter} instance for given widget, editable and rules. // // Once filter for widget-editable pair is created it is cached, so the same instance // will be returned when method is executed again. // // @param {String} widgetName // @param {String} editableName // @param {CKEDITOR.plugins.widget.nestedEditableDefinition} editableDefinition The nested editable definition. // @returns {CKEDITOR.filter} Filter instance or `null` if rules are not defined. // @context CKEDITOR.plugins.widget.repository function createEditableFilter( widgetName, editableName, editableDefinition ) { if ( !editableDefinition.allowedContent ) return null; var editables = this._.filters[ widgetName ]; if ( !editables ) this._.filters[ widgetName ] = editables = {}; var filter = editables[ editableName ]; if ( !filter ) editables[ editableName ] = filter = new CKEDITOR.filter( editableDefinition.allowedContent ); return filter; } // Creates an iterator function which when executed on all // elements in DOM tree will gather elements that should be wrapped // and initialized as widgets. function createUpcastIterator( widgetsRepo ) { var toBeWrapped = [], upcasts = widgetsRepo._.upcasts, upcastCallbacks = widgetsRepo._.upcastCallbacks; return { toBeWrapped: toBeWrapped, iterator: function( element ) { var upcast, upcasted, data, i, upcastsLength, upcastCallbacksLength; // Wrapper found - find widget element, add it to be // cleaned up (unwrapped) and wrapped and stop iterating in this branch. if ( 'data-cke-widget-wrapper' in element.attributes ) { element = element.getFirst( Widget.isParserWidgetElement ); if ( element ) toBeWrapped.push( [ element ] ); // Do not iterate over descendants. return false; } // Widget element found - add it to be cleaned up (just in case) // and wrapped and stop iterating in this branch. else if ( 'data-widget' in element.attributes ) { toBeWrapped.push( [ element ] ); // Do not iterate over descendants. return false; } else if ( ( upcastsLength = upcasts.length ) ) { // Ignore elements with data-cke-widget-upcasted to avoid multiple upcasts (#11533). // Do not iterate over descendants. if ( element.attributes[ 'data-cke-widget-upcasted' ] ) return false; // Check element with upcast callbacks first. // If any of them return false abort upcasting. for ( i = 0, upcastCallbacksLength = upcastCallbacks.length; i < upcastCallbacksLength; ++i ) { if ( upcastCallbacks[ i ]( element ) === false ) return; // Return nothing in order to continue iterating over ascendants. // See http://dev.ckeditor.com/ticket/11186#comment:6 } for ( i = 0; i < upcastsLength; ++i ) { upcast = upcasts[ i ]; data = {}; if ( ( upcasted = upcast[ 0 ]( element, data ) ) ) { // If upcast function returned element, upcast this one. // It can be e.g. a new element wrapping the original one. if ( upcasted instanceof CKEDITOR.htmlParser.element ) element = upcasted; // Set initial data attr with data from upcast method. element.attributes[ 'data-cke-widget-data' ] = encodeURIComponent( JSON.stringify( data ) ); element.attributes[ 'data-cke-widget-upcasted' ] = 1; toBeWrapped.push( [ element, upcast[ 1 ] ] ); // Do not iterate over descendants. return false; } } } } }; } // Finds a first parent that matches query. // // @param {CKEDITOR.dom.element} element // @param {Function} query function findParent( element, query ) { var parent = element; while ( ( parent = parent.getParent() ) ) { if ( query( parent ) ) return true; } return false; } function getWrapperAttributes( inlineWidget ) { return { // tabindex="-1" means that it can receive focus by code. tabindex: -1, contenteditable: 'false', 'data-cke-widget-wrapper': 1, 'data-cke-filter': 'off', // Class cke_widget_new marks widgets which haven't been initialized yet. 'class': 'cke_widget_wrapper cke_widget_new cke_widget_' + ( inlineWidget ? 'inline' : 'block' ) }; } // Inserts element at given index. // It will check DTD and split ancestor elements up to the first // that can contain this element. // // @param {CKEDITOR.htmlParser.element} parent // @param {Number} index // @param {CKEDITOR.htmlParser.element} element function insertElement( parent, index, element ) { // Do not split doc fragment... if ( parent.type == CKEDITOR.NODE_ELEMENT ) { var parentAllows = CKEDITOR.dtd[ parent.name ]; // Parent element is known (included in DTD) and cannot contain // this element. if ( parentAllows && !parentAllows[ element.name ] ) { var parent2 = parent.split( index ), parentParent = parent.parent; // Element will now be inserted at right parent's index. index = parent2.getIndex(); // If left part of split is empty - remove it. if ( !parent.children.length ) { index -= 1; parent.remove(); } // If right part of split is empty - remove it. if ( !parent2.children.length ) parent2.remove(); // Try inserting as grandpas' children. return insertElement( parentParent, index, element ); } } // Finally we can add this element. parent.add( element, index ); } // Checks whether for the given widget definition and element widget should be created in inline or block mode. // // See also: {@link CKEDITOR.plugins.widget.definition#inline} and {@link CKEDITOR.plugins.widget#element}. // // @param {CKEDITOR.plugins.widget.definition} widgetDef The widget definition. // @param {String} elementName The name of the widget element. // @returns {Boolean} function isWidgetInline( widgetDef, elementName ) { return typeof widgetDef.inline == 'boolean' ? widgetDef.inline : !!CKEDITOR.dtd.$inline[ elementName ]; } // @param {CKEDITOR.dom.element} // @returns {Boolean} function isDomTemp( element ) { return element.hasAttribute( 'data-cke-temp' ); } function onEditableKey( widget, keyCode ) { var focusedEditable = widget.focusedEditable, range; // CTRL+A. if ( keyCode == CKEDITOR.CTRL + 65 ) { var bogus = focusedEditable.getBogus(); range = widget.editor.createRange(); range.selectNodeContents( focusedEditable ); // Exclude bogus if exists. if ( bogus ) range.setEndAt( bogus, CKEDITOR.POSITION_BEFORE_START ); range.select(); // Cancel event - block default. return false; } // DEL or BACKSPACE. else if ( keyCode == 8 || keyCode == 46 ) { var ranges = widget.editor.getSelection().getRanges(); range = ranges[ 0 ]; // Block del or backspace if at editable's boundary. return !( ranges.length == 1 && range.collapsed && range.checkBoundaryOfElement( focusedEditable, CKEDITOR[ keyCode == 8 ? 'START' : 'END' ] ) ); } } function setFocusedEditable( widgetsRepo, widget, editableElement, offline ) { var editor = widgetsRepo.editor; editor.fire( 'lockSnapshot' ); if ( editableElement ) { var editableName = editableElement.data( 'cke-widget-editable' ), editableInstance = widget.editables[ editableName ]; widgetsRepo.widgetHoldingFocusedEditable = widget; widget.focusedEditable = editableInstance; editableElement.addClass( 'cke_widget_editable_focused' ); if ( editableInstance.filter ) editor.setActiveFilter( editableInstance.filter ); editor.setActiveEnterMode( editableInstance.enterMode, editableInstance.shiftEnterMode ); } else { if ( !offline ) widget.focusedEditable.removeClass( 'cke_widget_editable_focused' ); widget.focusedEditable = null; widgetsRepo.widgetHoldingFocusedEditable = null; editor.setActiveFilter( null ); editor.setActiveEnterMode( null, null ); } editor.fire( 'unlockSnapshot' ); } function setupContextMenu( editor ) { if ( !editor.contextMenu ) return; editor.contextMenu.addListener( function( element ) { var widget = editor.widgets.getByElement( element, true ); if ( widget ) return widget.fire( 'contextMenu', {} ); } ); } // And now we've got two problems - original problem and RegExp. // Some softeners: // * FF tends to copy all blocks up to the copybin container. // * IE tends to copy only the copybin, without its container. // * We use spans on IE and blockless editors, but divs in other cases. var pasteReplaceRegex = new RegExp( '^' + '(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?' + '(?:<(?:div|span)(?: style="[^"]+")?>)?' + ']*data-cke-copybin-start="1"[^>]*>.?([\\s\\S]+)]*data-cke-copybin-end="1"[^>]*>.?' + '(?:)?' + '(?:)?' + '$', // IE8 prefers uppercase when browsers stick to lowercase HTML (#13460). 'i' ); function pasteReplaceFn( match, wrapperHtml ) { // Avoid polluting pasted data with any whitspaces, // what's going to break check whether only one widget was pasted. return CKEDITOR.tools.trim( wrapperHtml ); } function setupDragAndDrop( widgetsRepo ) { var editor = widgetsRepo.editor, lineutils = CKEDITOR.plugins.lineutils; // These listeners handle inline and block widgets drag and drop. // The only thing we need to do to make block widgets custom drag and drop functionality // is to fire those events with the right properties (like the target which must be the drag handle). editor.on( 'dragstart', function( evt ) { var target = evt.data.target; if ( Widget.isDomDragHandler( target ) ) { var widget = widgetsRepo.getByElement( target ); evt.data.dataTransfer.setData( 'cke/widget-id', widget.id ); // IE needs focus. editor.focus(); // and widget need to be focused on drag start (#12172#comment:10). widget.focus(); } } ); editor.on( 'drop', function( evt ) { var dataTransfer = evt.data.dataTransfer, id = dataTransfer.getData( 'cke/widget-id' ), dragRange = editor.createRange(), sourceWidget; if ( id === '' || dataTransfer.getTransferType( editor ) != CKEDITOR.DATA_TRANSFER_INTERNAL ) { return; } sourceWidget = widgetsRepo.instances[ id ]; if ( !sourceWidget ) { return; } dragRange.setStartBefore( sourceWidget.wrapper ); dragRange.setEndAfter( sourceWidget.wrapper ); evt.data.dragRange = dragRange; // [IE8-9] Reset state of the clipboard#fixSplitNodesAfterDrop fix because by setting evt.data.dragRange // (see above) after drop happened we do not need it. That fix is needed only if dragRange was created // before drop (before text node was split). delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount; delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount; evt.data.dataTransfer.setData( 'text/html', editor.editable().getHtmlFromRange( dragRange ).getHtml() ); editor.widgets.destroy( sourceWidget, true ); } ); editor.on( 'contentDom', function() { var editable = editor.editable(); // Register Lineutils's utilities as properties of repo. CKEDITOR.tools.extend( widgetsRepo, { finder: new lineutils.finder( editor, { lookups: { // Element is block but not list item and not in nested editable. 'default': function( el ) { if ( el.is( CKEDITOR.dtd.$listItem ) ) return; if ( !el.is( CKEDITOR.dtd.$block ) ) return; // Allow drop line inside, but never before or after nested editable (#12006). if ( Widget.isDomNestedEditable( el ) ) return; // Do not allow droping inside the widget being dragged (#13397). if ( widgetsRepo._.draggedWidget.wrapper.contains( el ) ) { return; } // If element is nested editable, make sure widget can be dropped there (#12006). var nestedEditable = Widget.getNestedEditable( editable, el ); if ( nestedEditable ) { var draggedWidget = widgetsRepo._.draggedWidget; // Don't let the widget to be dropped into its own nested editable. if ( widgetsRepo.getByElement( nestedEditable ) == draggedWidget ) return; var filter = CKEDITOR.filter.instances[ nestedEditable.data( 'cke-filter' ) ], draggedRequiredContent = draggedWidget.requiredContent; // There will be no relation if the filter of nested editable does not allow // requiredContent of dragged widget. if ( filter && draggedRequiredContent && !filter.check( draggedRequiredContent ) ) return; } return CKEDITOR.LINEUTILS_BEFORE | CKEDITOR.LINEUTILS_AFTER; } } } ), locator: new lineutils.locator( editor ), liner: new lineutils.liner( editor, { lineStyle: { cursor: 'move !important', 'border-top-color': '#666' }, tipLeftStyle: { 'border-left-color': '#666' }, tipRightStyle: { 'border-right-color': '#666' } } ) }, true ); } ); } // Setup mouse observer which will trigger: // * widget focus on widget click, // * widget#doubleclick forwarded from editor#doubleclick. function setupMouseObserver( widgetsRepo ) { var editor = widgetsRepo.editor; editor.on( 'contentDom', function() { var editable = editor.editable(), evtRoot = editable.isInline() ? editable : editor.document, widget, mouseDownOnDragHandler; editable.attachListener( evtRoot, 'mousedown', function( evt ) { var target = evt.data.getTarget(); // #10887 Clicking scrollbar in IE8 will invoke event with empty target object. if ( !target.type ) return false; widget = widgetsRepo.getByElement( target ); mouseDownOnDragHandler = 0; // Reset. // Widget was clicked, but not editable nested in it. if ( widget ) { // Ignore mousedown on drag and drop handler if the widget is inline. // Block widgets are handled by Lineutils. if ( widget.inline && target.type == CKEDITOR.NODE_ELEMENT && target.hasAttribute( 'data-cke-widget-drag-handler' ) ) { mouseDownOnDragHandler = 1; return; } if ( !Widget.getNestedEditable( widget.wrapper, target ) ) { evt.data.preventDefault(); if ( !CKEDITOR.env.ie ) widget.focus(); } else { // Reset widget so mouseup listener is not confused. widget = null; } } } ); // Focus widget on mouseup if mousedown was fired on drag handler. // Note: mouseup won't be fired at all if widget was dragged and dropped, so // this code will be executed only when drag handler was clicked. editable.attachListener( evtRoot, 'mouseup', function() { // Check if widget is not destroyed (if widget is destroyed the wrapper will be null). if ( mouseDownOnDragHandler && widget && widget.wrapper ) { mouseDownOnDragHandler = 0; widget.focus(); } } ); // On IE it is not enough to block mousedown. If widget wrapper (element with // contenteditable=false attribute) is clicked directly (it is a target), // then after mouseup/click IE will select that element. // It is not possible to prevent that default action, // so we force fake selection after everything happened. if ( CKEDITOR.env.ie ) { editable.attachListener( evtRoot, 'mouseup', function() { setTimeout( function() { // Check if widget is not destroyed (if widget is destroyed the wrapper will be null) and // in editable contains widget (it could be dragged and removed). if ( widget && widget.wrapper && editable.contains( widget.wrapper ) ) { widget.focus(); widget = null; } } ); } ); } } ); editor.on( 'doubleclick', function( evt ) { var widget = widgetsRepo.getByElement( evt.data.element ); // Not in widget or in nested editable. if ( !widget || Widget.getNestedEditable( widget.wrapper, evt.data.element ) ) return; return widget.fire( 'doubleclick', { element: evt.data.element } ); }, null, null, 1 ); } // Setup editor#key observer which will forward it // to focused widget. function setupKeyboardObserver( widgetsRepo ) { var editor = widgetsRepo.editor; editor.on( 'key', function( evt ) { var focused = widgetsRepo.focused, widgetHoldingFocusedEditable = widgetsRepo.widgetHoldingFocusedEditable, ret; if ( focused ) ret = focused.fire( 'key', { keyCode: evt.data.keyCode } ); else if ( widgetHoldingFocusedEditable ) ret = onEditableKey( widgetHoldingFocusedEditable, evt.data.keyCode ); return ret; }, null, null, 1 ); } // Setup copybin on native copy and cut events in order to handle copy and cut commands // if user accepted security alert on IEs. // Note: when copying or cutting using keystroke, copySingleWidget will be first executed // by the keydown listener. Conflict between two calls will be resolved by copy_bin existence check. function setupNativeCutAndCopy( widgetsRepo ) { var editor = widgetsRepo.editor; editor.on( 'contentDom', function() { var editable = editor.editable(); editable.attachListener( editable, 'copy', eventListener ); editable.attachListener( editable, 'cut', eventListener ); } ); function eventListener( evt ) { if ( widgetsRepo.focused ) copySingleWidget( widgetsRepo.focused, evt.name == 'cut' ); } } // Setup selection observer which will trigger: // * widget select & focus on selection change, // * nested editable focus (related properites and classes) on selection change, // * deselecting and blurring all widgets on data, // * blurring widget on editor blur. function setupSelectionObserver( widgetsRepo ) { var editor = widgetsRepo.editor; editor.on( 'selectionCheck', function() { widgetsRepo.fire( 'checkSelection' ); } ); widgetsRepo.on( 'checkSelection', widgetsRepo.checkSelection, widgetsRepo ); editor.on( 'selectionChange', function( evt ) { var nestedEditable = Widget.getNestedEditable( editor.editable(), evt.data.selection.getStartElement() ), newWidget = nestedEditable && widgetsRepo.getByElement( nestedEditable ), oldWidget = widgetsRepo.widgetHoldingFocusedEditable; if ( oldWidget ) { if ( oldWidget !== newWidget || !oldWidget.focusedEditable.equals( nestedEditable ) ) { setFocusedEditable( widgetsRepo, oldWidget, null ); if ( newWidget && nestedEditable ) setFocusedEditable( widgetsRepo, newWidget, nestedEditable ); } } // It may happen that there's no widget even if editable was found - // e.g. if selection was automatically set in editable although widget wasn't initialized yet. else if ( newWidget && nestedEditable ) { setFocusedEditable( widgetsRepo, newWidget, nestedEditable ); } } ); // Invalidate old widgets early - immediately on dataReady. editor.on( 'dataReady', function() { // Deselect and blur all widgets. stateUpdater( widgetsRepo ).commit(); } ); editor.on( 'blur', function() { var widget; if ( ( widget = widgetsRepo.focused ) ) blurWidget( widgetsRepo, widget ); if ( ( widget = widgetsRepo.widgetHoldingFocusedEditable ) ) setFocusedEditable( widgetsRepo, widget, null ); } ); } // Set up actions like: // * processing in toHtml/toDataFormat, // * pasting handling, // * insertion handling, // * editable reload handling (setData, mode switch, undo/redo), // * DOM invalidation handling, // * widgets checks. function setupWidgetsLifecycle( widgetsRepo ) { setupWidgetsLifecycleStart( widgetsRepo ); setupWidgetsLifecycleEnd( widgetsRepo ); widgetsRepo.on( 'checkWidgets', checkWidgets ); widgetsRepo.editor.on( 'contentDomInvalidated', widgetsRepo.checkWidgets, widgetsRepo ); } function setupWidgetsLifecycleEnd( widgetsRepo ) { var editor = widgetsRepo.editor, downcastingSessions = {}; // Listen before htmlDP#htmlFilter is applied to cache all widgets, because we'll // loose data-cke-* attributes. editor.on( 'toDataFormat', function( evt ) { // To avoid conflicts between htmlDP#toDF calls done at the same time // (e.g. nestedEditable#getData called during downcasting some widget) // mark every toDataFormat event chain with the downcasting session id. var id = CKEDITOR.tools.getNextNumber(), toBeDowncasted = []; evt.data.downcastingSessionId = id; downcastingSessions[ id ] = toBeDowncasted; evt.data.dataValue.forEach( function( element ) { var attrs = element.attributes, widget, widgetElement; // Wrapper. // Perform first part of downcasting (cleanup) and cache widgets, // because after applying DP's filter all data-cke-* attributes will be gone. if ( 'data-cke-widget-id' in attrs ) { widget = widgetsRepo.instances[ attrs[ 'data-cke-widget-id' ] ]; if ( widget ) { widgetElement = element.getFirst( Widget.isParserWidgetElement ); toBeDowncasted.push( { wrapper: element, element: widgetElement, widget: widget, editables: {} } ); // If widget did not have data-cke-widget attribute before upcasting remove it. if ( widgetElement.attributes[ 'data-cke-widget-keep-attr' ] != '1' ) delete widgetElement.attributes[ 'data-widget' ]; } } // Nested editable. else if ( 'data-cke-widget-editable' in attrs ) { // Save the reference to this nested editable in the closest widget to be downcasted. // Nested editables are downcasted in the successive toDataFormat to create an opportunity // for dataFilter's "excludeNestedEditable" option to do its job (that option relies on // contenteditable="true" attribute) (#11372). toBeDowncasted[ toBeDowncasted.length - 1 ].editables[ attrs[ 'data-cke-widget-editable' ] ] = element; // Don't check children - there won't be next wrapper or nested editable which we // should process in this session. return false; } }, CKEDITOR.NODE_ELEMENT, true ); }, null, null, 8 ); // Listen after dataProcessor.htmlFilter and ACF were applied // so wrappers securing widgets' contents are removed after all filtering was done. editor.on( 'toDataFormat', function( evt ) { // Ignore some unmarked sessions. if ( !evt.data.downcastingSessionId ) return; var toBeDowncasted = downcastingSessions[ evt.data.downcastingSessionId ], toBe, widget, widgetElement, retElement, editableElement, e; while ( ( toBe = toBeDowncasted.shift() ) ) { widget = toBe.widget; widgetElement = toBe.element; retElement = widget._.downcastFn && widget._.downcastFn.call( widget, widgetElement ); // Replace nested editables' content with their output data. for ( e in toBe.editables ) { editableElement = toBe.editables[ e ]; delete editableElement.attributes.contenteditable; editableElement.setHtml( widget.editables[ e ].getData() ); } // Returned element always defaults to widgetElement. if ( !retElement ) retElement = widgetElement; toBe.wrapper.replaceWith( retElement ); } }, null, null, 13 ); editor.on( 'contentDomUnload', function() { widgetsRepo.destroyAll( true ); } ); } function setupWidgetsLifecycleStart( widgetsRepo ) { var editor = widgetsRepo.editor, processedWidgetOnly, snapshotLoaded; // Listen after ACF (so data are filtered), // but before dataProcessor.dataFilter was applied (so we can secure widgets' internals). editor.on( 'toHtml', function( evt ) { var upcastIterator = createUpcastIterator( widgetsRepo ), toBeWrapped; evt.data.dataValue.forEach( upcastIterator.iterator, CKEDITOR.NODE_ELEMENT, true ); // Clean up and wrap all queued elements. while ( ( toBeWrapped = upcastIterator.toBeWrapped.pop() ) ) { cleanUpWidgetElement( toBeWrapped[ 0 ] ); widgetsRepo.wrapElement( toBeWrapped[ 0 ], toBeWrapped[ 1 ] ); } // Used to determine whether only widget was pasted. if ( evt.data.protectedWhitespaces ) { // Whitespaces are protected by wrapping content with spans. Take the middle node only. processedWidgetOnly = evt.data.dataValue.children.length == 3 && Widget.isParserWidgetWrapper( evt.data.dataValue.children[ 1 ] ); } else { processedWidgetOnly = evt.data.dataValue.children.length == 1 && Widget.isParserWidgetWrapper( evt.data.dataValue.children[ 0 ] ); } }, null, null, 8 ); editor.on( 'dataReady', function() { // Clean up all widgets loaded from snapshot. if ( snapshotLoaded ) cleanUpAllWidgetElements( widgetsRepo, editor.editable() ); snapshotLoaded = 0; // Some widgets were destroyed on contentDomUnload, // some on loadSnapshot, but that does not include // e.g. setHtml on inline editor or widgets removed just // before setting data. widgetsRepo.destroyAll( true ); widgetsRepo.initOnAll(); } ); // Set flag so dataReady will know that additional // cleanup is needed, because snapshot containing widgets was loaded. editor.on( 'loadSnapshot', function( evt ) { // Primitive but sufficient check which will prevent from executing // heavier cleanUpAllWidgetElements if not needed. if ( ( /data-cke-widget/ ).test( evt.data ) ) snapshotLoaded = 1; widgetsRepo.destroyAll( true ); }, null, null, 9 ); // Handle pasted single widget. editor.on( 'paste', function( evt ) { var data = evt.data; data.dataValue = data.dataValue.replace( pasteReplaceRegex, pasteReplaceFn ); // If drag'n'drop kind of paste into nested editable (data.range), selection is set AFTER // data is pasted, which means editor has no chance to change activeFilter's context. // As a result, pasted data is filtered with default editor's filter instead of NE's and // funny things get inserted. Changing the filter by analysis of the paste range below (#13186). if ( data.range ) { // Check if pasting into nested editable. var nestedEditable = Widget.getNestedEditable( editor.editable(), data.range.startContainer ); if ( nestedEditable ) { // Retrieve the filter from NE's data and set it active before editor.insertHtml is done // in clipboard plugin. var filter = CKEDITOR.filter.instances[ nestedEditable.data( 'cke-filter' ) ]; if ( filter ) { editor.setActiveFilter( filter ); } } } } ); // Listen with high priority to check widgets after data was inserted. editor.on( 'afterInsertHtml', function( evt ) { if ( evt.data.intoRange ) { widgetsRepo.checkWidgets( { initOnlyNew: true } ); } else { editor.fire( 'lockSnapshot' ); // Init only new for performance reason. // Focus inited if only widget was processed. widgetsRepo.checkWidgets( { initOnlyNew: true, focusInited: processedWidgetOnly } ); editor.fire( 'unlockSnapshot' ); } } ); } // Helper for coordinating which widgets should be // selected/deselected and which one should be focused/blurred. function stateUpdater( widgetsRepo ) { var currentlySelected = widgetsRepo.selected, toBeSelected = [], toBeDeselected = currentlySelected.slice( 0 ), focused = null; return { select: function( widget ) { if ( CKEDITOR.tools.indexOf( currentlySelected, widget ) < 0 ) toBeSelected.push( widget ); var index = CKEDITOR.tools.indexOf( toBeDeselected, widget ); if ( index >= 0 ) toBeDeselected.splice( index, 1 ); return this; }, focus: function( widget ) { focused = widget; return this; }, commit: function() { var focusedChanged = widgetsRepo.focused !== focused, widget, isDirty; widgetsRepo.editor.fire( 'lockSnapshot' ); if ( focusedChanged && ( widget = widgetsRepo.focused ) ) blurWidget( widgetsRepo, widget ); while ( ( widget = toBeDeselected.pop() ) ) { currentlySelected.splice( CKEDITOR.tools.indexOf( currentlySelected, widget ), 1 ); // Widget could be destroyed in the meantime - e.g. data could be set. if ( widget.isInited() ) { isDirty = widget.editor.checkDirty(); widget.setSelected( false ); !isDirty && widget.editor.resetDirty(); } } if ( focusedChanged && focused ) { isDirty = widgetsRepo.editor.checkDirty(); widgetsRepo.focused = focused; widgetsRepo.fire( 'widgetFocused', { widget: focused } ); focused.setFocused( true ); !isDirty && widgetsRepo.editor.resetDirty(); } while ( ( widget = toBeSelected.pop() ) ) { currentlySelected.push( widget ); widget.setSelected( true ); } widgetsRepo.editor.fire( 'unlockSnapshot' ); } }; } // // WIDGET helpers --------------------------------------------------------- // // LEFT, RIGHT, UP, DOWN, DEL, BACKSPACE - unblock default fake sel handlers. var keystrokesNotBlockedByWidget = { 37: 1, 38: 1, 39: 1, 40: 1, 8: 1, 46: 1 }; // Applies or removes style's classes from widget. // @param {CKEDITOR.style} style Custom widget style. // @param {Boolean} apply Whether to apply or remove style. function applyRemoveStyle( widget, style, apply ) { var changed = 0, classes = getStyleClasses( style ), updatedClasses = widget.data.classes || {}, cl; // Ee... Something is wrong with this style. if ( !classes ) return; // Clone, because we need to break reference. updatedClasses = CKEDITOR.tools.clone( updatedClasses ); while ( ( cl = classes.pop() ) ) { if ( apply ) { if ( !updatedClasses[ cl ] ) changed = updatedClasses[ cl ] = 1; } else { if ( updatedClasses[ cl ] ) { delete updatedClasses[ cl ]; changed = 1; } } } if ( changed ) widget.setData( 'classes', updatedClasses ); } function cancel( evt ) { evt.cancel(); } function copySingleWidget( widget, isCut ) { var editor = widget.editor, doc = editor.document; // We're still handling previous copy/cut. // When keystroke is used to copy/cut this will also prevent // conflict with copySingleWidget called again for native copy/cut event. if ( doc.getById( 'cke_copybin' ) ) return; // [IE] Use span for copybin and its container to avoid bug with expanding editable height by // absolutely positioned element. var copybinName = ( editor.blockless || CKEDITOR.env.ie ) ? 'span' : 'div', copybin = doc.createElement( copybinName ), copybinContainer = doc.createElement( copybinName ), // IE8 always jumps to the end of document. needsScrollHack = CKEDITOR.env.ie && CKEDITOR.env.version < 9; copybinContainer.setAttributes( { id: 'cke_copybin', 'data-cke-temp': '1' } ); // Position copybin element outside current viewport. copybin.setStyles( { position: 'absolute', width: '1px', height: '1px', overflow: 'hidden' } ); copybin.setStyle( editor.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-5000px' ); var range = editor.createRange(); range.setStartBefore( widget.wrapper ); range.setEndAfter( widget.wrapper ); copybin.setHtml( '\u200b' + editor.editable().getHtmlFromRange( range ).getHtml() + '\u200b' ); // Save snapshot with the current state. editor.fire( 'saveSnapshot' ); // Ignore copybin. editor.fire( 'lockSnapshot' ); copybinContainer.append( copybin ); editor.editable().append( copybinContainer ); var listener1 = editor.on( 'selectionChange', cancel, null, null, 0 ), listener2 = widget.repository.on( 'checkSelection', cancel, null, null, 0 ); if ( needsScrollHack ) { var docElement = doc.getDocumentElement().$, scrollTop = docElement.scrollTop; } // Once the clone of the widget is inside of copybin, select // the entire contents. This selection will be copied by the // native browser's clipboard system. range = editor.createRange(); range.selectNodeContents( copybin ); range.select(); if ( needsScrollHack ) docElement.scrollTop = scrollTop; setTimeout( function() { // [IE] Focus widget before removing copybin to avoid scroll jump. if ( !isCut ) widget.focus(); copybinContainer.remove(); listener1.removeListener(); listener2.removeListener(); editor.fire( 'unlockSnapshot' ); if ( isCut ) { widget.repository.del( widget ); editor.fire( 'saveSnapshot' ); } }, 100 ); // Use 100ms, so Chrome (@Mac) will be able to grab the content. } // Extracts classes array from style instance. function getStyleClasses( style ) { var attrs = style.getDefinition().attributes, classes = attrs && attrs[ 'class' ]; return classes ? classes.split( /\s+/ ) : null; } // [IE] Force keeping focus because IE sometimes forgets to fire focus on main editable // when blurring nested editable. // @context widget function onEditableBlur() { var active = CKEDITOR.document.getActive(), editor = this.editor, editable = editor.editable(); // If focus stays within editor override blur and set currentActive because it should be // automatically changed to editable on editable#focus but it is not fired. if ( ( editable.isInline() ? editable : editor.document.getWindow().getFrame() ).equals( active ) ) editor.focusManager.focus( editable ); } // Force selectionChange when editable was focused. // Similar to hack in selection.js#~620. // @context widget function onEditableFocus() { // Gecko does not support 'DOMFocusIn' event on which we unlock selection // in selection.js to prevent selection locking when entering nested editables. if ( CKEDITOR.env.gecko ) this.editor.unlockSelection(); // We don't need to force selectionCheck on Webkit, because on Webkit // we do that on DOMFocusIn in selection.js. if ( !CKEDITOR.env.webkit ) { this.editor.forceNextSelectionCheck(); this.editor.selectionChange( 1 ); } } // Setup listener on widget#data which will update (remove/add) classes // by comparing newly set classes with the old ones. function setupDataClassesListener( widget ) { // Note: previousClasses and newClasses may be null! // Tip: for ( cl in null ) is correct. var previousClasses = null; widget.on( 'data', function() { var newClasses = this.data.classes, cl; // When setting new classes one need to remember // that he must break reference. if ( previousClasses == newClasses ) return; for ( cl in previousClasses ) { // Avoid removing and adding classes again. if ( !( newClasses && newClasses[ cl ] ) ) this.removeClass( cl ); } for ( cl in newClasses ) this.addClass( cl ); previousClasses = newClasses; } ); } function setupDragHandler( widget ) { if ( !widget.draggable ) return; var editor = widget.editor, // Use getLast to find wrapper's direct descendant (#12022). container = widget.wrapper.getLast( Widget.isDomDragHandlerContainer ), img; // Reuse drag handler if already exists (#11281). if ( container ) img = container.findOne( 'img' ); else { container = new CKEDITOR.dom.element( 'span', editor.document ); container.setAttributes( { 'class': 'cke_reset cke_widget_drag_handler_container', // Split background and background-image for IE8 which will break on rgba(). style: 'background:rgba(220,220,220,0.5);background-image:url(' + editor.plugins.widget.path + 'images/handle.png)' } ); img = new CKEDITOR.dom.element( 'img', editor.document ); img.setAttributes( { 'class': 'cke_reset cke_widget_drag_handler', 'data-cke-widget-drag-handler': '1', src: CKEDITOR.tools.transparentImageData, width: DRAG_HANDLER_SIZE, title: editor.lang.widget.move, height: DRAG_HANDLER_SIZE } ); widget.inline && img.setAttribute( 'draggable', 'true' ); container.append( img ); widget.wrapper.append( container ); } // Preventing page reload when dropped content on widget wrapper (#13015). // Widget is not editable so by default drop on it isn't allowed what means that // browser handles it (there's no editable#drop event). If there's no drop event we cannot block // the drop, so page is reloaded. This listener enables drop on widget wrappers. widget.wrapper.on( 'dragover', function( evt ) { evt.data.preventDefault(); } ); widget.wrapper.on( 'mouseenter', widget.updateDragHandlerPosition, widget ); setTimeout( function() { widget.on( 'data', widget.updateDragHandlerPosition, widget ); }, 50 ); if ( !widget.inline ) { img.on( 'mousedown', onBlockWidgetDrag, widget ); // On IE8 'dragstart' is propagated to editable, so editor#dragstart is fired twice on block widgets. if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { img.on( 'dragstart', function( evt ) { evt.data.preventDefault( true ); } ); } } widget.dragHandlerContainer = container; } function onBlockWidgetDrag( evt ) { var finder = this.repository.finder, locator = this.repository.locator, liner = this.repository.liner, editor = this.editor, editable = editor.editable(), listeners = [], sorted = []; // Mark dragged widget for repository#finder. this.repository._.draggedWidget = this; // Harvest all possible relations and display some closest. var relations = finder.greedySearch(), buffer = CKEDITOR.tools.eventsBuffer( 50, function() { locations = locator.locate( relations ); // There's only a single line displayed for D&D. sorted = locator.sort( y, 1 ); if ( sorted.length ) { liner.prepare( relations, locations ); liner.placeLine( sorted[ 0 ] ); liner.cleanup(); } } ), locations, y; // Let's have the "dragging cursor" over entire editable. editable.addClass( 'cke_widget_dragging' ); // Cache mouse position so it is re-used in events buffer. listeners.push( editable.on( 'mousemove', function( evt ) { y = evt.data.$.clientY; buffer.input(); } ) ); // Fire drag start as it happens during the native D&D. editor.fire( 'dragstart', { target: evt.sender } ); function onMouseUp() { var l; buffer.reset(); // Stop observing events. while ( ( l = listeners.pop() ) ) l.removeListener(); onBlockWidgetDrop.call( this, sorted, evt.sender ); } // Mouseup means "drop". This is when the widget is being detached // from DOM and placed at range determined by the line (location). listeners.push( editor.document.once( 'mouseup', onMouseUp, this ) ); // Prevent calling 'onBlockWidgetDrop' twice in the inline editor. // `removeListener` does not work if it is called at the same time event is fired. if ( !editable.isInline() ) { // Mouseup may occur when user hovers the line, which belongs to // the outer document. This is, of course, a valid listener too. listeners.push( CKEDITOR.document.once( 'mouseup', onMouseUp, this ) ); } } function onBlockWidgetDrop( sorted, dragTarget ) { var finder = this.repository.finder, liner = this.repository.liner, editor = this.editor, editable = this.editor.editable(); if ( !CKEDITOR.tools.isEmpty( liner.visible ) ) { // Retrieve range for the closest location. var dropRange = finder.getRange( sorted[ 0 ] ); // Focus widget (it could lost focus after mousedown+mouseup) // and save this state as the one where we want to be taken back when undoing. this.focus(); // Drag range will be set in the drop listener. editor.fire( 'drop', { dropRange: dropRange, target: dropRange.startContainer } ); } // Clean-up custom cursor for editable. editable.removeClass( 'cke_widget_dragging' ); // Clean-up all remaining lines. liner.hideVisible(); // Clean-up drag & drop. editor.fire( 'dragend', { target: dragTarget } ); } function setupEditables( widget ) { var editableName, editableDef, definedEditables = widget.editables; widget.editables = {}; if ( !widget.editables ) return; for ( editableName in definedEditables ) { editableDef = definedEditables[ editableName ]; widget.initEditable( editableName, typeof editableDef == 'string' ? { selector: editableDef } : editableDef ); } } function setupMask( widget ) { if ( !widget.mask ) return; // Reuse mask if already exists (#11281). var img = widget.wrapper.findOne( '.cke_widget_mask' ); if ( !img ) { img = new CKEDITOR.dom.element( 'img', widget.editor.document ); img.setAttributes( { src: CKEDITOR.tools.transparentImageData, 'class': 'cke_reset cke_widget_mask' } ); widget.wrapper.append( img ); } widget.mask = img; } // Replace parts object containing: // partName => selector pairs // with: // partName => element pairs function setupParts( widget ) { if ( widget.parts ) { var parts = {}, el, partName; for ( partName in widget.parts ) { el = widget.wrapper.findOne( widget.parts[ partName ] ); parts[ partName ] = el; } widget.parts = parts; } } function setupWidget( widget, widgetDef ) { setupWrapper( widget ); setupParts( widget ); setupEditables( widget ); setupMask( widget ); setupDragHandler( widget ); setupDataClassesListener( widget ); // #11145: [IE8] Non-editable content of widget is draggable. if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { widget.wrapper.on( 'dragstart', function( evt ) { var target = evt.data.getTarget(); // Allow text dragging inside nested editables or dragging inline widget's drag handler. if ( !Widget.getNestedEditable( widget, target ) && !( widget.inline && Widget.isDomDragHandler( target ) ) ) evt.data.preventDefault(); } ); } widget.wrapper.removeClass( 'cke_widget_new' ); widget.element.addClass( 'cke_widget_element' ); widget.on( 'key', function( evt ) { var keyCode = evt.data.keyCode; // ENTER. if ( keyCode == 13 ) { widget.edit(); // CTRL+C or CTRL+X. } else if ( keyCode == CKEDITOR.CTRL + 67 || keyCode == CKEDITOR.CTRL + 88 ) { copySingleWidget( widget, keyCode == CKEDITOR.CTRL + 88 ); return; // Do not preventDefault. } else if ( keyCode in keystrokesNotBlockedByWidget || ( CKEDITOR.CTRL & keyCode ) || ( CKEDITOR.ALT & keyCode ) ) { // Pass chosen keystrokes to other plugins or default fake sel handlers. // Pass all CTRL/ALT keystrokes. return; } return false; }, null, null, 999 ); // Listen with high priority so it's possible // to overwrite this callback. widget.on( 'doubleclick', function( evt ) { if ( widget.edit() ) { // We have to cancel event if edit method opens a dialog, otherwise // link plugin may open extra dialog (#12140). evt.cancel(); } } ); if ( widgetDef.data ) widget.on( 'data', widgetDef.data ); if ( widgetDef.edit ) widget.on( 'edit', widgetDef.edit ); } function setupWidgetData( widget, startupData ) { var widgetDataAttr = widget.element.data( 'cke-widget-data' ); if ( widgetDataAttr ) widget.setData( JSON.parse( decodeURIComponent( widgetDataAttr ) ) ); if ( startupData ) widget.setData( startupData ); // Populate classes if they are not preset. if ( !widget.data.classes ) widget.setData( 'classes', widget.getClasses() ); // Unblock data and... widget.dataReady = true; // Write data to element because this was blocked when data wasn't ready. writeDataToElement( widget ); // Fire data event first time, because this was blocked when data wasn't ready. widget.fire( 'data', widget.data ); } function setupWrapper( widget ) { // Retrieve widget wrapper. Assign an id to it. var wrapper = widget.wrapper = widget.element.getParent(); wrapper.setAttribute( 'data-cke-widget-id', widget.id ); } function writeDataToElement( widget ) { widget.element.data( 'cke-widget-data', encodeURIComponent( JSON.stringify( widget.data ) ) ); } // // WIDGET STYLE HANDLER --------------------------------------------------- // ( function() { /** * The class representing a widget style. It is an {@link CKEDITOR#STYLE_OBJECT object} like * the styles handler for widgets. * * **Note:** This custom style handler does not support all methods of the {@link CKEDITOR.style} class. * Not supported methods: {@link #applyToRange}, {@link #removeFromRange}, {@link #applyToObject}. * * @since 4.4 * @class CKEDITOR.style.customHandlers.widget * @extends CKEDITOR.style */ CKEDITOR.style.addCustomHandler( { type: 'widget', setup: function( styleDefinition ) { /** * The name of widget to which this style can be applied. * It is extracted from style definition's `widget` property. * * @property {String} widget */ this.widget = styleDefinition.widget; }, apply: function( editor ) { // Before CKEditor 4.4 wasn't a required argument, so we need to // handle a case when it wasn't provided. if ( !( editor instanceof CKEDITOR.editor ) ) return; // Theoretically we could bypass checkApplicable, get widget from // widgets.focused and check its name, what would be faster, but then // this custom style would work differently than the default style // which checks if it's applicable before applying or removeing itself. if ( this.checkApplicable( editor.elementPath(), editor ) ) editor.widgets.focused.applyStyle( this ); }, remove: function( editor ) { // Before CKEditor 4.4 wasn't a required argument, so we need to // handle a case when it wasn't provided. if ( !( editor instanceof CKEDITOR.editor ) ) return; if ( this.checkApplicable( editor.elementPath(), editor ) ) editor.widgets.focused.removeStyle( this ); }, checkActive: function( elementPath, editor ) { return this.checkElementMatch( elementPath.lastElement, 0, editor ); }, checkApplicable: function( elementPath, editor ) { // Before CKEditor 4.4 wasn't a required argument, so we need to // handle a case when it wasn't provided. if ( !( editor instanceof CKEDITOR.editor ) ) return false; return this.checkElement( elementPath.lastElement ); }, checkElementMatch: checkElementMatch, checkElementRemovable: checkElementMatch, /** * Checks if an element is a {@link CKEDITOR.plugins.widget#wrapper wrapper} of a * widget whose name matches the {@link #widget widget name} specified in the style definition. * * @param {CKEDITOR.dom.element} element * @returns {Boolean} */ checkElement: function( element ) { if ( !Widget.isDomWidgetWrapper( element ) ) return false; var widgetElement = element.getFirst( Widget.isDomWidgetElement ); return widgetElement && widgetElement.data( 'widget' ) == this.widget; }, buildPreview: function( label ) { return label || this._.definition.name; }, /** * Returns allowed content rules which should be registered for this style. * Uses widget's {@link CKEDITOR.plugins.widget.definition#styleableElements} to make a rule * allowing classes on specified elements or use widget's * {@link CKEDITOR.plugins.widget.definition#styleToAllowedContentRules} method to transform a style * into allowed content rules. * * @param {CKEDITOR.editor} The editor instance. * @returns {CKEDITOR.filter.allowedContentRules} */ toAllowedContentRules: function( editor ) { if ( !editor ) return null; var widgetDef = editor.widgets.registered[ this.widget ], classes, rule = {}; if ( !widgetDef ) return null; if ( widgetDef.styleableElements ) { classes = this.getClassesArray(); if ( !classes ) return null; rule[ widgetDef.styleableElements ] = { classes: classes, propertiesOnly: true }; return rule; } if ( widgetDef.styleToAllowedContentRules ) return widgetDef.styleToAllowedContentRules( this ); return null; }, /** * Returns classes defined in the style in form of an array. * * @returns {String[]} */ getClassesArray: function() { var classes = this._.definition.attributes && this._.definition.attributes[ 'class' ]; return classes ? CKEDITOR.tools.trim( classes ).split( /\s+/ ) : null; }, /** * Not implemented. * * @method applyToRange */ applyToRange: notImplemented, /** * Not implemented. * * @method removeFromRange */ removeFromRange: notImplemented, /** * Not implemented. * * @method applyToObject */ applyToObject: notImplemented } ); function notImplemented() {} // @context style function checkElementMatch( element, fullMatch, editor ) { // Before CKEditor 4.4 wasn't a required argument, so we need to // handle a case when it wasn't provided. if ( !editor ) return false; if ( !this.checkElement( element ) ) return false; var widget = editor.widgets.getByElement( element, true ); return widget && widget.checkStyleActive( this ); } } )(); // // EXPOSE PUBLIC API ------------------------------------------------------ // CKEDITOR.plugins.widget = Widget; Widget.repository = Repository; Widget.nestedEditable = NestedEditable; } )(); /** * An event fired when a widget definition is registered by the {@link CKEDITOR.plugins.widget.repository#add} method. * It is possible to modify the definition being registered. * * @event widgetDefinition * @member CKEDITOR.editor * @param {CKEDITOR.plugins.widget.definition} data Widget definition. */ /** * This is an abstract class that describes the definition of a widget. * It is a type of {@link CKEDITOR.plugins.widget.repository#add} method's second argument. * * Widget instances inherit from registered widget definitions, although not in a prototypal way. * They are simply extended with corresponding widget definitions. Note that not all properties of * the widget definition become properties of a widget. Some, like {@link #data} or {@link #edit}, become * widget's events listeners. * * @class CKEDITOR.plugins.widget.definition * @abstract * @mixins CKEDITOR.feature */ /** * Widget definition name. It is automatically set when the definition is * {@link CKEDITOR.plugins.widget.repository#add registered}. * * @property {String} name */ /** * The method executed while initializing a widget, after a widget instance * is created, but before it is ready. It is executed before the first * {@link CKEDITOR.plugins.widget#event-data} is fired so it is common to * use the `init` method to populate widget data with information loaded from * the DOM, like for exmaple: * * init: function() { * this.setData( 'width', this.element.getStyle( 'width' ) ); * * if ( this.parts.caption.getStyle( 'display' ) != 'none' ) * this.setData( 'showCaption', true ); * } * * @property {Function} init */ /** * The function to be used to upcast an element to this widget or a * comma-separated list of upcast methods from the {@link #upcasts} object. * * The upcast function **is not** executed in the widget context (because the widget * does not exist yet) and two arguments are passed: * * * `element` ({@link CKEDITOR.htmlParser.element}) – The element to be checked. * * `data` (`Object`) – The object which can be extended with data which will then be passed to the widget. * * An element will be upcasted if a function returned `true` or an instance of * a {@link CKEDITOR.htmlParser.element} if upcasting meant DOM structure changes * (in this case the widget will be initialized on the returned element). * * @property {String/Function} upcast */ /** * The object containing functions which can be used to upcast this widget. * Only those pointed by the {@link #upcast} property will be used. * * In most cases it is appropriate to use {@link #upcast} directly, * because majority of widgets need just one method. * However, in some cases the widget author may want to expose more than one variant * and then this property may be used. * * upcasts: { * // This function may upcast only figure elements. * figure: function() { * // ... * }, * // This function may upcast only image elements. * image: function() { * // ... * }, * // More variants... * } * * // Then, widget user may choose which upcast methods will be enabled. * editor.on( 'widgetDefinition', function( evt ) { * if ( evt.data.name == 'image' ) * evt.data.upcast = 'figure,image'; // Use both methods. * } ); * * @property {Object} upcasts */ /** * The {@link #upcast} method(s) priority. The upcast with a lower priority number will be called before * the one with a higher number. The default priority is `10`. * * @since 4.5 * @property {Number} [upcastPriority=10] */ /** * The function to be used to downcast this widget or * a name of the downcast option from the {@link #downcasts} object. * * The downcast funciton will be executed in the {@link CKEDITOR.plugins.widget} context * and with `widgetElement` ({@link CKEDITOR.htmlParser.element}) argument which is * the widget's main element. * * The function may return an instance of the {@link CKEDITOR.htmlParser.node} class if the widget * needs to be downcasted to a different node than the widget's main element. * * @property {String/Function} downcast */ /** * The object containing functions which can be used to downcast this widget. * Only the one pointed by the {@link #downcast} property will be used. * * In most cases it is appropriate to use {@link #downcast} directly, * because majority of widgets have just one variant of downcasting (or none at all). * However, in some cases the widget author may want to expose more than one variant * and then this property may be used. * * downcasts: { * // This downcast may transform the widget into the figure element. * figure: function() { * // ... * }, * // This downcast may transform the widget into the image element with data-* attributes. * image: function() { * // ... * } * } * * // Then, the widget user may choose one of the downcast options when setting up his editor. * editor.on( 'widgetDefinition', function( evt ) { * if ( evt.data.name == 'image' ) * evt.data.downcast = 'figure'; * } ); * * @property downcasts */ /** * If set, it will be added as the {@link CKEDITOR.plugins.widget#event-edit} event listener. * This means that it will be executed when a widget is being edited. * See the {@link CKEDITOR.plugins.widget#method-edit} method. * * @property {Function} edit */ /** * If set, it will be added as the {@link CKEDITOR.plugins.widget#event-data} event listener. * This means that it will be executed every time the {@link CKEDITOR.plugins.widget#property-data widget data} changes. * * @property {Function} data */ /** * The method to be executed when the widget's command is executed in order to insert a new widget * (widget of this type is not focused). If not defined, then the default action will be * performed which means that: * * * An instance of the widget will be created in a detached {@link CKEDITOR.dom.documentFragment document fragment}, * * The {@link CKEDITOR.plugins.widget#method-edit} method will be called to trigger widget editing, * * The widget element will be inserted into DOM. * * @property {Function} insert */ /** * The name of a dialog window which will be opened on {@link CKEDITOR.plugins.widget#method-edit}. * If not defined, then the {@link CKEDITOR.plugins.widget#method-edit} method will not perform any action and * widget's command will insert a new widget without opening a dialog window first. * * @property {String} dialog */ /** * The template which will be used to create a new widget element (when the widget's command is executed). * This string is populated with {@link #defaults default values} by using the {@link CKEDITOR.template} format. * Therefore it has to be a valid {@link CKEDITOR.template} argument. * * @property {String} template */ /** * The data object which will be used to populate the data of a newly created widget. * See {@link CKEDITOR.plugins.widget#property-data}. * * defaults: { * showCaption: true, * align: 'none' * } * * @property defaults */ /** * An object containing definitions of widget components (part name => CSS selector). * * parts: { * image: 'img', * caption: 'div.caption' * } * * @property parts */ /** * An object containing definitions of nested editables (editable name => {@link CKEDITOR.plugins.widget.nestedEditable.definition}). * Note that editables *have to* be defined in the same order as they are in DOM / {@link CKEDITOR.plugins.widget.definition#template template}. * Otherwise errors will occur when nesting widgets inside each other. * * editables: { * header: 'h1', * content: { * selector: 'div.content', * allowedContent: 'p strong em; a[!href]' * } * } * * @property editables */ /** * Widget name displayed in elements path. * * @property {String} pathName */ /** * If set to `true`, the widget's element will be covered with a transparent mask. * This will prevent its content from being clickable, which matters in case * of special elements like embedded Flash or iframes that generate a separate "context". * * @property {Boolean} mask */ /** * If set to `true/false`, it will force the widget to be either an inline or a block widget. * If not set, the widget type will be determined from the widget element. * * Widget type influences whether a block (`div`) or an inline (`span`) element is used * for the wrapper. * * @property {Boolean} inline */ /** * The label for the widget toolbar button. * * editor.widgets.add( 'simplebox', { * button: 'Create a simple box' * } ); * * editor.widgets.add( 'simplebox', { * button: editor.lang.simplebox.title * } ); * * @property {String} button */ /** * Whether widget should be draggable. Defaults to `true`. * If set to `false` drag handler will not be displayed when hovering widget. * * @property {Boolean} draggable */ /** * Names of element(s) (separated by spaces) for which the {@link CKEDITOR.filter} should allow classes * defined in the widget styles. For example if your widget is upcasted from a simple `
    ` * element, then in order to make it styleable you can set: * * editor.widgets.add( 'customWidget', { * upcast: function( element ) { * return element.name == 'div'; * }, * * // ... * * styleableElements: 'div' * } ); * * Then, when the following style is defined: * * { * name: 'Thick border', type: 'widget', widget: 'customWidget', * attributes: { 'class': 'thickBorder' } * } * * a rule allowing the `thickBorder` class for `div` elements will be registered in the {@link CKEDITOR.filter}. * * If you need to have more freedom when transforming widget style to allowed content rules, * you can use the {@link #styleToAllowedContentRules} callback. * * @since 4.4 * @property {String} styleableElements */ /** * Function transforming custom widget's {@link CKEDITOR.style} instance into * {@link CKEDITOR.filter.allowedContentRules}. It may be used when a static * {@link #styleableElements} property is not enough to inform the {@link CKEDITOR.filter} * what HTML features should be enabled when allowing the given style. * * In most cases, when style's classes just have to be added to element name(s) used by * the widget element, it is recommended to use simpler {@link #styleableElements} property. * * In order to get parsed classes from the style definition you can use * {@link CKEDITOR.style.customHandlers.widget#getClassesArray}. * * For example, if you want to use the [object format of allowed content rules](#!/guide/dev_allowed_content_rules-section-object-format), * to specify `match` validator, your implementation could look like this: * * editor.widgets.add( 'customWidget', { * // ... * * styleToAllowedContentRules: funciton( style ) { * // Retrieve classes defined in the style. * var classes = style.getClassesArray(); * * // Do something crazy - for example return allowed content rules in object format, * // with custom match property and propertiesOnly flag. * return { * h1: { * match: isWidgetElement, * propertiesOnly: true, * classes: classes * } * }; * } * } ); * * @since 4.4 * @property {Function} styleToAllowedContentRules * @param {CKEDITOR.style.customHandlers.widget} style The style to be transformed. * @returns {CKEDITOR.filter.allowedContentRules} */ /** * This is an abstract class that describes the definition of a widget's nested editable. * It is a type of values in the {@link CKEDITOR.plugins.widget.definition#editables} object. * * In the simplest case the definition is a string which is a CSS selector used to * find an element that will become a nested editable inside the widget. Note that * the widget element can be a nested editable, too. * * In the more advanced case a definition is an object with a required `selector` property. * * editables: { * header: 'h1', * content: { * selector: 'div.content', * allowedContent: 'p strong em; a[!href]' * } * } * * @class CKEDITOR.plugins.widget.nestedEditable.definition * @abstract */ /** * The CSS selector used to find an element which will become a nested editable. * * @property {String} selector */ /** * The [Advanced Content Filter](#!/guide/dev_advanced_content_filter) rules * which will be used to limit the content allowed in this nested editable. * This option is similar to {@link CKEDITOR.config#allowedContent} and one can * use it to limit the editor features available in the nested editable. * * @property {CKEDITOR.filter.allowedContentRules} allowedContent */ /** * Nested editable name displayed in elements path. * * @property {String} pathName */ rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/0000755000175000017500000000000014006075351022115 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/bg.js0000644000175000017500000000042514006075351023044 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'bg', { 'move': 'Кликни и влачи, за да преместиш' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/cy.js0000644000175000017500000000036314006075351023070 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'cy', { 'move': 'Clcio a llusgo i symud' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/no.js0000644000175000017500000000036714006075351023075 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'no', { 'move': 'Klikk og dra for å flytte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/hr.js0000644000175000017500000000037114006075351023065 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'hr', { 'move': 'Klikni i povuci da pomakneš' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/ar.js0000644000175000017500000000040014006075351023047 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'ar', { 'move': 'إضغط و إسحب للتحريك' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/sk.js0000644000175000017500000000040114006075351023063 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'sk', { 'move': 'Kliknite a potiahnite pre presunutie' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/el.js0000644000175000017500000000047514006075351023061 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'el', { 'move': 'Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/de.js0000644000175000017500000000040114006075351023036 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'de', { 'move': 'Zum Verschieben anwählen und ziehen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/uk.js0000644000175000017500000000044114006075351023071 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'uk', { 'move': 'Клікніть і потягніть для переміщення' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/km.js0000644000175000017500000000046114006075351023063 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'km', { 'move': 'ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/fa.js0000644000175000017500000000041314006075351023037 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'fa', { 'move': 'کلیک و کشیدن برای جابجایی' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/en.js0000644000175000017500000000036314006075351023057 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'en', { 'move': 'Click and drag to move' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/he.js0000644000175000017500000000037114006075351023050 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'he', { 'move': 'לחץ וגרור להזזה' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/lv.js0000644000175000017500000000040114006075351023067 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'lv', { 'move': 'Klikšķina un velc, lai pārvietotu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/eo.js0000644000175000017500000000036514006075351023062 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'eo', { 'move': 'klaki kaj treni por movi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/ca.js0000644000175000017500000000037214006075351023040 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'ca', { 'move': 'Clicar i arrossegar per moure' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/gl.js0000644000175000017500000000037014006075351023055 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'gl', { 'move': 'Prema e arrastre para mover' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/ko.js0000644000175000017500000000041314006075351023062 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'ko', { 'move': '움직이려면 클릭 후 드래그 하세요' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/zh.js0000644000175000017500000000035414006075351023076 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'zh', { 'move': '拖曳以移動' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/es.js0000644000175000017500000000037414006075351023066 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'es', { 'move': 'Dar clic y arrastrar para mover' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/tt.js0000644000175000017500000000043314006075351023102 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'tt', { 'move': 'Күчереп куер өчен басып шудырыгыз' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/it.js0000644000175000017500000000040014006075351023061 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'it', { 'move': 'Fare clic e trascinare per spostare' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/sv.js0000644000175000017500000000037414006075351023107 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'sv', { 'move': 'Klicka och drag för att flytta' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/tr.js0000644000175000017500000000041014006075351023073 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'tr', { 'move': 'Taşımak için, tıklayın ve sürükleyin' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/pl.js0000644000175000017500000000040414006075351023064 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'pl', { 'move': 'Kliknij i przeciągnij, by przenieść.' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/nb.js0000644000175000017500000000036714006075351023060 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'nb', { 'move': 'Klikk og dra for å flytte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/sl.js0000644000175000017500000000040114006075351023064 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'sl', { 'move': 'Kliknite in povlecite, da premaknete' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/fi.js0000644000175000017500000000040014006075351023043 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'fi', { 'move': 'Siirrä klikkaamalla ja raahaamalla' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/ru.js0000644000175000017500000000040314006075351023076 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'ru', { 'move': 'Нажмите и перетащите' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/zh-cn.js0000644000175000017500000000037014006075351023472 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'zh-cn', { 'move': '点击并拖拽以移动' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/cs.js0000644000175000017500000000040214006075351023054 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'cs', { 'move': 'Klepněte a táhněte pro přesunutí' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/pt.js0000644000175000017500000000037014006075351023076 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'pt', { 'move': 'Clique e arraste para mover' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/pt-br.js0000644000175000017500000000037214006075351023501 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'pt-br', { 'move': 'Click e arraste para mover' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/da.js0000644000175000017500000000037014006075351023037 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'da', { 'move': 'Klik og træk for at flytte' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/af.js0000644000175000017500000000036614006075351023046 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'af', { 'move': 'Klik en trek on te beweeg' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/hu.js0000644000175000017500000000037614006075351023075 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'hu', { 'move': 'Kattints és húzd a mozgatáshoz' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/nl.js0000644000175000017500000000037414006075351023070 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'nl', { 'move': 'Klik en sleep om te verplaatsen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/vi.js0000644000175000017500000000040614006075351023071 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'vi', { 'move': 'Nhấp chuột và kéo để di chuyển' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/ja.js0000644000175000017500000000036514006075351023051 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'ja', { 'move': 'ドラッグして移動' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/en-gb.js0000644000175000017500000000036614006075351023450 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'en-gb', { 'move': 'Click and drag to move' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/sq.js0000644000175000017500000000040014006075351023070 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'sq', { 'move': 'Kliko dhe tërhiqe për ta lëvizur' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/ku.js0000644000175000017500000000042314006075351023071 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'ku', { 'move': 'کرتەبکە و ڕایبکێشە بۆ جوڵاندن' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/lang/fr.js0000644000175000017500000000037614006075351023070 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'widget', 'fr', { 'move': 'Cliquer et glisser pour déplacer' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/0000755000175000017500000000000014006075351021752 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/nestedwidgets.html0000644000175000017500000002552314006075351025520 0ustar domdom Nested widgets — CKEditor Sample

    Nested widgets

    Classic (iframe-based) Sample

    Inline Sample

    Simple Box Sample

    Title

    Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on [[July 20, 1969, at 20:18 UTC]]. Armstrong became the first to step onto the lunar surface 6 hours later on [[July 21 at 02:56 UTC]].

    The Eagle
    The Eagle in lunar orbit
    • Foo!
    • Bar!

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet orci ut nisi adipiscing ultrices. Sed pellentesque iaculis malesuada. Pellentesque scelerisque, purus non porta dictum, neque urna bibendum dolor, eget tristique ipsum metus fringilla dolor. Nullam sed accumsan sapien. Vestibulum in placerat magna. Sed justo lacus, volutpat rhoncus odio luctus, ornare adipiscing mauris. Vivamus erat sem, egestas et lectus eget, varius cursus odio. Duis posuere lacus sit amet urna bibendum, id iaculis eros ultrices. Vestibulum a ultrices ante.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet orci ut nisi adipiscing ultrices. Sed pellentesque iaculis malesuada. Pellentesque scelerisque, purus non porta dictum, neque urna bibendum dolor, eget tristique ipsum metus fringilla dolor. Nullam sed accumsan sapien. Vestibulum in placerat magna. Sed justo lacus, volutpat rhoncus odio luctus, ornare adipiscing mauris. Vivamus erat sem, egestas et lectus eget, varius cursus odio. Duis posuere lacus sit amet urna bibendum, id iaculis eros ultrices. Vestibulum a ultrices ante.

    Pellentesque vitae eleifend nisl, non accumsan tellus. Maecenas nec libero non tellus tincidunt mollis porttitor sed arcu. Donec ultricies nulla vitae eros lacinia, vel congue sem auctor. Vivamus convallis, urna ac tincidunt malesuada, lectus erat convallis metus, a hendrerit massa augue accumsan magna. Nulla mattis tellus elit, nec congue magna scelerisque eget. Aliquam posuere nisi augue, posuere sodales nisi iaculis eu. Donec fermentum urna id nibh sagittis fermentum sit amet sed enim. Aliquam neque elit, pretium elementum nunc a, faucibus accumsan lorem. Etiam pulvinar odio et hendrerit tincidunt. Suspendisse tempus eros lacus, in convallis velit mollis ut. Aenean congue, justo eleifend ultricies malesuada, nunc nunc molestie mauris, eget placerat libero eros vel nisi. Quisque diam arcu, mollis ac laoreet vitae, varius et sem. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis in vehicula sapien. Nunc feugiat porta elit nec volutpat.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sit amet orci ut nisi adipiscing ultrices. Sed pellentesque iaculis malesuada. Pellentesque scelerisque, purus non porta dictum, neque urna bibendum dolor, eget tristique ipsum metus fringilla dolor. Nullam sed accumsan sapien. Vestibulum in placerat magna. Sed justo lacus, volutpat rhoncus odio luctus, ornare adipiscing mauris. Vivamus erat sem, egestas et lectus eget, varius cursus odio. Duis posuere lacus sit amet urna bibendum, id iaculis eros ultrices. Vestibulum a ultrices ante.

    Title

    The EagleApollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on [[July 20, 1969, at 20:18 UTC]]. Armstrong became the first to step onto the lunar surface 6 hours later on [[July 21 at 02:56 UTC]].

    • Foo!
    • Bar!

    Ut eget ipsum a sapien porta ultrices. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus mi lacus, pharetra eu bibendum blandit, tristique sit amet leo. Integer eu nulla nec magna vulputate blandit. Praesent mattis quis ante eget adipiscing. Nulla vel tempus risus, in placerat velit. Mauris sed nibh at elit posuere laoreet. Morbi non sapien sed nunc fringilla imperdiet.

    rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/console.js0000644000175000017500000000716314006075351023761 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /* global CKCONSOLE */ 'use strict'; ( function() { CKCONSOLE.add( 'widget', { panels: [ { type: 'box', content: '
      ', refresh: function( editor ) { var instances = obj2Array( editor.widgets.instances ); return { header: 'Instances (' + instances.length + ')', instances: generateInstancesList( instances ) }; }, refreshOn: function( editor, refresh ) { editor.widgets.on( 'instanceCreated', function( evt ) { refresh(); evt.data.on( 'data', refresh ); } ); editor.widgets.on( 'instanceDestroyed', refresh ); } }, { type: 'box', content: '
        ' + '
      • focused:
      • ' + '
      • selected:
      • ' + '
      ', refresh: function( editor ) { var focused = editor.widgets.focused, selected = editor.widgets.selected, selectedIds = []; for ( var i = 0; i < selected.length; ++i ) selectedIds.push( selected[ i ].id ); return { header: 'Focus & selection', focused: focused ? 'id: ' + focused.id : '-', selected: selectedIds.length ? 'id: ' + selectedIds.join( ', id: ' ) : '-' }; }, refreshOn: function( editor, refresh ) { editor.on( 'selectionCheck', refresh, null, null, 999 ); } }, { type: 'log', on: function( editor, log, logFn ) { // Add all listeners with high priorities to log // messages in the correct order when one event depends on another. // E.g. selectionChange triggers widget selection - if this listener // for selectionChange will be executed later than that one, then order // will be incorrect. editor.on( 'selectionChange', function( evt ) { var msg = 'selection change', sel = evt.data.selection, el = sel.getSelectedElement(), widget; if ( el && ( widget = editor.widgets.getByElement( el, true ) ) ) msg += ' (id: ' + widget.id + ')'; log( msg ); }, null, null, 1 ); editor.widgets.on( 'instanceDestroyed', function( evt ) { log( 'instance destroyed (id: ' + evt.data.id + ')' ); }, null, null, 1 ); editor.widgets.on( 'instanceCreated', function( evt ) { log( 'instance created (id: ' + evt.data.id + ')' ); }, null, null, 1 ); editor.widgets.on( 'widgetFocused', function( evt ) { log( 'widget focused (id: ' + evt.data.widget.id + ')' ); }, null, null, 1 ); editor.widgets.on( 'widgetBlurred', function( evt ) { log( 'widget blurred (id: ' + evt.data.widget.id + ')' ); }, null, null, 1 ); editor.widgets.on( 'checkWidgets', logFn( 'checking widgets' ), null, null, 1 ); editor.widgets.on( 'checkSelection', logFn( 'checking selection' ), null, null, 1 ); } } ] } ); function generateInstancesList( instances ) { var html = '', instance; for ( var i = 0; i < instances.length; ++i ) { instance = instances[ i ]; html += itemTpl.output( { id: instance.id, name: instance.name, data: JSON.stringify( instance.data ) } ); } return html; } function obj2Array( obj ) { var arr = []; for ( var id in obj ) arr.push( obj[ id ] ); return arr; } var itemTpl = new CKEDITOR.template( '
    • id: {id}, name: {name}, data: {data}
    • ' ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/0000755000175000017500000000000013776355015023267 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/0000755000175000017500000000000014006075351025256 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/plugin.js0000644000175000017500000001121414006075351027111 0ustar domdom'use strict'; // Register the plugin within the editor. CKEDITOR.plugins.add( 'simplebox', { // This plugin requires the Widgets System defined in the 'widget' plugin. requires: 'widget', // Register the icon used for the toolbar button. It must be the same // as the name of the widget. icons: 'simplebox', // The plugin initialization logic goes inside this method. init: function( editor ) { // Register the editing dialog. CKEDITOR.dialog.add( 'simplebox', this.path + 'dialogs/simplebox.js' ); // Register the simplebox widget. editor.widgets.add( 'simplebox', { // Allow all HTML elements, classes, and styles that this widget requires. // Read more about the Advanced Content Filter here: // * http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter // * http://docs.ckeditor.com/#!/guide/plugin_sdk_integration_with_acf allowedContent: 'div(!simplebox,align-left,align-right,align-center){width};' + 'div(!simplebox-content); h2(!simplebox-title)', // Minimum HTML which is required by this widget to work. requiredContent: 'div(simplebox)', // Define two nested editable areas. editables: { title: { // Define CSS selector used for finding the element inside widget element. selector: '.simplebox-title', // Define content allowed in this nested editable. Its content will be // filtered accordingly and the toolbar will be adjusted when this editable // is focused. allowedContent: 'br strong em' }, content: { selector: '.simplebox-content' } }, // Define the template of a new Simple Box widget. // The template will be used when creating new instances of the Simple Box widget. template: '
      ' + '

      Title

      ' + '

      Content...

      ' + '
      ', // Define the label for a widget toolbar button which will be automatically // created by the Widgets System. This button will insert a new widget instance // created from the template defined above, or will edit selected widget // (see second part of this tutorial to learn about editing widgets). // // Note: In order to be able to translate your widget you should use the // editor.lang.simplebox.* property. A string was used directly here to simplify this tutorial. button: 'Create a simple box', // Set the widget dialog window name. This enables the automatic widget-dialog binding. // This dialog window will be opened when creating a new widget or editing an existing one. dialog: 'simplebox', // Check the elements that need to be converted to widgets. // // Note: The "element" argument is an instance of http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element // so it is not a real DOM element yet. This is caused by the fact that upcasting is performed // during data processing which is done on DOM represented by JavaScript objects. upcast: function( element ) { // Return "true" (that element needs to converted to a Simple Box widget) // for all
      elements with a "simplebox" class. return element.name == 'div' && element.hasClass( 'simplebox' ); }, // When a widget is being initialized, we need to read the data ("align" and "width") // from DOM and set it by using the widget.setData() method. // More code which needs to be executed when DOM is available may go here. init: function() { var width = this.element.getStyle( 'width' ); if ( width ) this.setData( 'width', width ); if ( this.element.hasClass( 'align-left' ) ) this.setData( 'align', 'left' ); if ( this.element.hasClass( 'align-right' ) ) this.setData( 'align', 'right' ); if ( this.element.hasClass( 'align-center' ) ) this.setData( 'align', 'center' ); }, // Listen on the widget#data event which is fired every time the widget data changes // and updates the widget's view. // Data may be changed by using the widget.setData() method, which we use in the // Simple Box dialog window. data: function() { // Check whether "width" widget data is set and remove or set "width" CSS style. // The style is set on widget main element (div.simplebox). if ( !this.data.width ) this.element.removeStyle( 'width' ); else this.element.setStyle( 'width', this.data.width ); // Brutally remove all align classes and set a new one if "align" widget data is set. this.element.removeClass( 'align-left' ); this.element.removeClass( 'align-right' ); this.element.removeClass( 'align-center' ); if ( this.data.align ) this.element.addClass( 'align-' + this.data.align ); } } ); } } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/dialogs/0000755000175000017500000000000014006075351026700 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/dialogs/simplebox.js0000644000175000017500000000307414006075351031244 0ustar domdom// Note: This automatic widget to dialog window binding (the fact that every field is set up from the widget // and is committed to the widget) is only possible when the dialog is opened by the Widgets System // (i.e. the widgetDef.dialog property is set). // When you are opening the dialog window by yourself, you need to take care of this by yourself too. CKEDITOR.dialog.add( 'simplebox', function( editor ) { return { title: 'Edit Simple Box', minWidth: 200, minHeight: 100, contents: [ { id: 'info', elements: [ { id: 'align', type: 'select', label: 'Align', items: [ [ editor.lang.common.notSet, '' ], [ editor.lang.common.alignLeft, 'left' ], [ editor.lang.common.alignRight, 'right' ], [ editor.lang.common.alignCenter, 'center' ] ], // When setting up this field, set its value to the "align" value from widget data. // Note: Align values used in the widget need to be the same as those defined in the "items" array above. setup: function( widget ) { this.setValue( widget.data.align ); }, // When committing (saving) this field, set its value to the widget data. commit: function( widget ) { widget.setData( 'align', this.getValue() ); } }, { id: 'width', type: 'text', label: 'Width', width: '50px', setup: function( widget ) { this.setValue( widget.data.width ); }, commit: function( widget ) { widget.setData( 'width', this.getValue() ); } } ] } ] }; } );rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/contents.css0000644000175000017500000000117313776355015027642 0ustar domdom.simplebox { padding: 8px; margin: 10px; background: #eee; border-radius: 8px; border: 1px solid #ddd; box-shadow: 0 1px 1px #fff inset, 0 -1px 0px #ccc inset; } .simplebox-title, .simplebox-content { box-shadow: 0 1px 1px #ddd inset; border: 1px solid #cccccc; border-radius: 5px; background: #fff; } .simplebox-title { margin: 0 0 8px; padding: 5px 8px; } .simplebox-content { padding: 0 8px; } .simplebox-content::after { content: ''; display: block; clear: both; } .simplebox.align-right { float: right; } .simplebox.align-left { float: left; } .simplebox.align-center { margin-left: auto; margin-right: auto; }rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/icons/0000755000175000017500000000000013776355015026404 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/icons/simplebox.png0000644000175000017500000000043613776355015031117 0ustar domdomPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8 BUPT*x<"M ,E?Kh`xS{/o6Rj89'sz s’;xW$ar2 }ߍfy693?21K1$@c@r=r@D"m4@cpRJZovIENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/sample.jpg0000644000175000017500000004301413776355015025254 0ustar domdomJFIF,,KFile source: http://commons.wikimedia.org/wiki/File:Apollo_11_Launch2.jpg XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((A!1A"Qa2q#BR3Cbr$%c2!1AQ"aq#23RB ?ic*SK&N ֱB7͆^T##3'%;$Fdr9crs'XΠ%3o}@vN,J{1l>_f@pc[ym4TN=4WHBܷm]AYUJ'@>;}qzͭX[ml$&`Yi-:@i0C9% wo\H$I fTѣKC DǫG,=.~w'"nfmRT)*r:y(f?m fp7o bxF%S$2?}:E8j).cZF#aj*B#Uf~bA\pGN5̈IRJ?,xp`;G U.m[Pv!WtYAYyE_!.i,SnKN+>d1k |%%1fyrcp ? bL- uN_Ĭ1{z-8su%D..X|_'S $߀to9+Sb7ヿR^9 ;xs ;GaT$̞ycn@틦d'q$ LMG o(I >ınp>q iԟ@IV"yfnDj8ME-Х7 TWTG _*pŘ-FǽU+7"'d)SK9 =ݺ){XK 뵏a,14)9@ a*R#h$_q|TUM"aQ+1˪̲0 DLTq+`"ET=g"[vѤ@6(9JҲAeBK|'爴>MiW1!W2vIBZl~rA-Tr$!,FVS6RPseWPNCfmRD .߶^m WKPܠ6Q(/~ j$T;&$*M}1Eoi{aI!* NU2bQ[Q ox`\.1UM]C ]=>kDtiM[pq*(ḀTO>q]0dt/׮4J9JLo$l͝ÅAayJS&B6XN#Hei)?.Z-+ .I:^kq?VhӳEmЁ9sU~9&Q`'*]-+|DhV8 eD қ;t]0\Hqy ;Hʸ$jMWHKQ34ALn؋/~éV.*tӅjg%@C{2,0A)cxMYsjUC)=/s$Jy#*#.^*"n E Łi \eYMakz@יu2VGB j Hzd*G$vbC8ƽ 6.K͉&xjRz_OB*Tbc(<6ip-̍UEO؃mi)sP`焸us|Ũw3UU6N:Wܑ兞ͱ4N lV+Z4 [/ : z㉵k!|Ū1;D(51ut6~5X\AAw-(@Knw';uG8xc˳9%zze59sp*ʩA"Un#cG>'ɖ 4Juwǣ\hz /(*e422m[[aIĐʪ n犩]1-SE$-<ڀһlz}ŅK gׄ2HrLƸ;VgTecT` ARkH% 8ssQooF5/w3_1,laXC$ѻ$1۩==--N t H7/sa$dȲ( UBHCe$\o>^ 75ʬ(Rl4Әvk3ƀORy]>YBRS+ZuǟhK[^GUE Mۭ/x:9_t2SJ"x$Ea{ g<.̫* H㨒1?$2؁`#iN|Xb>;1[A0JOn-<A=3X7[(; ܛ $g<;E>cjs q\Fo}#sŃZJ'vכo&_p7Ck6W 2jc~}CseBhHTG * `0ᲀaL .#|-P 9>yfcrJx\.5&P6)S@@-qeM񰍨@=~Ucq`(ؓq/xu6u29cP15Սn}&!:x~gjp1p?jv3If+6vksI6@TPtp=LP4 n؁{C -$G*I}D812n%J _A"5ӾӠZh[[m-?Ѥ!=cp 9EW8i֭u7Z-i.`\sKNgLDh'tE! m’|µ?s-j2YtkWQR_Pdw욵ѣq~AvIuzv/p 0UM7=`oI3Br֞tȥ{ZpP<XHcP%&:z}pG[ k,Sf-xhW-teYE-}8^PG8dܨ5[K@!w;0+{AcacOPu 0$^صʑK QaHB,U͈LM?z~32%Ȩ l їEH YXdc D / pw eW[I E6b̡ ge?@ÅE&-}m?ﴹUU:il)*At|䁨 cMC L8Yͪ'F KJSZ礴4/NdRIî8B,LVjVNHZQßP@b0ͧz)k# nThv%alfq*{@PJjLjћ0WmȏhsZM]+SqM$KkO bI'#NybC#) }oZPdO4Wj:gy4i`MF J#Ie=9M;+ h/AT0ҊRIrer0ߟfoV] U[yFI,5Qe[k[ =!>3SnG+~}9b^iƪ|7 HQD1crsTdS~jlٯeLVUbH[> l׋)o/Z? juhc`HC/l^én6k}SӦr#JHi /ب~Jto{7Jdrd4n&у N@>5$e[+dL%J"D-']_\"2Vi}J)ʨK1z:qcp9Ry4Hd$`.pRN bQT]@ і_ L؛9k~]{  gN.Blm ʠG6QͶ(u=z ̤&"r0qN \V2gob A(\q]#Z"!pϦxb%n%=Fi@ӆJ957  M=+2CUT}l\%ºωs}S0f$E|1Z fgfM͸t`Ewԧtlӽř<J<9`G'鿋 !*B=&˖ft٫lMMN塊WE٣@{{EI78 maZv wç9-FPbZsdqM<*Я$J7VX\*(1-}}֞eZ?gF[$)h %[56f񕕪xC4bMI<\ 7YάCm Ӣ.>qƨH1C3YeJ$ekI=͈aoJlղ +=m$1 *擤hb.EC-)*@Ե.Խ'DE$sĻ,?" ޜTK9c JLO{J_{66x2. EֆeZ jbO9ͮ #Ϡ!w/Sr??A1,,L j)͊Uӆ 5 1rm` )ukqoxI UHRX[T 5 #敩RiT eC 8YM0F;3orVJTY9m($elR=ayS\҈ОT꒳ }VBw](p *LOR߾3sFZїyU$Zxuib\@t=;`N CNf]^dy2Pm$!'6ʂ t)X|C?8D3^,!I1c5LE[(*4vYz/^_Ze|[WfPeʪM/ QS6z 5S2csУgUPf2V4D0i|+aͶ HirXqU~x)d0:r# NU,6$Z9j᫭y6 .O]0p_s=i㚓/"//Bl (UB~!6dQQuS-cch 86Xc|/ן\ &:ӈ3(ΞxcQ RXK ll:\G > |Jdx[a}83kr)5QDkwm:-bZ7`Zxf4R)!o]-\3+[s4!-d-YԒ;]GB<ݷfK&#P}/߾h @),+Q܎b]I4A͡ZJj3jx4"P.ԿRsc9ZLTǿGE@d}L`1R-EEhXd VX!aE€NY8M;|:rc0:ü)c壬PRloM_7er͒JRER;z6oG5N*{!75[*wj]Y"PqtL 66ۨ_@m9&YuvcQU[41xlإ<fO$7Z:jM,u)>՜TQ5{ғ~~SN܏U R{ʔ+cͽ%.0.uufob." .z˶*m3jXCUiavQ۶ ~퍡2$dQ?1Ơ@,m$/*nG7DZ=1-ἂ*Z+- F1&Ś&oL`qnK-Ck_9E (.FyC3+f2G VHd7 ask$R|ǾQ)*O}qv3Z82i֚₵AA0}*𪴵;T |dzjeiݙu=TQĶe #QBЧg>q Cqz8Y2>) so^CL% ^grt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/assets/contents.css0000644000175000017500000000047313776355015025642 0ustar domdom.mediumBorder { border-width: 2px; } .thickBorder { border-width: 5px; } img.thickBorder, img.mediumBorder { border-style: solid; border-color: #CCC; } .important.soMuch { margin: 25px; padding: 25px; background: red; border: none; } span.redMarker { background-color: red; } .invisible { opacity: 0.1; }rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/dev/widgetstyles.html0000644000175000017500000002275314006075351025400 0ustar domdom Applying styles to widgets — CKEditor Sample

      Applying styles to widgets

      Classic (iframe-based) Sample

      Inline Sample

      Apollo 11

      Saturn V
      Roll out of Saturn V on launch pad

      Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on [[July 20, 1969, at 20:18 UTC]]. Armstrong became the first to step onto the lunar surface 6 hours later on [[July 21 at 02:56 UTC]].

      Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

      Broadcasting and quotes

      Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

      One small step for [a] man, one giant leap for mankind.

      \( \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \)

      Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

      [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

      The Eagle
      The Eagle in lunar orbit

      Technical details

      Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

      1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
      2. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
      3. Lunar Module for landing on the Moon.

      After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/images/0000755000175000017500000000000013776355015022454 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/widget/images/handle.png0000644000175000017500000000033413776355015024415 0ustar domdomPNG  IHDRy*PLTE$$$&&&$$$###%%%$$$&&&%%%%%%%%%%%%%%%%%%2O tRNS8<@HLTIDATcйa  .00̝ ^c  ܻ`id@낛7. 0"$IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/notificationaggregator/0000755000175000017500000000000014006075351024442 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/notificationaggregator/plugin.js0000644000175000017500000003535114006075351026305 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview The "Notification Aggregator" plugin. * */ ( function() { 'use strict'; CKEDITOR.plugins.add( 'notificationaggregator', { requires: 'notification' } ); /** * An aggregator of multiple tasks (progresses) which should be displayed using one * {@link CKEDITOR.plugins.notification notification}. * * Once all the tasks are done, it means that the whole process is finished and the {@link #finished} * event will be fired. * * New tasks can be created after the previous set of tasks is finished. This will continue the process and * fire the {@link #finished} event again when it is done. * * Simple usage example: * * // Declare one aggregator that will be used for all tasks. * var aggregator; * * // ... * * // Create a new aggregator if the previous one finished all tasks. * if ( !aggregator || aggregator.isFinished() ) { * // Create a new notification aggregator instance. * aggregator = new CKEDITOR.plugins.notificationAggregator( editor, 'Loading process, step {current} of {max}...' ); * * // Change the notification type to 'success' on finish. * aggregator.on( 'finished', function() { * aggregator.notification.update( { message: 'Done', type: 'success' } ); * } ); * } * * // Create 3 tasks. * var taskA = aggregator.createTask(), * taskB = aggregator.createTask(), * taskC = aggregator.createTask(); * * // At this point the notification contains a message: "Loading process, step 0 of 3...". * * // Let's close the first one immediately. * taskA.done(); // "Loading process, step 1 of 3...". * * // One second later the message will be: "Loading process, step 2 of 3...". * setTimeout( function() { * taskB.done(); * }, 1000 ); * * // Two seconds after the previous message the last task will be completed, meaning that * // the notification will be closed. * setTimeout( function() { * taskC.done(); * }, 3000 ); * * @since 4.5 * @class CKEDITOR.plugins.notificationAggregator * @mixins CKEDITOR.event * @constructor Creates a notification aggregator instance. * @param {CKEDITOR.editor} editor * @param {String} message The template for the message to be displayed in the notification. The template can use * the following variables: * * * `{current}` – The number of completed tasks. * * `{max}` – The number of tasks. * * `{percentage}` – The progress (number 0-100). * * @param {String/null} [singularMessage=null] An optional template for the message to be displayed in the notification * when there is only one task remaining. This template can use the same variables as the `message` template. * If `null`, then the `message` template will be used. */ function Aggregator( editor, message, singularMessage ) { /** * @readonly * @property {CKEDITOR.editor} editor */ this.editor = editor; /** * Notification created by the aggregator. * * The notification object is modified as aggregator tasks are being closed. * * @readonly * @property {CKEDITOR.plugins.notification/null} */ this.notification = null; /** * A template for the notification message. * * The template can use the following variables: * * * `{current}` – The number of completed tasks. * * `{max}` – The number of tasks. * * `{percentage}` – The progress (number 0-100). * * @private * @property {CKEDITOR.template} */ this._message = new CKEDITOR.template( message ); /** * A template for the notification message used when only one task is loading. * * Sometimes there might be a need to specify a special message when there * is only one task loading, and to display standard messages in other cases. * * For example, you might want to show a message "Translating a widget" rather than * "Translating widgets (1 of 1)", but still you would want to have a message * "Translating widgets (2 of 3)" if more widgets are being translated at the same * time. * * Template variables are the same as in {@link #_message}. * * @private * @property {CKEDITOR.template/null} */ this._singularMessage = singularMessage ? new CKEDITOR.template( singularMessage ) : null; // Set the _tasks, _totalWeights, _doneWeights, _doneTasks properties. this._tasks = []; this._totalWeights = 0; this._doneWeights = 0; this._doneTasks = 0; /** * Array of tasks tracked by the aggregator. * * @private * @property {CKEDITOR.plugins.notificationAggregator.task[]} _tasks */ /** * Stores the sum of declared weights for all contained tasks. * * @private * @property {Number} _totalWeights */ /** * Stores the sum of done weights for all contained tasks. * * @private * @property {Number} _doneWeights */ /** * Stores the count of tasks done. * * @private * @property {Number} _doneTasks */ } Aggregator.prototype = { /** * Creates a new task that can be updated to indicate the progress. * * @param [options] Options object for the task creation. * @param [options.weight] For more information about weight, see the * {@link CKEDITOR.plugins.notificationAggregator.task} overview. * @returns {CKEDITOR.plugins.notificationAggregator.task} An object that represents the task state, and allows * for its manipulation. */ createTask: function( options ) { options = options || {}; var initialTask = !this.notification, task; if ( initialTask ) { // It's a first call. this.notification = this._createNotification(); } task = this._addTask( options ); task.on( 'updated', this._onTaskUpdate, this ); task.on( 'done', this._onTaskDone, this ); task.on( 'canceled', function() { this._removeTask( task ); }, this ); // Update the aggregator. this.update(); if ( initialTask ) { this.notification.show(); } return task; }, /** * Triggers an update on the aggregator, meaning that its UI will be refreshed. * * When all the tasks are done, the {@link #finished} event is fired. */ update: function() { this._updateNotification(); if ( this.isFinished() ) { this.fire( 'finished' ); } }, /** * Returns a number from `0` to `1` representing the done weights to total weights ratio * (showing how many of the tasks are done). * * Note: For an empty aggregator (without any tasks created) it will return `1`. * * @returns {Number} Returns the percentage of tasks done as a number ranging from `0` to `1`. */ getPercentage: function() { // In case there are no weights at all we'll return 1. if ( this.getTaskCount() === 0 ) { return 1; } return this._doneWeights / this._totalWeights; }, /** * @returns {Boolean} Returns `true` if all notification tasks are done * (or there are no tasks at all). */ isFinished: function() { return this.getDoneTaskCount() === this.getTaskCount(); }, /** * @returns {Number} Returns a total tasks count. */ getTaskCount: function() { return this._tasks.length; }, /** * @returns {Number} Returns the number of tasks done. */ getDoneTaskCount: function() { return this._doneTasks; }, /** * Updates the notification content. * * @private */ _updateNotification: function() { this.notification.update( { message: this._getNotificationMessage(), progress: this.getPercentage() } ); }, /** * Returns a message used in the notification. * * @private * @returns {String} */ _getNotificationMessage: function() { var tasksCount = this.getTaskCount(), doneTasks = this.getDoneTaskCount(), templateParams = { current: doneTasks, max: tasksCount, percentage: Math.round( this.getPercentage() * 100 ) }, template; // If there's only one remaining task and we have a singular message, we should use it. if ( tasksCount == 1 && this._singularMessage ) { template = this._singularMessage; } else { template = this._message; } return template.output( templateParams ); }, /** * Creates a notification object. * * @private * @returns {CKEDITOR.plugins.notification} */ _createNotification: function() { return new CKEDITOR.plugins.notification( this.editor, { type: 'progress' } ); }, /** * Creates a {@link CKEDITOR.plugins.notificationAggregator.task} instance based * on `options`, and adds it to the task list. * * @private * @param options Options object coming from the {@link #createTask} method. * @returns {CKEDITOR.plugins.notificationAggregator.task} */ _addTask: function( options ) { var task = new Task( options.weight ); this._tasks.push( task ); this._totalWeights += task._weight; return task; }, /** * Removes a given task from the {@link #_tasks} array and updates the UI. * * @private * @param {CKEDITOR.plugins.notificationAggregator.task} task Task to be removed. */ _removeTask: function( task ) { var index = CKEDITOR.tools.indexOf( this._tasks, task ); if ( index !== -1 ) { // If task was already updated with some weight, we need to remove // this weight from our cache. if ( task._doneWeight ) { this._doneWeights -= task._doneWeight; } this._totalWeights -= task._weight; this._tasks.splice( index, 1 ); // And we also should inform the UI about this change. this.update(); } }, /** * A listener called on the {@link CKEDITOR.plugins.notificationAggregator.task#update} event. * * @private * @param {CKEDITOR.eventInfo} evt Event object of the {@link CKEDITOR.plugins.notificationAggregator.task#update} event. */ _onTaskUpdate: function( evt ) { this._doneWeights += evt.data; this.update(); }, /** * A listener called on the {@link CKEDITOR.plugins.notificationAggregator.task#event-done} event. * * @private * @param {CKEDITOR.eventInfo} evt Event object of the {@link CKEDITOR.plugins.notificationAggregator.task#event-done} event. */ _onTaskDone: function() { this._doneTasks += 1; this.update(); } }; CKEDITOR.event.implementOn( Aggregator.prototype ); /** * # Overview * * This type represents a single task in the aggregator, and exposes methods to manipulate its state. * * ## Weights * * Task progess is based on its **weight**. * * As you create a task, you need to declare its weight. As you want the update to inform about the * progress, you will need to {@link #update} the task, telling how much of this weight is done. * * For example, if you declare that your task has a weight that equals `50` and then call `update` with `10`, * you will end up with telling that the task is done in 20%. * * ### Example Usage of Weights * * Let us say that you use tasks for file uploading. * * A single task is associated with a single file upload. You can use the file size in bytes as a weight, * and then as the file upload progresses you just call the `update` method with the number of bytes actually * downloaded. * * @since 4.5 * @class CKEDITOR.plugins.notificationAggregator.task * @mixins CKEDITOR.event * @constructor Creates a task instance for notification aggregator. * @param {Number} [weight=1] */ function Task( weight ) { /** * Total weight of the task. * * @private * @property {Number} */ this._weight = weight || 1; /** * Done weight of the task. * * @private * @property {Number} */ this._doneWeight = 0; /** * Indicates when the task is canceled. * * @private * @property {Boolean} */ this._isCanceled = false; } Task.prototype = { /** * Marks the task as done. */ done: function() { this.update( this._weight ); }, /** * Updates the done weight of a task. * * @param {Number} weight Number indicating how much of the total task {@link #_weight} is done. */ update: function( weight ) { // If task is already done or canceled there is no need to update it, and we don't expect // progress to be reversed. if ( this.isDone() || this.isCanceled() ) { return; } // Note that newWeight can't be higher than _doneWeight. var newWeight = Math.min( this._weight, weight ), weightChange = newWeight - this._doneWeight; this._doneWeight = newWeight; // Fire updated event even if task is done in order to correctly trigger updating the // notification's message. If we wouldn't do this, then the last weight change would be ignored. this.fire( 'updated', weightChange ); if ( this.isDone() ) { this.fire( 'done' ); } }, /** * Cancels the task (the task will be removed from the aggregator). */ cancel: function() { // If task is already done or canceled. if ( this.isDone() || this.isCanceled() ) { return; } // Mark task as canceled. this._isCanceled = true; // We'll fire cancel event it's up to aggregator to listen for this event, // and remove the task. this.fire( 'canceled' ); }, /** * Checks if the task is done. * * @returns {Boolean} */ isDone: function() { return this._weight === this._doneWeight; }, /** * Checks if the task is canceled. * * @returns {Boolean} */ isCanceled: function() { return this._isCanceled; } }; CKEDITOR.event.implementOn( Task.prototype ); /** * Fired when all tasks are done. When this event occurs, the notification may change its type to `success` or be hidden: * * aggregator.on( 'finished', function() { * if ( aggregator.getTaskCount() == 0 ) { * aggregator.notification.hide(); * } else { * aggregator.notification.update( { message: 'Done', type: 'success' } ); * } * } ); * * @event finished * @member CKEDITOR.plugins.notificationAggregator */ /** * Fired upon each weight update of the task. * * var myTask = new Task( 100 ); * myTask.update( 30 ); * // Fires updated event with evt.data = 30. * myTask.update( 40 ); * // Fires updated event with evt.data = 10. * myTask.update( 20 ); * // Fires updated event with evt.data = -20. * * @event updated * @param {Number} data The difference between the new weight and the previous one. * @member CKEDITOR.plugins.notificationAggregator.task */ /** * Fired when the task is done. * * @event done * @member CKEDITOR.plugins.notificationAggregator.task */ /** * Fired when the task is canceled. * * @event canceled * @member CKEDITOR.plugins.notificationAggregator.task */ // Expose Aggregator type. CKEDITOR.plugins.notificationAggregator = Aggregator; CKEDITOR.plugins.notificationAggregator.task = Task; } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/0000755000175000017500000000000014006075351021224 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/button/plugin.js0000644000175000017500000002603314006075351023064 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ ( function() { var template = '' + '{label}' + '{arrowHtml}' + ''; var templateArrow = '' + // BLACK DOWN-POINTING TRIANGLE ( CKEDITOR.env.hc ? '▼' : '' ) + ''; var btnArrowTpl = CKEDITOR.addTemplate( 'buttonArrow', templateArrow ), btnTpl = CKEDITOR.addTemplate( 'button', template ); CKEDITOR.plugins.add( 'button', { lang: 'af,ar,bg,ca,cs,da,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hu,it,ja,km,ko,ku,lt,nb,nl,pl,pt,pt-br,ro,ru,sk,sl,sq,sv,tr,tt,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% beforeInit: function( editor ) { editor.ui.addHandler( CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler ); } } ); /** * Button UI element. * * @readonly * @property {String} [='button'] * @member CKEDITOR */ CKEDITOR.UI_BUTTON = 'button'; /** * Represents a button UI element. This class should not be called directly. To * create new buttons use {@link CKEDITOR.ui#addButton} instead. * * @class * @constructor Creates a button class instance. * @param {Object} definition The button definition. */ CKEDITOR.ui.button = function( definition ) { CKEDITOR.tools.extend( this, definition, // Set defaults. { title: definition.label, click: definition.click || function( editor ) { editor.execCommand( definition.command ); } } ); this._ = {}; }; /** * Represents the button handler object. * * @class * @singleton * @extends CKEDITOR.ui.handlerDefinition */ CKEDITOR.ui.button.handler = { /** * Transforms a button definition in a {@link CKEDITOR.ui.button} instance. * * @member CKEDITOR.ui.button.handler * @param {Object} definition * @returns {CKEDITOR.ui.button} */ create: function( definition ) { return new CKEDITOR.ui.button( definition ); } }; /** @class CKEDITOR.ui.button */ CKEDITOR.ui.button.prototype = { /** * Renders the button. * * @param {CKEDITOR.editor} editor The editor instance which this button is * to be used by. * @param {Array} output The output array to which the HTML code related to * this button should be appended. */ render: function( editor, output ) { function updateState() { // "this" is a CKEDITOR.ui.button instance. var mode = editor.mode; if ( mode ) { // Restore saved button state. var state = this.modes[ mode ] ? modeStates[ mode ] !== undefined ? modeStates[ mode ] : CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; state = editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state; this.setState( state ); // Let plugin to disable button. if ( this.refresh ) this.refresh(); } } var env = CKEDITOR.env, id = this._.id = CKEDITOR.tools.getNextId(), stateName = '', command = this.command, // Get the command name. clickFn; this._.editor = editor; var instance = { id: id, button: this, editor: editor, focus: function() { var element = CKEDITOR.document.getById( id ); element.focus(); }, execute: function() { this.button.click( editor ); }, attach: function( editor ) { this.button.attach( editor ); } }; var keydownFn = CKEDITOR.tools.addFunction( function( ev ) { if ( instance.onkey ) { ev = new CKEDITOR.dom.event( ev ); return ( instance.onkey( instance, ev.getKeystroke() ) !== false ); } } ); var focusFn = CKEDITOR.tools.addFunction( function( ev ) { var retVal; if ( instance.onfocus ) retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false ); return retVal; } ); var selLocked = 0; instance.clickFn = clickFn = CKEDITOR.tools.addFunction( function() { // Restore locked selection in Opera. if ( selLocked ) { editor.unlockSelection( 1 ); selLocked = 0; } instance.execute(); // Fixed iOS focus issue when your press disabled button (#12381). if ( env.iOS ) { editor.focus(); } } ); // Indicate a mode sensitive button. if ( this.modes ) { var modeStates = {}; editor.on( 'beforeModeUnload', function() { if ( editor.mode && this._.state != CKEDITOR.TRISTATE_DISABLED ) modeStates[ editor.mode ] = this._.state; }, this ); // Update status when activeFilter, mode or readOnly changes. editor.on( 'activeFilterChange', updateState, this ); editor.on( 'mode', updateState, this ); // If this button is sensitive to readOnly state, update it accordingly. !this.readOnly && editor.on( 'readOnly', updateState, this ); } else if ( command ) { // Get the command instance. command = editor.getCommand( command ); if ( command ) { command.on( 'state', function() { this.setState( command.state ); }, this ); stateName += ( command.state == CKEDITOR.TRISTATE_ON ? 'on' : command.state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off' ); } } // For button that has text-direction awareness on selection path. if ( this.directional ) { editor.on( 'contentDirChanged', function( evt ) { var el = CKEDITOR.document.getById( this._.id ), icon = el.getFirst(); var pathDir = evt.data; // Make a minor direction change to become style-able for the skin icon. if ( pathDir != editor.lang.dir ) el.addClass( 'cke_' + pathDir ); else el.removeClass( 'cke_ltr' ).removeClass( 'cke_rtl' ); // Inline style update for the plugin icon. icon.setAttribute( 'style', CKEDITOR.skin.getIconStyle( iconName, pathDir == 'rtl', this.icon, this.iconOffset ) ); }, this ); } if ( !command ) stateName += 'off'; var name = this.name || this.command, iconName = name; // Check if we're pointing to an icon defined by another command. (#9555) if ( this.icon && !( /\./ ).test( this.icon ) ) { iconName = this.icon; this.icon = null; } var params = { id: id, name: name, iconName: iconName, label: this.label, cls: this.className || '', state: stateName, ariaDisabled: stateName == 'disabled' ? 'true' : 'false', title: this.title, titleJs: env.gecko && !env.hc ? '' : ( this.title || '' ).replace( "'", '' ), hasArrow: this.hasArrow ? 'true' : 'false', keydownFn: keydownFn, focusFn: focusFn, clickFn: clickFn, style: CKEDITOR.skin.getIconStyle( iconName, ( editor.lang.dir == 'rtl' ), this.icon, this.iconOffset ), arrowHtml: this.hasArrow ? btnArrowTpl.output() : '' }; btnTpl.output( params, output ); if ( this.onRender ) this.onRender(); return instance; }, /** * Sets the button state. * * @param {Number} state Indicates the button state. One of {@link CKEDITOR#TRISTATE_ON}, * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}. */ setState: function( state ) { if ( this._.state == state ) return false; this._.state = state; var element = CKEDITOR.document.getById( this._.id ); if ( element ) { element.setState( state, 'cke_button' ); state == CKEDITOR.TRISTATE_DISABLED ? element.setAttribute( 'aria-disabled', true ) : element.removeAttribute( 'aria-disabled' ); if ( !this.hasArrow ) { // Note: aria-pressed attribute should not be added to menuButton instances. (#11331) state == CKEDITOR.TRISTATE_ON ? element.setAttribute( 'aria-pressed', true ) : element.removeAttribute( 'aria-pressed' ); } else { var newLabel = state == CKEDITOR.TRISTATE_ON ? this._.editor.lang.button.selectedLabel.replace( /%1/g, this.label ) : this.label; CKEDITOR.document.getById( this._.id + '_label' ).setText( newLabel ); } return true; } else { return false; } }, /** * Gets the button state. * * @returns {Number} The button state. One of {@link CKEDITOR#TRISTATE_ON}, * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}. */ getState: function() { return this._.state; }, /** * Returns this button's {@link CKEDITOR.feature} instance. * * It may be this button instance if it has at least one of * `allowedContent` and `requiredContent` properties. Otherwise, * if a command is bound to this button by the `command` property, then * that command will be returned. * * This method implements the {@link CKEDITOR.feature#toFeature} interface method. * * @since 4.1 * @param {CKEDITOR.editor} Editor instance. * @returns {CKEDITOR.feature} The feature. */ toFeature: function( editor ) { if ( this._.feature ) return this._.feature; var feature = this; // If button isn't a feature, return command if is bound. if ( !this.allowedContent && !this.requiredContent && this.command ) feature = editor.getCommand( this.command ) || feature; return this._.feature = feature; } }; /** * Adds a button definition to the UI elements list. * * editorInstance.ui.addButton( 'MyBold', { * label: 'My Bold', * command: 'bold', * toolbar: 'basicstyles,1' * } ); * * @member CKEDITOR.ui * @param {String} name The button name. * @param {Object} definition The button definition. * @param {String} definition.label The textual part of the button (if visible) and its tooltip. * @param {String} definition.command The command to be executed once the button is activated. * @param {String} definition.toolbar The {@link CKEDITOR.config#toolbarGroups toolbar group} into which * the button will be added. An optional index value (separated by a comma) determines the button position within the group. */ CKEDITOR.ui.prototype.addButton = function( name, definition ) { this.add( name, CKEDITOR.UI_BUTTON, definition ); }; } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/0000755000175000017500000000000014006075351022145 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/bg.js0000644000175000017500000000037014006075351023073 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'bg', { selectedLabel: '%1 (Избрано)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/ar.js0000644000175000017500000000036214006075351023106 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'ar', { selectedLabel: '%1 (محدد)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/sk.js0000644000175000017500000000036214006075351023121 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'sk', { selectedLabel: '%1 (Vybrané)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/ro.js0000644000175000017500000000036214006075351023124 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'ro', { selectedLabel: '%1 (Selectat)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/el.js0000644000175000017500000000037614006075351023111 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'el', { selectedLabel: '%1 (Επιλεγμένο)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/de.js0000644000175000017500000000036514006075351023077 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'de', { selectedLabel: '%1 (Ausgewählt)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/uk.js0000644000175000017500000000037014006075351023122 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'uk', { selectedLabel: '%1 (Вибрано)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/km.js0000644000175000017500000000042114006075351023107 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'km', { selectedLabel: '%1 (បាន​ជ្រើស​រើស)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/fa.js0000644000175000017500000000037514006075351023076 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'fa', { selectedLabel: '%1 (انتخاب شده)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/en.js0000644000175000017500000000036214006075351023106 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'en', { selectedLabel: '%1 (Selected)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/he.js0000644000175000017500000000036214006075351023100 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'he', { selectedLabel: '1% (סומן)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/lt.js0000644000175000017500000000036414006075351023125 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'lt', { selectedLabel: '%1 (Pasirinkta)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/eo.js0000644000175000017500000000036314006075351023110 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'eo', { selectedLabel: '%1 (Selektita)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/ca.js0000644000175000017500000000036514006075351023072 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'ca', { selectedLabel: '%1 (Seleccionat)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/gl.js0000644000175000017500000000036614006075351023112 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'gl', { selectedLabel: '%1 (seleccionado)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/ko.js0000644000175000017500000000036314006075351023116 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'ko', { selectedLabel: '%1 (선택됨)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/zh.js0000644000175000017500000000036314006075351023126 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'zh', { selectedLabel: '%1 (已選取)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/es.js0000644000175000017500000000036614006075351023117 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'es', { selectedLabel: '%1 (Seleccionado)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/tt.js0000644000175000017500000000037414006075351023136 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'tt', { selectedLabel: '%1 (Сайланган)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/it.js0000644000175000017500000000036514006075351023123 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'it', { selectedLabel: '%1 (selezionato)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/sv.js0000644000175000017500000000035614006075351023137 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'sv', { selectedLabel: '%1 (Vald)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/tr.js0000644000175000017500000000036414006075351023133 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'tr', { selectedLabel: '%1 (Seçilmiş)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/pl.js0000644000175000017500000000036114006075351023116 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'pl', { selectedLabel: '%1 (Wybrany)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/nb.js0000644000175000017500000000035714006075351023107 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'nb', { selectedLabel: '%1 (Valgt)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/sl.js0000644000175000017500000000036114006075351023121 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'sl', { selectedLabel: '%1 (Izbrano)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/fi.js0000644000175000017500000000036114006075351023101 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'fi', { selectedLabel: '%1 (Valittu)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/ru.js0000644000175000017500000000037014006075351023131 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'ru', { selectedLabel: '%1 (Выбрано)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/zh-cn.js0000644000175000017500000000037014006075351023522 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'zh-cn', { selectedLabel: '已选中 %1 项' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/cs.js0000644000175000017500000000036214006075351023111 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'cs', { selectedLabel: '%1 (Vybráno)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/pt.js0000644000175000017500000000036514006075351023132 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'pt', { selectedLabel: '%1 (Selecionado)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/pt-br.js0000644000175000017500000000037014006075351023527 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'pt-br', { selectedLabel: '%1 (Selecionado)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/da.js0000644000175000017500000000035714006075351023074 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'da', { selectedLabel: '%1 (Valgt)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/af.js0000644000175000017500000000036114006075351023071 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'af', { selectedLabel: '%1 uitgekies' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/hu.js0000644000175000017500000000036614006075351023124 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'hu', { selectedLabel: '%1 (Kiválasztva)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/nl.js0000644000175000017500000000036614006075351023121 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'nl', { selectedLabel: '%1 (Geselecteerd)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/vi.js0000644000175000017500000000036514006075351023125 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'vi', { selectedLabel: '%1 (Đã chọn)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/ja.js0000644000175000017500000000036314006075351023077 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'ja', { selectedLabel: '%1 (選択中)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/en-gb.js0000644000175000017500000000036514006075351023477 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'en-gb', { selectedLabel: '%1 (Selected)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/sq.js0000644000175000017500000000036614006075351023133 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'sq', { selectedLabel: '%1 (Përzgjedhur)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/ku.js0000644000175000017500000000040014006075351023114 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'ku', { selectedLabel: '%1 (هەڵبژێردراو)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/button/lang/fr.js0000644000175000017500000000036714006075351023120 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'button', 'fr', { selectedLabel: '%1 (Sélectionné)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/0000755000175000017500000000000014006075351022401 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/plugin.js0000644000175000017500000004562414006075351024250 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'uploadwidget', { lang: 'cs,da,de,en,eo,fr,gl,hu,it,ko,ku,nb,nl,pl,pt-br,ru,sv,tr,zh,zh-cn', // %REMOVE_LINE_CORE% requires: 'widget,clipboard,filetools,notificationaggregator', init: function( editor ) { // Images which should be changed into upload widget needs to be marked with `data-widget` on paste, // because otherwise wrong widget may handle upload placeholder element (e.g. image2 plugin would handle image). // `data-widget` attribute is allowed only in the elements which has also `data-cke-upload-id` attribute. editor.filter.allow( '*[!data-widget,!data-cke-upload-id]' ); } } ); /** * This function creates an upload widget — a placeholder to show the progress of an upload. The upload widget * is based on its {@link CKEDITOR.fileTools.uploadWidgetDefinition definition}. The `addUploadWidget` method also * creates a `paste` event, if the {@link CKEDITOR.fileTools.uploadWidgetDefinition#fileToElement fileToElement} method * is defined. This event helps in handling pasted files, as it will automatically check if the files were pasted and * mark them to be uploaded. * * The upload widget helps to handle content that is uploaded asynchronously inside the editor. It solves issues such as: * editing during upload, undo manager integration, getting data, removing or copying uploaded element. * * To create an upload widget you need to define two transformation methods: * * * The {@link CKEDITOR.fileTools.uploadWidgetDefinition#fileToElement fileToElement} method which will be called on * `paste` and transform a file into a placeholder. * * The {@link CKEDITOR.fileTools.uploadWidgetDefinition#onUploaded onUploaded} method with * the {@link CKEDITOR.fileTools.uploadWidgetDefinition#replaceWith replaceWith} method which will be called to replace * the upload placeholder with the final HTML when the upload is done. * If you want to show more information about the progress you can also define * the {@link CKEDITOR.fileTools.uploadWidgetDefinition#onLoading onLoading} and * {@link CKEDITOR.fileTools.uploadWidgetDefinition#onUploading onUploading} methods. * * The simplest uploading widget which uploads a file and creates a link to it may look like this: * * CKEDITOR.fileTools.addUploadWidget( editor, 'uploadfile', { * uploadUrl: CKEDITOR.fileTools.getUploadUrl( editor.config ), * * fileToElement: function( file ) { * var a = new CKEDITOR.dom.element( 'a' ); * a.setText( file.name ); * a.setAttribute( 'href', '#' ); * return a; * }, * * onUploaded: function( upload ) { * this.replaceWith( '' + upload.fileName + '' ); * } * } ); * * The upload widget uses {@link CKEDITOR.fileTools.fileLoader} as a helper to upload the file. A * {@link CKEDITOR.fileTools.fileLoader} instance is created when the file is pasted and a proper method is * called — by default it is the {@link CKEDITOR.fileTools.fileLoader#loadAndUpload} method. If you want * to only use the `load` or `upload`, you can use the {@link CKEDITOR.fileTools.uploadWidgetDefinition#loadMethod loadMethod} * property. * * Note that if you want to handle a big file, e.g. a video, you may need to use `upload` instead of * `loadAndUpload` because the file may be too big to load it to memory at once. * * If you do not upload the file, you need to define {@link CKEDITOR.fileTools.uploadWidgetDefinition#onLoaded onLoaded} * instead of {@link CKEDITOR.fileTools.uploadWidgetDefinition#onUploaded onUploaded}. * For example, if you want to read the content of the file: * * CKEDITOR.fileTools.addUploadWidget( editor, 'fileReader', { * loadMethod: 'load', * supportedTypes: /text\/(plain|html)/, * * fileToElement: function( file ) { * var el = new CKEDITOR.dom.element( 'span' ); * el.setText( '...' ); * return el; * }, * * onLoaded: function( loader ) { * this.replaceWith( atob( loader.data.split( ',' )[ 1 ] ) ); * } * } ); * * If you need custom `paste` handling you need to mark the pasted element to be changed into an upload widget * using {@link CKEDITOR.fileTools#markElement markElement}. For example, instead of the `fileToElement` helper from the * example above, a `paste` listener can be created manually: * * editor.on( 'paste', function( evt ) { * var file, i, el, loader; * * for ( i = 0; i < evt.data.dataTransfer.getFilesCount(); i++ ) { * file = evt.data.dataTransfer.getFile( i ); * * if ( CKEDITOR.fileTools.isTypeSupported( file, /text\/(plain|html)/ ) ) { * el = new CKEDITOR.dom.element( 'span' ), * loader = editor.uploadRepository.create( file ); * * el.setText( '...' ); * * loader.load(); * * CKEDITOR.fileTools.markElement( el, 'filereader', loader.id ); * * evt.data.dataValue += el.getOuterHtml(); * } * } * } ); * * Note that you can bind notifications to the upload widget on paste using * the {@link CKEDITOR.fileTools#bindNotifications} method, so notifications will automatically * show the progress of the upload. Because this method shows notifications about upload, do not use it if you only * {@link CKEDITOR.fileTools.fileLoader#load load} (and not upload) a file. * * editor.on( 'paste', function( evt ) { * var file, i, el, loader; * * for ( i = 0; i < evt.data.dataTransfer.getFilesCount(); i++ ) { * file = evt.data.dataTransfer.getFile( i ); * * if ( CKEDITOR.fileTools.isTypeSupported( file, /text\/pdf/ ) ) { * el = new CKEDITOR.dom.element( 'span' ), * loader = editor.uploadRepository.create( file ); * * el.setText( '...' ); * * loader.upload(); * * CKEDITOR.fileTools.markElement( el, 'pdfuploader', loader.id ); * * CKEDITOR.fileTools.bindNotifications( editor, loader ); * * evt.data.dataValue += el.getOuterHtml(); * } * } * } ); * * @member CKEDITOR.fileTools * @param {CKEDITOR.editor} editor The editor instance. * @param {String} name The name of the upload widget. * @param {CKEDITOR.fileTools.uploadWidgetDefinition} def Upload widget definition. */ function addUploadWidget( editor, name, def ) { var fileTools = CKEDITOR.fileTools, uploads = editor.uploadRepository, // Plugins which support all file type has lower priority than plugins which support specific types. priority = def.supportedTypes ? 10 : 20; if ( def.fileToElement ) { editor.on( 'paste', function( evt ) { var data = evt.data, dataTransfer = data.dataTransfer, filesCount = dataTransfer.getFilesCount(), loadMethod = def.loadMethod || 'loadAndUpload', file, i; if ( data.dataValue || !filesCount ) { return; } for ( i = 0; i < filesCount; i++ ) { file = dataTransfer.getFile( i ); // No def.supportedTypes means all types are supported. if ( !def.supportedTypes || fileTools.isTypeSupported( file, def.supportedTypes ) ) { var el = def.fileToElement( file ), loader = uploads.create( file ); if ( el ) { loader[ loadMethod ]( def.uploadUrl ); CKEDITOR.fileTools.markElement( el, name, loader.id ); if ( loadMethod == 'loadAndUpload' || loadMethod == 'upload' ) { CKEDITOR.fileTools.bindNotifications( editor, loader ); } data.dataValue += el.getOuterHtml(); } } } }, null, null, priority ); } /** * This is an abstract class that describes a definition of an upload widget. * It is a type of {@link CKEDITOR.fileTools#addUploadWidget} method's second argument. * * Note that because the upload widget is a type of a widget, this definition extends * {@link CKEDITOR.plugins.widget.definition}. * It adds several new properties and callbacks and implements the {@link CKEDITOR.plugins.widget.definition#downcast} * and {@link CKEDITOR.plugins.widget.definition#init} callbacks. These two properties * should not be overwritten. * * Also, the upload widget definition defines a few properties ({@link #fileToElement}, {@link #supportedTypes}, * {@link #loadMethod loadMethod} and {@link #uploadUrl}) used in the {@link CKEDITOR.editor#paste} listener * which is registered by {@link CKEDITOR.fileTools#addUploadWidget} if the upload widget definition contains * the {@link #fileToElement} callback. * * @abstract * @class CKEDITOR.fileTools.uploadWidgetDefinition * @mixins CKEDITOR.plugins.widget.definition */ CKEDITOR.tools.extend( def, { /** * Upload widget definition overwrites the {@link CKEDITOR.plugins.widget.definition#downcast} property. * This should not be changed. * * @property {String/Function} */ downcast: function() { return new CKEDITOR.htmlParser.text( '' ); }, /** * Upload widget definition overwrites the {@link CKEDITOR.plugins.widget.definition#init} property. * If you want to add some code in the `init` callback remember to call the base function. * * @property {Function} */ init: function() { var widget = this, id = this.wrapper.findOne( '[data-cke-upload-id]' ).data( 'cke-upload-id' ), loader = uploads.loaders[ id ], capitalize = CKEDITOR.tools.capitalize, oldStyle, newStyle; loader.on( 'update', function( evt ) { // Abort if widget was removed. if ( !widget.wrapper || !widget.wrapper.getParent() ) { if ( !editor.editable().find( '[data-cke-upload-id="' + id + '"]' ).count() ) { loader.abort(); } evt.removeListener(); return; } editor.fire( 'lockSnapshot' ); // Call users method, eg. if the status is `uploaded` then // `onUploaded` method will be called, if exists. var methodName = 'on' + capitalize( loader.status ); if ( typeof widget[ methodName ] === 'function' ) { if ( widget[ methodName ]( loader ) === false ) { editor.fire( 'unlockSnapshot' ); return; } } // Set style to the wrapper if it still exists. newStyle = 'cke_upload_' + loader.status; if ( widget.wrapper && newStyle != oldStyle ) { oldStyle && widget.wrapper.removeClass( oldStyle ); widget.wrapper.addClass( newStyle ); oldStyle = newStyle; } // Remove widget on error or abort. if ( loader.status == 'error' || loader.status == 'abort' ) { editor.widgets.del( widget ); } editor.fire( 'unlockSnapshot' ); } ); loader.update(); }, /** * Replaces the upload widget with the final HTML. This method should be called when the upload is done, * usually in the {@link #onUploaded} callback. * * @property {Function} * @param {String} data HTML to replace the upload widget. * @param {String} [mode='html'] See {@link CKEDITOR.editor#method-insertHtml}'s modes. */ replaceWith: function( data, mode ) { if ( data.trim() === '' ) { editor.widgets.del( this ); return; } var wasSelected = ( this == editor.widgets.focused ), editable = editor.editable(), range = editor.createRange(), bookmark, bookmarks; if ( !wasSelected ) { bookmarks = editor.getSelection().createBookmarks(); } range.setStartBefore( this.wrapper ); range.setEndAfter( this.wrapper ); if ( wasSelected ) { bookmark = range.createBookmark(); } editable.insertHtmlIntoRange( data, range, mode ); editor.widgets.checkWidgets( { initOnlyNew: true } ); // Ensure that old widgets instance will be removed. // If replaceWith is called in init, because of paste then checkWidgets will not remove it. editor.widgets.destroy( this, true ); if ( wasSelected ) { range.moveToBookmark( bookmark ); range.select(); } else { editor.getSelection().selectBookmarks( bookmarks ); } } /** * If this property is defined, paste listener is created to transform the pasted file into an HTML element. * It creates an HTML element which will be then transformed into an upload widget. * It is only called for {@link #supportedTypes supported files}. * If multiple files were pasted, this function will be called for each file of a supported type. * * @property {Function} fileToElement * @param {Blob} file A pasted file to load or upload. * @returns {CKEDITOR.dom.element} An element which will be transformed into the upload widget. */ /** * Regular expression to check if the file type is supported by this widget. * If not defined, all files will be handled. * * @property {String} [supportedTypes] */ /** * The URL to which the file will be uploaded. It should be taken from the configuration using * {@link CKEDITOR.fileTools#getUploadUrl}. * * @property {String} [uploadUrl] */ /** * The type of loading operation that should be executed as a result of pasting a file. Possible options are: * * * 'loadAndUpload' – Default behavior, the {@link CKEDITOR.fileTools.fileLoader#loadAndUpload} method will be * executed, the file will be loaded first and uploaded immediately after loading is done. * * 'load' – The {@link CKEDITOR.fileTools.fileLoader#load} method will be executed. This loading type should * be used if you only want to load file data without uploading it. * * 'upload' – The {@link CKEDITOR.fileTools.fileLoader#upload} method will be executed, the file will be uploaded * without loading it to memory. This loading type should be used if you want to upload a big file, * otherwise you can get an "out of memory" error. * * @property {String} [loadMethod=loadAndUpload] */ /** * A function called when the {@link CKEDITOR.fileTools.fileLoader#status status} of the upload changes to `loading`. * * @property {Function} [onLoading] * @param {CKEDITOR.fileTools.fileLoader} loader Loader instance. * @returns {Boolean} */ /** * A function called when the {@link CKEDITOR.fileTools.fileLoader#status status} of the upload changes to `loaded`. * * @property {Function} [onLoaded] * @param {CKEDITOR.fileTools.fileLoader} loader Loader instance. * @returns {Boolean} */ /** * A function called when the {@link CKEDITOR.fileTools.fileLoader#status status} of the upload changes to `uploading`. * * @property {Function} [onUploading] * @param {CKEDITOR.fileTools.fileLoader} loader Loader instance. * @returns {Boolean} */ /** * A function called when the {@link CKEDITOR.fileTools.fileLoader#status status} of the upload changes to `uploaded`. * At that point the upload is done and the upload widget should be replaced with the final HTML using * the {@link #replaceWith} method. * * @property {Function} [onUploaded] * @param {CKEDITOR.fileTools.fileLoader} loader Loader instance. * @returns {Boolean} */ /** * A function called when the {@link CKEDITOR.fileTools.fileLoader#status status} of the upload changes to `error`. * The default behavior is to remove the widget and it can be canceled if this function returns `false`. * * @property {Function} [onError] * @param {CKEDITOR.fileTools.fileLoader} loader Loader instance. * @returns {Boolean} If `false`, the default behavior (remove widget) will be canceled. */ /** * A function called when the {@link CKEDITOR.fileTools.fileLoader#status status} of the upload changes to `abort`. * The default behavior is to remove the widget and it can be canceled if this function returns `false`. * * @property {Function} [onAbort] * @param {CKEDITOR.fileTools.fileLoader} loader Loader instance. * @returns {Boolean} If `false`, the default behavior (remove widget) will be canceled. */ } ); editor.widgets.add( name, def ); } /** * Marks an element which should be transformed into an upload widget. * * @see CKEDITOR.fileTools.addUploadWidget * * @member CKEDITOR.fileTools * @param {CKEDITOR.dom.element} element Element to be marked. * @param {String} widgetName The name of the upload widget. * @param {Number} loaderId The ID of a related {@link CKEDITOR.fileTools.fileLoader}. */ function markElement( element, widgetName, loaderId ) { element.setAttributes( { 'data-cke-upload-id': loaderId, 'data-widget': widgetName } ); } /** * Binds a notification to the {@link CKEDITOR.fileTools.fileLoader file loader} so the upload widget will use * the notification to show the status and progress. * This function uses {@link CKEDITOR.plugins.notificationAggregator}, so even if multiple files are uploading * only one notification is shown. Warnings are an exception, because they are shown in separate notifications. * This notification shows only the progress of the upload, so this method should not be used if * the {@link CKEDITOR.fileTools.fileLoader#load loader.load} method was called. It works with * {@link CKEDITOR.fileTools.fileLoader#upload upload} and {@link CKEDITOR.fileTools.fileLoader#loadAndUpload loadAndUpload}. * * @member CKEDITOR.fileTools * @param {CKEDITOR.editor} editor The editor instance. * @param {CKEDITOR.fileTools.fileLoader} loader The file loader instance. */ function bindNotifications( editor, loader ) { var aggregator = editor._.uploadWidgetNotificaionAggregator; // Create one notification agregator for all types of upload widgets for the editor. if ( !aggregator || aggregator.isFinished() ) { aggregator = editor._.uploadWidgetNotificaionAggregator = new CKEDITOR.plugins.notificationAggregator( editor, editor.lang.uploadwidget.uploadMany, editor.lang.uploadwidget.uploadOne ); aggregator.once( 'finished', function() { var tasks = aggregator.getTaskCount(); if ( tasks === 0 ) { aggregator.notification.hide(); } else { aggregator.notification.update( { message: tasks == 1 ? editor.lang.uploadwidget.doneOne : editor.lang.uploadwidget.doneMany.replace( '%1', tasks ), type: 'success', important: 1 } ); } } ); } var task = aggregator.createTask( { weight: loader.total } ); loader.on( 'update', function() { if ( task && loader.status == 'uploading' ) { task.update( loader.uploaded ); } } ); loader.on( 'uploaded', function() { task && task.done(); } ); loader.on( 'error', function() { task && task.cancel(); editor.showNotification( loader.message, 'warning' ); } ); loader.on( 'abort', function() { task && task.cancel(); editor.showNotification( editor.lang.uploadwidget.abort, 'info' ); } ); } // Two plugins extend this object. if ( !CKEDITOR.fileTools ) { CKEDITOR.fileTools = {}; } CKEDITOR.tools.extend( CKEDITOR.fileTools, { addUploadWidget: addUploadWidget, markElement: markElement, bindNotifications: bindNotifications } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/0000755000175000017500000000000014006075351023322 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/de.js0000644000175000017500000000077514006075351024261 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'de', { abort: 'Hochladen durch den Benutzer abgebrochen.', doneOne: 'Datei erfolgreich hochgeladen.', doneMany: '%1 Dateien erfolgreich hochgeladen.', uploadOne: 'Datei wird hochgeladen ({percentage}%)...', uploadMany: 'Dateien werden hochgeladen, {current} von {max} fertig ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/en.js0000644000175000017500000000072214006075351024263 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'en', { abort: 'Upload aborted by the user.', doneOne: 'File successfully uploaded.', doneMany: 'Successfully uploaded %1 files.', uploadOne: 'Uploading file ({percentage}%)...', uploadMany: 'Uploading files, {current} of {max} done ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/eo.js0000644000175000017500000000073614006075351024271 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'eo', { abort: 'Alŝuto ĉesigita de la uzanto', doneOne: 'Dosiero sukcese alŝutita.', doneMany: 'Sukcese alŝutitaj %1 dosieroj.', uploadOne: 'alŝutata dosiero ({percentage}%)...', uploadMany: 'Alŝutataj dosieroj, {current} el {max} faritaj ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/gl.js0000644000175000017500000000076614006075351024273 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'gl', { abort: 'Envío interrompido polo usuario.', doneOne: 'Ficheiro enviado satisfactoriamente.', doneMany: '%1 ficheiros enviados satisfactoriamente.', uploadOne: 'Enviando o ficheiro ({percentage}%)...', uploadMany: 'Enviando ficheiros, {current} de {max} feito o ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ko.js0000644000175000017500000000105514006075351024272 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ko', { abort: '사용자가 업로드를 중단했습니다.', doneOne: '파일이 성공적으로 업로드되었습니다.', doneMany: '파일 %1개를 성공적으로 업로드하였습니다.', uploadOne: '파일 업로드중 ({percentage}%)...', uploadMany: '파일 {max} 개 중 {current} 번째 파일 업로드 중 ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/zh.js0000644000175000017500000000073514006075351024306 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'zh', { abort: '上傳由使用者放棄。', doneOne: '檔案成功上傳。', doneMany: '成功上傳 %1 檔案。', uploadOne: '正在上傳檔案({percentage}%)...', uploadMany: '正在上傳檔案,{max} 中的 {current} 已完成({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/it.js0000644000175000017500000000100414006075351024267 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'it', { abort: 'Caricamento interrotto dall\'utente.', doneOne: 'Il file è stato caricato correttamente.', doneMany: '%1 file sono stati caricati correttamente.', uploadOne: 'Caricamento del file ({percentage}%)...', uploadMany: 'Caricamento dei file, {current} di {max} completati ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/sv.js0000644000175000017500000000073714006075351024317 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'sv', { abort: 'Uppladdning avbruten av användaren.', doneOne: 'Filuppladdning lyckades.', doneMany: 'Uppladdning av %1 filer lyckades.', uploadOne: 'Laddar upp fil ({percentage}%)...', uploadMany: 'Laddar upp filer, {current} av {max} färdiga ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/tr.js0000644000175000017500000000103414006075351024303 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'tr', { abort: 'Gönderme işlemi kullanıcı tarafından durduruldu.', doneOne: 'Gönderim işlemi başarılı şekilde tamamlandı.', doneMany: '%1 dosya başarılı şekilde gönderildi.', uploadOne: 'Dosyanın ({percentage}%) gönderildi...', uploadMany: 'Toplam {current} / {max} dosyanın ({percentage}%) gönderildi...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/pl.js0000644000175000017500000000075214006075351024277 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'pl', { abort: 'Wysyłanie przerwane przez użytkownika.', doneOne: 'Plik został pomyślnie wysłany.', doneMany: 'Pomyślnie wysłane pliki: %1.', uploadOne: 'Wysyłanie pliku ({percentage}%)...', uploadMany: 'Wysyłanie plików, gotowe {current} z {max} ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/nb.js0000644000175000017500000000074214006075351024262 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'nb', { abort: 'Opplasting ble avbrutt av brukeren.', doneOne: 'Filen har blitt lastet opp.', doneMany: 'Fullført opplasting av %1 filer.', uploadOne: 'Laster opp fil ({percentage}%)...', uploadMany: 'Laster opp filer, {current} av {max} fullført ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ru.js0000644000175000017500000000107314006075351024307 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ru', { abort: 'Загрузка отменена пользователем', doneOne: 'Файл успешно загружен', doneMany: 'Успешно загружено файлов: %1', uploadOne: 'Загрузка файла ({percentage}%)', uploadMany: 'Загрузка файлов, {current} из {max} загружено ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/zh-cn.js0000644000175000017500000000074214006075351024702 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'zh-cn', { abort: '上传已被用户中止。', doneOne: '文件上传成功。', doneMany: '成功上传了 %1 个文件。', uploadOne: '正在上传文件({percentage}%)……', uploadMany: '正在上传文件,{max} 中的 {current}({percentage}%)……' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/cs.js0000644000175000017500000000075014006075351024267 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'cs', { abort: 'Nahrávání zrušeno uživatelem.', doneOne: 'Soubor úspěšně nahrán.', doneMany: 'Úspěšně nahráno %1 souborů.', uploadOne: 'Nahrávání souboru ({percentage}%)...', uploadMany: 'Nahrávání souborů, {current} z {max} hotovo ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/pt-br.js0000644000175000017500000000074314006075351024710 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'pt-br', { abort: 'Envio cancelado pelo usuário.', doneOne: 'Arquivo enviado com sucesso.', doneMany: 'Enviados %1 arquivos com sucesso.', uploadOne: 'Enviando arquivo({percentage}%)...', uploadMany: 'Enviando arquivos, {current} de {max} completos ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/da.js0000644000175000017500000000071014006075351024242 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'da', { abort: 'Upload er afbrudt af brugen.', doneOne: 'Filen er uploadet.', doneMany: 'Du har uploadet %1 filer.', uploadOne: 'Uploader fil ({percentage}%)...', uploadMany: 'Uploader filer, {current} af {max} er uploadet ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/hu.js0000644000175000017500000000075514006075351024303 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'hu', { abort: 'A feltöltést a felhasználó megszakította.', doneOne: 'A fájl sikeresen feltöltve.', doneMany: '%1 fájl sikeresen feltöltve.', uploadOne: 'Fájl feltöltése ({percentage}%)...', uploadMany: 'Fájlok feltöltése, {current}/{max} kész ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/nl.js0000644000175000017500000000075214006075351024275 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'nl', { abort: 'Upload gestopt door de gebruiker.', doneOne: 'Bestand succesvol geüpload.', doneMany: 'Succesvol %1 bestanden geüpload.', uploadOne: 'Uploaden bestand ({percentage}%)…', uploadMany: 'Bestanden aan het uploaden, {current} van {max} klaar ({percentage}%)…' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ku.js0000644000175000017500000000114314006075351024276 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ku', { abort: 'بارکردنەکە بڕدرا لەلایەن بەکارهێنەر.', doneOne: 'پەڕگەکە بەسەرکەوتووانە بارکرا.', doneMany: 'بەسەرکەوتووانە بارکرا %1 پەڕگە.', uploadOne: 'پەڕگە باردەکرێت ({percentage}%)...', uploadMany: 'پەڕگە باردەکرێت, {current} لە {max} ئەنجامدراوە ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/fr.js0000644000175000017500000000104614006075351024270 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'fr', { abort: 'Téléversement interrompu par l\'utilisateur.', doneOne: 'Fichier téléversé avec succès.', doneMany: '%1 fichiers téléversés avec succès.', uploadOne: 'Téléversement du fichier en cours ({percentage}%)...', uploadMany: 'Téléversement des fichiers en cours, {current} sur {max} effectués ({percentage}%)...' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/0000755000175000017500000000000014006075351023157 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/upload.html0000644000175000017500000002427614006075351025344 0ustar domdom Upload image dev sample

      Upload image dev sample

      Saturn V carrying Apollo 11 Apollo 11

      Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

      Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

      Broadcasting and quotes

      Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

      One small step for [a] man, one giant leap for mankind.

      Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

      [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

      Technical details

      Mission crew
      Position Astronaut
      Commander Neil A. Armstrong
      Command Module Pilot Michael Collins
      Lunar Module Pilot Edwin "Buzz" E. Aldrin, Jr.

      Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

      1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
      2. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
      3. Lunar Module for landing on the Moon.

      After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.


      Source: Wikipedia.org

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/cors.html0000644000175000017500000001365014006075351025020 0ustar domdom CORS sample

      CORS sample

      rt-4.4.4/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/filereaderplugin.js0000644000175000017500000000257314006075351027045 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'filereader', { requires: 'uploadwidget', init: function( editor ) { var fileTools = CKEDITOR.fileTools; fileTools.addUploadWidget( editor, 'filereader', { onLoaded: function( upload ) { var data = upload.data; if ( data && data.indexOf( ',' ) >= 0 && data.indexOf( ',' ) < data.length - 1 ) { this.replaceWith( atob( upload.data.split( ',' )[ 1 ] ) ); } else { editor.widgets.del( this ); } } } ); editor.on( 'paste', function( evt ) { var data = evt.data, dataTransfer = data.dataTransfer, filesCount = dataTransfer.getFilesCount(), file, i; if ( data.dataValue || !filesCount ) { return; } for ( i = 0; i < filesCount; i++ ) { file = dataTransfer.getFile( i ); if ( fileTools.isTypeSupported( file, /text\/(plain|html)/ ) ) { var el = new CKEDITOR.dom.element( 'span' ), loader = editor.uploadRepository.create( file ); el.setText( '...' ); loader.load(); fileTools.markElement( el, 'filereader', loader.id ); fileTools.bindNotifications( editor, loader ); data.dataValue += el.getOuterHtml(); } } } ); } } ); } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/0000755000175000017500000000000014006075351021172 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/plugin.js0000755000175000017500000003723414006075351023042 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ /** * @fileOverview Increase and Decrease Indent commands. */ ( function() { 'use strict'; var TRISTATE_DISABLED = CKEDITOR.TRISTATE_DISABLED, TRISTATE_OFF = CKEDITOR.TRISTATE_OFF; CKEDITOR.plugins.add( 'indent', { // jscs:disable maximumLineLength lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength icons: 'indent,indent-rtl,outdent,outdent-rtl', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { var genericDefinition = CKEDITOR.plugins.indent.genericDefinition; // Register generic commands. setupGenericListeners( editor, editor.addCommand( 'indent', new genericDefinition( true ) ) ); setupGenericListeners( editor, editor.addCommand( 'outdent', new genericDefinition() ) ); // Create and register toolbar button if possible. if ( editor.ui.addButton ) { editor.ui.addButton( 'Indent', { label: editor.lang.indent.indent, command: 'indent', directional: true, toolbar: 'indent,20' } ); editor.ui.addButton( 'Outdent', { label: editor.lang.indent.outdent, command: 'outdent', directional: true, toolbar: 'indent,10' } ); } // Register dirChanged listener. editor.on( 'dirChanged', function( evt ) { var range = editor.createRange(), dataNode = evt.data.node; range.setStartBefore( dataNode ); range.setEndAfter( dataNode ); var walker = new CKEDITOR.dom.walker( range ), node; while ( ( node = walker.next() ) ) { if ( node.type == CKEDITOR.NODE_ELEMENT ) { // A child with the defined dir is to be ignored. if ( !node.equals( dataNode ) && node.getDirection() ) { range.setStartAfter( node ); walker = new CKEDITOR.dom.walker( range ); continue; } // Switch alignment classes. var classes = editor.config.indentClasses; if ( classes ) { var suffix = ( evt.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ]; for ( var i = 0; i < classes.length; i++ ) { if ( node.hasClass( classes[ i ] + suffix[ 0 ] ) ) { node.removeClass( classes[ i ] + suffix[ 0 ] ); node.addClass( classes[ i ] + suffix[ 1 ] ); } } } // Switch the margins. var marginLeft = node.getStyle( 'margin-right' ), marginRight = node.getStyle( 'margin-left' ); marginLeft ? node.setStyle( 'margin-left', marginLeft ) : node.removeStyle( 'margin-left' ); marginRight ? node.setStyle( 'margin-right', marginRight ) : node.removeStyle( 'margin-right' ); } } } ); } } ); /** * Global command class definitions and global helpers. * * @class * @singleton */ CKEDITOR.plugins.indent = { /** * A base class for a generic command definition, responsible mainly for creating * Increase Indent and Decrease Indent toolbar buttons as well as for refreshing * UI states. * * Commands of this class do not perform any indentation by themselves. They * delegate this job to content-specific indentation commands (i.e. indentlist). * * @class CKEDITOR.plugins.indent.genericDefinition * @extends CKEDITOR.commandDefinition * @param {CKEDITOR.editor} editor The editor instance this command will be * applied to. * @param {String} name The name of the command. * @param {Boolean} [isIndent] Defines the command as indenting or outdenting. */ genericDefinition: function( isIndent ) { /** * Determines whether the command belongs to the indentation family. * Otherwise it is assumed to be an outdenting command. * * @readonly * @property {Boolean} [=false] */ this.isIndent = !!isIndent; // Mimic naive startDisabled behavior for outdent. this.startDisabled = !this.isIndent; }, /** * A base class for specific indentation command definitions responsible for * handling a pre-defined set of elements i.e. indentlist for lists or * indentblock for text block elements. * * Commands of this class perform indentation operations and modify the DOM structure. * They listen for events fired by {@link CKEDITOR.plugins.indent.genericDefinition} * and execute defined actions. * * **NOTE**: This is not an {@link CKEDITOR.command editor command}. * Context-specific commands are internal, for indentation system only. * * @class CKEDITOR.plugins.indent.specificDefinition * @param {CKEDITOR.editor} editor The editor instance this command will be * applied to. * @param {String} name The name of the command. * @param {Boolean} [isIndent] Defines the command as indenting or outdenting. */ specificDefinition: function( editor, name, isIndent ) { this.name = name; this.editor = editor; /** * An object of jobs handled by the command. Each job consists * of two functions: `refresh` and `exec` as well as the execution priority. * * * The `refresh` function determines whether a job is doable for * a particular context. These functions are executed in the * order of priorities, one by one, for all plugins that registered * jobs. As jobs are related to generic commands, refreshing * occurs when the global command is firing the `refresh` event. * * **Note**: This function must return either {@link CKEDITOR#TRISTATE_DISABLED} * or {@link CKEDITOR#TRISTATE_OFF}. * * * The `exec` function modifies the DOM if possible. Just like * `refresh`, `exec` functions are executed in the order of priorities * while the generic command is executed. This function is not executed * if `refresh` for this job returned {@link CKEDITOR#TRISTATE_DISABLED}. * * **Note**: This function must return a Boolean value, indicating whether it * was successful. If a job was successful, then no other jobs are being executed. * * Sample definition: * * command.jobs = { * // Priority = 20. * '20': { * refresh( editor, path ) { * if ( condition ) * return CKEDITOR.TRISTATE_OFF; * else * return CKEDITOR.TRISTATE_DISABLED; * }, * exec( editor ) { * // DOM modified! This was OK. * return true; * } * }, * // Priority = 60. This job is done later. * '60': { * // Another job. * } * }; * * For additional information, please check comments for * the `setupGenericListeners` function. * * @readonly * @property {Object} [={}] */ this.jobs = {}; /** * Determines whether the editor that the command belongs to has * {@link CKEDITOR.config#enterMode config.enterMode} set to {@link CKEDITOR#ENTER_BR}. * * @readonly * @see CKEDITOR.config#enterMode * @property {Boolean} [=false] */ this.enterBr = editor.config.enterMode == CKEDITOR.ENTER_BR; /** * Determines whether the command belongs to the indentation family. * Otherwise it is assumed to be an outdenting command. * * @readonly * @property {Boolean} [=false] */ this.isIndent = !!isIndent; /** * The name of the global command related to this one. * * @readonly */ this.relatedGlobal = isIndent ? 'indent' : 'outdent'; /** * A keystroke associated with this command (*Tab* or *Shift+Tab*). * * @readonly */ this.indentKey = isIndent ? 9 : CKEDITOR.SHIFT + 9; /** * Stores created markers for the command so they can eventually be * purged after the `exec` function is run. */ this.database = {}; }, /** * Registers content-specific commands as a part of the indentation system * directed by generic commands. Once a command is registered, * it listens for events of a related generic command. * * CKEDITOR.plugins.indent.registerCommands( editor, { * 'indentlist': new indentListCommand( editor, 'indentlist' ), * 'outdentlist': new indentListCommand( editor, 'outdentlist' ) * } ); * * Content-specific commands listen for the generic command's `exec` and * try to execute their own jobs, one after another. If some execution is * successful, `evt.data.done` is set so no more jobs (commands) are involved. * * Content-specific commands also listen for the generic command's `refresh` * and fill the `evt.data.states` object with states of jobs. A generic command * uses this data to determine its own state and to update the UI. * * @member CKEDITOR.plugins.indent * @param {CKEDITOR.editor} editor The editor instance this command is * applied to. * @param {Object} commands An object of {@link CKEDITOR.command}. */ registerCommands: function( editor, commands ) { editor.on( 'pluginsLoaded', function() { for ( var name in commands ) { ( function( editor, command ) { var relatedGlobal = editor.getCommand( command.relatedGlobal ); for ( var priority in command.jobs ) { // Observe generic exec event and execute command when necessary. // If the command was successfully handled by the command and // DOM has been modified, stop event propagation so no other plugin // will bother. Job is done. relatedGlobal.on( 'exec', function( evt ) { if ( evt.data.done ) return; // Make sure that anything this command will do is invisible // for undoManager. What undoManager only can see and // remember is the execution of the global command (relatedGlobal). editor.fire( 'lockSnapshot' ); if ( command.execJob( editor, priority ) ) evt.data.done = true; editor.fire( 'unlockSnapshot' ); // Clean up the markers. CKEDITOR.dom.element.clearAllMarkers( command.database ); }, this, null, priority ); // Observe generic refresh event and force command refresh. // Once refreshed, save command state in event data // so generic command plugin can update its own state and UI. relatedGlobal.on( 'refresh', function( evt ) { if ( !evt.data.states ) evt.data.states = {}; evt.data.states[ command.name + '@' + priority ] = command.refreshJob( editor, priority, evt.data.path ); }, this, null, priority ); } // Since specific indent commands have no UI elements, // they need to be manually registered as a editor feature. editor.addFeature( command ); } )( this, commands[ name ] ); } } ); } }; CKEDITOR.plugins.indent.genericDefinition.prototype = { context: 'p', exec: function() {} }; CKEDITOR.plugins.indent.specificDefinition.prototype = { /** * Executes the content-specific procedure if the context is correct. * It calls the `exec` function of a job of the given `priority` * that modifies the DOM. * * @param {CKEDITOR.editor} editor The editor instance this command * will be applied to. * @param {Number} priority The priority of the job to be executed. * @returns {Boolean} Indicates whether the job was successful. */ execJob: function( editor, priority ) { var job = this.jobs[ priority ]; if ( job.state != TRISTATE_DISABLED ) return job.exec.call( this, editor ); }, /** * Calls the `refresh` function of a job of the given `priority`. * The function returns the state of the job which can be either * {@link CKEDITOR#TRISTATE_DISABLED} or {@link CKEDITOR#TRISTATE_OFF}. * * @param {CKEDITOR.editor} editor The editor instance this command * will be applied to. * @param {Number} priority The priority of the job to be executed. * @returns {Number} The state of the job. */ refreshJob: function( editor, priority, path ) { var job = this.jobs[ priority ]; if ( !editor.activeFilter.checkFeature( this ) ) job.state = TRISTATE_DISABLED; else job.state = job.refresh.call( this, editor, path ); return job.state; }, /** * Checks if the element path contains the element handled * by this indentation command. * * @param {CKEDITOR.dom.elementPath} node A path to be checked. * @returns {CKEDITOR.dom.element} */ getContext: function( path ) { return path.contains( this.context ); } }; /** * Attaches event listeners for this generic command. Since the indentation * system is event-oriented, generic commands communicate with * content-specific commands using the `exec` and `refresh` events. * * Listener priorities are crucial. Different indentation phases * are executed with different priorities. * * For the `exec` event: * * * 0: Selection and bookmarks are saved by the generic command. * * 1-99: Content-specific commands try to indent the code by executing * their own jobs ({@link CKEDITOR.plugins.indent.specificDefinition#jobs}). * * 100: Bookmarks are re-selected by the generic command. * * The visual interpretation looks as follows: * * +------------------+ * | Exec event fired | * +------ + ---------+ * | * 0 -<----------+ Selection and bookmarks saved. * | * | * 25 -<---+ Exec 1st job of plugin#1 (return false, continuing...). * | * | * 50 -<---+ Exec 1st job of plugin#2 (return false, continuing...). * | * | * 75 -<---+ Exec 2nd job of plugin#1 (only if plugin#2 failed). * | * | * 100 -<-----------+ Re-select bookmarks, clean-up. * | * +-------- v ----------+ * | Exec event finished | * +---------------------+ * * For the `refresh` event: * * * <100: Content-specific commands refresh their job states according * to the given path. Jobs save their states in the `evt.data.states` object * passed along with the event. This can be either {@link CKEDITOR#TRISTATE_DISABLED} * or {@link CKEDITOR#TRISTATE_OFF}. * * 100: Command state is determined according to what states * have been returned by content-specific jobs (`evt.data.states`). * UI elements are updated at this stage. * * **Note**: If there is at least one job with the {@link CKEDITOR#TRISTATE_OFF} state, * then the generic command state is also {@link CKEDITOR#TRISTATE_OFF}. Otherwise, * the command state is {@link CKEDITOR#TRISTATE_DISABLED}. * * @param {CKEDITOR.command} command The command to be set up. * @private */ function setupGenericListeners( editor, command ) { var selection, bookmarks; // Set the command state according to content-specific // command states. command.on( 'refresh', function( evt ) { // If no state comes with event data, disable command. var states = [ TRISTATE_DISABLED ]; for ( var s in evt.data.states ) states.push( evt.data.states[ s ] ); this.setState( CKEDITOR.tools.search( states, TRISTATE_OFF ) ? TRISTATE_OFF : TRISTATE_DISABLED ); }, command, null, 100 ); // Initialization. Save bookmarks and mark event as not handled // by any plugin (command) yet. command.on( 'exec', function( evt ) { selection = editor.getSelection(); bookmarks = selection.createBookmarks( 1 ); // Mark execution as not handled yet. if ( !evt.data ) evt.data = {}; evt.data.done = false; }, command, null, 0 ); // Housekeeping. Make sure selectionChange will be called. // Also re-select previously saved bookmarks. command.on( 'exec', function() { editor.forceNextSelectionCheck(); selection.selectBookmarks( bookmarks ); }, command, null, 100 ); } } )(); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/0000755000175000017500000000000014006075351022113 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/bg.js0000644000175000017500000000045714006075351023047 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'bg', { indent: 'Увеличаване на отстъпа', outdent: 'Намаляване на отстъпа' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/cy.js0000644000175000017500000000040514006075351023063 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'cy', { indent: 'Cynyddu\'r Mewnoliad', outdent: 'Lleihau\'r Mewnoliad' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/no.js0000644000175000017500000000036714006075351023073 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'no', { indent: 'Øk innrykk', outdent: 'Reduser innrykk' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/hr.js0000644000175000017500000000037214006075351023064 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'hr', { indent: 'Pomakni udesno', outdent: 'Pomakni ulijevo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/th.js0000644000175000017500000000046414006075351023070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'th', { indent: 'เพิ่มระยะย่อหน้า', outdent: 'ลดระยะย่อหน้า' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ar.js0000644000175000017500000000045514006075351023057 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ar', { indent: 'زيادة المسافة البادئة', outdent: 'إنقاص المسافة البادئة' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/sk.js0000644000175000017500000000040514006075351023065 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'sk', { indent: 'Zväčšiť odsadenie', outdent: 'Zmenšiť odsadenie' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ro.js0000644000175000017500000000037714006075351023100 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ro', { indent: 'Creşte indentarea', outdent: 'Scade indentarea' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/en-ca.js0000644000175000017500000000037614006075351023442 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'en-ca', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ug.js0000644000175000017500000000036514006075351023070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ug', { indent: 'تارايت', outdent: 'كەڭەيت' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/el.js0000644000175000017500000000041714006075351023053 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'el', { indent: 'Αύξηση Εσοχής', outdent: 'Μείωση Εσοχής' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/de.js0000644000175000017500000000037514006075351023046 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'de', { indent: 'Einzug erhöhen', outdent: 'Einzug verringern' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/uk.js0000644000175000017500000000043514006075351023072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'uk', { indent: 'Збільшити відступ', outdent: 'Зменшити відступ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/sr-latn.js0000644000175000017500000000041114006075351024025 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'sr-latn', { indent: 'Uvećaj levu marginu', outdent: 'Smanji levu marginu' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/km.js0000644000175000017500000000051414006075351023060 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'km', { indent: 'បន្ថែមការចូលបន្ទាត់', outdent: 'បន្ថយការចូលបន្ទាត់' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/eu.js0000644000175000017500000000036714006075351023070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'eu', { indent: 'Handitu Koska', outdent: 'Txikitu Koska' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/fa.js0000644000175000017500000000041714006075351023041 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'fa', { indent: 'افزایش تورفتگی', outdent: 'کاهش تورفتگی' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/si.js0000644000175000017500000000050414006075351023063 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'si', { indent: 'අතර පරතරය වැඩිකරන්න', outdent: 'අතර පරතරය අඩුකරන්න' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/en.js0000644000175000017500000000037314006075351023056 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'en', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/he.js0000644000175000017500000000040314006075351023042 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'he', { indent: 'הגדלת הזחה', outdent: 'הקטנת הזחה' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/lt.js0000644000175000017500000000040414006075351023066 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'lt', { indent: 'Padidinti įtrauką', outdent: 'Sumažinti įtrauką' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/lv.js0000644000175000017500000000040214006075351023066 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'lv', { indent: 'Palielināt atkāpi', outdent: 'Samazināt atkāpi' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/eo.js0000644000175000017500000000042214006075351023052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'eo', { indent: 'Pligrandigi Krommarĝenon', outdent: 'Malpligrandigi Krommarĝenon' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ca.js0000644000175000017500000000040014006075351023026 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ca', { indent: 'Augmenta el sagnat', outdent: 'Redueix el sagnat' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/hi.js0000644000175000017500000000046414006075351023055 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'hi', { indent: 'इन्डॅन्ट बढ़ायें', outdent: 'इन्डॅन्ट कम करें' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/mk.js0000644000175000017500000000042114006075351023055 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'mk', { indent: 'Increase Indent', // MISSING outdent: 'Decrease Indent' // MISSING } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/mn.js0000644000175000017500000000042514006075351023064 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'mn', { indent: 'Догол мөр хасах', outdent: 'Догол мөр нэмэх' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/gl.js0000644000175000017500000000040214006075351023047 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'gl', { indent: 'Aumentar a sangría', outdent: 'Reducir a sangría' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ko.js0000644000175000017500000000036514006075351023066 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ko', { indent: '들여쓰기', outdent: '내어쓰기' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/zh.js0000644000175000017500000000036514006075351023076 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'zh', { indent: '增加縮排', outdent: '減少縮排' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/es.js0000644000175000017500000000040014006075351023052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'es', { indent: 'Aumentar Sangría', outdent: 'Disminuir Sangría' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/is.js0000644000175000017500000000037314006075351023067 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'is', { indent: 'Minnka inndrátt', outdent: 'Auka inndrátt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/fo.js0000644000175000017500000000041514006075351023055 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'fo', { indent: 'Økja reglubrotarinntriv', outdent: 'Minka reglubrotarinntriv' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/tt.js0000644000175000017500000000043714006075351023104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'tt', { indent: 'Отступны арттыру', outdent: 'Отступны кечерәйтү' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/it.js0000644000175000017500000000037214006075351023067 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'it', { indent: 'Aumenta rientro', outdent: 'Riduci rientro' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/sv.js0000644000175000017500000000036514006075351023105 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'sv', { indent: 'Öka indrag', outdent: 'Minska indrag' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/gu.js0000644000175000017500000000064614006075351023072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'gu', { indent: 'ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી', outdent: 'ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/tr.js0000644000175000017500000000036514006075351023102 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'tr', { indent: 'Sekme Arttır', outdent: 'Sekme Azalt' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/pl.js0000644000175000017500000000037714006075351023073 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'pl', { indent: 'Zwiększ wcięcie', outdent: 'Zmniejsz wcięcie' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/nb.js0000644000175000017500000000036714006075351023056 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'nb', { indent: 'Øk innrykk', outdent: 'Reduser innrykk' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/sl.js0000644000175000017500000000037214006075351023071 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'sl', { indent: 'Povečaj zamik', outdent: 'Zmanjšaj zamik' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/fi.js0000644000175000017500000000040614006075351023047 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'fi', { indent: 'Suurenna sisennystä', outdent: 'Pienennä sisennystä' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/fr-ca.js0000644000175000017500000000040714006075351023442 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'fr-ca', { indent: 'Augmenter le retrait', outdent: 'Diminuer le retrait' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ru.js0000644000175000017500000000043314006075351023077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ru', { indent: 'Увеличить отступ', outdent: 'Уменьшить отступ' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ka.js0000644000175000017500000000045214006075351023045 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ka', { indent: 'მეტად შეწევა', outdent: 'ნაკლებად შეწევა' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/zh-cn.js0000644000175000017500000000037614006075351023476 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'zh-cn', { indent: '增加缩进量', outdent: '减少缩进量' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/cs.js0000644000175000017500000000040214006075351023052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'cs', { indent: 'Zvětšit odsazení', outdent: 'Zmenšit odsazení' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/pt.js0000644000175000017500000000037514006075351023101 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'pt', { indent: 'Aumentar Avanço', outdent: 'Diminuir Avanço' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/pt-br.js0000644000175000017500000000037414006075351023501 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'pt-br', { indent: 'Aumentar Recuo', outdent: 'Diminuir Recuo' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/et.js0000644000175000017500000000040314006075351023056 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'et', { indent: 'Taande suurendamine', outdent: 'Taande vähendamine' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/da.js0000644000175000017500000000040214006075351023031 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'da', { indent: 'Forøg indrykning', outdent: 'Formindsk indrykning' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/af.js0000644000175000017500000000037714006075351023046 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'af', { indent: 'Vergroot inspring', outdent: 'Verklein inspring' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/hu.js0000644000175000017500000000041014006075351023060 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'hu', { indent: 'Behúzás növelése', outdent: 'Behúzás csökkentése' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/sr.js0000644000175000017500000000044314006075351023076 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'sr', { indent: 'Увећај леву маргину', outdent: 'Смањи леву маргину' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/nl.js0000644000175000017500000000041014006075351023055 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'nl', { indent: 'Inspringing vergroten', outdent: 'Inspringing verkleinen' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/vi.js0000644000175000017500000000037614006075351023075 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'vi', { indent: 'Dịch vào trong', outdent: 'Dịch ra ngoài' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ja.js0000644000175000017500000000040114006075351023036 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ja', { indent: 'インデント', outdent: 'インデント解除' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/id.js0000644000175000017500000000037214006075351023047 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'id', { indent: 'Tingkatkan Lekuk', outdent: 'Kurangi Lekuk' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/en-gb.js0000644000175000017500000000037614006075351023447 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'en-gb', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/sq.js0000644000175000017500000000037214006075351023076 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'sq', { indent: 'Rrite Identin', outdent: 'Zvogëlo Identin' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/bn.js0000644000175000017500000000044414006075351023052 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'bn', { indent: 'ইনডেন্ট বাড়াও', outdent: 'ইনডেন্ট কমাও' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/en-au.js0000644000175000017500000000037614006075351023464 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'en-au', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ku.js0000644000175000017500000000043714006075351023074 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ku', { indent: 'زیادکردنی بۆشایی', outdent: 'کەمکردنەوەی بۆشایی' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/ms.js0000644000175000017500000000037314006075351023073 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'ms', { indent: 'Tambahkan Inden', outdent: 'Kurangkan Inden' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/fr.js0000644000175000017500000000043614006075351023063 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'fr', { indent: 'Augmenter le retrait (tabulation)', outdent: 'Diminuer le retrait (tabulation)' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/lang/bs.js0000644000175000017500000000036514006075351023061 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'indent', 'bs', { indent: 'Poveæaj uvod', outdent: 'Smanji uvod' } ); rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/dev/0000755000175000017500000000000014006075351021750 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/dev/indent.html0000644000175000017500000001323714006075351024125 0ustar domdom Indent DEV sample

      Indent DEV sample

      List & Block

      • 
        		

      Indent classes

      • 
        		

      List only

      • 
        		

      Block only

      • 
        		

      CKEDITOR.ENTER_BR

      • 
        		
      rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/0000755000175000017500000000000014006075351022305 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/indent.png0000644000175000017500000000130714006075351024275 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8˅@Y7c9O6=@s@ Ч zZ{wHAPq-lj6pw4蛟'777`!ڶp8ڇ4%sDzMYmc Z18{vc9c,#"Dd:n>9$cL8دAD$HhuY&IbA=v9MemFo"! C!i~x|>ozt[۶,Km(bfiv[=y7e%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/indent-rtl.png0000644000175000017500000000132614006075351025075 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8˅SnA} H\r-?%Br Y S>;JKuRuMsU"{ j.l>hc DgA ZyZ,K1ysL"8'IVU%mcZd11Y n,K_Byq{0qI᳤m=ȲfQ{$ahwƘb|rsnJ̒9`\__sqqkW16M뺷]cb>g*2Eq_<߬Ԍ%tEXtdate:create2013-07-04T17:03:03+02:00Mx%tEXtdate:modify2013-07-04T17:03:03+02:00<tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/0000755000175000017500000000000014006075351023402 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/indent.png0000644000175000017500000000304514006075351025373 0ustar domdomPNG  IHDR szzbKGD pHYs B(x>IDATXŗKU{oUktƀFh"Ν+ CbZbpƥWLHHJ! L3LWMuO^UaNR9uO?=%OL;H̦RJRH!!Zkt2`6Kq5x2ZP?%%cc?ךMX:u)%IǁlvI b=譱1m 2v, %yrl,~0[ pu5nfǶI6Fkd"1f% |xRr4ٱρ/FG;7}%%Et{t Zepr[1ύp{zuavzLD0 ՃB3<׮1b15wsw |e1<1}p׷̻.%͢Tl\{2ꓱH#RJT ӧhcH `u["{'&KKB`R^Z.lqH'YU:JJDmKTs-H eR˱m'bc󵙙14()7āL2@:FZJQ[R)ccovûvqmr33={>4I6^N\,&X{qdIG34s oq"/_@H%JQ,O1XAF/L&Сώ/\trҥ2:#aXl@W ~bh(~]gRp~qL&ҁM-+u N6 Cݾm[{<ۖ@8۲67ZTrr"C:NTO0gQ] uTERJ`~ZklߎHpv X\Upzy74 ' QHV@cy`ju+:|[:k{2yy 58ȊF>$yb,!LEPKR,GG@YΝzErP<t9+Vå5<ຘAО .ZujG3&Z)Ʋ9sj8 r@\ mՖ1ێ6SRÇ 3 JI>kzC.t[]Οxjo}\&m8BkJpxvna'hҸR%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/indent-rtl.png0000644000175000017500000000311214006075351026165 0ustar domdomPNG  IHDR szzbKGD pHYs B(xcIDATXŗKQU]v,"Kh`"xaA |$Cd)h, F"/`DL$1"Ğ3]]U]U]<{ϖ.Nwa*@kxZkV 5f# Gpժ8 @}-TJOϜyzuuu%4J)D[R;!"V ǏkA^9bDZ^M@ae$ b4BF8 tM`Zk☩s疁Gɕ+MTvZgϾ\,@ܹ/_~6 glIZxڵk<DŽ!sE1M(",C&TuαFWZHQ(/zLj~E\l/'}[O(ʄ276,@ktr7~G#txr|=9R0gRD67.\x{i4`'R h["jM=ĶxZЊc^,Ë*e6hQ"iK9\Q`VY|}/FΕWrāNVD(mh@dZ)qihSss?fg_AC~r?I&=;);,Jĺv_:ߝ_XFuꔛia_c5;uU\V=(Y2yia =7?f.ϱŸ~w%ْΑt{.޽{񹹙(NI6,.^ZM 5/7G7~ ^KU90r|k(]'+꯮r3h4v@uɉXukLv:Z^/ xfD= 8E{rw% A@MX\|R;LD65Ь8Uq`|hi1q""le[-Pj~s@>cL՚n?T\ZUp~\uګx^ 8WQ]Pe<[kkkQ\/ 꾢?/^,_6qA. $j7b}>)tG(Kc8⋮$+;w$ 0m4A;n$k +PƐ$ߦ!^JcMsmdl c+xM\Ρ߆{IpW'`v-v{]u_%^j4;I)ֹmFkZ:ON>DQUcPJmF12NA ^tm8xf?x9(Aŋg0.^<&Ѿ+ZSJaHƏ";'yF@+5 TjÐf5n8M 툔0hQ"il ue>ZlyZ ;1Aow[;fFDKoRN(4FQC@c^g+rmYMt٫WVSSo^n\_#EE ntJZ0U GQ_c8z3ȲBп|~|`߾J#qLNN`p[:Z׏?&7ωRkk(4qq:v(ppIi4(;ʁ}@gvRQ,[>" ]ro['.5P]xƺy@',#OGi&N/~Smqf膲^p=R e q'x` ~4,b_40p'k8fL?>6 wg߆9zq 0KN? ձm%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/outdent.png0000644000175000017500000000307614006075351025600 0ustar domdomPNG  IHDR szzbKGD pHYs B(xWIDATXŗߋU?GUWUwFEtC2.$o./d!!8AQ,B!, =aCUu&NfX=P}o|)uuu3z:`h1{V$QD`s8$q?'hM٤}wee$l3B)Eh Ͼ‹^LU<@ yoRhJZ[)>p/s,9JSI(P@19 H ZqLE2EHc |8r`W==5^So-/ d嗋< O,F=s.Z92W9?/^2d9s~:}ܤ(~ ^2c=d2yӸ0E9_]Q#"ӷWz29jkcIw'OG7\:q HZ-*ynRPṜ<{v& Fh]PJaE=[[YA% @iR JT5^}FrAI5E4f;&ERf/`ܴ~E]պ+ccsy8w0 {?!V+E+|0Z\q /Be G#t/25b6In5(B--}=;Y^E<. eEu;i`ؾ_^"BQC(QÌF{~z"Ε{ZxWw7oEQo?W8_6o݋hq޳f4ә3A" G#oy?ׯ}ă.ͲvmQWE)}7>`UD^|rܷQ0aH݆JSY[g.=u0$hױcKGDŽIiK?P4|_~՚m4P{pF6& QTH-'<f(nR J}Ўcp]T> _XT>f[[R k-V[oM?@; zvcn4hYZ*@E#A0@msތ+#vsVy,(y@23gj7Ν#_r40`y 2|dWH#4,ZzPD E„ayX=Zط=ロ5)sm[[Ӵ>6Q7)A@X̀m7pxm:4c[vJJG2.9WN/h ]S|: _ )?~¨%tEXtdate:create2013-06-20T11:07:04+02:00I%tEXtdate:modify2013-06-20T11:07:04+02:00tEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/ckeditor-src/plugins/indent/icons/outdent.png0000644000175000017500000000127314006075351024500 0ustar domdomPNG  IHDRabKGD pHYs B(xIDAT8˅Ao@]"$js+Pʡb@`-z*+웙7oL|<1Xk1" I\:ɥZx !B xXkb!I,{ !v3IZKxruuE8羦ix<sVA,-sh4 )xX6vmwa8nueɅūCb!~>SEUu]ik-I;P', elementDefinition.label, '', '' ); } else { var hboxDefinition = { type: 'hbox', widths: elementDefinition.widths, padding: 0, children: [ { type: 'html', html: '' }, { type: 'html', html: '' + contentHtml.call( this, dialog, elementDefinition ) + '' } ] }; CKEDITOR.dialog._.uiElementBuilders.hbox.build( dialog, hboxDefinition, html ); } return html.join( '' ); }; var attributes = { role: elementDefinition.role || 'presentation' }; if ( elementDefinition.includeLabel ) attributes[ 'aria-labelledby' ] = _.labelId; CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'div', null, attributes, innerHTML ); }, /** * A text input with a label. This UI element class represents both the * single-line text inputs and password inputs in dialog boxes. * * @class CKEDITOR.ui.dialog.textInput * @extends CKEDITOR.ui.dialog.labeledElement * @constructor Creates a textInput class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `default` (Optional) The default value. * * `validate` (Optional) The validation function. * * `maxLength` (Optional) The maximum length of text box contents. * * `size` (Optional) The size of the text box. This is * usually overridden by the size defined by the skin, though. * * @param {Array} htmlList List of HTML code to output to. */ textInput: function( dialog, elementDefinition, htmlList ) { if ( arguments.length < 3 ) return; initPrivateObject.call( this, elementDefinition ); var domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textInput', attributes = { 'class': 'cke_dialog_ui_input_' + elementDefinition.type, id: domId, type: elementDefinition.type }; // Set the validator, if any. if ( elementDefinition.validate ) this.validate = elementDefinition.validate; // Set the max length and size. if ( elementDefinition.maxLength ) attributes.maxlength = elementDefinition.maxLength; if ( elementDefinition.size ) attributes.size = elementDefinition.size; if ( elementDefinition.inputStyle ) attributes.style = elementDefinition.inputStyle; // If user presses Enter in a text box, it implies clicking OK for the dialog. var me = this, keyPressedOnMe = false; dialog.on( 'load', function() { me.getInputElement().on( 'keydown', function( evt ) { if ( evt.data.getKeystroke() == 13 ) keyPressedOnMe = true; } ); // Lower the priority this 'keyup' since 'ok' will close the dialog.(#3749) me.getInputElement().on( 'keyup', function( evt ) { if ( evt.data.getKeystroke() == 13 && keyPressedOnMe ) { dialog.getButton( 'ok' ) && setTimeout( function() { dialog.getButton( 'ok' ).click(); }, 0 ); keyPressedOnMe = false; } if ( me.bidi ) toggleBidiKeyUpHandler.call( me, evt ); }, null, null, 1000 ); } ); var innerHTML = function() { // IE BUG: Text input fields in IE at 100% would exceed a or inline // container's width, so need to wrap it inside a
      . var html = [ '' ); return html.join( '' ); }; CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); }, /** * A text area with a label at the top or on the left. * * @class CKEDITOR.ui.dialog.textarea * @extends CKEDITOR.ui.dialog.labeledElement * @constructor Creates a textarea class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * * The element definition. Accepted fields: * * * `rows` (Optional) The number of rows displayed. * Defaults to 5 if not defined. * * `cols` (Optional) The number of cols displayed. * Defaults to 20 if not defined. Usually overridden by skins. * * `default` (Optional) The default value. * * `validate` (Optional) The validation function. * * @param {Array} htmlList List of HTML code to output to. */ textarea: function( dialog, elementDefinition, htmlList ) { if ( arguments.length < 3 ) return; initPrivateObject.call( this, elementDefinition ); var me = this, domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textarea', attributes = {}; if ( elementDefinition.validate ) this.validate = elementDefinition.validate; // Generates the essential attributes for the textarea tag. attributes.rows = elementDefinition.rows || 5; attributes.cols = elementDefinition.cols || 20; attributes[ 'class' ] = 'cke_dialog_ui_input_textarea ' + ( elementDefinition[ 'class' ] || '' ); if ( typeof elementDefinition.inputStyle != 'undefined' ) attributes.style = elementDefinition.inputStyle; if ( elementDefinition.dir ) attributes.dir = elementDefinition.dir; if ( me.bidi ) { dialog.on( 'load', function() { me.getInputElement().on( 'keyup', toggleBidiKeyUpHandler ); }, me ); } var innerHTML = function() { attributes[ 'aria-labelledby' ] = this._.labelId; this._.required && ( attributes[ 'aria-required' ] = this._.required ); var html = [ '' ); return html.join( '' ); }; CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); }, /** * A single checkbox with a label on the right. * * @class CKEDITOR.ui.dialog.checkbox * @extends CKEDITOR.ui.dialog.uiElement * @constructor Creates a checkbox class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `checked` (Optional) Whether the checkbox is checked * on instantiation. Defaults to `false`. * * `validate` (Optional) The validation function. * * `label` (Optional) The checkbox label. * * @param {Array} htmlList List of HTML code to output to. */ checkbox: function( dialog, elementDefinition, htmlList ) { if ( arguments.length < 3 ) return; var _ = initPrivateObject.call( this, elementDefinition, { 'default': !!elementDefinition[ 'default' ] } ); if ( elementDefinition.validate ) this.validate = elementDefinition.validate; var innerHTML = function() { var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition, { id: elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextId() + '_checkbox' }, true ), html = []; var labelId = CKEDITOR.tools.getNextId() + '_label'; var attributes = { 'class': 'cke_dialog_ui_checkbox_input', type: 'checkbox', 'aria-labelledby': labelId }; cleanInnerDefinition( myDefinition ); if ( elementDefinition[ 'default' ] ) attributes.checked = 'checked'; if ( typeof myDefinition.inputStyle != 'undefined' ) myDefinition.style = myDefinition.inputStyle; _.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes ); html.push( ' ' ); return html.join( '' ); }; CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'span', null, null, innerHTML ); }, /** * A group of radio buttons. * * @class CKEDITOR.ui.dialog.radio * @extends CKEDITOR.ui.dialog.labeledElement * @constructor Creates a radio class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `default` (Required) The default value. * * `validate` (Optional) The validation function. * * `items` (Required) An array of options. Each option * is a one- or two-item array of format `[ 'Description', 'Value' ]`. If `'Value'` * is missing, then the value would be assumed to be the same as the description. * * @param {Array} htmlList List of HTML code to output to. */ radio: function( dialog, elementDefinition, htmlList ) { if ( arguments.length < 3 ) return; initPrivateObject.call( this, elementDefinition ); if ( !this._[ 'default' ] ) this._[ 'default' ] = this._.initValue = elementDefinition.items[ 0 ][ 1 ]; if ( elementDefinition.validate ) this.validate = elementDefinition.validate; var children = [], me = this; var innerHTML = function() { var inputHtmlList = [], html = [], commonName = ( elementDefinition.id ? elementDefinition.id : CKEDITOR.tools.getNextId() ) + '_radio'; for ( var i = 0; i < elementDefinition.items.length; i++ ) { var item = elementDefinition.items[ i ], title = item[ 2 ] !== undefined ? item[ 2 ] : item[ 0 ], value = item[ 1 ] !== undefined ? item[ 1 ] : item[ 0 ], inputId = CKEDITOR.tools.getNextId() + '_radio_input', labelId = inputId + '_label', inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition, { id: inputId, title: null, type: null }, true ), labelDefinition = CKEDITOR.tools.extend( {}, inputDefinition, { title: title }, true ), inputAttributes = { type: 'radio', 'class': 'cke_dialog_ui_radio_input', name: commonName, value: value, 'aria-labelledby': labelId }, inputHtml = []; if ( me._[ 'default' ] == value ) inputAttributes.checked = 'checked'; cleanInnerDefinition( inputDefinition ); cleanInnerDefinition( labelDefinition ); if ( typeof inputDefinition.inputStyle != 'undefined' ) inputDefinition.style = inputDefinition.inputStyle; // Make inputs of radio type focusable (#10866). inputDefinition.keyboardFocusable = true; children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) ); inputHtml.push( ' ' ); new CKEDITOR.ui.dialog.uiElement( dialog, labelDefinition, inputHtml, 'label', null, { id: labelId, 'for': inputAttributes.id }, item[ 0 ] ); inputHtmlList.push( inputHtml.join( '' ) ); } new CKEDITOR.ui.dialog.hbox( dialog, children, inputHtmlList, html ); return html.join( '' ); }; // Adding a role="radiogroup" to definition used for wrapper. elementDefinition.role = 'radiogroup'; elementDefinition.includeLabel = true; CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); this._.children = children; }, /** * A button with a label inside. * * @class CKEDITOR.ui.dialog.button * @extends CKEDITOR.ui.dialog.uiElement * @constructor Creates a button class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `label` (Required) The button label. * * `disabled` (Optional) Set to `true` if you want the * button to appear in the disabled state. * * @param {Array} htmlList List of HTML code to output to. */ button: function( dialog, elementDefinition, htmlList ) { if ( !arguments.length ) return; if ( typeof elementDefinition == 'function' ) elementDefinition = elementDefinition( dialog.getParentEditor() ); initPrivateObject.call( this, elementDefinition, { disabled: elementDefinition.disabled || false } ); // Add OnClick event to this input. CKEDITOR.event.implementOn( this ); var me = this; // Register an event handler for processing button clicks. dialog.on( 'load', function() { var element = this.getElement(); ( function() { element.on( 'click', function( evt ) { me.click(); // #9958 evt.data.preventDefault(); } ); element.on( 'keydown', function( evt ) { if ( evt.data.getKeystroke() in { 32: 1 } ) { me.click(); evt.data.preventDefault(); } } ); } )(); element.unselectable(); }, this ); var outerDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); delete outerDefinition.style; var labelId = CKEDITOR.tools.getNextId() + '_label'; CKEDITOR.ui.dialog.uiElement.call( this, dialog, outerDefinition, htmlList, 'a', null, { style: elementDefinition.style, href: 'javascript:void(0)', // jshint ignore:line title: elementDefinition.label, hidefocus: 'true', 'class': elementDefinition[ 'class' ], role: 'button', 'aria-labelledby': labelId }, '' + CKEDITOR.tools.htmlEncode( elementDefinition.label ) + '' ); }, /** * A select box. * * @class CKEDITOR.ui.dialog.select * @extends CKEDITOR.ui.dialog.uiElement * @constructor Creates a button class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `default` (Required) The default value. * * `validate` (Optional) The validation function. * * `items` (Required) An array of options. Each option * is a one- or two-item array of format `[ 'Description', 'Value' ]`. If `'Value'` * is missing, then the value would be assumed to be the same as the * description. * * `multiple` (Optional) Set this to `true` if you would like * to have a multiple-choice select box. * * `size` (Optional) The number of items to display in * the select box. * * @param {Array} htmlList List of HTML code to output to. */ select: function( dialog, elementDefinition, htmlList ) { if ( arguments.length < 3 ) return; var _ = initPrivateObject.call( this, elementDefinition ); if ( elementDefinition.validate ) this.validate = elementDefinition.validate; _.inputId = CKEDITOR.tools.getNextId() + '_select'; var innerHTML = function() { var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition, { id: ( elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextId() + '_select' ) }, true ), html = [], innerHTML = [], attributes = { 'id': _.inputId, 'class': 'cke_dialog_ui_input_select', 'aria-labelledby': this._.labelId }; html.push( '' ); return html.join( '' ); }; CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); }, /** * A file upload input. * * @class CKEDITOR.ui.dialog.file * @extends CKEDITOR.ui.dialog.labeledElement * @constructor Creates a file class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `validate` (Optional) The validation function. * * @param {Array} htmlList List of HTML code to output to. */ file: function( dialog, elementDefinition, htmlList ) { if ( arguments.length < 3 ) return; if ( elementDefinition[ 'default' ] === undefined ) elementDefinition[ 'default' ] = ''; var _ = CKEDITOR.tools.extend( initPrivateObject.call( this, elementDefinition ), { definition: elementDefinition, buttons: [] } ); if ( elementDefinition.validate ) this.validate = elementDefinition.validate; /** @ignore */ var innerHTML = function() { _.frameId = CKEDITOR.tools.getNextId() + '_fileInput'; var html = [ '' ); return html.join( '' ); }; // IE BUG: Parent container does not resize to contain the iframe automatically. dialog.on( 'load', function() { var iframe = CKEDITOR.document.getById( _.frameId ), contentDiv = iframe.getParent(); contentDiv.addClass( 'cke_dialog_ui_input_file' ); } ); CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); }, /** * A button for submitting the file in a file upload input. * * @class CKEDITOR.ui.dialog.fileButton * @extends CKEDITOR.ui.dialog.button * @constructor Creates a fileButton class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `for` (Required) The file input's page and element ID * to associate with, in a two-item array format: `[ 'page_id', 'element_id' ]`. * * `validate` (Optional) The validation function. * * @param {Array} htmlList List of HTML code to output to. */ fileButton: function( dialog, elementDefinition, htmlList ) { var me = this; if ( arguments.length < 3 ) return; initPrivateObject.call( this, elementDefinition ); if ( elementDefinition.validate ) this.validate = elementDefinition.validate; var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); var onClick = myDefinition.onClick; myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button'; myDefinition.onClick = function( evt ) { var target = elementDefinition[ 'for' ]; // [ pageId, elementId ] if ( !onClick || onClick.call( this, evt ) !== false ) { dialog.getContentElement( target[ 0 ], target[ 1 ] ).submit(); this.disable(); } }; dialog.on( 'load', function() { dialog.getContentElement( elementDefinition[ 'for' ][ 0 ], elementDefinition[ 'for' ][ 1 ] )._.buttons.push( me ); } ); CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList ); }, html: ( function() { var myHtmlRe = /^\s*<[\w:]+\s+([^>]*)?>/, theirHtmlRe = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/, emptyTagRe = /\/$/; /** * A dialog window element made from raw HTML code. * * @class CKEDITOR.ui.dialog.html * @extends CKEDITOR.ui.dialog.uiElement * @constructor Creates a html class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition. * Accepted fields: * * * `html` (Required) HTML code of this element. * * @param {Array} htmlList List of HTML code to be added to the dialog's content area. */ return function( dialog, elementDefinition, htmlList ) { if ( arguments.length < 3 ) return; var myHtmlList = [], myHtml, theirHtml = elementDefinition.html, myMatch, theirMatch; // If the HTML input doesn't contain any tags at the beginning, add a tag around it. if ( theirHtml.charAt( 0 ) != '<' ) theirHtml = '' + theirHtml + ''; // Look for focus function in definition. var focus = elementDefinition.focus; if ( focus ) { var oldFocus = this.focus; this.focus = function() { ( typeof focus == 'function' ? focus : oldFocus ).call( this ); this.fire( 'focus' ); }; if ( elementDefinition.isFocusable ) { var oldIsFocusable = this.isFocusable; this.isFocusable = oldIsFocusable; } this.keyboardFocusable = true; } CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' ); // Append the attributes created by the uiElement call to the real HTML. myHtml = myHtmlList.join( '' ); myMatch = myHtml.match( myHtmlRe ); theirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ]; if ( emptyTagRe.test( theirMatch[ 1 ] ) ) { theirMatch[ 1 ] = theirMatch[ 1 ].slice( 0, -1 ); theirMatch[ 2 ] = '/' + theirMatch[ 2 ]; } htmlList.push( [ theirMatch[ 1 ], ' ', myMatch[ 1 ] || '', theirMatch[ 2 ] ].join( '' ) ); }; } )(), /** * Form fieldset for grouping dialog UI elements. * * @class CKEDITOR.ui.dialog.fieldset * @extends CKEDITOR.ui.dialog.uiElement * @constructor Creates a fieldset class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {Array} childObjList * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. * @param {Array} childHtmlList Array of HTML code that corresponds to the HTML output of all the * objects in childObjList. * @param {Array} htmlList Array of HTML code that this element will output to. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `label` (Optional) The legend of the this fieldset. * * `children` (Required) An array of dialog window field definitions which will be grouped inside this fieldset. * */ fieldset: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { var legendLabel = elementDefinition.label; /** @ignore */ var innerHTML = function() { var html = []; legendLabel && html.push( '' + legendLabel + '' ); for ( var i = 0; i < childHtmlList.length; i++ ) html.push( childHtmlList[ i ] ); return html.join( '' ); }; this._ = { children: childObjList }; CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'fieldset', null, null, innerHTML ); } }, true ); CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement(); /** @class CKEDITOR.ui.dialog.labeledElement */ CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { /** * Sets the label text of the element. * * @param {String} label The new label text. * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element. */ setLabel: function( label ) { var node = CKEDITOR.document.getById( this._.labelId ); if ( node.getChildCount() < 1 ) ( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node ); else node.getChild( 0 ).$.nodeValue = label; return this; }, /** * Retrieves the current label text of the elment. * * @returns {String} The current label text. */ getLabel: function() { var node = CKEDITOR.document.getById( this._.labelId ); if ( !node || node.getChildCount() < 1 ) return ''; else return node.getChild( 0 ).getText(); }, /** * Defines the `onChange` event for UI element definitions. * @property {Object} */ eventProcessors: commonEventProcessors }, true ); /** @class CKEDITOR.ui.dialog.button */ CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { /** * Simulates a click to the button. * * @returns {Object} Return value of the `click` event. */ click: function() { if ( !this._.disabled ) return this.fire( 'click', { dialog: this._.dialog } ); return false; }, /** * Enables the button. */ enable: function() { this._.disabled = false; var element = this.getElement(); element && element.removeClass( 'cke_disabled' ); }, /** * Disables the button. */ disable: function() { this._.disabled = true; this.getElement().addClass( 'cke_disabled' ); }, /** * Checks whether a field is visible. * * @returns {Boolean} */ isVisible: function() { return this.getElement().getFirst().isVisible(); }, /** * Checks whether a field is enabled. Fields can be disabled by using the * {@link #disable} method and enabled by using the {@link #enable} method. * * @returns {Boolean} */ isEnabled: function() { return !this._.disabled; }, /** * Defines the `onChange` event and `onClick` for button element definitions. * * @property {Object} */ eventProcessors: CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { onClick: function( dialog, func ) { this.on( 'click', function() { func.apply( this, arguments ); } ); } }, true ), /** * Handler for the element's access key up event. Simulates a click to * the button. */ accessKeyUp: function() { this.click(); }, /** * Handler for the element's access key down event. Simulates a mouse * down to the button. */ accessKeyDown: function() { this.focus(); }, keyboardFocusable: true }, true ); /** @class CKEDITOR.ui.dialog.textInput */ CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), { /** * Gets the text input DOM element under this UI object. * * @returns {CKEDITOR.dom.element} The DOM element of the text input. */ getInputElement: function() { return CKEDITOR.document.getById( this._.inputId ); }, /** * Puts focus into the text input. */ focus: function() { var me = this.selectParentTab(); // GECKO BUG: setTimeout() is needed to workaround invisible selections. setTimeout( function() { var element = me.getInputElement(); element && element.$.focus(); }, 0 ); }, /** * Selects all the text in the text input. */ select: function() { var me = this.selectParentTab(); // GECKO BUG: setTimeout() is needed to workaround invisible selections. setTimeout( function() { var e = me.getInputElement(); if ( e ) { e.$.focus(); e.$.select(); } }, 0 ); }, /** * Handler for the text input's access key up event. Makes a `select()` * call to the text input. */ accessKeyUp: function() { this.select(); }, /** * Sets the value of this text input object. * * uiElement.setValue( 'Blamo' ); * * @param {Object} value The new value. * @returns {CKEDITOR.ui.dialog.textInput} The current UI element. */ setValue: function( value ) { if ( this.bidi ) { var marker = value && value.charAt( 0 ), dir = ( marker == '\u202A' ? 'ltr' : marker == '\u202B' ? 'rtl' : null ); if ( dir ) { value = value.slice( 1 ); } // Set the marker or reset it (if dir==null). this.setDirectionMarker( dir ); } if ( !value ) { value = ''; } return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments ); }, /** * Gets the value of this text input object. * * @returns {String} The value. */ getValue: function() { var value = CKEDITOR.ui.dialog.uiElement.prototype.getValue.call( this ); if ( this.bidi && value ) { var dir = this.getDirectionMarker(); if ( dir ) { value = ( dir == 'ltr' ? '\u202A' : '\u202B' ) + value; } } return value; }, /** * Sets the text direction marker and the `dir` attribute of the input element. * * @since 4.5 * @param {String} dir The text direction. Pass `null` to reset. */ setDirectionMarker: function( dir ) { var inputElement = this.getInputElement(); if ( dir ) { inputElement.setAttributes( { dir: dir, 'data-cke-dir-marker': dir } ); // Don't remove the dir attribute if this field hasn't got the marker, // because the dir attribute could be set independently. } else if ( this.getDirectionMarker() ) { inputElement.removeAttributes( [ 'dir', 'data-cke-dir-marker' ] ); } }, /** * Gets the value of the text direction marker. * * @since 4.5 * @returns {String} `'ltr'`, `'rtl'` or `null` if the marker is not set. */ getDirectionMarker: function() { return this.getInputElement().data( 'cke-dir-marker' ); }, keyboardFocusable: true }, commonPrototype, true ); CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput(); /** @class CKEDITOR.ui.dialog.select */ CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), { /** * Gets the DOM element of the select box. * * @returns {CKEDITOR.dom.element} The `` element of this file input. * * @returns {CKEDITOR.dom.element} The file input element. */ getInputElement: function() { var frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument(); return frameDocument.$.forms.length > 0 ? new CKEDITOR.dom.element( frameDocument.$.forms[ 0 ].elements[ 0 ] ) : this.getElement(); }, /** * Uploads the file in the file input. * * @returns {CKEDITOR.ui.dialog.file} This object. */ submit: function() { this.getInputElement().getParent().$.submit(); return this; }, /** * Gets the action assigned to the form. * * @returns {String} The value of the action. */ getAction: function() { return this.getInputElement().getParent().$.action; }, /** * The events must be applied to the inner input element, and * this must be done when the iframe and form have been loaded. */ registerEvents: function( definition ) { var regex = /^on([A-Z]\w+)/, match; var registerDomEvent = function( uiElement, dialog, eventName, func ) { uiElement.on( 'formLoaded', function() { uiElement.getInputElement().on( eventName, func, uiElement ); } ); }; for ( var i in definition ) { if ( !( match = i.match( regex ) ) ) continue; if ( this.eventProcessors[ i ] ) this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); else registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); } return this; }, /** * Redraws the file input and resets the file path in the file input. * The redrawing logic is necessary because non-IE browsers tend to clear * the `'; return str; }; NS.setIframe = function(that, nameTab) { var iframe, str = NS.framesetHtml(nameTab), iframeId = NS.iframeNumber + '_' + nameTab, // tmp.html from wsc/dialogs iframeInnerHtml = '' + '' + '' + '' + 'iframe' + '' + '' + '' + '
      ' + '' + '' + '' + '' + '' + '' + ''; that.getElement().setHtml(str); iframe = document.getElementById(iframeId); iframe = (iframe.contentWindow) ? iframe.contentWindow : (iframe.contentDocument.document) ? iframe.contentDocument.document : iframe.contentDocument; iframe.document.open(); iframe.document.write(iframeInnerHtml); iframe.document.close(); NS.div_overlay.setEnable(); iframeOnload = true; }; NS.setCurrentIframe = function(currentTab) { var that = NS.dialog._.contents[currentTab].Content, tabID, iframe; NS.setIframe(that, currentTab); }; NS.setHeightBannerFrame = function() { var height = "90px", bannerPlaceSpellTab = NS.dialog.getContentElement('SpellTab', 'banner').getElement(), bannerPlaceGrammTab = NS.dialog.getContentElement('GrammTab', 'banner').getElement(), bannerPlaceThesaurus = NS.dialog.getContentElement('Thesaurus', 'banner').getElement(); bannerPlaceSpellTab.setStyle('height', height); bannerPlaceGrammTab.setStyle('height', height); bannerPlaceThesaurus.setStyle('height', height); }; NS.setHeightFrame = function() { var currentTab = NS.dialog._.currentTabId, tabID = NS.iframeNumber + '_' + currentTab, iframe = document.getElementById(tabID); iframe.style.height = '240px'; }; NS.sendData = function(scope) { var currentTab = scope._.currentTabId, that = scope._.contents[currentTab].Content, tabID, iframe; NS.previousTab = currentTab; NS.setIframe(that, currentTab); var loadNewTab = function(event) { currentTab = scope._.currentTabId; event = event || window.event; if (!event.data.getTarget().is('a')) { return; } if(currentTab === NS.previousTab) return; NS.previousTab = currentTab; that = scope._.contents[currentTab].Content; tabID = NS.iframeNumber + '_' + currentTab; NS.div_overlay.setEnable(); if (!that.getElement().getChildCount()) { NS.setIframe(that, currentTab); iframe = document.getElementById(tabID); NS.targetFromFrame[tabID] = iframe.contentWindow; } else { sendData(NS.targetFromFrame[tabID], NS.cmd[currentTab]); } }; scope.parts.tabs.removeListener('click', loadNewTab); scope.parts.tabs.on('click', loadNewTab); }; NS.buildSelectLang = function(aId) { var divContainer = new CKEDITOR.dom.element('div'), selectContainer = new CKEDITOR.dom.element('select'), id = "wscLang" + aId; divContainer.addClass("cke_dialog_ui_input_select"); divContainer.setAttribute("role", "presentation"); divContainer.setStyles({ 'height': 'auto', 'position': 'absolute', 'right': '0', 'top': '-1px', 'width': '160px', 'white-space': 'normal' }); selectContainer.setAttribute('id', id); selectContainer.addClass("cke_dialog_ui_input_select"); selectContainer.setStyles({ 'width': '160px' }); var currentTabId = NS.dialog._.currentTabId, frameId = NS.iframeNumber + '_' + currentTabId; divContainer.append(selectContainer); return divContainer; }; NS.buildOptionLang = function(key, aId) { var id = "wscLang" + aId; var select = document.getElementById(id), fragment = document.createDocumentFragment(), create_option, txt_option, sort = []; if(select.options.length === 0) { for (var lang in key) { sort.push([lang, key[lang]]); } sort.sort(); for (var i = 0; i < sort.length; i++) { create_option=document.createElement("option"); create_option.setAttribute("value", sort[i][1]); txt_option = document.createTextNode(sort[i][0]); create_option.appendChild(txt_option); fragment.appendChild(create_option); } select.appendChild(fragment); } // make appropriate option selected according to current selected language for (var j = 0; j < select.options.length; j++) { if (select.options[j].value == NS.selectingLang) { select.options[j].selected = "selected"; } } }; NS.buildOptionSynonyms = function(key) { var syn = NS.selectNodeResponce[key]; var select = getSelect( NS.selectNode['Synonyms'] ); NS.selectNode['Synonyms'].clear(); for (var i = 0; i < syn.length; i++) { var option = document.createElement('option'); option.text = syn[i]; option.value = syn[i]; select.$.add(option, i); } NS.selectNode['Synonyms'].getInputElement().$.firstChild.selected = true; NS.textNode['Thesaurus'].setValue(NS.selectNode['Synonyms'].getInputElement().getValue()); }; var setBannerInPlace = function(htmlBanner) { var findBannerPlace = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'banner').getElement(); findBannerPlace.setHtml(htmlBanner); }; var overlayBlock = function overlayBlock(opt) { var progress = opt.progress || "", doc = document, target = opt.target || doc.body, overlayId = opt.id || "overlayBlock", opacity = opt.opacity || "0.9", background = opt.background || "#f1f1f1", getOverlay = doc.getElementById(overlayId), thisOverlay = getOverlay || doc.createElement("div"); thisOverlay.style.cssText = "position: absolute;" + "top:30px;" + "bottom:41px;" + "left:1px;" + "right:1px;" + "z-index: 10020;" + "padding:0;" + "margin:0;" + "background:" + background + ";" + "opacity: " + opacity + ";" + "filter: alpha(opacity=" + opacity * 100 + ");" + "display: none;"; thisOverlay.id = overlayId; if (!getOverlay) { target.appendChild(thisOverlay); } return { setDisable: function() { thisOverlay.style.display = "none"; }, setEnable: function() { thisOverlay.style.display = "block"; } }; }; var buildRadioInputs = function(key, value, check) { var divContainer = new CKEDITOR.dom.element('div'), radioButton = new CKEDITOR.dom.element('input'), radioLabel = new CKEDITOR.dom.element('label'), id = "wscGrammerSuggest" + key + "_" + value; divContainer.addClass("cke_dialog_ui_input_radio"); divContainer.setAttribute("role", "presentation"); divContainer.setStyles({ width: "97%", padding: "5px", 'white-space': 'normal' }); radioButton.setAttributes({ type: "radio", value: value, name: 'wscGrammerSuggest', id: id }); radioButton.setStyles({ "float":"left" }); radioButton.on("click", function(data) { NS.textNode['GrammTab'].setValue(data.sender.getValue()); }); (check) ? radioButton.setAttribute("checked", true) : false; radioButton.addClass("cke_dialog_ui_radio_input"); radioLabel.appendText(key); radioLabel.setAttribute("for", id); radioLabel.setStyles({ 'display': "block", 'line-height': '16px', 'margin-left': '18px', 'white-space': 'normal' }); divContainer.append(radioButton); divContainer.append(radioLabel); return divContainer; }; var statusGrammarTab = function(aState) { //#19221 aState = aState || 'true'; if(aState !== null && aState == 'false'){ hideGrammTab(); } }; var langConstructor = function(lang) { var langSelectBox = new __constructLangSelectbox(lang), selectId = "wscLang" + NS.dialog.getParentEditor().name, selectContainer = document.getElementById(selectId), currentTabId = NS.dialog._.currentTabId, langGroup, frameId = NS.iframeNumber + '_' + currentTabId; NS.buildOptionLang(langSelectBox.setLangList, NS.dialog.getParentEditor().name); langGroup = langSelectBox.getCurrentLangGroup(NS.selectingLang); if(langGroup) { tabView[langGroup].onShow(); } statusGrammarTab(NS.show_grammar); selectContainer.onchange = function(e) { var langGroup = langSelectBox.getCurrentLangGroup(this.value), currentTabId = NS.dialog._.currentTabId, cmd; e = e || window.event; tabView[langGroup].onShow(); statusGrammarTab(NS.show_grammar); NS.div_overlay.setEnable(); NS.selectingLang = this.value; // get command for current opened tan cmd = NS.cmd[currentTabId]; // check whether current tab can be opened after language switching if(!langGroup || !tabView[langGroup] || !tabView[langGroup].allowedTabCommands[cmd]) { // if not so - set default tab to open after reload cmd = tabView[langGroup].defaultTabCommand; } for(var key in NS.cmd) { if(NS.cmd[key] == cmd) { NS.previousTab = key; break; } } appTools.postMessage.send({ 'message': { 'changeLang': NS.selectingLang, 'interfaceLang' : NS.interfaceLang, 'text': NS.dataTemp, 'cmd': cmd }, 'target': NS.targetFromFrame[frameId], 'id': 'selectionLang_outer__page' }); }; }; var disableButtonSuggest = function(word) { var changeToButton, changeAllButton, styleDisable = function(instanceButton) { var button = NS.dialog.getContentElement(NS.dialog._.currentTabId, instanceButton) || NS.LocalizationButton[instanceButton].instance; button.getElement().hasClass('cke_disabled') ? button.getElement().setStyle('color', '#a0a0a0') : button.disable(); }, styleEnable = function(instanceButton) { var button = NS.dialog.getContentElement(NS.dialog._.currentTabId, instanceButton) || NS.LocalizationButton[instanceButton].instance; button.enable(); button.getElement().setStyle('color', '#333'); }; if (word == 'no_any_suggestions') { word = 'No suggestions'; changeToButton = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'ChangeTo_button') || NS.LocalizationButton['ChangeTo_button'].instance; changeToButton.disable(); changeAllButton = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'ChangeAll') || NS.LocalizationButton['ChangeAll'].instance; changeAllButton.disable(); styleDisable('ChangeTo_button'); styleDisable('ChangeAll'); return word; } else { styleEnable('ChangeTo_button'); styleEnable('ChangeAll'); return word; } }; function getSelect( obj ) { if ( obj && obj.domId && obj.getInputElement().$ ) return obj.getInputElement(); else if ( obj && obj.$ ) return obj; return false; } var handlerId = { iframeOnload: function(response) { var currentTab = NS.dialog._.currentTabId, tabId = NS.iframeNumber + '_' + currentTab; sendData(NS.targetFromFrame[tabId], NS.cmd[currentTab]); }, suggestlist: function(response) { delete response.id; NS.div_overlay_no_check.setDisable(); hideCurrentFinishChecking(); langConstructor(NS.langList); var word = disableButtonSuggest(response.word), suggestionsList = ''; if (word instanceof Array) { word = response.word[0]; } word = word.split(','); suggestionsList = word; NS.textNode['SpellTab'].setValue(suggestionsList[0]); var select = getSelect( selectNode ); selectNode.clear(); for (var i = 0; i < suggestionsList.length; i++) { var option = document.createElement('option'); option.text = suggestionsList[i]; option.value = suggestionsList[i]; select.$.add(option, i); } showCurrentTabs(); NS.div_overlay.setDisable(); }, grammerSuggest: function(response) { delete response.id; delete response.mocklangs; hideCurrentFinishChecking(); langConstructor(NS.langList); // Show select language for this command CKEDITOR.config.wsc_cmd var firstSuggestValue = response.grammSuggest[0];// ? firstSuggestValue = response.grammSuggest[0] : firstSuggestValue = 'No suggestion for this words'; NS.grammerSuggest.getElement().setHtml(''); NS.textNode['GrammTab'].reset(); NS.textNode['GrammTab'].setValue(firstSuggestValue); NS.textNodeInfo['GrammTab'].getElement().setHtml(''); NS.textNodeInfo['GrammTab'].getElement().setText(response.info); var arr = response.grammSuggest, len = arr.length, check = true; for (var i = 0; i < len; i++) { NS.grammerSuggest.getElement().append(buildRadioInputs(arr[i], arr[i], check)); check = false; } showCurrentTabs(); NS.div_overlay.setDisable(); }, thesaurusSuggest: function(response) { delete response.id; delete response.mocklangs; hideCurrentFinishChecking(); langConstructor(NS.langList); // Show select language for this command CKEDITOR.config.wsc_cmd NS.selectNodeResponce = response; NS.textNode['Thesaurus'].reset(); var select = getSelect( NS.selectNode['Categories'] ), count = 0; NS.selectNode['Categories'].clear(); for (var i in response) { var option = document.createElement('option'); option.text = i; option.value = i; select.$.add(option, count); count++ } var synKey = NS.selectNode['Categories'].getInputElement().getChildren().$[0].value; NS.selectNode['Categories'].getInputElement().getChildren().$[0].selected = true; NS.buildOptionSynonyms(synKey); showCurrentTabs(); NS.div_overlay.setDisable(); count = 0; }, finish: function(response) { delete response.id; hideCurrentTabs(); showCurrentFinishChecking(); NS.div_overlay.setDisable(); }, settext: function(response) { delete response.id; function setData() { try { editor.focus(); } catch(e) {} editor.setData(response.text, function(){ NS.dataTemp = ''; editor.unlockSelection(); editor.fire('saveSnapshot'); NS.dialog.hide(); }); } var command = NS.dialog.getParentEditor().getCommand( 'checkspell' ), editor = NS.dialog.getParentEditor(), scaytPlugin = CKEDITOR.plugins.scayt, scaytInstance = editor.scayt; //scayt on wsc UserDictionary and UserDictionaryName synchronization if (scaytPlugin && editor.wsc) { var wscUDN = editor.wsc.udn, wscUD = editor.wsc.ud, wscUDarray, i; if (scaytInstance) { // if SCAYT active function udActionCallback() { if (wscUD) { wscUDarray = wscUD.split(','); for (i = 0; i < wscUDarray.length; i += 1) { scaytInstance.addWordToUserDictionary(wscUDarray[i]); } }else { editor.wsc.DataStorage.setData('scayt_user_dictionary', []); } setData(); } if(scaytPlugin.state.scayt[editor.name]) { scaytInstance.setMarkupPaused(false); } if (!wscUDN) { editor.wsc.DataStorage.setData('scayt_user_dictionary_name', ''); scaytInstance.removeUserDictionary(undefined, udActionCallback, udActionCallback); } else { editor.wsc.DataStorage.setData('scayt_user_dictionary_name', wscUDN); scaytInstance.restoreUserDictionary(wscUDN, udActionCallback, udActionCallback); } } else { //if SCAYT not active if (!wscUDN) { editor.wsc.DataStorage.setData('scayt_user_dictionary_name', ''); } else { editor.wsc.DataStorage.setData('scayt_user_dictionary_name', wscUDN); } if (wscUD) { wscUDarray = wscUD.split(','); editor.wsc.DataStorage.setData('scayt_user_dictionary', wscUDarray); } setData(); } } else { setData(); } }, ReplaceText: function(response) { delete response.id; NS.div_overlay.setEnable(); NS.dataTemp = response.text; NS.selectingLang = response.currentLang; if (response.cmd = 'spell' && response.len !== '0' && response.len) { NS.div_overlay.setDisable(); } else { window.setTimeout(function() { try { NS.div_overlay.setDisable(); } catch(e) {} }, 500); } SetLocalizationButton(NS.LocalizationButton); SetLocalizationLabel(NS.LocalizationLabel); }, options_checkbox_send: function(response) { delete response.id; var obj = { 'osp': appTools.cookie.get('osp'), 'udn': appTools.cookie.get('udn'), 'cust_dic_ids': NS.cust_dic_ids }; var currentTabId = NS.dialog._.currentTabId, frameId = NS.iframeNumber + '_' + currentTabId; appTools.postMessage.send({ 'message': obj, 'target': NS.targetFromFrame[frameId], 'id': 'options_outer__page' }); }, getOptions: function(response) { var udn = response.DefOptions.udn; NS.LocalizationComing = response.DefOptions.localizationButtonsAndText; NS.show_grammar = response.show_grammar; NS.langList = response.lang; NS.bnr = response.bannerId; NS.sessionid = response.sessionid; if (response.bannerId) { NS.setHeightBannerFrame(); setBannerInPlace(response.banner); } else { NS.setHeightFrame(); } if (udn == 'undefined') { if (NS.userDictionaryName) { udn = NS.userDictionaryName; var obj = { 'osp': appTools.cookie.get('osp'), 'udn': NS.userDictionaryName, 'cust_dic_ids': NS.cust_dic_ids, 'id': 'options_dic_send', 'udnCmd': 'create' }; appTools.postMessage.send({ 'message': obj, 'target': NS.targetFromFrame[frameId] }); } else{ udn = ''; } } appTools.cookie.set('osp', response.DefOptions.osp); appTools.cookie.set('udn', udn); appTools.cookie.set('cust_dic_ids', response.DefOptions.cust_dic_ids); appTools.postMessage.send({ 'id': 'giveOptions' }); }, options_dic_send: function(response) { var obj = { 'osp': appTools.cookie.get('osp'), 'udn': appTools.cookie.get('udn'), 'cust_dic_ids': NS.cust_dic_ids, 'id': 'options_dic_send', 'udnCmd': appTools.cookie.get('udnCmd') }; var currentTabId = NS.dialog._.currentTabId, frameId = NS.iframeNumber + '_' + currentTabId; appTools.postMessage.send({ 'message': obj, 'target': NS.targetFromFrame[frameId] }); }, data: function(response) { delete response.id; }, giveOptions: function() { }, setOptionsConfirmF:function() { OptionsConfirm(false); }, setOptionsConfirmT:function() { OptionsConfirm(true); }, clickBusy: function() { NS.div_overlay.setEnable(); }, suggestAllCame: function() { NS.div_overlay.setDisable(); NS.div_overlay_no_check.setDisable(); }, TextCorrect: function() { langConstructor(NS.langList); } }; var handlerIncomingData = function(event) { event = event || window.event; var response; try { response = window.JSON.parse(event.data); } catch (e) {} if(response && response.id) { handlerId[response.id](response); } }; var handlerButtonOptions = function(event) { event = event || window.event; var currentTabId = NS.dialog._.currentTabId, frameId = NS.iframeNumber + '_' + currentTabId; appTools.postMessage.send({ 'message': { 'cmd': 'Options' }, 'target': NS.targetFromFrame[frameId], 'id': 'cmd' }); }; var sendData = function(frameTarget, cmd, sendText, reset_suggest) { cmd = cmd || CKEDITOR.config.wsc_cmd; reset_suggest = reset_suggest || false; sendText = sendText || NS.dataTemp; appTools.postMessage.send({ 'message': { 'customerId': NS.wsc_customerId, 'text': sendText, 'txt_ctrl': NS.TextAreaNumber, 'cmd': cmd, 'cust_dic_ids': NS.cust_dic_ids, 'udn': NS.userDictionaryName, 'slang': NS.selectingLang, 'interfaceLang' : NS.interfaceLang, 'reset_suggest': reset_suggest, 'sessionid': NS.sessionid }, 'target': frameTarget, 'id': 'data_outer__page' }); NS.div_overlay.setEnable(); }; var tabView = { "superset": { onShow: function() { showThesaurusTab(); showGrammTab(); showSpellTab(); }, allowedTabCommands: { "spell": true, "grammar": true, "thes": true }, defaultTabCommand: "spell" }, "usual": { onShow: function() { hideThesaurusTab(); hideGrammTab(); showSpellTab(); }, allowedTabCommands: { "spell": true }, defaultTabCommand: "spell" }, "rtl": { onShow: function() { hideThesaurusTab(); hideGrammTab(); showSpellTab(); }, allowedTabCommands: { "spell": true }, defaultTabCommand: "spell" }, "spellgrammar": { onShow: function() { hideThesaurusTab(); showGrammTab(); showSpellTab(); }, allowedTabCommands: { "spell": true, "grammar": true }, defaultTabCommand: "spell" }, "spellthes": { onShow: function() { showThesaurusTab(); hideGrammTab(); showSpellTab(); }, allowedTabCommands: { "spell": true, "thes": true }, defaultTabCommand: "spell" } }; var showFirstTab = function(scope) { var cmdManger = function(cmdView) { var obj = {}; var _getCmd = function(cmd) { for (var tabId in cmdView) { obj[cmdView[tabId]] = tabId; } return obj[cmd]; }; return { getCmdByTab: _getCmd }; }; var cmdM = new cmdManger(NS.cmd), tabToOpen = cmdM.getCmdByTab(CKEDITOR.config.wsc_cmd); showCurrentTabs(); scope.selectPage(tabToOpen); NS.sendData(scope); }; var showThesaurusTab = function() { NS.dialog.showPage('Thesaurus'); }; var hideThesaurusTab = function() { NS.dialog.hidePage('Thesaurus'); }; var showGrammTab = function() { NS.dialog.showPage('GrammTab'); }; var hideGrammTab = function() { NS.dialog.hidePage('GrammTab'); }; var showSpellTab = function() { NS.dialog.showPage('SpellTab'); }; var hideSpellTab = function() { NS.dialog.hidePage('SpellTab'); }; var showCurrentTabs = function() { var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'bottomGroup').getElement(); target.removeStyle('display'); target.removeStyle('position'); target.removeStyle('left'); target.show(); }; var hideCurrentTabs = function() { var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'bottomGroup').getElement(), activeElement = document.activeElement, focusableElements; target.setStyles({ display: 'block', position: 'absolute', left: '-9999px' }); setTimeout(function() { target.removeStyle('display'); target.removeStyle('position'); target.removeStyle('left'); target.hide(); NS.dialog._.editor.focusManager.currentActive.focusNext(); focusableElements = appTools.misc.findFocusable(NS.dialog.parts.contents); if(!appTools.misc.hasClass(activeElement, 'cke_dialog_tab') && !appTools.misc.hasClass(activeElement, 'cke_dialog_contents_body') && appTools.misc.isVisible(activeElement)) { try { activeElement.focus(); } catch(e) {} } else { for(var i = 0, tmpCkEl; i < focusableElements.count(); i++) { tmpCkEl = focusableElements.getItem(i); if(appTools.misc.isVisible(tmpCkEl.$)) { try { tmpCkEl.$.focus(); } catch(e) {} break; } } } }, 0); }; var showCurrentFinishChecking = function() { var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'BlockFinishChecking').getElement(); target.removeStyle('display'); target.removeStyle('position'); target.removeStyle('left'); target.show(); }; var hideCurrentFinishChecking = function() { var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'BlockFinishChecking').getElement(), activeElement = document.activeElement, focusableElements; target.setStyles({ display: 'block', position: 'absolute', left: '-9999px' }); setTimeout(function() { target.removeStyle('display'); target.removeStyle('position'); target.removeStyle('left'); target.hide(); NS.dialog._.editor.focusManager.currentActive.focusNext(); focusableElements = appTools.misc.findFocusable(NS.dialog.parts.contents); if(!appTools.misc.hasClass(activeElement, 'cke_dialog_tab') && !appTools.misc.hasClass(activeElement, 'cke_dialog_contents_body') && appTools.misc.isVisible(activeElement)) { try { activeElement.focus(); } catch(e) {} } else { for(var i = 0, tmpCkEl; i < focusableElements.count(); i++) { tmpCkEl = focusableElements.getItem(i); if(appTools.misc.isVisible(tmpCkEl.$)) { try { tmpCkEl.$.focus(); } catch(e) {} break; } } } }, 0); }; function __constructLangSelectbox(languageGroup) { if( !languageGroup ) { throw "Languages-by-groups list are required for construct selectbox"; } var that = this, o_arr = [], priorLang ="en_US", priorLangTitle = "", currLang = NS.selectingLang; for ( var group in languageGroup){ for ( var langCode in languageGroup[group]){ var langName = languageGroup[group][langCode]; if ( langName == priorLang ) { priorLangTitle = langName; } else { o_arr.push( langName ); } } } o_arr.sort(); if(priorLangTitle) { o_arr.unshift( priorLangTitle ); } var searchGroup = function ( code ){ for ( var group in languageGroup){ for ( var langCode in languageGroup[group]){ if ( langCode.toUpperCase() === code.toUpperCase() ) { return group; } } } return ""; }; var _setLangList = function() { var langList = {}, langArray = []; for (var group in languageGroup) { for ( var langCode in languageGroup[group]){ langList[languageGroup[group][langCode]] = langCode; } } return langList; }; var _return = { getCurrentLangGroup: function(code) { return searchGroup(code); }, setLangList: _setLangList() }; return _return; } CKEDITOR.dialog.add('checkspell', function(editor) { var handlerButtons = function(event) { event = event || window.event; // because in chrome and safary document.activeElement returns tag. We need to signal that clicked element is active this.getElement().focus(); NS.div_overlay.setEnable(); var currentTabId = NS.dialog._.currentTabId, frameId = NS.iframeNumber + '_' + currentTabId, new_word = NS.textNode[currentTabId].getValue(), cmd = this.getElement().getAttribute("title-cmd"); appTools.postMessage.send({ 'message': { 'cmd': cmd, 'tabId': currentTabId, 'new_word': new_word }, 'target': NS.targetFromFrame[frameId], 'id': 'cmd_outer__page' }); if (cmd == 'ChangeTo' || cmd == 'ChangeAll') { editor.fire('saveSnapshot'); } if (cmd == 'FinishChecking') { editor.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame()); } }, constraints = { minWidth: 560, minHeight: 444 }; function initView(dialog) { var newViewSettings = { left: parseInt(editor.config.wsc_left, 10), top: parseInt(editor.config.wsc_top, 10), width: parseInt(editor.config.wsc_width, 10), height: parseInt(editor.config.wsc_height, 10) }, viewSize = CKEDITOR.document.getWindow().getViewPaneSize(), currentPosition = dialog.getPosition(), currentSize = dialog.getSize(), savePosition = 0; if(!dialog._.resized) { var wrapperHeight = currentSize.height - dialog.parts.contents.getSize('height', !(CKEDITOR.env.gecko || CKEDITOR.env.opera || CKEDITOR.env.ie && CKEDITOR.env.quirks)), wrapperWidth = currentSize.width - dialog.parts.contents.getSize('width', 1); if(newViewSettings.width < constraints.minWidth || isNaN(newViewSettings.width)) { newViewSettings.width = constraints.minWidth; } if(newViewSettings.width > viewSize.width - wrapperWidth) { newViewSettings.width = viewSize.width - wrapperWidth; } if(newViewSettings.height < constraints.minHeight || isNaN(newViewSettings.height)) { newViewSettings.height = constraints.minHeight; } if(newViewSettings.height > viewSize.height - wrapperHeight) { newViewSettings.height = viewSize.height - wrapperHeight; } currentSize.width = newViewSettings.width + wrapperWidth; currentSize.height = newViewSettings.height + wrapperHeight; dialog._.fromResizeEvent = false; dialog.resize(newViewSettings.width, newViewSettings.height); setTimeout(function() { dialog._.fromResizeEvent = false; CKEDITOR.dialog.fire('resize', { dialog: dialog, width: newViewSettings.width, height: newViewSettings.height }, editor); }, 300); } if(!dialog._.moved) { savePosition = isNaN(newViewSettings.left) && isNaN(newViewSettings.top) ? 0 : 1; if(isNaN(newViewSettings.left)) { newViewSettings.left = (viewSize.width - currentSize.width) / 2; } if(newViewSettings.left < 0) { newViewSettings.left = 0; } if(newViewSettings.left > viewSize.width - currentSize.width) { newViewSettings.left = viewSize.width - currentSize.width; } if(isNaN(newViewSettings.top)) { newViewSettings.top = (viewSize.height - currentSize.height) / 2; } if(newViewSettings.top < 0) { newViewSettings.top = 0; } if(newViewSettings.top > viewSize.height - currentSize.height) { newViewSettings.top = viewSize.height - currentSize.height; } dialog.move(newViewSettings.left, newViewSettings.top, savePosition); } } function createWscObjectForUdAndUdnSyncrhonization() { editor.wsc = {}; //DataStorage object for cookies and localStorage manipulation (function( object ) { 'use strict'; var DataTypeManager = { separator: '<$>', getDataType: function(value) { var type; if(typeof value === 'undefined') { type = 'undefined'; } else if(value === null) { type = 'null'; } else { type = Object.prototype.toString.call(value).slice(8, -1); } return type; }, convertDataToString: function(value) { var str, type = this.getDataType(value).toLowerCase(); str = type + this.separator + value; return str; }, // get value type and convert value due to type, since all stored values are String restoreDataFromString: function(str) { var value = str, type, separatorStartIndex; // @TODO: remove this line much later. Support of old format for options str = this.backCompatibility(str); if(typeof str === 'string') { separatorStartIndex = str.indexOf(this.separator); type = str.substring(0, separatorStartIndex); value = str.substring(separatorStartIndex + this.separator.length); switch(type) { case 'boolean': value = value === 'true'; break; case 'number': value = parseFloat(value); break; // we assume that we will store string values only, due to performance case 'array': value = value === '' ? [] : value.split(','); break; case 'null': value = null; break; case 'undefined': value = undefined; break; } } return value; }, // old data type support // here we trying to convert data from old format into new // @TODO: remove this function much later backCompatibility: function(str) { var convertedStr = str, value, separatorStartIndex; if(typeof str === 'string') { separatorStartIndex = str.indexOf(this.separator); // is it old format? if(separatorStartIndex < 0) { // try to get number from string value = parseFloat(str); // is it not a number? if(isNaN(value)) { // yes, this is not a number. Lets check is this is an array "[comma,separated,values]" if((str[0] === '[') && (str[str.length - 1] === ']')) { // this is an array. Lets remove brackets symbols and extract the words str = str.replace('[', ''); str = str.replace(']', ''); if(str === '') { value = []; } else { value = str.split(','); } // value = str === '[]' ? [] : str.split(','); } else if(str === 'true' || str === 'false') { // this is boolean value value = str === 'true'; } else { // this is string value = str; } } convertedStr = this.convertDataToString(value); } } return convertedStr; } }; var LocalStorage = { get: function( key ) { var value = DataTypeManager.restoreDataFromString( window.localStorage.getItem(key) ); return value; }, set: function( key, value ) { var _value = DataTypeManager.convertDataToString( value ); window.localStorage.setItem( key, _value ); }, del: function( key ) { window.localStorage.removeItem( key ); }, clear: function() { window.localStorage.clear(); } }; var CookiesStorage = { expiration: (function() { return 60 * 60 * 24 * 366; }()), get: function(key) { var value = DataTypeManager.restoreDataFromString(this.getCookie(key)); return value; }, set: function(key, value) { var _value = DataTypeManager.convertDataToString(value); this.setCookie(key, _value, {expires: this.expiration}); }, del: function(key) { this.deleteCookie(key); }, getCookie: function(name) { var matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)")); return matches ? decodeURIComponent(matches[1]) : undefined; }, setCookie: function(name, value, props) { props = props || {}; var exp = props.expires; if (typeof exp === "number" && exp) { var d = new Date(); d.setTime(d.getTime() + exp * 1000); exp = props.expires = d; } if(exp && exp.toUTCString) { props.expires = exp.toUTCString(); } value = encodeURIComponent(value); var updatedCookie = name + "=" + value; for(var propName in props) { var propValue = props[propName]; updatedCookie += "; " + propName; if(propValue !== true) { updatedCookie += "=" + propValue; } } document.cookie = updatedCookie; }, deleteCookie: function(name) { this.setCookie(name, null, {expires: -1}); }, // delete all cookies clear: function() { var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i]; var eqPos = cookie.indexOf("="); var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; this.deleteCookie(name); } } }; var strategy = window.localStorage ? LocalStorage : CookiesStorage; var DataStorage = { // Get data within storage for key getData: function( key ) { return strategy.get( key ); }, // Set data within storage setData: function( key, value ) { strategy.set( key, value ); }, // Delete data within storage for key deleteData: function( key ) { strategy.del( key ); }, // Clear storage clear: function() { strategy.clear(); } }; // Static Module of Storage Data in the localStorage. object.DataStorage = DataStorage; }( editor.wsc )); editor.wsc.operationWithUDN = function(command, UDName) { var obj = { 'udn': UDName, 'id': 'operationWithUDN', 'udnCmd': command }; var currentTabId = NS.dialog._.currentTabId, frameId = NS.iframeNumber + '_' + currentTabId; appTools.postMessage.send({ 'message': obj, 'target': NS.targetFromFrame[frameId] }); }; editor.wsc.getLocalStorageUDN = function() { var udn = editor.wsc.DataStorage.getData('scayt_user_dictionary_name'); if (!udn) { return; } return udn; }; editor.wsc.getLocalStorageUD = function() { var ud = editor.wsc.DataStorage.getData('scayt_user_dictionary'); if (!ud) { return; } return ud; }; editor.wsc.addWords = function(words, callback) { var url = editor.config.wsc.DefaultParams.serviceHost + editor.config.wsc.DefaultParams.ssrvHost + '?cmd=dictionary&format=json&' + 'customerid=1%3AncttD3-fIoSf2-huzwE4-Y5muI2-mD0Tt-kG9Wz-UEDFC-tYu243-1Uq474-d9Z2l3&' + 'action=addword&word='+ words + '&callback=toString&synchronization=true', script = document.createElement('script'); script['type'] = 'text/javascript'; script['src'] = url; document.getElementsByTagName("head")[0].appendChild(script); //chrome, firefox, safari script.onload = callback; //IE script.onreadystatechange = function() { if (this.readyState === 'loaded') { callback(); } }; }; editor.wsc.cgiOrigin = function() { var wscServiceHostString = editor.config.wsc.DefaultParams.serviceHost, wscServiceHostArray = wscServiceHostString.split('/'), cgiOrigin = wscServiceHostArray[0] + '//' + wscServiceHostArray[2]; return cgiOrigin; }; editor.wsc.isSsrvSame = false; } return { title: editor.config.wsc_dialogTitle || editor.lang.wsc.title, minWidth: constraints.minWidth, minHeight: constraints.minHeight, buttons: [CKEDITOR.dialog.cancelButton], onLoad: function() { NS.dialog = this; hideThesaurusTab(); hideGrammTab(); showSpellTab(); //creating wsc object for UD synchronization between wsc and scayt if (editor.plugins.scayt) { createWscObjectForUdAndUdnSyncrhonization(); } }, onShow: function() { NS.dialog = this; editor.lockSelection(editor.getSelection()); NS.TextAreaNumber = 'cke_textarea_' + editor.name; appTools.postMessage.init(handlerIncomingData); NS.dataTemp = editor.getData(); //NS.div_overlay.setDisable(); NS.OverlayPlace = NS.dialog.parts.tabs.getParent().$; if(CKEDITOR && CKEDITOR.config){ NS.wsc_customerId = editor.config.wsc_customerId; NS.cust_dic_ids = editor.config.wsc_customDictionaryIds; NS.userDictionaryName = editor.config.wsc_userDictionaryName; NS.defaultLanguage = CKEDITOR.config.defaultLanguage; var protocol = document.location.protocol == "file:" ? "http:" : document.location.protocol; var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol + '//www.webspellchecker.net/spellcheck31/lf/22/js/wsc_fck2plugin.js'); } else { NS.dialog.hide(); return; } initView(this); CKEDITOR.scriptLoader.load(wscCoreUrl, function(success) { if(CKEDITOR.config && CKEDITOR.config.wsc && CKEDITOR.config.wsc.DefaultParams){ NS.serverLocationHash = CKEDITOR.config.wsc.DefaultParams.serviceHost; NS.logotype = CKEDITOR.config.wsc.DefaultParams.logoPath; NS.loadIcon = CKEDITOR.config.wsc.DefaultParams.iconPath; NS.loadIconEmptyEditor = CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor; NS.LangComparer = new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare(); }else{ NS.serverLocationHash = DefaultParams.serviceHost; NS.logotype = DefaultParams.logoPath; NS.loadIcon = DefaultParams.iconPath; NS.loadIconEmptyEditor = DefaultParams.iconPathEmptyEditor; NS.LangComparer = new _SP_FCK_LangCompare(); } NS.pluginPath = CKEDITOR.getUrl(editor.plugins.wsc.path); NS.iframeNumber = NS.TextAreaNumber; NS.templatePath = NS.pluginPath + 'dialogs/tmp.html'; NS.LangComparer.setDefaulLangCode( NS.defaultLanguage ); NS.currentLang = editor.config.wsc_lang || NS.LangComparer.getSPLangCode( editor.langCode ) || 'en_US'; NS.interfaceLang = editor.config.wsc_interfaceLang; //option to customize the interface language 12/28/2015 NS.selectingLang = NS.currentLang; NS.div_overlay = new overlayBlock({ opacity: "1", background: "#fff url(" + NS.loadIcon + ") no-repeat 50% 50%", target: NS.OverlayPlace }); var number_ck = NS.dialog.parts.tabs.getId(), dialogPartsTab = CKEDITOR.document.getById(number_ck); dialogPartsTab.setStyle('width', '97%'); if (!dialogPartsTab.getElementsByTag('DIV').count()){ dialogPartsTab.append(NS.buildSelectLang(NS.dialog.getParentEditor().name)); } NS.div_overlay_no_check = new overlayBlock({ opacity: "1", id: 'no_check_over', background: "#fff url(" + NS.loadIconEmptyEditor + ") no-repeat 50% 50%", target: NS.OverlayPlace }); if (success) { showFirstTab(NS.dialog); NS.dialog.setupContent(NS.dialog); } if (editor.plugins.scayt) { //is ssrv.cgi path for WSC and scayt same editor.wsc.isSsrvSame = (function() { var wscSsrvWholePath, wscServiceHost = CKEDITOR.config.wsc.DefaultParams.serviceHost.replace('lf/22/js/../../../', '').split('//')[1], wscSsrvHost = CKEDITOR.config.wsc.DefaultParams.ssrvHost, scaytSsrvWholePath, scaytSsrvProtocol, scaytSsrvHost, scaytSsrvPath, scaytSrcUrl = editor.config.scayt_srcUrl, scaytSsrvSrcUrlSsrvProtocol, scaytSsrvSrcUrlSsrvHost, scaytSsrvSrcUrlSsrvPath, scaytBasePath, scaytBasePathSsrvProtocol, scaytBasePathSsrvHost, scaytBasePathSsrvPath; if (window.SCAYT && window.SCAYT.CKSCAYT) { scaytBasePath = SCAYT.CKSCAYT.prototype.basePath; scaytBasePathSsrvProtocol = scaytBasePath.split('//')[0]; scaytBasePathSsrvHost = scaytBasePath.split('//')[1].split('/')[0]; scaytBasePathSsrvPath = scaytBasePath.split(scaytBasePathSsrvHost + '/')[1].replace('/lf/scayt3/ckscayt/', '') + '/script/ssrv.cgi'; } if (scaytSrcUrl && !scaytBasePath && !editor.config.scayt_servicePath) { scaytSsrvSrcUrlSsrvProtocol = scaytSrcUrl.split('//')[0]; scaytSsrvSrcUrlSsrvHost = scaytSrcUrl.split('//')[1].split('/')[0]; scaytSsrvSrcUrlSsrvPath = scaytSrcUrl.split(scaytSsrvSrcUrlSsrvHost + '/')[1].replace('/lf/scayt3/ckscayt/ckscayt.js', '') + '/script/ssrv.cgi'; } scaytSsrvProtocol = editor.config.scayt_serviceProtocol || scaytBasePathSsrvProtocol || scaytSsrvSrcUrlSsrvProtocol; scaytSsrvHost = editor.config.scayt_serviceHost || scaytBasePathSsrvHost || scaytSsrvSrcUrlSsrvHost; scaytSsrvPath = editor.config.scayt_servicePath || scaytBasePathSsrvPath || scaytSsrvSrcUrlSsrvPath; wscSsrvWholePath = '//' + wscServiceHost + wscSsrvHost; scaytSsrvWholePath = '//' + scaytSsrvHost + '/' + scaytSsrvPath; return wscSsrvWholePath === scaytSsrvWholePath; })(); } //wsc on scayt UserDictionary and UserDictionaryName synchronization if (window.SCAYT && editor.wsc) { var cgiOrigin = editor.wsc.cgiOrigin(); editor.wsc.syncIsDone = false; var getUdOrUdn = function (e) { if (e.origin === cgiOrigin) { var data = JSON.parse(e.data); if (data.ud && data.ud !== 'undefined') { editor.wsc.ud = data.ud; } else if (data.ud === 'undefined') { editor.wsc.ud = undefined; } if (data.udn && data.udn !== 'undefined') { editor.wsc.udn = data.udn; } else if (data.udn === 'undefined') { editor.wsc.udn = undefined; } if (!editor.wsc.syncIsDone) { udSynchronization(editor.wsc.ud); editor.wsc.syncIsDone = true; } } }; var udSynchronization = function(cookieUd) { var localStorageUdArray = editor.wsc.getLocalStorageUD(), newUd; if (localStorageUdArray instanceof Array) { newUd = localStorageUdArray.toString(); } if (newUd !== undefined && newUd !== '') { setTimeout(function() { editor.wsc.addWords(newUd, function() { showFirstTab(NS.dialog); NS.dialog.setupContent(NS.dialog); }); }, 400); } }; if (window.addEventListener){ addEventListener("message", getUdOrUdn, false); } else { window.attachEvent("onmessage", getUdOrUdn); } //wsc on scayt UserDictionaryName synchronization setTimeout( function() { var udn = editor.wsc.getLocalStorageUDN(); if (udn !== undefined) { editor.wsc.operationWithUDN('restore', udn); } }, 500); //need to wait spell.js file to load } }); }, onHide: function() { editor.unlockSelection(); NS.dataTemp = ''; NS.sessionid = ''; appTools.postMessage.unbindHandler(handlerIncomingData); }, contents: [ { id: 'SpellTab', label: 'SpellChecker', accessKey: 'S', elements: [ { type: 'html', id: 'banner', label: 'banner', style: '', //TODO html: '
      ' }, { type: 'html', id: 'Content', label: 'spellContent', html: '', setup: function(dialog) { var tabId = NS.iframeNumber + '_' + dialog._.currentTabId; var iframe = document.getElementById(tabId); NS.targetFromFrame[tabId] = iframe.contentWindow; } }, { type: 'hbox', id: 'bottomGroup', style: 'width:560px; margin: 0 auto;', widths: ['50%', '50%'], className: 'wsc-spelltab-bottom', children: [ { type: 'hbox', id: 'leftCol', align: 'left', width: '50%', children: [ { type: 'vbox', id: 'rightCol1', widths: ['50%', '50%'], children: [ { type: 'text', id: 'ChangeTo_label', label: NS.LocalizationLabel['ChangeTo_label'].text + ':', labelLayout: 'horizontal', labelStyle: 'font: 12px/25px arial, sans-serif;', width: '140px', 'default': '', onShow: function() { NS.textNode['SpellTab'] = this; NS.LocalizationLabel['ChangeTo_label'].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: NS.LocalizationLabel['Suggestions'].text + ':', onShow: function() { NS.LocalizationLabel['Suggestions'].instance = this; this.getInputElement().setStyles({ display: 'none' }); } }, { type: 'html', id: 'logo', html: '', setup: function(dialog) { this.getElement().$.src = NS.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() { selectNode = this; }, onChange: function() { NS.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_button', label: NS.LocalizationButton['ChangeTo_button'].text, title: 'Change to', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'ChangeTo'); NS.LocalizationButton['ChangeTo_button'].instance = this; }, onClick: handlerButtons }, { type: 'button', id: 'ChangeAll', label: NS.LocalizationButton['ChangeAll'].text, title: 'Change All', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", this.id); NS.LocalizationButton['ChangeAll'].instance = this; }, onClick: handlerButtons }, { type: 'button', id: 'AddWord', label: NS.LocalizationButton['AddWord'].text, title: 'Add word', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", this.id); NS.LocalizationButton['AddWord'].instance = this; }, onClick: handlerButtons }, { type: 'button', id: 'FinishChecking_button', label: NS.LocalizationButton['FinishChecking_button'].text, title: 'Finish Checking', style: 'width: 100%;margin-top: 9px;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'FinishChecking'); NS.LocalizationButton['FinishChecking_button'].instance = this; }, onClick: handlerButtons } ] }, { type: 'vbox', id: 'rightCol_col__right', widths: ['50%', '50%', '50%'], children: [ { type: 'button', id: 'IgnoreWord', label: NS.LocalizationButton['IgnoreWord'].text, title: 'Ignore word', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", this.id); NS.LocalizationButton['IgnoreWord'].instance = this; }, onClick: handlerButtons }, { type: 'button', id: 'IgnoreAllWords', label: NS.LocalizationButton['IgnoreAllWords'].text, title: 'Ignore all words', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", this.id); NS.LocalizationButton['IgnoreAllWords'].instance = this; }, onClick: handlerButtons }, { type: 'button', id: 'Options', label: NS.LocalizationButton['Options'].text, title: 'Option', style: 'width: 100%;', onLoad: function() { NS.LocalizationButton['Options'].instance = this; if (document.location.protocol == "file:") { this.disable(); } }, onClick: function() { // because in chrome and safary document.activeElement returns tag. We need to signal that clicked element is active this.getElement().focus(); if (document.location.protocol == "file:") { alert('WSC: Options functionality is disabled when runing from file system'); } else { activeElement = document.activeElement; editor.openDialog('options'); } } } ] } ] } ] }, { type: 'hbox', id: 'BlockFinishChecking', style: 'width:560px; margin: 0 auto;', widths: ['70%', '30%'], onShow: function() { this.getElement().setStyles({ display: 'block', position: 'absolute', left: '-9999px' }); }, onHide: showCurrentTabs, children: [ { type: 'hbox', id: 'leftCol', align: 'left', width: '70%', children: [ { type: 'vbox', id: 'rightCol1', setup: function() { this.getChild()[0].getElement().$.src = NS.logotype; this.getChild()[0].getElement().getParent().setStyles({ "text-align": "center" }); }, children: [ { type: 'html', id: 'logo', html: '' } ] } ] }, { type: 'hbox', id: 'rightCol', align: 'right', width: '30%', children: [ { type: 'vbox', id: 'rightCol_col__left', children: [ { type: 'button', id: 'Option_button', label: NS.LocalizationButton['Options'].text, title: 'Option', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", this.id); if (document.location.protocol == "file:") { this.disable(); } }, onClick: function() { // because in chrome and safary document.activeElement returns tag. We need to signal that clicked element is active this.getElement().focus(); if (document.location.protocol == "file:") { alert('WSC: Options functionality is disabled when runing from file system'); } else { activeElement = document.activeElement; editor.openDialog('options'); } } }, { type: 'button', id: 'FinishChecking_button_block', label: NS.LocalizationButton['FinishChecking_button_block'].text, title: 'Finish Checking', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'FinishChecking'); }, onClick: handlerButtons } ] } ] } ] } ] }, { id: 'GrammTab', label: 'Grammar', accessKey: 'G', elements: [ { type: 'html', id: 'banner', label: 'banner', style: '', //TODO html: '
      ' }, { type: 'html', id: 'Content', label: 'GrammarContent', html: '', setup: function() { var tabId = NS.iframeNumber + '_' + NS.dialog._.currentTabId; var iframe = document.getElementById(tabId); NS.targetFromFrame[tabId] = iframe.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() { NS.textNode['GrammTab'] = this; }, onHide: function() { this.reset(); } }, { type: 'html', id: 'html_text', html: "
      ", onShow: function(e) { NS.textNodeInfo['GrammTab'] = this; } }, { type: 'html', id: 'radio', html: "", onShow: function() { NS.grammerSuggest = this; } } ] }, { type: 'vbox', children: [ { type: 'button', id: 'ChangeTo_button', label: 'Change to', title: 'Change to', style: 'width: 133px; float: right;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'ChangeTo'); }, onClick: handlerButtons }, { 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: handlerButtons }, { 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: handlerButtons }, { type: 'button', id: 'FinishChecking_button', label: NS.LocalizationButton['FinishChecking_button'].text, title: 'Finish Checking', style: 'width: 133px; float: right; margin-top: 9px;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'FinishChecking'); }, onClick: handlerButtons } ] } ] } ] }, { type: 'hbox', id: 'BlockFinishChecking', style: 'width:560px; margin: 0 auto;', widths: ['70%', '30%'], onShow: function() { this.getElement().setStyles({ display: 'block', position: 'absolute', left: '-9999px' }); }, onHide: showCurrentTabs, children: [ { type: 'hbox', id: 'leftCol', align: 'left', width: '70%', children: [ { type: 'vbox', id: 'rightCol1', children: [ { type: 'html', id: 'logo', html: '', setup: function() { this.getElement().$.src = NS.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_button_block', label: NS.LocalizationButton['FinishChecking_button_block'].text, title: 'Finish Checking', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'FinishChecking'); }, onClick: handlerButtons } ] } ] } ] } ] }, { id: 'Thesaurus', label: 'Thesaurus', accessKey: 'T', elements: [ { type: 'html', id: 'banner', label: 'banner', style: '', //TODO html: '
      ' }, { type: 'html', id: 'Content', label: 'spellContent', html: '', setup: function() { var tabId = NS.iframeNumber + '_' + NS.dialog._.currentTabId; var iframe = document.getElementById(tabId); NS.targetFromFrame[tabId] = iframe.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', label: NS.LocalizationLabel['ChangeTo_label'].text + ':', labelLayout: 'horizontal', inputStyle: 'width: 160px;', labelStyle: 'font: 12px/25px arial, sans-serif;', 'default': '', onShow: function(e) { NS.textNode['Thesaurus'] = this; NS.LocalizationLabel['ChangeTo_label'].instance = this; }, onHide: function() { this.reset(); } }, { type: 'button', id: 'ChangeTo_button', label: NS.LocalizationButton['ChangeTo_button'].text, title: 'Change to', style: 'width: 121px; margin-top: 1px;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'ChangeTo'); NS.LocalizationButton['ChangeTo_button'].instance = this; }, onClick: handlerButtons } ] }, { type: 'hbox', children: [ { type: 'select', id: 'Categories', label: NS.LocalizationLabel['Categories'].text + ':', labelStyle: 'font: 12px/25px arial, sans-serif;', size: '5', inputStyle: 'width: 180px; height: auto;', items: [], onShow: function() { NS.selectNode['Categories'] = this; NS.LocalizationLabel['Categories'].instance = this; }, onChange: function() { NS.buildOptionSynonyms(this.getValue()); } }, { type: 'select', id: 'Synonyms', label: NS.LocalizationLabel['Synonyms'].text + ':', labelStyle: 'font: 12px/25px arial, sans-serif;', size: '5', inputStyle: 'width: 180px; height: auto;', items: [], onShow: function() { NS.selectNode['Synonyms'] = this; NS.textNode['Thesaurus'].setValue(this.getValue()); NS.LocalizationLabel['Synonyms'].instance = this; }, onChange: function(e) { NS.textNode['Thesaurus'].setValue(this.getValue()); } } ] } ] }, { type: 'vbox', width: '120px', style: "margin-top:46px;", children: [ { type: 'html', id: 'logotype', label: 'WebSpellChecker.net', html: '', setup: function() { this.getElement().$.src = NS.logotype; this.getElement().getParent().setStyles({ "text-align": "center" }); } }, { type: 'button', id: 'FinishChecking_button', label: NS.LocalizationButton['FinishChecking_button'].text, title: 'Finish Checking', style: 'width: 100%; float: right; margin-top: 9px;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'FinishChecking'); }, onClick: handlerButtons } ] } ] } ] }, { type: 'hbox', id: 'BlockFinishChecking', style: 'width:560px; margin: 0 auto;', widths: ['70%', '30%'], onShow: function() { this.getElement().setStyles({ display: 'block', position: 'absolute', left: '-9999px' }); }, children: [ { type: 'hbox', id: 'leftCol', align: 'left', width: '70%', children: [ { type: 'vbox', id: 'rightCol1', children: [ { type: 'html', id: 'logo', html: '', setup: function() { this.getElement().$.src = NS.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_button_block', label: NS.LocalizationButton['FinishChecking_button_block'].text, title: 'Finish Checking', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", 'FinishChecking'); }, onClick: handlerButtons } ] } ] } ] } ] } ] }; }); var activeElement = null; // Options dialog CKEDITOR.dialog.add('options', function(editor) { var dialog = null; var linkOnCheckbox = {}; var checkboxState = {}; var ospString = null; var OptionsTextError = null; var cmd = null; var set_osp = []; var dictionaryState = { 'udn': appTools.cookie.get('udn'), 'osp': appTools.cookie.get('osp') }; var setHandlerOptions = function() { var osp = appTools.cookie.get('osp'), strToArr = osp.split(""); checkboxState['IgnoreAllCapsWords'] = strToArr[0]; checkboxState['IgnoreWordsNumbers'] = strToArr[1]; checkboxState['IgnoreMixedCaseWords'] = strToArr[2]; checkboxState['IgnoreDomainNames'] = strToArr[3]; }; var sendDicOptions = function(event) { event = event || window.event; cmd = this.getElement().getAttribute("title-cmd"); var osp = []; osp[0] = checkboxState['IgnoreAllCapsWords']; osp[1] = checkboxState['IgnoreWordsNumbers']; osp[2] = checkboxState['IgnoreMixedCaseWords']; osp[3] = checkboxState['IgnoreDomainNames']; osp = osp.toString().replace(/,/g, ""); appTools.cookie.set('osp', osp); appTools.cookie.set('udnCmd', cmd ? cmd : 'ignore'); if (cmd == "delete") { appTools.postMessage.send({ 'id': 'options_dic_send' }); } else { var udn = ''; if(nameNode.getValue() !== ''){ udn = nameNode.getValue(); } appTools.cookie.set('udn', udn); appTools.postMessage.send({ 'id': 'options_dic_send' }); } }; var sendAllOptions = function() { var osp = []; osp[0] = checkboxState['IgnoreAllCapsWords']; osp[1] = checkboxState['IgnoreWordsNumbers']; osp[2] = checkboxState['IgnoreMixedCaseWords']; osp[3] = checkboxState['IgnoreDomainNames']; osp = osp.toString().replace(/,/g, ""); appTools.cookie.set('osp', osp); appTools.postMessage.send({ 'id': 'options_checkbox_send' }); }; var cameOptions = function() { OptionsTextError.getElement().setHtml(NS.LocalizationComing['error']); OptionsTextError.getElement().show(); }; return { title: NS.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() { OptionsTextError = 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 = NS.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() { checkboxState[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() { checkboxState[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() { checkboxState[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() { checkboxState[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() { nameNode = this; var udn = NS.userDictionaryName ? NS.userDictionaryName : appTools.cookie.get('udn') && undefined ? ' ' : this.getValue(); this.setValue(udn); }, onShow: function() { nameNode = this; var udn = !appTools.cookie.get('udn') ? this.getValue() : appTools.cookie.get('udn'); this.setValue(udn); this.setLabel(NS.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() { var el = this.getElement().getFirst() || this.getElement(); el.setText(NS.LocalizationComing['Create']); }, onClick: sendDicOptions }, { type: 'button', id: 'restore', label: 'Restore', title: 'Restore', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", this.id); }, onShow: function() { var el = this.getElement().getFirst() || this.getElement(); el.setText(NS.LocalizationComing['Restore']); }, onClick: sendDicOptions } ] }, { 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() { var el = this.getElement().getFirst() || this.getElement(); el.setText(NS.LocalizationComing['Rename']); }, onClick: sendDicOptions }, { type: 'button', id: 'delete', label: 'Remove', title: 'Remove', style: 'width: 100%;', onLoad: function() { this.getElement().setAttribute("title-cmd", this.id); }, onShow: function() { var el = this.getElement().getFirst() || this.getElement(); el.setText(NS.LocalizationComing['Remove']); }, onClick: sendDicOptions } ] } ] } ] } ] }, { 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: "
      " + NS.LocalizationComing['OptionsTextIntro'] + "
      ", onShow: function() { this.getElement().setText(NS.LocalizationComing['OptionsTextIntro']); } } ] } ] } ] } ], buttons: [CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton], onOk: function() { sendAllOptions(); OptionsTextError.getElement().hide(); OptionsTextError.getElement().setHtml(' '); }, onLoad: function() { dialog = this; // appTools.postMessage.init(cameOptions); linkOnCheckbox['IgnoreAllCapsWords'] = dialog.getContentElement('OptionsTab', 'IgnoreAllCapsWords'); linkOnCheckbox['IgnoreWordsNumbers'] = dialog.getContentElement('OptionsTab', 'IgnoreWordsNumbers'); linkOnCheckbox['IgnoreMixedCaseWords'] = dialog.getContentElement('OptionsTab', 'IgnoreMixedCaseWords'); linkOnCheckbox['IgnoreDomainNames'] = dialog.getContentElement('OptionsTab', 'IgnoreDomainNames'); }, onShow: function() { appTools.postMessage.init(cameOptions); setHandlerOptions(); (!parseInt(checkboxState['IgnoreAllCapsWords'], 10)) ? linkOnCheckbox['IgnoreAllCapsWords'].setValue('', false) : linkOnCheckbox['IgnoreAllCapsWords'].setValue('checked', false); (!parseInt(checkboxState['IgnoreWordsNumbers'], 10)) ? linkOnCheckbox['IgnoreWordsNumbers'].setValue('', false) : linkOnCheckbox['IgnoreWordsNumbers'].setValue('checked', false); (!parseInt(checkboxState['IgnoreMixedCaseWords'], 10)) ? linkOnCheckbox['IgnoreMixedCaseWords'].setValue('', false) : linkOnCheckbox['IgnoreMixedCaseWords'].setValue('checked', false); (!parseInt(checkboxState['IgnoreDomainNames'], 10)) ? linkOnCheckbox['IgnoreDomainNames'].setValue('', false) : linkOnCheckbox['IgnoreDomainNames'].setValue('checked', false); checkboxState['IgnoreAllCapsWords'] = (!linkOnCheckbox['IgnoreAllCapsWords'].getValue()) ? 0 : 1; checkboxState['IgnoreWordsNumbers'] = (!linkOnCheckbox['IgnoreWordsNumbers'].getValue()) ? 0 : 1; checkboxState['IgnoreMixedCaseWords'] = (!linkOnCheckbox['IgnoreMixedCaseWords'].getValue()) ? 0 : 1; checkboxState['IgnoreDomainNames'] = (!linkOnCheckbox['IgnoreDomainNames'].getValue()) ? 0 : 1; linkOnCheckbox['IgnoreAllCapsWords'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreAllCapsWords']; linkOnCheckbox['IgnoreWordsNumbers'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreWordsWithNumbers']; linkOnCheckbox['IgnoreMixedCaseWords'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreMixedCaseWords']; linkOnCheckbox['IgnoreDomainNames'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreDomainNames']; }, onHide: function() { appTools.postMessage.unbindHandler(cameOptions); if(activeElement) { try { activeElement.focus(); } catch(e) {} } } }; }); // Expand the spell-check frame when dialog resized. (#6829) CKEDITOR.dialog.on( 'resize', function( evt ) { var data = evt.data, dialog = data.dialog, currentTabId = dialog._.currentTabId, tabID = NS.iframeNumber + '_' + currentTabId, iframe = CKEDITOR.document.getById(tabID); if ( dialog._.name == 'checkspell' ) { if (NS.bnr) { iframe && iframe.setSize( 'height', data.height - '310' ); } else { iframe && iframe.setSize( 'height', data.height - '220' ); } // add flag that indicate whether dialog has been resized by user if(dialog._.fromResizeEvent && !dialog._.resized) { dialog._.resized = true; } dialog._.fromResizeEvent = true; } }); CKEDITOR.on('dialogDefinition', function(dialogDefinitionEvent) { if(dialogDefinitionEvent.data.name === 'checkspell') { var dialogDefinition = dialogDefinitionEvent.data.definition; NS.onLoadOverlay = new overlayBlock({ opacity: "1", background: "#fff", target: dialogDefinition.dialog.parts.tabs.getParent().$ }); NS.onLoadOverlay.setEnable(); dialogDefinition.dialog.on('cancel', function(cancelEvent) { dialogDefinition.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame()); NS.div_overlay.setDisable(); NS.onLoadOverlay.setDisable(); return false; }, this, null, -1); } }); })(); rt-4.4.4/devel/third-party/wsc-src/dialogs/wsc_ie.js0000644000175000017500000001267014006075343020460 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'checkspell', function( editor ) { var number = CKEDITOR.tools.getNextNumber(), iframeId = 'cke_frame_' + number, textareaId = 'cke_data_' + number, errorBoxId = 'cke_error_' + number, interval, protocol = document.location.protocol || 'http:', errorMsg = editor.lang.wsc.notAvailable; var pasteArea = '
      ' + ''; var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol + '//loader.webspellchecker.net/sproxy_fck/sproxy.php' + '?plugin=fck2' + '&customerid=' + editor.config.wsc_customerId + '&cmd=script&doc=wsc&schema=22' ); if ( editor.config.wsc_customLoaderScript ) { errorMsg += '

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

      '; } function burnSpelling( dialog, errorMsg ) { var i = 0; return function() { if ( typeof( window.doSpell ) == 'function' ) { //Call from window.setInteval expected at once. if ( typeof( interval ) != 'undefined' ) window.clearInterval( interval ); initAndSpell( dialog ); } else if ( i++ == 180 ) // Timeout: 180 * 250ms = 45s. window._cancelOnError( errorMsg ); }; } window._cancelOnError = function( m ) { if ( typeof( window.WSC_Error ) == 'undefined' ) { CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'none' ); var errorBox = CKEDITOR.document.getById( errorBoxId ); errorBox.setStyle( 'display', 'block' ); errorBox.setHtml( m || editor.lang.wsc.notAvailable ); } }; function initAndSpell( dialog ) { var LangComparer = new window._SP_FCK_LangCompare(), // Language abbr standarts comparer. pluginPath = CKEDITOR.getUrl( editor.plugins.wsc.path + 'dialogs/' ), // Service paths corecting/preparing. framesetPath = pluginPath + 'tmpFrameset.html'; // global var is used in FCK specific core // change on equal var used in fckplugin.js window.gFCKPluginName = 'wsc'; LangComparer.setDefaulLangCode( editor.config.defaultLanguage ); window.doSpell({ ctrl: textareaId, lang: editor.config.wsc_lang || LangComparer.getSPLangCode( editor.langCode ), intLang: editor.config.wsc_uiLang || LangComparer.getSPLangCode( editor.langCode ), winType: iframeId, // If not defined app will run on winpopup. // Callback binding section. onCancel: function() { dialog.hide(); }, onFinish: function( dT ) { editor.focus(); dialog.getParentEditor().setData( dT.value ); dialog.hide(); }, // Some manipulations with client static pages. staticFrame: framesetPath, framesetPath: framesetPath, iframePath: pluginPath + 'ciframe.html', // Styles defining. schemaURI: pluginPath + 'wsc.css', userDictionaryName: editor.config.wsc_userDictionaryName, customDictionaryName: editor.config.wsc_customDictionaryIds && editor.config.wsc_customDictionaryIds.split( "," ), domainName: editor.config.wsc_domainName }); // Hide user message console (if application was loaded more then after timeout). CKEDITOR.document.getById( errorBoxId ).setStyle( 'display', 'none' ); CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'block' ); } return { title: editor.config.wsc_dialogTitle || editor.lang.wsc.title, minWidth: 485, minHeight: 380, buttons: [ CKEDITOR.dialog.cancelButton ], onShow: function() { var contentArea = this.getContentElement( 'general', 'content' ).getElement(); contentArea.setHtml( pasteArea ); contentArea.getChild( 2 ).setStyle( 'height', this._.contentSize.height + 'px' ); if ( typeof( window.doSpell ) != 'function' ) { // Load script. CKEDITOR.document.getHead().append( CKEDITOR.document.createElement( 'script', { attributes: { type: 'text/javascript', src: wscCoreUrl } })); } var sData = editor.getData(); // Get the data to be checked. CKEDITOR.document.getById( textareaId ).setValue( sData ); interval = window.setInterval( burnSpelling( this, errorMsg ), 250 ); }, onHide: function() { window.ooo = undefined; window.int_framsetLoaded = undefined; window.framesetLoaded = undefined; window.is_window_opened = false; }, contents: [ { id: 'general', label: editor.config.wsc_dialogTitle || editor.lang.wsc.title, padding: 0, elements: [ { type: 'html', id: 'content', html: '' } ] } ] }; }); // Expand the spell-check frame when dialog resized. (#6829) CKEDITOR.dialog.on( 'resize', function( evt ) { var data = evt.data, dialog = data.dialog; if ( dialog._.name == 'checkspell' ) { var content = dialog.getContentElement( 'general', 'content' ).getElement(), iframe = content && content.getChild( 2 ); iframe && iframe.setSize( 'height', data.height ); iframe && iframe.setSize( 'width', data.width ); } }); rt-4.4.4/devel/third-party/wsc-src/dialogs/ciframe.html0000644000175000017500000000313014006075343021134 0ustar domdom

      rt-4.4.4/devel/third-party/wsc-src/dialogs/wsc.css0000644000175000017500000000217614006075343020157 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ html, body { background-color: transparent; margin: 0px; padding: 0px; } body { padding: 10px; } body, td, input, select, textarea { font-size: 11px; font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; } .midtext { padding:0px; margin:10px; } .midtext p { padding:0px; margin:10px; } .Button { border: #737357 1px solid; color: #3b3b1f; background-color: #c7c78f; } .PopupTabArea { color: #737357; background-color: #e3e3c7; } .PopupTitleBorder { border-bottom: #d5d59d 1px solid; } .PopupTabEmptyArea { padding-left: 10px; border-bottom: #d5d59d 1px solid; } .PopupTab, .PopupTabSelected { border-right: #d5d59d 1px solid; border-top: #d5d59d 1px solid; border-left: #d5d59d 1px solid; padding: 3px 5px 3px 5px; color: #737357; } .PopupTab { margin-top: 1px; border-bottom: #d5d59d 1px solid; cursor: pointer; } .PopupTabSelected { font-weight: bold; cursor: default; padding-top: 4px; border-bottom: #f1f1e3 1px solid; background-color: #f1f1e3; } rt-4.4.4/devel/third-party/wsc-src/dialogs/tmpFrameset.html0000644000175000017500000000356614006075343022032 0ustar domdom rt-4.4.4/devel/third-party/wsc-src/README.md0000644000175000017500000001066014006075343016503 0ustar domdomImprortant! ------------ WebSpellChecker Dialog plugin for CKEditor 4 is appoaching its end-of-life (EOL) in 2021. Find out more in our [blog post](https://webspellchecker.com/blog/2020/12/02/end-of-life-for-spell-checker-dialog-plugin-for-ckeditor-4/) about its termination schedule. WebSpellChecker Dialog plugin for CKEditor 4 =============================== WebSpellChecker Dialog (WSC Dialog) provides distraction-free proofreading, checking the whole text’s spelling and grammar on-click in a separate pop-up window. ![WSC Dialog Plugin for CKEditor 4 View](https://webspellchecker.com/app/images/wsc_dialog_plugin_for_ckeditor4.png) This plugin brings the multi-language WSC Dialog functionality into CKEditor 4. It is integrated by default starting with [Standard Package of CKEditor 4](https://ckeditor.com/ckeditor-4/download/). You can find it on the CKEditor 4 toolbar panel under the ABC button (Check Spelling). If your version of CKEditor doesn’t have WSC Dialog built-in, you can easily add it by following the steps outlined in the Get Started section. The default version of WSC Dialog plugin for CKEditor 4 is using the free services of WebSpellChecker. It is provided with a banner ad and has some [limitations](https://docs.webspellchecker.net/display/WebSpellCheckerCloud/Free+and+Paid+WebSpellChecker+Cloud+Services+Comparison+for+CKEditor). To lift the limitations and get rid of the banner, [obtain a license](https://webspellchecker.com/wsc-dialog-ckeditor4/#pricing). Depending on your needs, you can choose a Cloud-based or Server (self-hosted) solution. Demo ------------ WSC Dialog plugin for CKEditor 4: https://webspellchecker.com/wsc-dialog-ckeditor4/ Supported languages ------------ The WSC Dialog plugin for CKEditor as a part of the free services supports the next languages for check spelling: American English, British English, Canadian English, Canadian French, Danish, Dutch, Finnish, French, German, Greek, Italian, Norwegian Bokmal, Spanish, Swedish. There are also additional languages and specialized dictionaries available for a commercial license, you can check the full list [here](https://webspellchecker.com/additional-dictionaries/). Get started ------------ 1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. 2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): config.extraPlugins = 'wsc'; That's all. WSC Dialog will appear on the editor toolbar under the ABC button and will be ready to use. Supported browsers ------- This is the list of officially supported browsers for the WSC Dialog plugin for CKEditor 4. WSC Dialog may also work in other browsers and environments but we unable to check all of them and guarantee proper work. * Chrome (the latest) * Firefox (the latest) * Safari (the latest) * MS Edge (the latest) * Internet Explorer 8.0 (limited support) * Internet Explorer 9.0+ (close to full support) Note: All browsers are to be supported for web pages that work in Standards Mode. Resources ------- * Demo: https://webspellchecker.com/wsc-dialog-ckeditor4/ * Documentation: https://docs.webspellchecker.net/ * YouTube video: https://youtu.be/bkVPZ-5T22Q * Term of Service: https://webspellchecker.com/terms-of-service/ Technical support or questions ------- In cooperation with the CKEditor team, during the past 10 years we have simplified the installation and built the extensive amount of documentation devoted to WSC Dialog plugin for CKEditor 4 and less. If you are experiencing any difficulties with the setup of the plugin, please check the links provided in the Resources section. Holders of an active subscription to the services or a commercial license have access to professional technical assistance directly from the WebSpellChecker team. [Contact us here](https://webspellchecker.com/contact-us/)! Reporting issues ------- Please use the [WSC Dialog plugin for CKEditor 4 GitHub issue page](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues) to report bugs and feature requests. We will do our best to reply at our earliest convenience. License ------- This plugin is 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. Developed by [WebSpellChecker](https://webspellchecker.com/) in cooperation with CKSource. rt-4.4.4/devel/third-party/wsc-src/lang/0000755000175000017500000000000014006075343016142 5ustar domdomrt-4.4.4/devel/third-party/wsc-src/lang/bg.js0000644000175000017500000000221514006075343017070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'bg', { btnIgnore: 'Игнорирай', btnIgnoreAll: 'Игнорирай всичко', btnReplace: 'Препокриване', btnReplaceAll: 'Препокрий всичко', btnUndo: 'Възтанови', changeTo: 'Промени на', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Spell checker not installed. Do you want to download it now?', manyChanges: 'Spell check complete: %1 words changed', noChanges: 'Spell check complete: No words changed', noMispell: 'Spell check complete: No misspellings found', noSuggestions: '- Няма препоръчани -', notAvailable: 'Съжаляваме, но услугата не е достъпна за момента', notInDic: 'Не е в речника', oneChange: 'Spell check complete: One word changed', progress: 'Проверява се правописа...', title: 'Проверка на правопис', toolbar: 'Проверка на правопис' }); rt-4.4.4/devel/third-party/wsc-src/lang/cy.js0000644000175000017500000000174114006075343017116 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'cy', { btnIgnore: 'Anwybyddu Un', btnIgnoreAll: 'Anwybyddu Pob', btnReplace: 'Amnewid Un', btnReplaceAll: 'Amnewid Pob', btnUndo: 'Dadwneud', changeTo: 'Newid i', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?', manyChanges: 'Gwirio sillafu wedi gorffen: Newidiwyd %1 gair', noChanges: 'Gwirio sillafu wedi gorffen: Dim newidiadau', noMispell: 'Gwirio sillafu wedi gorffen: Dim camsillaf.', noSuggestions: '- Dim awgrymiadau -', notAvailable: 'Nid yw\'r gwasanaeth hwn ar gael yn bresennol.', notInDic: 'Nid i\'w gael yn y geiriadur', oneChange: 'Gwirio sillafu wedi gorffen: Newidiwyd 1 gair', progress: 'Gwirio sillafu yn ar y gweill...', title: 'Gwirio Sillafu', toolbar: 'Gwirio Sillafu' }); rt-4.4.4/devel/third-party/wsc-src/lang/no.js0000644000175000017500000000166614006075343017125 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'no', { btnIgnore: 'Ignorer', btnIgnoreAll: 'Ignorer alle', btnReplace: 'Erstatt', btnReplaceAll: 'Erstatt alle', btnUndo: 'Angre', changeTo: 'Endre til', errorLoading: 'Feil under lasting av applikasjonstjenestetjener: %s.', ieSpellDownload: 'Stavekontroll er ikke installert. Vil du laste den ned nå?', manyChanges: 'Stavekontroll fullført: %1 ord endret', noChanges: 'Stavekontroll fullført: ingen ord endret', noMispell: 'Stavekontroll fullført: ingen feilstavinger funnet', noSuggestions: '- Ingen forslag -', notAvailable: 'Beklager, tjenesten er utilgjenglig nå.', notInDic: 'Ikke i ordboken', oneChange: 'Stavekontroll fullført: Ett ord endret', progress: 'Stavekontroll pågår...', title: 'Stavekontroll', toolbar: 'Stavekontroll' }); rt-4.4.4/devel/third-party/wsc-src/lang/hr.js0000644000175000017500000000170014006075343017107 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'hr', { btnIgnore: 'Zanemari', btnIgnoreAll: 'Zanemari sve', btnReplace: 'Zamijeni', btnReplaceAll: 'Zamijeni sve', btnUndo: 'Vrati', changeTo: 'Promijeni u', errorLoading: 'Greška učitavanja aplikacije: %s.', ieSpellDownload: 'Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?', manyChanges: 'Provjera završena: Promijenjeno %1 riječi', noChanges: 'Provjera završena: Nije napravljena promjena', noMispell: 'Provjera završena: Nema grešaka', noSuggestions: '-Nema preporuke-', notAvailable: 'Žao nam je, ali usluga trenutno nije dostupna.', notInDic: 'Nije u rječniku', oneChange: 'Provjera završena: Jedna riječ promjenjena', progress: 'Provjera u tijeku...', title: 'Provjera pravopisa', toolbar: 'Provjeri pravopis' }); rt-4.4.4/devel/third-party/wsc-src/lang/th.js0000644000175000017500000000274614006075343017124 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'th', { btnIgnore: 'ยกเว้น', btnIgnoreAll: 'ยกเว้นทั้งหมด', btnReplace: 'แทนที่', btnReplaceAll: 'แทนที่ทั้งหมด', btnUndo: 'ยกเลิก', changeTo: 'แก้ไขเป็น', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?', manyChanges: 'ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ', noChanges: 'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ', noMispell: 'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด', noSuggestions: '- ไม่มีคำแนะนำใดๆ -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'ไม่พบในดิกชันนารี', oneChange: 'ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ', progress: 'กำลังตรวจสอบคำสะกด...', title: 'Spell Checker', toolbar: 'ตรวจการสะกดคำ' }); rt-4.4.4/devel/third-party/wsc-src/lang/ar.js0000644000175000017500000000244414006075343017106 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ar', { btnIgnore: 'تجاهل', btnIgnoreAll: 'تجاهل الكل', btnReplace: 'تغيير', btnReplaceAll: 'تغيير الكل', btnUndo: 'تراجع', changeTo: 'التغيير إلى', errorLoading: 'خطأ في تحميل تطبيق خدمة الاستضافة: %s.', ieSpellDownload: 'المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟', manyChanges: 'تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات', noChanges: 'تم التدقيق الإملائي: لم يتم تغيير أي كلمة', noMispell: 'تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية', noSuggestions: '- لا توجد إقتراحات -', notAvailable: 'عفواً، ولكن هذه الخدمة غير متاحة الان', notInDic: 'ليست في القاموس', oneChange: 'تم التدقيق الإملائي: تم تغيير كلمة واحدة فقط', progress: 'جاري التدقيق الاملائى', title: 'التدقيق الإملائي', toolbar: 'تدقيق إملائي' }); rt-4.4.4/devel/third-party/wsc-src/lang/sk.js0000644000175000017500000000207114006075343017115 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'sk', { btnIgnore: 'Ignorovať', btnIgnoreAll: 'Ignorovať všetko', btnReplace: 'Prepísat', btnReplaceAll: 'Prepísat všetko', btnUndo: 'Späť', changeTo: 'Zmeniť na', errorLoading: 'Chyba pri načítaní slovníka z adresy: %s.', ieSpellDownload: 'Kontrola pravopisu nie je naištalovaná. Chcete ju teraz stiahnuť?', manyChanges: 'Kontrola pravopisu dokončená: Bolo zmenených %1 slov', noChanges: 'Kontrola pravopisu dokončená: Neboli zmenené žiadne slová', noMispell: 'Kontrola pravopisu dokončená: Neboli nájdené žiadne chyby pravopisu', noSuggestions: '- Žiadny návrh -', notAvailable: 'Prepáčte, ale služba je momentálne nedostupná.', notInDic: 'Nie je v slovníku', oneChange: 'Kontrola pravopisu dokončená: Bolo zmenené jedno slovo', progress: 'Prebieha kontrola pravopisu...', title: 'Skontrolovať pravopis', toolbar: 'Kontrola pravopisu' }); rt-4.4.4/devel/third-party/wsc-src/lang/ro.js0000644000175000017500000000213514006075343017121 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ro', { btnIgnore: 'Ignoră', btnIgnoreAll: 'Ignoră toate', btnReplace: 'Înlocuieşte', btnReplaceAll: 'Înlocuieşte tot', btnUndo: 'Starea anterioară (undo)', changeTo: 'Schimbă în', errorLoading: 'Eroare în lansarea aplicației service host %s.', ieSpellDownload: 'Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?', manyChanges: 'Verificarea textului terminată: 1% cuvinte modificate', noChanges: 'Verificarea textului terminată: Niciun cuvânt modificat', noMispell: 'Verificarea textului terminată: Nicio greşeală găsită', noSuggestions: '- Fără sugestii -', notAvailable: 'Scuzați, dar serviciul nu este disponibil momentan.', notInDic: 'Nu e în dicţionar', oneChange: 'Verificarea textului terminată: Un cuvânt modificat', progress: 'Verificarea textului în desfăşurare...', title: 'Spell Checker', toolbar: 'Verifică scrierea textului' }); rt-4.4.4/devel/third-party/wsc-src/lang/en-ca.js0000644000175000017500000000164314006075343017467 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'en-ca', { btnIgnore: 'Ignore', btnIgnoreAll: 'Ignore All', btnReplace: 'Replace', btnReplaceAll: 'Replace All', btnUndo: 'Undo', changeTo: 'Change to', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Spell checker not installed. Do you want to download it now?', manyChanges: 'Spell check complete: %1 words changed', noChanges: 'Spell check complete: No words changed', noMispell: 'Spell check complete: No misspellings found', noSuggestions: '- No suggestions -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Not in dictionary', oneChange: 'Spell check complete: One word changed', progress: 'Spell check in progress...', title: 'Spell Checker', toolbar: 'Check Spelling' }); rt-4.4.4/devel/third-party/wsc-src/lang/ug.js0000644000175000017500000000260114006075343017112 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ug', { btnIgnore: 'پەرۋا قىلما', btnIgnoreAll: 'ھەممىگە پەرۋا قىلما', btnReplace: 'ئالماشتۇر', btnReplaceAll: 'ھەممىنى ئالماشتۇر', btnUndo: 'يېنىۋال', changeTo: 'ئۆزگەرت', errorLoading: 'لازىملىق مۇلازىمېتىرنى يۈكلىگەندە خاتالىق كۆرۈلدى: %s.', ieSpellDownload: 'ئىملا تەكشۈرۈش قىستۇرمىسى تېخى ئورنىتىلمىغان، ھازىرلا چۈشۈرەمسىز؟', manyChanges: 'ئىملا تەكشۈرۈش تامام: %1 سۆزنى ئۆزگەرتتى', noChanges: 'ئىملا تەكشۈرۈش تامام: ھېچقانداق سۆزنى ئۆزگەرتمىدى', noMispell: 'ئىملا تەكشۈرۈش تامام: ئىملا خاتالىقى بايقالمىدى', noSuggestions: '-تەكلىپ يوق-', notAvailable: 'كەچۈرۈڭ، مۇلازىمېتىرنى ۋاقتىنچە ئىشلەتكىلى بولمايدۇ', notInDic: 'لۇغەتتە يوق', oneChange: 'ئىملا تەكشۈرۈش تامام: بىر سۆزنى ئۆزگەرتتى', progress: 'ئىملا تەكشۈرۈۋاتىدۇ…', title: 'ئىملا تەكشۈر', toolbar: 'ئىملا تەكشۈر' }); rt-4.4.4/devel/third-party/wsc-src/lang/el.js0000644000175000017500000000274314006075343017106 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'el', { btnIgnore: 'Αγνόηση', btnIgnoreAll: 'Αγνόηση όλων', btnReplace: 'Αντικατάσταση', btnReplaceAll: 'Αντικατάσταση όλων', btnUndo: 'Αναίρεση', changeTo: 'Αλλαγή σε', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;', manyChanges: 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξαν %1 λέξεις', noChanges: 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις', noMispell: 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη', noSuggestions: '- Δεν υπάρχουν προτάσεις -', notAvailable: 'Η υπηρεσία δεν είναι διαθέσιμη αυτήν την στιγμή.', notInDic: 'Δεν υπάρχει στο λεξικό', oneChange: 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξε μια λέξη', progress: 'Γίνεται ορθογραφικός έλεγχος...', title: 'Ορθογραφικός Έλεγχος', toolbar: 'Ορθογραφικός Έλεγχος' }); rt-4.4.4/devel/third-party/wsc-src/lang/de.js0000644000175000017500000000210714006075343017070 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'de', { btnIgnore: 'Ignorieren', btnIgnoreAll: 'Alle Ignorieren', btnReplace: 'Ersetzen', btnReplaceAll: 'Alle Ersetzen', btnUndo: 'Rückgängig', changeTo: 'Ändern in', errorLoading: 'Fehler beim laden des Dienstanbieters: %s.', ieSpellDownload: 'Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?', manyChanges: 'Rechtschreibprüfung abgeschlossen - %1 Wörter geändert', noChanges: 'Rechtschreibprüfung abgeschlossen - keine Worte geändert', noMispell: 'Rechtschreibprüfung abgeschlossen - keine Fehler gefunden', noSuggestions: ' - keine Vorschläge - ', notAvailable: 'Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.', notInDic: 'Nicht im Wörterbuch', oneChange: 'Rechtschreibprüfung abgeschlossen - ein Wort geändert', progress: 'Rechtschreibprüfung läuft...', title: 'Rechtschreibprüfung', toolbar: 'Rechtschreibprüfung' }); rt-4.4.4/devel/third-party/wsc-src/lang/uk.js0000644000175000017500000000266614006075343017131 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'uk', { btnIgnore: 'Пропустити', btnIgnoreAll: 'Пропустити все', btnReplace: 'Замінити', btnReplaceAll: 'Замінити все', btnUndo: 'Назад', changeTo: 'Замінити на', errorLoading: 'Помилка завантаження : %s.', ieSpellDownload: 'Модуль перевірки орфографії не встановлено. Бажаєте завантажити його зараз?', manyChanges: 'Перевірку орфографії завершено: 1% слів(ова) змінено', noChanges: 'Перевірку орфографії завершено: жодне слово не змінено', noMispell: 'Перевірку орфографії завершено: помилок не знайдено', noSuggestions: '- немає варіантів -', notAvailable: 'Вибачте, але сервіс наразі недоступний.', notInDic: 'Немає в словнику', oneChange: 'Перевірку орфографії завершено: змінено одне слово', progress: 'Виконується перевірка орфографії...', title: 'Перевірка орфографії', toolbar: 'Перевірити орфографію' }); rt-4.4.4/devel/third-party/wsc-src/lang/sr-latn.js0000644000175000017500000000177414006075343020071 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'sr-latn', { btnIgnore: 'Ignoriši', btnIgnoreAll: 'Ignoriši sve', btnReplace: 'Zameni', btnReplaceAll: 'Zameni sve', btnUndo: 'Vrati akciju', changeTo: 'Izmeni', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?', manyChanges: 'Provera spelovanja završena: %1 reč(i) je izmenjeno', noChanges: 'Provera spelovanja završena: Nije izmenjena nijedna rec', noMispell: 'Provera spelovanja završena: greške nisu pronadene', noSuggestions: '- Bez sugestija -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Nije u rečniku', oneChange: 'Provera spelovanja završena: Izmenjena je jedna reč', progress: 'Provera spelovanja u toku...', title: 'Spell Checker', toolbar: 'Proveri spelovanje' }); rt-4.4.4/devel/third-party/wsc-src/lang/km.js0000644000175000017500000000335414006075343017114 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'km', { btnIgnore: 'មិនផ្លាស់ប្តូរ', btnIgnoreAll: 'មិនផ្លាស់ប្តូរ ទាំងអស់', btnReplace: 'ជំនួស', btnReplaceAll: 'ជំនួសទាំងអស់', btnUndo: 'សារឡើងវិញ', changeTo: 'ផ្លាស់ប្តូរទៅ', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?', manyChanges: 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ', noChanges: 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ', noMispell: 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស', noSuggestions: '- គ្មានសំណើរ -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'គ្មានក្នុងវចនានុក្រម', oneChange: 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ', progress: 'កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...', title: 'Spell Checker', toolbar: 'ពិនិត្យអក្ខរាវិរុទ្ធ' }); rt-4.4.4/devel/third-party/wsc-src/lang/eu.js0000644000175000017500000000202414006075343017107 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'eu', { btnIgnore: 'Ezikusi', btnIgnoreAll: 'Denak Ezikusi', btnReplace: 'Ordezkatu', btnReplaceAll: 'Denak Ordezkatu', btnUndo: 'Desegin', changeTo: 'Honekin ordezkatu', errorLoading: 'Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.', ieSpellDownload: 'Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?', manyChanges: 'Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira', noChanges: 'Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu', noMispell: 'Zuzenketa ortografikoa bukatuta: Akatsik ez', noSuggestions: '- Iradokizunik ez -', notAvailable: 'Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.', notInDic: 'Ez dago hiztegian', oneChange: 'Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da', progress: 'Zuzenketa ortografikoa martxan...', title: 'Ortografia zuzenketa', toolbar: 'Ortografia' }); rt-4.4.4/devel/third-party/wsc-src/lang/fa.js0000644000175000017500000000243414006075343017071 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'fa', { btnIgnore: 'چشمپوشی', btnIgnoreAll: 'چشمپوشی همه', btnReplace: 'جایگزینی', btnReplaceAll: 'جایگزینی همه', btnUndo: 'واچینش', changeTo: 'تغییر به', errorLoading: 'خطا در بارگیری برنامه خدمات میزبان: %s.', ieSpellDownload: 'بررسی کنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟', manyChanges: 'بررسی املا انجام شد. %1 واژه تغییر یافت', noChanges: 'بررسی املا انجام شد. هیچ واژهای تغییر نیافت', noMispell: 'بررسی املا انجام شد. هیچ غلط املائی یافت نشد', noSuggestions: '- پیشنهادی نیست -', notAvailable: 'با عرض پوزش خدمات الان در دسترس نیستند.', notInDic: 'در واژه~نامه یافت نشد', oneChange: 'بررسی املا انجام شد. یک واژه تغییر یافت', progress: 'بررسی املا در حال انجام...', title: 'بررسی املا', toolbar: 'بررسی املا' }); rt-4.4.4/devel/third-party/wsc-src/lang/en.js0000644000175000017500000000164014006075343017103 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'en', { btnIgnore: 'Ignore', btnIgnoreAll: 'Ignore All', btnReplace: 'Replace', btnReplaceAll: 'Replace All', btnUndo: 'Undo', changeTo: 'Change to', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Spell checker not installed. Do you want to download it now?', manyChanges: 'Spell check complete: %1 words changed', noChanges: 'Spell check complete: No words changed', noMispell: 'Spell check complete: No misspellings found', noSuggestions: '- No suggestions -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Not in dictionary', oneChange: 'Spell check complete: One word changed', progress: 'Spell check in progress...', title: 'Spell Checker', toolbar: 'Check Spelling' }); rt-4.4.4/devel/third-party/wsc-src/lang/he.js0000644000175000017500000000213214006075343017072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'he', { btnIgnore: 'התעלמות', btnIgnoreAll: 'התעלמות מהכל', btnReplace: 'החלפה', btnReplaceAll: 'החלפת הכל', btnUndo: 'החזרה', changeTo: 'שינוי ל', errorLoading: 'שגיאה בהעלאת השירות: %s.', ieSpellDownload: 'בודק האיות לא מותקן, האם להורידו?', manyChanges: 'בדיקות איות הסתיימה: %1 מילים שונו', noChanges: 'בדיקות איות הסתיימה: לא שונתה אף מילה', noMispell: 'בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב', noSuggestions: '- אין הצעות -', notAvailable: 'לא נמצא שירות זמין.', notInDic: 'לא נמצא במילון', oneChange: 'בדיקות איות הסתיימה: שונתה מילה אחת', progress: 'בודק האיות בתהליך בדיקה....', title: 'בדיקת איות', toolbar: 'בדיקת איות' }); rt-4.4.4/devel/third-party/wsc-src/lang/lt.js0000644000175000017500000000177414006075343017130 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'lt', { btnIgnore: 'Ignoruoti', btnIgnoreAll: 'Ignoruoti visus', btnReplace: 'Pakeisti', btnReplaceAll: 'Pakeisti visus', btnUndo: 'Atšaukti', changeTo: 'Pakeisti į', errorLoading: 'Klaida įkraunant servisą: %s.', ieSpellDownload: 'Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?', manyChanges: 'Rašybos tikrinimas baigtas: Pakeista %1 žodžių', noChanges: 'Rašybos tikrinimas baigtas: Nėra pakeistų žodžių', noMispell: 'Rašybos tikrinimas baigtas: Nerasta rašybos klaidų', noSuggestions: '- Nėra pasiūlymų -', notAvailable: 'Atleiskite, šiuo metu servisas neprieinamas.', notInDic: 'Žodyne nerastas', oneChange: 'Rašybos tikrinimas baigtas: Vienas žodis pakeistas', progress: 'Vyksta rašybos tikrinimas...', title: 'Tikrinti klaidas', toolbar: 'Rašybos tikrinimas' }); rt-4.4.4/devel/third-party/wsc-src/lang/lv.js0000644000175000017500000000211614006075343017121 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'lv', { btnIgnore: 'Ignorēt', btnIgnoreAll: 'Ignorēt visu', btnReplace: 'Aizvietot', btnReplaceAll: 'Aizvietot visu', btnUndo: 'Atcelt', changeTo: 'Nomainīt uz', errorLoading: 'Kļūda ielādējot aplikācijas servisa adresi: %s.', ieSpellDownload: 'Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?', manyChanges: 'Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti', noChanges: 'Pareizrakstības pārbaude pabeigta: nekas netika labots', noMispell: 'Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas', noSuggestions: '- Nav ieteikumu -', notAvailable: 'Atvainojiet, bet serviss šobrīd nav pieejams.', notInDic: 'Netika atrasts vārdnīcā', oneChange: 'Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts', progress: 'Notiek pareizrakstības pārbaude...', title: 'Pārbaudīt gramatiku', toolbar: 'Pareizrakstības pārbaude' }); rt-4.4.4/devel/third-party/wsc-src/lang/eo.js0000644000175000017500000000200614006075343017101 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'eo', { btnIgnore: 'Ignori', btnIgnoreAll: 'Ignori Ĉion', btnReplace: 'Anstataŭigi', btnReplaceAll: 'Anstataŭigi Ĉion', btnUndo: 'Malfari', changeTo: 'Ŝanĝi al', errorLoading: 'Eraro en la servoelŝuto el la gastiga komputiko: %s.', ieSpellDownload: 'Ortografikontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?', manyChanges: 'Ortografikontrolado finita: %1 vortoj korektitaj', noChanges: 'Ortografikontrolado finita: neniu vorto korektita', noMispell: 'Ortografikontrolado finita: neniu eraro trovita', noSuggestions: '- Neniu propono -', notAvailable: 'Bedaŭrinde la servo ne funkcias nuntempe.', notInDic: 'Ne trovita en la vortaro', oneChange: 'Ortografikontrolado finita: unu vorto korektita', progress: 'La ortografio estas kontrolata...', title: 'Kontroli la ortografion', toolbar: 'Kontroli la ortografion' }); rt-4.4.4/devel/third-party/wsc-src/lang/ca.js0000644000175000017500000000201514006075343017061 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ca', { btnIgnore: 'Ignora', btnIgnoreAll: 'Ignora-les totes', btnReplace: 'Canvia', btnReplaceAll: 'Canvia-les totes', btnUndo: 'Desfés', changeTo: 'Reemplaça amb', errorLoading: 'Error carregant el servidor: %s.', ieSpellDownload: 'Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?', manyChanges: 'Verificació ortogràfica: s\'han canviat %1 paraules', noChanges: 'Verificació ortogràfica: no s\'ha canviat cap paraula', noMispell: 'Verificació ortogràfica acabada: no hi ha cap paraula mal escrita', noSuggestions: 'Cap suggeriment', notAvailable: 'El servei no es troba disponible ara.', notInDic: 'No és al diccionari', oneChange: 'Verificació ortogràfica: s\'ha canviat una paraula', progress: 'Verificació ortogràfica en curs...', title: 'Comprova l\'ortografia', toolbar: 'Revisa l\'ortografia' }); rt-4.4.4/devel/third-party/wsc-src/lang/hi.js0000644000175000017500000000304714006075343017104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'hi', { btnIgnore: 'इग्नोर', btnIgnoreAll: 'सभी इग्नोर करें', btnReplace: 'रिप्लेस', btnReplaceAll: 'सभी रिप्लेस करें', btnUndo: 'अन्डू', changeTo: 'इसमें बदलें', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?', manyChanges: 'वर्तनी की जाँच : %1 शब्द बदले गये', noChanges: 'वर्तनी की जाँच :कोई शब्द नहीं बदला गया', noMispell: 'वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई', noSuggestions: '- कोई सुझाव नहीं -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'शब्दकोश में नहीं', oneChange: 'वर्तनी की जाँच : एक शब्द बदला गया', progress: 'वर्तनी की जाँच (स्पॅल-चॅक) जारी है...', title: 'Spell Checker', toolbar: 'वर्तनी (स्पेलिंग) जाँच' }); rt-4.4.4/devel/third-party/wsc-src/lang/mk.js0000644000175000017500000000164014006075343017110 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'mk', { btnIgnore: 'Ignore', btnIgnoreAll: 'Ignore All', btnReplace: 'Replace', btnReplaceAll: 'Replace All', btnUndo: 'Undo', changeTo: 'Change to', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Spell checker not installed. Do you want to download it now?', manyChanges: 'Spell check complete: %1 words changed', noChanges: 'Spell check complete: No words changed', noMispell: 'Spell check complete: No misspellings found', noSuggestions: '- No suggestions -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Not in dictionary', oneChange: 'Spell check complete: One word changed', progress: 'Spell check in progress...', title: 'Spell Checker', toolbar: 'Check Spelling' }); rt-4.4.4/devel/third-party/wsc-src/lang/mn.js0000644000175000017500000000232714006075343017116 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'mn', { btnIgnore: 'Зөвшөөрөх', btnIgnoreAll: 'Бүгдийг зөвшөөрөх', btnReplace: 'Солих', btnReplaceAll: 'Бүгдийг Дарж бичих', btnUndo: 'Буцаах', changeTo: 'Өөрчлөх', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?', manyChanges: 'Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн', noChanges: 'Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй', noMispell: 'Дүрэм шалгаад дууссан: Алдаа олдсонгүй', noSuggestions: '- Тайлбаргүй -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Толь бичиггүй', oneChange: 'Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн', progress: 'Дүрэм шалгаж байгаа үйл явц...', title: 'Spell Checker', toolbar: 'Үгийн дүрэх шалгах' }); rt-4.4.4/devel/third-party/wsc-src/lang/gl.js0000644000175000017500000000205114006075343017100 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'gl', { btnIgnore: 'Ignorar', btnIgnoreAll: 'Ignorar Todas', btnReplace: 'Substituir', btnReplaceAll: 'Substituir Todas', btnUndo: 'Desfacer', changeTo: 'Cambiar a', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'O corrector ortográfico non está instalado. ¿Quere descargalo agora?', manyChanges: 'Corrección ortográfica rematada: %1 verbas substituidas', noChanges: 'Corrección ortográfica rematada: Non se substituiu nengunha verba', noMispell: 'Corrección ortográfica rematada: Non se atoparon erros', noSuggestions: '- Sen candidatos -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Non está no diccionario', oneChange: 'Corrección ortográfica rematada: Unha verba substituida', progress: 'Corrección ortográfica en progreso...', title: 'Spell Checker', toolbar: 'Corrección Ortográfica' }); rt-4.4.4/devel/third-party/wsc-src/lang/ko.js0000644000175000017500000000203514006075343017111 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ko', { btnIgnore: '건너뜀', btnIgnoreAll: '모두 건너뜀', btnReplace: '변경', btnReplaceAll: '모두 변경', btnUndo: '취소', changeTo: '변경할 단어', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: '철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?', manyChanges: '철자검사 완료: %1 단어가 변경되었습니다.', noChanges: '철자검사 완료: 변경된 단어가 없습니다.', noMispell: '철자검사 완료: 잘못된 철자가 없습니다.', noSuggestions: '- 추천단어 없음 -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: '사전에 없는 단어', oneChange: '철자검사 완료: 단어가 변경되었습니다.', progress: '철자검사를 진행중입니다...', title: 'Spell Check', toolbar: '철자검사' }); rt-4.4.4/devel/third-party/wsc-src/lang/zh.js0000644000175000017500000000162414006075343017124 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'zh', { btnIgnore: '忽略', btnIgnoreAll: '全部忽略', btnReplace: '取代', btnReplaceAll: '全部取代', btnUndo: '復原', changeTo: '更改為', errorLoading: '無法聯系侍服器: %s.', ieSpellDownload: '尚未安裝拼字檢查元件。您是否想要現在下載?', manyChanges: '拼字檢查完成:更改了 %1 個單字', noChanges: '拼字檢查完成:未更改任何單字', noMispell: '拼字檢查完成:未發現拼字錯誤', noSuggestions: '- 無建議值 -', notAvailable: '抱歉,服務目前暫不可用', notInDic: '不在字典中', oneChange: '拼字檢查完成:更改了 1 個單字', progress: '進行拼字檢查中…', title: '拼字檢查', toolbar: '拼字檢查' }); rt-4.4.4/devel/third-party/wsc-src/lang/es.js0000644000175000017500000000202314006075343017104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'es', { btnIgnore: 'Ignorar', btnIgnoreAll: 'Ignorar Todo', btnReplace: 'Reemplazar', btnReplaceAll: 'Reemplazar Todo', btnUndo: 'Deshacer', changeTo: 'Cambiar a', errorLoading: 'Error cargando la aplicación del servidor: %s.', ieSpellDownload: 'Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?', manyChanges: 'Control finalizado: se ha cambiado %1 palabras', noChanges: 'Control finalizado: no se ha cambiado ninguna palabra', noMispell: 'Control finalizado: no se encontraron errores', noSuggestions: '- No hay sugerencias -', notAvailable: 'Lo sentimos pero el servicio no está disponible.', notInDic: 'No se encuentra en el Diccionario', oneChange: 'Control finalizado: se ha cambiado una palabra', progress: 'Control de Ortografía en progreso...', title: 'Comprobar ortografía', toolbar: 'Ortografía' }); rt-4.4.4/devel/third-party/wsc-src/lang/is.js0000644000175000017500000000160014006075343017110 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'is', { btnIgnore: 'Hunsa', btnIgnoreAll: 'Hunsa allt', btnReplace: 'Skipta', btnReplaceAll: 'Skipta öllu', btnUndo: 'Til baka', changeTo: 'Tillaga', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Villuleit ekki sett upp.
      Viltu setja hana upp?', manyChanges: 'Villuleit lokið: %1 orðum breytt', noChanges: 'Villuleit lokið: Engu orði breytt', noMispell: 'Villuleit lokið: Engin villa fannst', noSuggestions: '- engar tillögur -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Ekki í orðabókinni', oneChange: 'Villuleit lokið: Einu orði breytt', progress: 'Villuleit í gangi...', title: 'Spell Checker', toolbar: 'Villuleit' }); rt-4.4.4/devel/third-party/wsc-src/lang/fo.js0000644000175000017500000000173514006075343017112 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'fo', { btnIgnore: 'Forfjóna', btnIgnoreAll: 'Forfjóna alt', btnReplace: 'Yvirskriva', btnReplaceAll: 'Yvirskriva alt', btnUndo: 'Angra', changeTo: 'Broyt til', errorLoading: 'Feilur við innlesing av application service host: %s.', ieSpellDownload: 'Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?', manyChanges: 'Rættstavarin liðugur: %1 orð broytt', noChanges: 'Rættstavarin liðugur: Einki orð varð broytt', noMispell: 'Rættstavarin liðugur: Eingin feilur funnin', noSuggestions: '- Einki uppskot -', notAvailable: 'Tíverri, ikki tøkt í løtuni.', notInDic: 'Finst ikki í orðabókini', oneChange: 'Rættstavarin liðugur: Eitt orð er broytt', progress: 'Rættstavarin arbeiðir...', title: 'Kanna stavseting', toolbar: 'Kanna stavseting' }); rt-4.4.4/devel/third-party/wsc-src/lang/it.js0000644000175000017500000000202514006075343017113 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'it', { btnIgnore: 'Ignora', btnIgnoreAll: 'Ignora tutto', btnReplace: 'Cambia', btnReplaceAll: 'Cambia tutto', btnUndo: 'Annulla', changeTo: 'Cambia in', errorLoading: 'Errore nel caricamento dell\'host col servizio applicativo: %s.', ieSpellDownload: 'Contollo ortografico non installato. Lo vuoi scaricare ora?', manyChanges: 'Controllo ortografico completato: %1 parole cambiate', noChanges: 'Controllo ortografico completato: nessuna parola cambiata', noMispell: 'Controllo ortografico completato: nessun errore trovato', noSuggestions: '- Nessun suggerimento -', notAvailable: 'Il servizio non è momentaneamente disponibile.', notInDic: 'Non nel dizionario', oneChange: 'Controllo ortografico completato: 1 parola cambiata', progress: 'Controllo ortografico in corso', title: 'Controllo ortografico', toolbar: 'Correttore ortografico' }); rt-4.4.4/devel/third-party/wsc-src/lang/sv.js0000644000175000017500000000173214006075343017133 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'sv', { btnIgnore: 'Ignorera', btnIgnoreAll: 'Ignorera alla', btnReplace: 'Ersätt', btnReplaceAll: 'Ersätt alla', btnUndo: 'Ångra', changeTo: 'Ändra till', errorLoading: 'Tjänsten är ej tillgänglig: %s.', ieSpellDownload: 'Stavningskontrollen är ej installerad. Vill du göra det nu?', manyChanges: 'Stavningskontroll slutförd: %1 ord rättades.', noChanges: 'Stavningskontroll slutförd: Inga ord rättades.', noMispell: 'Stavningskontroll slutförd: Inga stavfel påträffades.', noSuggestions: '- Förslag saknas -', notAvailable: 'Tyvärr är tjänsten ej tillgänglig nu', notInDic: 'Saknas i ordlistan', oneChange: 'Stavningskontroll slutförd: Ett ord rättades.', progress: 'Stavningskontroll pågår...', title: 'Kontrollera stavning', toolbar: 'Stavningskontroll' }); rt-4.4.4/devel/third-party/wsc-src/lang/gu.js0000644000175000017500000000330214006075343017111 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'gu', { btnIgnore: 'ઇગ્નોર/અવગણના કરવી', btnIgnoreAll: 'બધાની ઇગ્નોર/અવગણના કરવી', btnReplace: 'બદલવું', btnReplaceAll: 'બધા બદલી કરો', btnUndo: 'અન્ડૂ', changeTo: 'આનાથી બદલવું', errorLoading: 'સર્વિસ એપ્લીકેશન લોડ નથી થ: %s.', ieSpellDownload: 'સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?', manyChanges: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે', noChanges: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી', noMispell: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી', noSuggestions: '- કઇ સજેશન નથી -', notAvailable: 'માફ કરશો, આ સુવિધા ઉપલબ્ધ નથી', notInDic: 'શબ્દકોશમાં નથી', oneChange: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે', progress: 'શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...', title: 'સ્પેલ ', toolbar: 'જોડણી (સ્પેલિંગ) તપાસવી' }); rt-4.4.4/devel/third-party/wsc-src/lang/tr.js0000644000175000017500000000201214006075343017120 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'tr', { btnIgnore: 'Yoksay', btnIgnoreAll: 'Tümünü Yoksay', btnReplace: 'Değiştir', btnReplaceAll: 'Tümünü Değiştir', btnUndo: 'Geri Al', changeTo: 'Şuna değiştir:', errorLoading: 'Uygulamada yüklerken hata oluştu: %s.', ieSpellDownload: 'Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?', manyChanges: 'Yazım denetimi tamamlandı: %1 kelime değiştirildi', noChanges: 'Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi', noMispell: 'Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı', noSuggestions: '- Öneri Yok -', notAvailable: 'Üzügünüz, bu servis şuanda hizmet dışıdır.', notInDic: 'Sözlükte Yok', oneChange: 'Yazım denetimi tamamlandı: Bir kelime değiştirildi', progress: 'Yazım denetimi işlemde...', title: 'Yazımı Denetle', toolbar: 'Yazım Denetimi' }); rt-4.4.4/devel/third-party/wsc-src/lang/pl.js0000644000175000017500000000175114006075343017117 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'pl', { btnIgnore: 'Ignoruj', btnIgnoreAll: 'Ignoruj wszystkie', btnReplace: 'Zmień', btnReplaceAll: 'Zmień wszystkie', btnUndo: 'Cofnij', changeTo: 'Zmień na', errorLoading: 'Błąd wczytywania hosta aplikacji usługi: %s.', ieSpellDownload: 'Słownik nie jest zainstalowany. Czy chcesz go pobrać?', manyChanges: 'Sprawdzanie zakończone: zmieniono %l słów', noChanges: 'Sprawdzanie zakończone: nie zmieniono żadnego słowa', noMispell: 'Sprawdzanie zakończone: nie znaleziono błędów', noSuggestions: '- Brak sugestii -', notAvailable: 'Przepraszamy, ale usługa jest obecnie niedostępna.', notInDic: 'Słowa nie ma w słowniku', oneChange: 'Sprawdzanie zakończone: zmieniono jedno słowo', progress: 'Trwa sprawdzanie...', title: 'Sprawdź pisownię', toolbar: 'Sprawdź pisownię' }); rt-4.4.4/devel/third-party/wsc-src/lang/nb.js0000644000175000017500000000166614006075343017110 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'nb', { btnIgnore: 'Ignorer', btnIgnoreAll: 'Ignorer alle', btnReplace: 'Erstatt', btnReplaceAll: 'Erstatt alle', btnUndo: 'Angre', changeTo: 'Endre til', errorLoading: 'Feil under lasting av applikasjonstjenestetjener: %s.', ieSpellDownload: 'Stavekontroll er ikke installert. Vil du laste den ned nå?', manyChanges: 'Stavekontroll fullført: %1 ord endret', noChanges: 'Stavekontroll fullført: ingen ord endret', noMispell: 'Stavekontroll fullført: ingen feilstavinger funnet', noSuggestions: '- Ingen forslag -', notAvailable: 'Beklager, tjenesten er utilgjenglig nå.', notInDic: 'Ikke i ordboken', oneChange: 'Stavekontroll fullført: Ett ord endret', progress: 'Stavekontroll pågår...', title: 'Stavekontroll', toolbar: 'Stavekontroll' }); rt-4.4.4/devel/third-party/wsc-src/lang/sl.js0000644000175000017500000000174314006075343017123 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'sl', { btnIgnore: 'Prezri', btnIgnoreAll: 'Prezri vse', btnReplace: 'Zamenjaj', btnReplaceAll: 'Zamenjaj vse', btnUndo: 'Razveljavi', changeTo: 'Spremeni v', errorLoading: 'Napaka pri nalaganju storitve programa na naslovu %s.', ieSpellDownload: 'Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?', manyChanges: 'Črkovanje je končano: Spremenjenih je bilo %1 besed', noChanges: 'Črkovanje je končano: Nobena beseda ni bila spremenjena', noMispell: 'Črkovanje je končano: Brez napak', noSuggestions: '- Ni predlogov -', notAvailable: 'Oprostite, storitev trenutno ni dosegljiva.', notInDic: 'Ni v slovarju', oneChange: 'Črkovanje je končano: Spremenjena je bila ena beseda', progress: 'Preverjanje črkovanja se izvaja...', title: 'Črkovalnik', toolbar: 'Preveri črkovanje' }); rt-4.4.4/devel/third-party/wsc-src/lang/fi.js0000644000175000017500000000173514006075343017104 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'fi', { btnIgnore: 'Jätä huomioimatta', btnIgnoreAll: 'Jätä kaikki huomioimatta', btnReplace: 'Korvaa', btnReplaceAll: 'Korvaa kaikki', btnUndo: 'Kumoa', changeTo: 'Vaihda', errorLoading: 'Virhe ladattaessa oikolukupalvelua isännältä: %s.', ieSpellDownload: 'Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?', manyChanges: 'Tarkistus valmis: %1 sanaa muutettiin', noChanges: 'Tarkistus valmis: Yhtään sanaa ei muutettu', noMispell: 'Tarkistus valmis: Ei virheitä', noSuggestions: 'Ei ehdotuksia', notAvailable: 'Valitettavasti oikoluku ei ole käytössä tällä hetkellä.', notInDic: 'Ei sanakirjassa', oneChange: 'Tarkistus valmis: Yksi sana muutettiin', progress: 'Tarkistus käynnissä...', title: 'Oikoluku', toolbar: 'Tarkista oikeinkirjoitus' }); rt-4.4.4/devel/third-party/wsc-src/lang/fr-ca.js0000644000175000017500000000206314006075343017471 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'fr-ca', { btnIgnore: 'Ignorer', btnIgnoreAll: 'Ignorer tout', btnReplace: 'Remplacer', btnReplaceAll: 'Remplacer tout', btnUndo: 'Annuler', changeTo: 'Changer en', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Le Correcteur d\'orthographe n\'est pas installé. Souhaitez-vous le télécharger maintenant?', manyChanges: 'Vérification d\'orthographe terminée: %1 mots modifiés', noChanges: 'Vérification d\'orthographe terminée: Pas de modifications', noMispell: 'Vérification d\'orthographe terminée: pas d\'erreur trouvée', noSuggestions: '- Pas de suggestion -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Pas dans le dictionnaire', oneChange: 'Vérification d\'orthographe terminée: Un mot modifié', progress: 'Vérification d\'orthographe en cours...', title: 'Spell Checker', toolbar: 'Orthographe' }); rt-4.4.4/devel/third-party/wsc-src/lang/ru.js0000644000175000017500000000276314006075343017136 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ru', { btnIgnore: 'Пропустить', btnIgnoreAll: 'Пропустить всё', btnReplace: 'Заменить', btnReplaceAll: 'Заменить всё', btnUndo: 'Отменить', changeTo: 'Изменить на', errorLoading: 'Произошла ошибка при подключении к серверу проверки орфографии: %s.', ieSpellDownload: 'Модуль проверки орфографии не установлен. Хотите скачать его?', manyChanges: 'Проверка орфографии завершена. Изменено слов: %1', noChanges: 'Проверка орфографии завершена. Не изменено ни одного слова', noMispell: 'Проверка орфографии завершена. Ошибок не найдено', noSuggestions: '- Варианты отсутствуют -', notAvailable: 'Извините, но в данный момент сервис недоступен.', notInDic: 'Отсутствует в словаре', oneChange: 'Проверка орфографии завершена. Изменено одно слово', progress: 'Орфография проверяется...', title: 'Проверка орфографии', toolbar: 'Проверить орфографию' }); rt-4.4.4/devel/third-party/wsc-src/lang/ka.js0000644000175000017500000000334714006075343017102 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ka', { btnIgnore: 'უგულებელყოფა', btnIgnoreAll: 'ყველას უგულებელყოფა', btnReplace: 'შეცვლა', btnReplaceAll: 'ყველას შეცვლა', btnUndo: 'გაუქმება', changeTo: 'შეცვლელი', errorLoading: 'სერვისის გამოძახების შეცდომა: %s.', ieSpellDownload: 'მართლწერის შემოწმება არაა დაინსტალირებული. ჩამოვქაჩოთ ინტერნეტიდან?', manyChanges: 'მართლწერის შემოწმება: %1 სიტყვა შეიცვალა', noChanges: 'მართლწერის შემოწმება: არაფერი შეცვლილა', noMispell: 'მართლწერის შემოწმება: შეცდომა არ მოიძებნა', noSuggestions: '- არაა შემოთავაზება -', notAvailable: 'უკაცრავად, ეს სერვისი ამჟამად მიუწვდომელია.', notInDic: 'არაა ლექსიკონში', oneChange: 'მართლწერის შემოწმება: ერთი სიტყვა შეიცვალა', progress: 'მიმდინარეობს მართლწერის შემოწმება...', title: 'მართლწერა', toolbar: 'მართლწერა' }); rt-4.4.4/devel/third-party/wsc-src/lang/zh-cn.js0000644000175000017500000000164714006075343017527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'zh-cn', { btnIgnore: '忽略', btnIgnoreAll: '全部忽略', btnReplace: '替换', btnReplaceAll: '全部替换', btnUndo: '撤消', changeTo: '更改为', errorLoading: '加载应该服务主机时出错: %s.', ieSpellDownload: '拼写检查插件还没安装, 您是否想现在就下载?', manyChanges: '拼写检查完成: 更改了 %1 个单词', noChanges: '拼写检查完成: 没有更改任何单词', noMispell: '拼写检查完成: 没有发现拼写错误', noSuggestions: '- 没有建议 -', notAvailable: '抱歉, 服务目前暂不可用', notInDic: '没有在字典里', oneChange: '拼写检查完成: 更改了一个单词', progress: '正在进行拼写检查...', title: '拼写检查', toolbar: '拼写检查' }); rt-4.4.4/devel/third-party/wsc-src/lang/cs.js0000644000175000017500000000201514006075343017103 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'cs', { btnIgnore: 'Přeskočit', btnIgnoreAll: 'Přeskakovat vše', btnReplace: 'Zaměnit', btnReplaceAll: 'Zaměňovat vše', btnUndo: 'Zpět', changeTo: 'Změnit na', errorLoading: 'Chyba nahrávání služby aplikace z: %s.', ieSpellDownload: 'Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?', manyChanges: 'Kontrola pravopisu dokončena: %1 slov změněno', noChanges: 'Kontrola pravopisu dokončena: Beze změn', noMispell: 'Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny', noSuggestions: '- žádné návrhy -', notAvailable: 'Omlouváme se, ale služba nyní není dostupná.', notInDic: 'Není ve slovníku', oneChange: 'Kontrola pravopisu dokončena: Jedno slovo změněno', progress: 'Probíhá kontrola pravopisu...', title: 'Kontrola pravopisu', toolbar: 'Zkontrolovat pravopis' }); rt-4.4.4/devel/third-party/wsc-src/lang/pt.js0000644000175000017500000000206714006075343017130 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'pt', { btnIgnore: 'Ignorar', btnIgnoreAll: 'Ignorar Tudo', btnReplace: 'Substituir', btnReplaceAll: 'Substituir Tudo', btnUndo: 'Anular', changeTo: 'Mudar para', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: ' Verificação ortográfica não instalada. Quer descarregar agora?', manyChanges: 'Verificação ortográfica completa: %1 palavras alteradas', noChanges: 'Verificação ortográfica completa: não houve alteração de palavras', noMispell: 'Verificação ortográfica completa: não foram encontrados erros', noSuggestions: '- Sem sugestões -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Não está num directório', oneChange: 'Verificação ortográfica completa: uma palavra alterada', progress: 'Verificação ortográfica em progresso…', title: 'Spell Checker', toolbar: 'Verificação Ortográfica' }); rt-4.4.4/devel/third-party/wsc-src/lang/pt-br.js0000644000175000017500000000216514006075343017530 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'pt-br', { btnIgnore: 'Ignorar uma vez', btnIgnoreAll: 'Ignorar Todas', btnReplace: 'Alterar', btnReplaceAll: 'Alterar Todas', btnUndo: 'Desfazer', changeTo: 'Alterar para', errorLoading: 'Erro carregando servidor de aplicação: %s.', ieSpellDownload: 'A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?', manyChanges: 'Verificação ortográfica encerrada: %1 palavras foram alteradas', noChanges: 'Verificação ortográfica encerrada: Não houve alterações', noMispell: 'Verificação encerrada: Não foram encontrados erros de ortografia', noSuggestions: '-sem sugestões de ortografia-', notAvailable: 'Desculpe, o serviço não está disponível no momento.', notInDic: 'Não encontrada', oneChange: 'Verificação ortográfica encerrada: Uma palavra foi alterada', progress: 'Verificação ortográfica em andamento...', title: 'Corretor Ortográfico', toolbar: 'Verificar Ortografia' }); rt-4.4.4/devel/third-party/wsc-src/lang/et.js0000644000175000017500000000200214006075343017102 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'et', { btnIgnore: 'Ignoreeri', btnIgnoreAll: 'Ignoreeri kõiki', btnReplace: 'Asenda', btnReplaceAll: 'Asenda kõik', btnUndo: 'Võta tagasi', changeTo: 'Muuda', errorLoading: 'Viga rakenduse teenushosti laadimisel: %s.', ieSpellDownload: 'Õigekirja kontrollija ei ole paigaldatud. Soovid sa selle alla laadida?', manyChanges: 'Õigekirja kontroll sooritatud: %1 sõna muudetud', noChanges: 'Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud', noMispell: 'Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud', noSuggestions: '- Soovitused puuduvad -', notAvailable: 'Kahjuks ei ole teenus praegu saadaval.', notInDic: 'Puudub sõnastikust', oneChange: 'Õigekirja kontroll sooritatud: üks sõna muudeti', progress: 'Toimub õigekirja kontroll...', title: 'Õigekirjakontroll', toolbar: 'Õigekirjakontroll' }); rt-4.4.4/devel/third-party/wsc-src/lang/da.js0000644000175000017500000000161714006075343017071 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'da', { btnIgnore: 'Ignorér', btnIgnoreAll: 'Ignorér alle', btnReplace: 'Erstat', btnReplaceAll: 'Erstat alle', btnUndo: 'Tilbage', changeTo: 'Forslag', errorLoading: 'Fejl ved indlæsning af host: %s.', ieSpellDownload: 'Stavekontrol ikke installeret. Vil du installere den nu?', manyChanges: 'Stavekontrol færdig: %1 ord ændret', noChanges: 'Stavekontrol færdig: Ingen ord ændret', noMispell: 'Stavekontrol færdig: Ingen fejl fundet', noSuggestions: '(ingen forslag)', notAvailable: 'Stavekontrol er desværre ikke tilgængelig.', notInDic: 'Ikke i ordbogen', oneChange: 'Stavekontrol færdig: Et ord ændret', progress: 'Stavekontrollen arbejder...', title: 'Stavekontrol', toolbar: 'Stavekontrol' }); rt-4.4.4/devel/third-party/wsc-src/lang/af.js0000644000175000017500000000164314006075343017072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'af', { btnIgnore: 'Ignoreer', btnIgnoreAll: 'Ignoreer alles', btnReplace: 'Vervang', btnReplaceAll: 'vervang alles', btnUndo: 'Ontdoen', changeTo: 'Verander na', errorLoading: 'Fout by inlaai van diens: %s.', ieSpellDownload: 'Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?', manyChanges: 'Klaar met speltoets: %1 woorde verander', noChanges: 'Klaar met speltoets: Geen woorde verander nie', noMispell: 'Klaar met speltoets: Geen foute nie', noSuggestions: '- Geen voorstel -', notAvailable: 'Jammer, hierdie diens is nie nou beskikbaar nie.', notInDic: 'Nie in woordeboek nie', oneChange: 'Klaar met speltoets: Een woord verander', progress: 'Spelling word getoets...', title: 'Speltoetser', toolbar: 'Speltoets' }); rt-4.4.4/devel/third-party/wsc-src/lang/hu.js0000644000175000017500000000206114006075343017113 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'hu', { btnIgnore: 'Kihagyja', btnIgnoreAll: 'Mindet kihagyja', btnReplace: 'Csere', btnReplaceAll: 'Összes cseréje', btnUndo: 'Visszavonás', changeTo: 'Módosítás', errorLoading: 'Hiba a szolgáltatás host betöltése közben: %s.', ieSpellDownload: 'A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?', manyChanges: 'Helyesírás-ellenőrzés kész: %1 szó cserélve', noChanges: 'Helyesírás-ellenőrzés kész: Nincs változtatott szó', noMispell: 'Helyesírás-ellenőrzés kész: Nem találtam hibát', noSuggestions: 'Nincs javaslat', notAvailable: 'Sajnálom, de a szolgáltatás jelenleg nem elérhető.', notInDic: 'Nincs a szótárban', oneChange: 'Helyesírás-ellenőrzés kész: Egy szó cserélve', progress: 'Helyesírás-ellenőrzés folyamatban...', title: 'Helyesírás ellenörző', toolbar: 'Helyesírás-ellenőrzés' }); rt-4.4.4/devel/third-party/wsc-src/lang/sr.js0000644000175000017500000000247314006075343017132 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'sr', { btnIgnore: 'Игнориши', btnIgnoreAll: 'Игнориши све', btnReplace: 'Замени', btnReplaceAll: 'Замени све', btnUndo: 'Врати акцију', changeTo: 'Измени', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?', manyChanges: 'Провера спеловања завршена: %1 реч(и) је измењено', noChanges: 'Провера спеловања завршена: Није измењена ниједна реч', noMispell: 'Провера спеловања завршена: грешке нису пронађене', noSuggestions: '- Без сугестија -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Није у речнику', oneChange: 'Провера спеловања завршена: Измењена је једна реч', progress: 'Провера спеловања у току...', title: 'Spell Checker', toolbar: 'Провери спеловање' }); rt-4.4.4/devel/third-party/wsc-src/lang/nl.js0000644000175000017500000000202714006075343017112 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'nl', { btnIgnore: 'Negeren', btnIgnoreAll: 'Alles negeren', btnReplace: 'Vervangen', btnReplaceAll: 'Alles vervangen', btnUndo: 'Ongedaan maken', changeTo: 'Wijzig in', errorLoading: 'Er is een fout opgetreden bij het laden van de dienst: %s.', ieSpellDownload: 'De spellingscontrole is niet geïnstalleerd. Wilt u deze nu downloaden?', manyChanges: 'Klaar met spellingscontrole: %1 woorden aangepast', noChanges: 'Klaar met spellingscontrole: geen woorden aangepast', noMispell: 'Klaar met spellingscontrole: geen fouten gevonden', noSuggestions: '- Geen suggesties -', notAvailable: 'Excuses, deze dienst is momenteel niet beschikbaar.', notInDic: 'Niet in het woordenboek', oneChange: 'Klaar met spellingscontrole: één woord aangepast', progress: 'Bezig met spellingscontrole...', title: 'Spellingscontrole', toolbar: 'Spellingscontrole' }); rt-4.4.4/devel/third-party/wsc-src/lang/vi.js0000644000175000017500000000232214006075343017115 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'vi', { btnIgnore: 'Bỏ qua', btnIgnoreAll: 'Bỏ qua tất cả', btnReplace: 'Thay thế', btnReplaceAll: 'Thay thế tất cả', btnUndo: 'Phục hồi lại', changeTo: 'Chuyển thành', errorLoading: 'Lỗi khi đang nạp dịch vụ ứng dụng: %s.', ieSpellDownload: 'Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?', manyChanges: 'Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi', noChanges: 'Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi', noMispell: 'Hoàn tất kiểm tra chính tả: Không có lỗi chính tả', noSuggestions: '- Không đưa ra gợi ý về từ -', notAvailable: 'Xin lỗi, dịch vụ này hiện tại không có.', notInDic: 'Không có trong từ điển', oneChange: 'Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi', progress: 'Đang tiến hành kiểm tra chính tả...', title: 'Kiểm tra chính tả', toolbar: 'Kiểm tra chính tả' }); rt-4.4.4/devel/third-party/wsc-src/lang/ja.js0000644000175000017500000000224714006075343017077 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ja', { btnIgnore: '無視', btnIgnoreAll: 'すべて無視', btnReplace: '置換', btnReplaceAll: 'すべて置換', btnUndo: 'やり直し', changeTo: '変更', errorLoading: 'アプリケーションサービスホスト読込みエラー: %s.', ieSpellDownload: 'スペルチェッカーがインストールされていません。今すぐダウンロードしますか?', manyChanges: 'スペルチェック完了: %1 語句変更されました', noChanges: 'スペルチェック完了: 語句は変更されませんでした', noMispell: 'スペルチェック完了: スペルの誤りはありませんでした', noSuggestions: '- 該当なし -', notAvailable: '申し訳ありません、現在サービスを利用することができません', notInDic: '辞書にありません', oneChange: 'スペルチェック完了: 1語句変更されました', progress: 'スペルチェック処理中...', title: 'スペルチェック', toolbar: 'スペルチェック' }); rt-4.4.4/devel/third-party/wsc-src/lang/en-gb.js0000644000175000017500000000164314006075343017474 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'en-gb', { btnIgnore: 'Ignore', btnIgnoreAll: 'Ignore All', btnReplace: 'Replace', btnReplaceAll: 'Replace All', btnUndo: 'Undo', changeTo: 'Change to', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Spell checker not installed. Do you want to download it now?', manyChanges: 'Spell check complete: %1 words changed', noChanges: 'Spell check complete: No words changed', noMispell: 'Spell check complete: No misspellings found', noSuggestions: '- No suggestions -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Not in dictionary', oneChange: 'Spell check complete: One word changed', progress: 'Spell check in progress...', title: 'Spell Checker', toolbar: 'Check Spelling' }); rt-4.4.4/devel/third-party/wsc-src/lang/bn.js0000644000175000017500000000300214006075343017072 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'bn', { btnIgnore: 'ইগনোর কর', btnIgnoreAll: 'সব ইগনোর কর', btnReplace: 'বদলে দাও', btnReplaceAll: 'সব বদলে দাও', btnUndo: 'আন্ডু', changeTo: 'এতে বদলাও', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?', manyChanges: 'বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে', noChanges: 'বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি', noMispell: 'বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি', noSuggestions: '- কোন সাজেশন নেই -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'শব্দকোষে নেই', oneChange: 'বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে', progress: 'বানান পরীক্ষা চলছে...', title: 'Spell Checker', toolbar: 'বানান চেক' }); rt-4.4.4/devel/third-party/wsc-src/lang/en-au.js0000644000175000017500000000164314006075343017511 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'en-au', { btnIgnore: 'Ignore', btnIgnoreAll: 'Ignore All', btnReplace: 'Replace', btnReplaceAll: 'Replace All', btnUndo: 'Undo', changeTo: 'Change to', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Spell checker not installed. Do you want to download it now?', manyChanges: 'Spell check complete: %1 words changed', noChanges: 'Spell check complete: No words changed', noMispell: 'Spell check complete: No misspellings found', noSuggestions: '- No suggestions -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Not in dictionary', oneChange: 'Spell check complete: One word changed', progress: 'Spell check in progress...', title: 'Spell Checker', toolbar: 'Check Spelling' }); rt-4.4.4/devel/third-party/wsc-src/lang/ku.js0000644000175000017500000000261514006075343017123 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ku', { btnIgnore: 'پشتگوێ کردن', btnIgnoreAll: 'پشتگوێکردنی ههمووی', btnReplace: 'لهبریدانن', btnReplaceAll: 'لهبریدانانی ههمووی', btnUndo: 'پووچکردنهوه', changeTo: 'گۆڕینی بۆ', errorLoading: 'ههڵه لههێنانی داخوازینامهی خانهخۆێی ڕاژه: %s.', ieSpellDownload: 'پشکنینی ڕێنووس دانهمزراوه. دهتهوێت ئێستا دایبگریت?', manyChanges: 'پشکنینی ڕێنووس کۆتای هات: لهسهدا %1 ی وشهکان گۆڕدرا', noChanges: 'پشکنینی ڕێنووس کۆتای هات: هیچ وشهیهك نۆگۆڕدرا', noMispell: 'پشکنینی ڕێنووس کۆتای هات: هیچ ههڵهیهکی ڕێنووس نهدۆزراوه', noSuggestions: '- هیچ پێشنیارێك -', notAvailable: 'ببووره، لهمکاتهدا ڕاژهکه لهبهردهستا نیه.', notInDic: 'لهفهرههنگ دانیه', oneChange: 'پشکنینی ڕێنووس کۆتای هات: یهك وشه گۆڕدرا', progress: 'پشکنینی ڕێنووس لهبهردهوامبوون دایه...', title: 'پشکنینی ڕێنووس', toolbar: 'پشکنینی ڕێنووس' }); rt-4.4.4/devel/third-party/wsc-src/lang/ms.js0000644000175000017500000000173714006075343017127 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'ms', { btnIgnore: 'Biar', btnIgnoreAll: 'Biarkan semua', btnReplace: 'Ganti', btnReplaceAll: 'Gantikan Semua', btnUndo: 'Batalkan', changeTo: 'Tukarkan kepada', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?', manyChanges: 'Pemeriksaan ejaan siap: %1 perkataan diubah', noChanges: 'Pemeriksaan ejaan siap: Tiada perkataan diubah', noMispell: 'Pemeriksaan ejaan siap: Tiada salah ejaan', noSuggestions: '- Tiada cadangan -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Tidak terdapat didalam kamus', oneChange: 'Pemeriksaan ejaan siap: Satu perkataan telah diubah', progress: 'Pemeriksaan ejaan sedang diproses...', title: 'Spell Checker', toolbar: 'Semak Ejaan' }); rt-4.4.4/devel/third-party/wsc-src/lang/fr.js0000644000175000017500000000221014006075343017102 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'fr', { btnIgnore: 'Ignorer', btnIgnoreAll: 'Ignorer tout', btnReplace: 'Remplacer', btnReplaceAll: 'Remplacer tout', btnUndo: 'Annuler', changeTo: 'Modifier pour', errorLoading: 'Erreur du chargement du service depuis l\'hôte : %s.', ieSpellDownload: 'La vérification d\'orthographe n\'est pas installée. Voulez-vous la télécharger maintenant?', manyChanges: 'Vérification de l\'orthographe terminée : %1 mots corrigés.', noChanges: 'Vérification de l\'orthographe terminée : Aucun mot corrigé.', noMispell: 'Vérification de l\'orthographe terminée : aucune erreur trouvée.', noSuggestions: '- Aucune suggestion -', notAvailable: 'Désolé, le service est indisponible actuellement.', notInDic: 'N\'existe pas dans le dictionnaire.', oneChange: 'Vérification de l\'orthographe terminée : Un seul mot corrigé.', progress: 'Vérification de l\'orthographe en cours...', title: 'Vérifier l\'orthographe', toolbar: 'Vérifier l\'orthographe' }); rt-4.4.4/devel/third-party/wsc-src/lang/bs.js0000644000175000017500000000164014006075343017105 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang( 'wsc', 'bs', { btnIgnore: 'Ignore', btnIgnoreAll: 'Ignore All', btnReplace: 'Replace', btnReplaceAll: 'Replace All', btnUndo: 'Undo', changeTo: 'Change to', errorLoading: 'Error loading application service host: %s.', ieSpellDownload: 'Spell checker not installed. Do you want to download it now?', manyChanges: 'Spell check complete: %1 words changed', noChanges: 'Spell check complete: No words changed', noMispell: 'Spell check complete: No misspellings found', noSuggestions: '- No suggestions -', notAvailable: 'Sorry, but service is unavailable now.', notInDic: 'Not in dictionary', oneChange: 'Spell check complete: One word changed', progress: 'Spell check in progress...', title: 'Spell Checker', toolbar: 'Check Spelling' }); rt-4.4.4/devel/third-party/wsc-src/icons/0000755000175000017500000000000014006075343016334 5ustar domdomrt-4.4.4/devel/third-party/wsc-src/icons/spellchecker.png0000644000175000017500000000150414006075343021506 0ustar domdomPNG  IHDRabKGD pHYs B(x]IDAT8eN@3v3lI%*Bk e(a j1 0 cCqf9gt18@Q81,),q8F H0 q]'ZF _J?=cQUU5X[[cR+NU$I[XXXh &h,//`0 S#"{*"V$I2قP%z0 .( 8q @eU1Zqfffzף*WUVj&)dI 777pvvfQ#M:noowU5<>>404Ey_:h4[[[f&FQaHBD>fD%}]]] v~|{lZk?cRy H}~_?Vx4EU޾>==077W}v"! I'^ݶvA;<<< Qep8d~~;/"`H9d;o5%tEXtdate:create2013-07-16T11:21:31+02:00%tEXtdate:modify2013-07-16T11:21:31+02:00ٓMtEXtSoftwarewww.inkscape.org<IENDB`rt-4.4.4/devel/third-party/wsc-src/icons/hidpi/0000755000175000017500000000000014006075343017431 5ustar domdomrt-4.4.4/devel/third-party/wsc-src/icons/hidpi/spellchecker.png0000644000175000017500000000540014006075343022602 0ustar domdomPNG  IHDR szzbKGD pHYs B(x IDATXŗmlTי{ggg1'bJ%M[ڤIW,aiBUEڍ*mjw+ڠFj5$VBnM /@0k f{~1ZH=<9qA?p"o\C)%Rʛ?iF+H!BmDRQU u92!0*@ (P7 H) XR\ife҆y\e_UUR @AI)2N ) ϛGh͚7oR?秏vuQZo~ BSKόmקNBkMcm-b``cSkܵ|yiYօ ~筷~O4s2QImY+̛GuUU}ʀmCJP iֶ9wo%K,YuHӝkSJ!a+r8qB>_ObJ_t*UYu՚h]>mSaH|^߷oY*\c"=1474l&>àas9cE{^ĵk}ۿű̌ذq?DB2)χe^h #:@+y$'&Ɓ_) s9>.rײe}|^|dڅdw7_|Y| ) KjkjB ^$Ӟ'-냕Xёr=@KT9Co"qY\CHZ?<<Ǝj| K/M?#NOO#g\idmr4qd%KBXEX&XdB޽l6<<!2>~ծFVUVb}gons]Z[[/J)KWu B0JG٤h4bk_yO7_)oiAiM5&VUa4>iS*H0oY,RK&aǓO.ho_0=3~a~2C'T a ij6Mϻ.555߿4\yW߽q:\C E"CnDdժxPj5Vx-PώTݷZ[{r ^ b۶m_S>آʯ]իU>/RdY^&\g^Q,N:u\BLL066/3JG.=c?BY30p+۲N}P yܹl٢_.K%8 vxuIkj?ݼkZe9Wkqq漟ZTk u2K/ܶ|Ŋ]w+~Ck}lݯ {x&_*m^tI)ܲ%t&3YzzG|ɷam5~!eSSS'6n쟵SO}ɬ@>DWm]*)8p\1 P0Hc4]?khh\Wr94==z rf0#*jit@:D"xEɉT,5zDwwsHs4z .cke_dialog_ui_button:first-child { margin-top: 4px; } div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select > label { margin-left: 0; } div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select div.cke_dialog_ui_input_select { width: 140px !important; } div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select, div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select { margin-top: 1px; } div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select:focus, div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select:focus { margin-top: 0; } div[name=GrammTab] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button, div[name=Thesaurus] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button { margin-top: 4px !important; } div[name=Thesaurus] div.cke_dialog_ui_input_select { width: 180px !important; }rt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/0000755000175000017500000000000013437512115017623 5ustar domdomrt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/jquery-ui.structure.min.css0000644000175000017500000001520013437512115025106 0ustar domdom/*! jQuery UI - v1.11.4 - 2015-10-30 * http://jqueryui.com * Copyright jQuery Foundation and other contributors; Licensed MIT */ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}rt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/jquery-ui.structure.css0000644000175000017500000002055113437512115024331 0ustar domdom/*! * jQuery UI CSS Framework 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/category/theming/ */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; } .ui-helper-clearfix:after { clear: both; } .ui-helper-clearfix { min-height: 0; /* support: IE7 */ } .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); /* support: IE8 */ } .ui-front { z-index: 100; } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; } .ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin: 2px 0 0 0; padding: .5em .5em .5em .7em; min-height: 0; /* support: IE7 */ font-size: 100%; } .ui-accordion .ui-accordion-icons { padding-left: 2.2em; } .ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; } .ui-autocomplete { position: absolute; top: 0; left: 0; cursor: default; } .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position: relative; padding: .2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position: absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left: 2px; } .ui-datepicker .ui-datepicker-next { right: 2px; } .ui-datepicker .ui-datepicker-prev-hover { left: 1px; } .ui-datepicker .ui-datepicker-next-hover { right: 1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size: 1em; margin: 1px 0; } .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 45%; } .ui-datepicker table { width: 100%; font-size: .9em; border-collapse: collapse; margin: 0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding: 0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width: auto; overflow: visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float: left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width: auto; } .ui-datepicker-multi .ui-datepicker-group { float: left; } .ui-datepicker-multi .ui-datepicker-group table { width: 95%; margin: 0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width: 50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width: 33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width: 25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width: 0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear: left; } .ui-datepicker-row-break { clear: both; width: 100%; font-size: 0; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear: right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, .ui-datepicker-rtl .ui-datepicker-group { float: right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width: 0; border-left-width: 1px; } .ui-menu { list-style: none; padding: 0; margin: 0; display: block; outline: none; } .ui-menu .ui-menu { position: absolute; } .ui-menu .ui-menu-item { position: relative; margin: 0; padding: 3px 1em 3px .4em; cursor: pointer; min-height: 0; /* support: IE7 */ /* support: IE10, see #8844 */ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); } .ui-menu .ui-menu-divider { margin: 5px 0; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; } .ui-menu .ui-state-focus, .ui-menu .ui-state-active { margin: -1px; } /* icon support */ .ui-menu-icons { position: relative; } .ui-menu-icons .ui-menu-item { padding-left: 2em; } /* left-aligned */ .ui-menu .ui-icon { position: absolute; top: 0; bottom: 0; left: .2em; margin: auto 0; } /* right-aligned */ .ui-menu .ui-menu-icon { left: auto; right: 0; } .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; -ms-touch-action: none; touch-action: none; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } /* support: IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { filter: inherit; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; } .ui-tabs { position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ padding: .2em; } .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom-width: 0; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav .ui-tabs-anchor { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { cursor: text; } .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { cursor: pointer; } .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } rt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/jquery-ui.theme.min.css0000644000175000017500000003245113437512115024157 0ustar domdom/*! jQuery UI - v1.11.4 - 2015-10-30 * http://jqueryui.com * Copyright jQuery Foundation and other contributors; Licensed MIT */ .ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:0.3em}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:0.3em}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:0.3em}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:0.3em}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}rt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/jquery-ui.js0000644000175000017500000063517713437512115022136 0ustar domdom/*! jQuery UI - v1.11.4 - 2015-10-30 * http://jqueryui.com * Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, datepicker.js, menu.js, slider.js, tabs.js * Copyright jQuery Foundation and other contributors; Licensed MIT */ (function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define([ "jquery" ], factory ); } else { // Browser globals factory( jQuery ); } }(function( $ ) { /*! * jQuery UI Core 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/category/ui-core/ */ // $.ui might exist from components with no dependencies, e.g., $.ui.position $.ui = $.ui || {}; $.extend( $.ui, { version: "1.11.4", keyCode: { BACKSPACE: 8, COMMA: 188, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SPACE: 32, TAB: 9, UP: 38 } }); // plugins $.fn.extend({ scrollParent: function( includeHidden ) { var position = this.css( "position" ), excludeStaticParent = position === "absolute", overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, scrollParent = this.parents().filter( function() { var parent = $( this ); if ( excludeStaticParent && parent.css( "position" ) === "static" ) { return false; } return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) ); }).eq( 0 ); return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent; }, uniqueId: (function() { var uuid = 0; return function() { return this.each(function() { if ( !this.id ) { this.id = "ui-id-" + ( ++uuid ); } }); }; })(), removeUniqueId: function() { return this.each(function() { if ( /^ui-id-\d+$/.test( this.id ) ) { $( this ).removeAttr( "id" ); } }); } }); // selectors function focusable( element, isTabIndexNotNaN ) { var map, mapName, img, nodeName = element.nodeName.toLowerCase(); if ( "area" === nodeName ) { map = element.parentNode; mapName = map.name; if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { return false; } img = $( "img[usemap='#" + mapName + "']" )[ 0 ]; return !!img && visible( img ); } return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ? !element.disabled : "a" === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && // the element and all of its ancestors must be visible visible( element ); } function visible( element ) { return $.expr.filters.visible( element ) && !$( element ).parents().addBack().filter(function() { return $.css( this, "visibility" ) === "hidden"; }).length; } $.extend( $.expr[ ":" ], { data: $.expr.createPseudo ? $.expr.createPseudo(function( dataName ) { return function( elem ) { return !!$.data( elem, dataName ); }; }) : // support: jQuery <1.8 function( elem, i, match ) { return !!$.data( elem, match[ 3 ] ); }, focusable: function( element ) { return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); }, tabbable: function( element ) { var tabIndex = $.attr( element, "tabindex" ), isTabIndexNaN = isNaN( tabIndex ); return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); } }); // support: jQuery <1.8 if ( !$( "" ).outerWidth( 1 ).jquery ) { $.each( [ "Width", "Height" ], function( i, name ) { var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], type = name.toLowerCase(), orig = { innerWidth: $.fn.innerWidth, innerHeight: $.fn.innerHeight, outerWidth: $.fn.outerWidth, outerHeight: $.fn.outerHeight }; function reduce( elem, size, border, margin ) { $.each( side, function() { size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; if ( border ) { size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; } if ( margin ) { size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; } }); return size; } $.fn[ "inner" + name ] = function( size ) { if ( size === undefined ) { return orig[ "inner" + name ].call( this ); } return this.each(function() { $( this ).css( type, reduce( this, size ) + "px" ); }); }; $.fn[ "outer" + name] = function( size, margin ) { if ( typeof size !== "number" ) { return orig[ "outer" + name ].call( this, size ); } return this.each(function() { $( this).css( type, reduce( this, size, true, margin ) + "px" ); }); }; }); } // support: jQuery <1.8 if ( !$.fn.addBack ) { $.fn.addBack = function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter( selector ) ); }; } // support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) if ( $( "" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { $.fn.removeData = (function( removeData ) { return function( key ) { if ( arguments.length ) { return removeData.call( this, $.camelCase( key ) ); } else { return removeData.call( this ); } }; })( $.fn.removeData ); } // deprecated $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); $.fn.extend({ focus: (function( orig ) { return function( delay, fn ) { return typeof delay === "number" ? this.each(function() { var elem = this; setTimeout(function() { $( elem ).focus(); if ( fn ) { fn.call( elem ); } }, delay ); }) : orig.apply( this, arguments ); }; })( $.fn.focus ), disableSelection: (function() { var eventType = "onselectstart" in document.createElement( "div" ) ? "selectstart" : "mousedown"; return function() { return this.bind( eventType + ".ui-disableSelection", function( event ) { event.preventDefault(); }); }; })(), enableSelection: function() { return this.unbind( ".ui-disableSelection" ); }, zIndex: function( zIndex ) { if ( zIndex !== undefined ) { return this.css( "zIndex", zIndex ); } if ( this.length ) { var elem = $( this[ 0 ] ), position, value; while ( elem.length && elem[ 0 ] !== document ) { // Ignore z-index if position is set to a value where z-index is ignored by the browser // This makes behavior of this function consistent across browsers // WebKit always returns auto if the element is positioned position = elem.css( "position" ); if ( position === "absolute" || position === "relative" || position === "fixed" ) { // IE returns 0 when zIndex is not specified // other browsers return a string // we ignore the case of nested elements with an explicit value of 0 //
      value = parseInt( elem.css( "zIndex" ), 10 ); if ( !isNaN( value ) && value !== 0 ) { return value; } } elem = elem.parent(); } } return 0; } }); // $.ui.plugin is deprecated. Use $.widget() extensions instead. $.ui.plugin = { add: function( module, option, set ) { var i, proto = $.ui[ module ].prototype; for ( i in set ) { proto.plugins[ i ] = proto.plugins[ i ] || []; proto.plugins[ i ].push( [ option, set[ i ] ] ); } }, call: function( instance, name, args, allowDisconnected ) { var i, set = instance.plugins[ name ]; if ( !set ) { return; } if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) { return; } for ( i = 0; i < set.length; i++ ) { if ( instance.options[ set[ i ][ 0 ] ] ) { set[ i ][ 1 ].apply( instance.element, args ); } } } }; /*! * jQuery UI Widget 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/jQuery.widget/ */ var widget_uuid = 0, widget_slice = Array.prototype.slice; $.cleanData = (function( orig ) { return function( elems ) { var events, elem, i; for ( i = 0; (elem = elems[i]) != null; i++ ) { try { // Only trigger remove when necessary to save time events = $._data( elem, "events" ); if ( events && events.remove ) { $( elem ).triggerHandler( "remove" ); } // http://bugs.jquery.com/ticket/8235 } catch ( e ) {} } orig( elems ); }; })( $.cleanData ); $.widget = function( name, base, prototype ) { var fullName, existingConstructor, constructor, basePrototype, // proxiedPrototype allows the provided prototype to remain unmodified // so that it can be used as a mixin for multiple widgets (#8876) proxiedPrototype = {}, namespace = name.split( "." )[ 0 ]; name = name.split( "." )[ 1 ]; fullName = namespace + "-" + name; if ( !prototype ) { prototype = base; base = $.Widget; } // create selector for plugin $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { return !!$.data( elem, fullName ); }; $[ namespace ] = $[ namespace ] || {}; existingConstructor = $[ namespace ][ name ]; constructor = $[ namespace ][ name ] = function( options, element ) { // allow instantiation without "new" keyword if ( !this._createWidget ) { return new constructor( options, element ); } // allow instantiation without initializing for simple inheritance // must use "new" keyword (the code above always passes args) if ( arguments.length ) { this._createWidget( options, element ); } }; // extend with the existing constructor to carry over any static properties $.extend( constructor, existingConstructor, { version: prototype.version, // copy the object used to create the prototype in case we need to // redefine the widget later _proto: $.extend( {}, prototype ), // track widgets that inherit from this widget in case this widget is // redefined after a widget inherits from it _childConstructors: [] }); basePrototype = new base(); // we need to make the options hash a property directly on the new instance // otherwise we'll modify the options hash on the prototype that we're // inheriting from basePrototype.options = $.widget.extend( {}, basePrototype.options ); $.each( prototype, function( prop, value ) { if ( !$.isFunction( value ) ) { proxiedPrototype[ prop ] = value; return; } proxiedPrototype[ prop ] = (function() { var _super = function() { return base.prototype[ prop ].apply( this, arguments ); }, _superApply = function( args ) { return base.prototype[ prop ].apply( this, args ); }; return function() { var __super = this._super, __superApply = this._superApply, returnValue; this._super = _super; this._superApply = _superApply; returnValue = value.apply( this, arguments ); this._super = __super; this._superApply = __superApply; return returnValue; }; })(); }); constructor.prototype = $.widget.extend( basePrototype, { // TODO: remove support for widgetEventPrefix // always use the name + a colon as the prefix, e.g., draggable:start // don't prefix for widgets that aren't DOM-based widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name }, proxiedPrototype, { constructor: constructor, namespace: namespace, widgetName: name, widgetFullName: fullName }); // If this widget is being redefined then we need to find all widgets that // are inheriting from it and redefine all of them so that they inherit from // the new version of this widget. We're essentially trying to replace one // level in the prototype chain. if ( existingConstructor ) { $.each( existingConstructor._childConstructors, function( i, child ) { var childPrototype = child.prototype; // redefine the child widget using the same prototype that was // originally used, but inherit from the new version of the base $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); }); // remove the list of existing child constructors from the old constructor // so the old child constructors can be garbage collected delete existingConstructor._childConstructors; } else { base._childConstructors.push( constructor ); } $.widget.bridge( name, constructor ); return constructor; }; $.widget.extend = function( target ) { var input = widget_slice.call( arguments, 1 ), inputIndex = 0, inputLength = input.length, key, value; for ( ; inputIndex < inputLength; inputIndex++ ) { for ( key in input[ inputIndex ] ) { value = input[ inputIndex ][ key ]; if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { // Clone objects if ( $.isPlainObject( value ) ) { target[ key ] = $.isPlainObject( target[ key ] ) ? $.widget.extend( {}, target[ key ], value ) : // Don't extend strings, arrays, etc. with objects $.widget.extend( {}, value ); // Copy everything else by reference } else { target[ key ] = value; } } } } return target; }; $.widget.bridge = function( name, object ) { var fullName = object.prototype.widgetFullName || name; $.fn[ name ] = function( options ) { var isMethodCall = typeof options === "string", args = widget_slice.call( arguments, 1 ), returnValue = this; if ( isMethodCall ) { this.each(function() { var methodValue, instance = $.data( this, fullName ); if ( options === "instance" ) { returnValue = instance; return false; } if ( !instance ) { return $.error( "cannot call methods on " + name + " prior to initialization; " + "attempted to call method '" + options + "'" ); } if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { return $.error( "no such method '" + options + "' for " + name + " widget instance" ); } methodValue = instance[ options ].apply( instance, args ); if ( methodValue !== instance && methodValue !== undefined ) { returnValue = methodValue && methodValue.jquery ? returnValue.pushStack( methodValue.get() ) : methodValue; return false; } }); } else { // Allow multiple hashes to be passed on init if ( args.length ) { options = $.widget.extend.apply( null, [ options ].concat(args) ); } this.each(function() { var instance = $.data( this, fullName ); if ( instance ) { instance.option( options || {} ); if ( instance._init ) { instance._init(); } } else { $.data( this, fullName, new object( options, this ) ); } }); } return returnValue; }; }; $.Widget = function( /* options, element */ ) {}; $.Widget._childConstructors = []; $.Widget.prototype = { widgetName: "widget", widgetEventPrefix: "", defaultElement: "
      ", options: { disabled: false, // callbacks create: null }, _createWidget: function( options, element ) { element = $( element || this.defaultElement || this )[ 0 ]; this.element = $( element ); this.uuid = widget_uuid++; this.eventNamespace = "." + this.widgetName + this.uuid; this.bindings = $(); this.hoverable = $(); this.focusable = $(); if ( element !== this ) { $.data( element, this.widgetFullName, this ); this._on( true, this.element, { remove: function( event ) { if ( event.target === element ) { this.destroy(); } } }); this.document = $( element.style ? // element within the document element.ownerDocument : // element is window or document element.document || element ); this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); } this.options = $.widget.extend( {}, this.options, this._getCreateOptions(), options ); this._create(); this._trigger( "create", null, this._getCreateEventData() ); this._init(); }, _getCreateOptions: $.noop, _getCreateEventData: $.noop, _create: $.noop, _init: $.noop, destroy: function() { this._destroy(); // we can probably remove the unbind calls in 2.0 // all event bindings should go through this._on() this.element .unbind( this.eventNamespace ) .removeData( this.widgetFullName ) // support: jquery <1.6.3 // http://bugs.jquery.com/ticket/9413 .removeData( $.camelCase( this.widgetFullName ) ); this.widget() .unbind( this.eventNamespace ) .removeAttr( "aria-disabled" ) .removeClass( this.widgetFullName + "-disabled " + "ui-state-disabled" ); // clean up events and states this.bindings.unbind( this.eventNamespace ); this.hoverable.removeClass( "ui-state-hover" ); this.focusable.removeClass( "ui-state-focus" ); }, _destroy: $.noop, widget: function() { return this.element; }, option: function( key, value ) { var options = key, parts, curOption, i; if ( arguments.length === 0 ) { // don't return a reference to the internal hash return $.widget.extend( {}, this.options ); } if ( typeof key === "string" ) { // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } options = {}; parts = key.split( "." ); key = parts.shift(); if ( parts.length ) { curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); for ( i = 0; i < parts.length - 1; i++ ) { curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; curOption = curOption[ parts[ i ] ]; } key = parts.pop(); if ( arguments.length === 1 ) { return curOption[ key ] === undefined ? null : curOption[ key ]; } curOption[ key ] = value; } else { if ( arguments.length === 1 ) { return this.options[ key ] === undefined ? null : this.options[ key ]; } options[ key ] = value; } } this._setOptions( options ); return this; }, _setOptions: function( options ) { var key; for ( key in options ) { this._setOption( key, options[ key ] ); } return this; }, _setOption: function( key, value ) { this.options[ key ] = value; if ( key === "disabled" ) { this.widget() .toggleClass( this.widgetFullName + "-disabled", !!value ); // If the widget is becoming disabled, then nothing is interactive if ( value ) { this.hoverable.removeClass( "ui-state-hover" ); this.focusable.removeClass( "ui-state-focus" ); } } return this; }, enable: function() { return this._setOptions({ disabled: false }); }, disable: function() { return this._setOptions({ disabled: true }); }, _on: function( suppressDisabledCheck, element, handlers ) { var delegateElement, instance = this; // no suppressDisabledCheck flag, shuffle arguments if ( typeof suppressDisabledCheck !== "boolean" ) { handlers = element; element = suppressDisabledCheck; suppressDisabledCheck = false; } // no element argument, shuffle and use this.element if ( !handlers ) { handlers = element; element = this.element; delegateElement = this.widget(); } else { element = delegateElement = $( element ); this.bindings = this.bindings.add( element ); } $.each( handlers, function( event, handler ) { function handlerProxy() { // allow widgets to customize the disabled handling // - disabled as an array instead of boolean // - disabled class as method for disabling individual parts if ( !suppressDisabledCheck && ( instance.options.disabled === true || $( this ).hasClass( "ui-state-disabled" ) ) ) { return; } return ( typeof handler === "string" ? instance[ handler ] : handler ) .apply( instance, arguments ); } // copy the guid so direct unbinding works if ( typeof handler !== "string" ) { handlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $.guid++; } var match = event.match( /^([\w:-]*)\s*(.*)$/ ), eventName = match[1] + instance.eventNamespace, selector = match[2]; if ( selector ) { delegateElement.delegate( selector, eventName, handlerProxy ); } else { element.bind( eventName, handlerProxy ); } }); }, _off: function( element, eventName ) { eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; element.unbind( eventName ).undelegate( eventName ); // Clear the stack to avoid memory leaks (#10056) this.bindings = $( this.bindings.not( element ).get() ); this.focusable = $( this.focusable.not( element ).get() ); this.hoverable = $( this.hoverable.not( element ).get() ); }, _delay: function( handler, delay ) { function handlerProxy() { return ( typeof handler === "string" ? instance[ handler ] : handler ) .apply( instance, arguments ); } var instance = this; return setTimeout( handlerProxy, delay || 0 ); }, _hoverable: function( element ) { this.hoverable = this.hoverable.add( element ); this._on( element, { mouseenter: function( event ) { $( event.currentTarget ).addClass( "ui-state-hover" ); }, mouseleave: function( event ) { $( event.currentTarget ).removeClass( "ui-state-hover" ); } }); }, _focusable: function( element ) { this.focusable = this.focusable.add( element ); this._on( element, { focusin: function( event ) { $( event.currentTarget ).addClass( "ui-state-focus" ); }, focusout: function( event ) { $( event.currentTarget ).removeClass( "ui-state-focus" ); } }); }, _trigger: function( type, event, data ) { var prop, orig, callback = this.options[ type ]; data = data || {}; event = $.Event( event ); event.type = ( type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type ).toLowerCase(); // the original event may come from any element // so we need to reset the target on the new event event.target = this.element[ 0 ]; // copy original event properties over to the new event orig = event.originalEvent; if ( orig ) { for ( prop in orig ) { if ( !( prop in event ) ) { event[ prop ] = orig[ prop ]; } } } this.element.trigger( event, data ); return !( $.isFunction( callback ) && callback.apply( this.element[0], [ event ].concat( data ) ) === false || event.isDefaultPrevented() ); } }; $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { if ( typeof options === "string" ) { options = { effect: options }; } var hasOptions, effectName = !options ? method : options === true || typeof options === "number" ? defaultEffect : options.effect || defaultEffect; options = options || {}; if ( typeof options === "number" ) { options = { duration: options }; } hasOptions = !$.isEmptyObject( options ); options.complete = callback; if ( options.delay ) { element.delay( options.delay ); } if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { element[ method ]( options ); } else if ( effectName !== method && element[ effectName ] ) { element[ effectName ]( options.duration, options.easing, callback ); } else { element.queue(function( next ) { $( this )[ method ](); if ( callback ) { callback.call( element[ 0 ] ); } next(); }); } }; }); var widget = $.widget; /*! * jQuery UI Mouse 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/mouse/ */ var mouseHandled = false; $( document ).mouseup( function() { mouseHandled = false; }); var mouse = $.widget("ui.mouse", { version: "1.11.4", options: { cancel: "input,textarea,button,select,option", distance: 1, delay: 0 }, _mouseInit: function() { var that = this; this.element .bind("mousedown." + this.widgetName, function(event) { return that._mouseDown(event); }) .bind("click." + this.widgetName, function(event) { if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { $.removeData(event.target, that.widgetName + ".preventClickEvent"); event.stopImmediatePropagation(); return false; } }); this.started = false; }, // TODO: make sure destroying one instance of mouse doesn't mess with // other instances of mouse _mouseDestroy: function() { this.element.unbind("." + this.widgetName); if ( this._mouseMoveDelegate ) { this.document .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate) .unbind("mouseup." + this.widgetName, this._mouseUpDelegate); } }, _mouseDown: function(event) { // don't let more than one widget handle mouseStart if ( mouseHandled ) { return; } this._mouseMoved = false; // we may have missed mouseup (out of window) (this._mouseStarted && this._mouseUp(event)); this._mouseDownEvent = event; var that = this, btnIsLeft = (event.which === 1), // event.target.nodeName works around a bug in IE 8 with // disabled inputs (#7620) elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { return true; } this.mouseDelayMet = !this.options.delay; if (!this.mouseDelayMet) { this._mouseDelayTimer = setTimeout(function() { that.mouseDelayMet = true; }, this.options.delay); } if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { this._mouseStarted = (this._mouseStart(event) !== false); if (!this._mouseStarted) { event.preventDefault(); return true; } } // Click event may never have fired (Gecko & Opera) if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { $.removeData(event.target, this.widgetName + ".preventClickEvent"); } // these delegates are required to keep context this._mouseMoveDelegate = function(event) { return that._mouseMove(event); }; this._mouseUpDelegate = function(event) { return that._mouseUp(event); }; this.document .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) .bind( "mouseup." + this.widgetName, this._mouseUpDelegate ); event.preventDefault(); mouseHandled = true; return true; }, _mouseMove: function(event) { // Only check for mouseups outside the document if you've moved inside the document // at least once. This prevents the firing of mouseup in the case of IE<9, which will // fire a mousemove event if content is placed under the cursor. See #7778 // Support: IE <9 if ( this._mouseMoved ) { // IE mouseup check - mouseup happened when mouse was out of window if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { return this._mouseUp(event); // Iframe mouseup check - mouseup occurred in another document } else if ( !event.which ) { return this._mouseUp( event ); } } if ( event.which || event.button ) { this._mouseMoved = true; } if (this._mouseStarted) { this._mouseDrag(event); return event.preventDefault(); } if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { this._mouseStarted = (this._mouseStart(this._mouseDownEvent, event) !== false); (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); } return !this._mouseStarted; }, _mouseUp: function(event) { this.document .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate ); if (this._mouseStarted) { this._mouseStarted = false; if (event.target === this._mouseDownEvent.target) { $.data(event.target, this.widgetName + ".preventClickEvent", true); } this._mouseStop(event); } mouseHandled = false; return false; }, _mouseDistanceMet: function(event) { return (Math.max( Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY) ) >= this.options.distance ); }, _mouseDelayMet: function(/* event */) { return this.mouseDelayMet; }, // These are placeholder methods, to be overriden by extending plugin _mouseStart: function(/* event */) {}, _mouseDrag: function(/* event */) {}, _mouseStop: function(/* event */) {}, _mouseCapture: function(/* event */) { return true; } }); /*! * jQuery UI Position 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/position/ */ (function() { $.ui = $.ui || {}; var cachedScrollbarWidth, supportsOffsetFractions, max = Math.max, abs = Math.abs, round = Math.round, rhorizontal = /left|center|right/, rvertical = /top|center|bottom/, roffset = /[\+\-]\d+(\.[\d]+)?%?/, rposition = /^\w+/, rpercent = /%$/, _position = $.fn.position; function getOffsets( offsets, width, height ) { return [ parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) ]; } function parseCss( element, property ) { return parseInt( $.css( element, property ), 10 ) || 0; } function getDimensions( elem ) { var raw = elem[0]; if ( raw.nodeType === 9 ) { return { width: elem.width(), height: elem.height(), offset: { top: 0, left: 0 } }; } if ( $.isWindow( raw ) ) { return { width: elem.width(), height: elem.height(), offset: { top: elem.scrollTop(), left: elem.scrollLeft() } }; } if ( raw.preventDefault ) { return { width: 0, height: 0, offset: { top: raw.pageY, left: raw.pageX } }; } return { width: elem.outerWidth(), height: elem.outerHeight(), offset: elem.offset() }; } $.position = { scrollbarWidth: function() { if ( cachedScrollbarWidth !== undefined ) { return cachedScrollbarWidth; } var w1, w2, div = $( "
      " ), innerDiv = div.children()[0]; $( "body" ).append( div ); w1 = innerDiv.offsetWidth; div.css( "overflow", "scroll" ); w2 = innerDiv.offsetWidth; if ( w1 === w2 ) { w2 = div[0].clientWidth; } div.remove(); return (cachedScrollbarWidth = w1 - w2); }, getScrollInfo: function( within ) { var overflowX = within.isWindow || within.isDocument ? "" : within.element.css( "overflow-x" ), overflowY = within.isWindow || within.isDocument ? "" : within.element.css( "overflow-y" ), hasOverflowX = overflowX === "scroll" || ( overflowX === "auto" && within.width < within.element[0].scrollWidth ), hasOverflowY = overflowY === "scroll" || ( overflowY === "auto" && within.height < within.element[0].scrollHeight ); return { width: hasOverflowY ? $.position.scrollbarWidth() : 0, height: hasOverflowX ? $.position.scrollbarWidth() : 0 }; }, getWithinInfo: function( element ) { var withinElement = $( element || window ), isWindow = $.isWindow( withinElement[0] ), isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9; return { element: withinElement, isWindow: isWindow, isDocument: isDocument, offset: withinElement.offset() || { left: 0, top: 0 }, scrollLeft: withinElement.scrollLeft(), scrollTop: withinElement.scrollTop(), // support: jQuery 1.6.x // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(), height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight() }; } }; $.fn.position = function( options ) { if ( !options || !options.of ) { return _position.apply( this, arguments ); } // make a copy, we don't want to modify arguments options = $.extend( {}, options ); var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, target = $( options.of ), within = $.position.getWithinInfo( options.within ), scrollInfo = $.position.getScrollInfo( within ), collision = ( options.collision || "flip" ).split( " " ), offsets = {}; dimensions = getDimensions( target ); if ( target[0].preventDefault ) { // force left top to allow flipping options.at = "left top"; } targetWidth = dimensions.width; targetHeight = dimensions.height; targetOffset = dimensions.offset; // clone to reuse original targetOffset later basePosition = $.extend( {}, targetOffset ); // force my and at to have valid horizontal and vertical positions // if a value is missing or invalid, it will be converted to center $.each( [ "my", "at" ], function() { var pos = ( options[ this ] || "" ).split( " " ), horizontalOffset, verticalOffset; if ( pos.length === 1) { pos = rhorizontal.test( pos[ 0 ] ) ? pos.concat( [ "center" ] ) : rvertical.test( pos[ 0 ] ) ? [ "center" ].concat( pos ) : [ "center", "center" ]; } pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; // calculate offsets horizontalOffset = roffset.exec( pos[ 0 ] ); verticalOffset = roffset.exec( pos[ 1 ] ); offsets[ this ] = [ horizontalOffset ? horizontalOffset[ 0 ] : 0, verticalOffset ? verticalOffset[ 0 ] : 0 ]; // reduce to just the positions without the offsets options[ this ] = [ rposition.exec( pos[ 0 ] )[ 0 ], rposition.exec( pos[ 1 ] )[ 0 ] ]; }); // normalize collision option if ( collision.length === 1 ) { collision[ 1 ] = collision[ 0 ]; } if ( options.at[ 0 ] === "right" ) { basePosition.left += targetWidth; } else if ( options.at[ 0 ] === "center" ) { basePosition.left += targetWidth / 2; } if ( options.at[ 1 ] === "bottom" ) { basePosition.top += targetHeight; } else if ( options.at[ 1 ] === "center" ) { basePosition.top += targetHeight / 2; } atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); basePosition.left += atOffset[ 0 ]; basePosition.top += atOffset[ 1 ]; return this.each(function() { var collisionPosition, using, elem = $( this ), elemWidth = elem.outerWidth(), elemHeight = elem.outerHeight(), marginLeft = parseCss( this, "marginLeft" ), marginTop = parseCss( this, "marginTop" ), collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width, collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height, position = $.extend( {}, basePosition ), myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); if ( options.my[ 0 ] === "right" ) { position.left -= elemWidth; } else if ( options.my[ 0 ] === "center" ) { position.left -= elemWidth / 2; } if ( options.my[ 1 ] === "bottom" ) { position.top -= elemHeight; } else if ( options.my[ 1 ] === "center" ) { position.top -= elemHeight / 2; } position.left += myOffset[ 0 ]; position.top += myOffset[ 1 ]; // if the browser doesn't support fractions, then round for consistent results if ( !supportsOffsetFractions ) { position.left = round( position.left ); position.top = round( position.top ); } collisionPosition = { marginLeft: marginLeft, marginTop: marginTop }; $.each( [ "left", "top" ], function( i, dir ) { if ( $.ui.position[ collision[ i ] ] ) { $.ui.position[ collision[ i ] ][ dir ]( position, { targetWidth: targetWidth, targetHeight: targetHeight, elemWidth: elemWidth, elemHeight: elemHeight, collisionPosition: collisionPosition, collisionWidth: collisionWidth, collisionHeight: collisionHeight, offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], my: options.my, at: options.at, within: within, elem: elem }); } }); if ( options.using ) { // adds feedback as second argument to using callback, if present using = function( props ) { var left = targetOffset.left - position.left, right = left + targetWidth - elemWidth, top = targetOffset.top - position.top, bottom = top + targetHeight - elemHeight, feedback = { target: { element: target, left: targetOffset.left, top: targetOffset.top, width: targetWidth, height: targetHeight }, element: { element: elem, left: position.left, top: position.top, width: elemWidth, height: elemHeight }, horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" }; if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { feedback.horizontal = "center"; } if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { feedback.vertical = "middle"; } if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { feedback.important = "horizontal"; } else { feedback.important = "vertical"; } options.using.call( this, props, feedback ); }; } elem.offset( $.extend( position, { using: using } ) ); }); }; $.ui.position = { fit: { left: function( position, data ) { var within = data.within, withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, outerWidth = within.width, collisionPosLeft = position.left - data.collisionPosition.marginLeft, overLeft = withinOffset - collisionPosLeft, overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, newOverRight; // element is wider than within if ( data.collisionWidth > outerWidth ) { // element is initially over the left side of within if ( overLeft > 0 && overRight <= 0 ) { newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; position.left += overLeft - newOverRight; // element is initially over right side of within } else if ( overRight > 0 && overLeft <= 0 ) { position.left = withinOffset; // element is initially over both left and right sides of within } else { if ( overLeft > overRight ) { position.left = withinOffset + outerWidth - data.collisionWidth; } else { position.left = withinOffset; } } // too far left -> align with left edge } else if ( overLeft > 0 ) { position.left += overLeft; // too far right -> align with right edge } else if ( overRight > 0 ) { position.left -= overRight; // adjust based on position and margin } else { position.left = max( position.left - collisionPosLeft, position.left ); } }, top: function( position, data ) { var within = data.within, withinOffset = within.isWindow ? within.scrollTop : within.offset.top, outerHeight = data.within.height, collisionPosTop = position.top - data.collisionPosition.marginTop, overTop = withinOffset - collisionPosTop, overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, newOverBottom; // element is taller than within if ( data.collisionHeight > outerHeight ) { // element is initially over the top of within if ( overTop > 0 && overBottom <= 0 ) { newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; position.top += overTop - newOverBottom; // element is initially over bottom of within } else if ( overBottom > 0 && overTop <= 0 ) { position.top = withinOffset; // element is initially over both top and bottom of within } else { if ( overTop > overBottom ) { position.top = withinOffset + outerHeight - data.collisionHeight; } else { position.top = withinOffset; } } // too far up -> align with top } else if ( overTop > 0 ) { position.top += overTop; // too far down -> align with bottom edge } else if ( overBottom > 0 ) { position.top -= overBottom; // adjust based on position and margin } else { position.top = max( position.top - collisionPosTop, position.top ); } } }, flip: { left: function( position, data ) { var within = data.within, withinOffset = within.offset.left + within.scrollLeft, outerWidth = within.width, offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, collisionPosLeft = position.left - data.collisionPosition.marginLeft, overLeft = collisionPosLeft - offsetLeft, overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, myOffset = data.my[ 0 ] === "left" ? -data.elemWidth : data.my[ 0 ] === "right" ? data.elemWidth : 0, atOffset = data.at[ 0 ] === "left" ? data.targetWidth : data.at[ 0 ] === "right" ? -data.targetWidth : 0, offset = -2 * data.offset[ 0 ], newOverRight, newOverLeft; if ( overLeft < 0 ) { newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { position.left += myOffset + atOffset + offset; } } else if ( overRight > 0 ) { newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { position.left += myOffset + atOffset + offset; } } }, top: function( position, data ) { var within = data.within, withinOffset = within.offset.top + within.scrollTop, outerHeight = within.height, offsetTop = within.isWindow ? within.scrollTop : within.offset.top, collisionPosTop = position.top - data.collisionPosition.marginTop, overTop = collisionPosTop - offsetTop, overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, top = data.my[ 1 ] === "top", myOffset = top ? -data.elemHeight : data.my[ 1 ] === "bottom" ? data.elemHeight : 0, atOffset = data.at[ 1 ] === "top" ? data.targetHeight : data.at[ 1 ] === "bottom" ? -data.targetHeight : 0, offset = -2 * data.offset[ 1 ], newOverTop, newOverBottom; if ( overTop < 0 ) { newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { position.top += myOffset + atOffset + offset; } } else if ( overBottom > 0 ) { newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { position.top += myOffset + atOffset + offset; } } } }, flipfit: { left: function() { $.ui.position.flip.left.apply( this, arguments ); $.ui.position.fit.left.apply( this, arguments ); }, top: function() { $.ui.position.flip.top.apply( this, arguments ); $.ui.position.fit.top.apply( this, arguments ); } } }; // fraction support test (function() { var testElement, testElementParent, testElementStyle, offsetLeft, i, body = document.getElementsByTagName( "body" )[ 0 ], div = document.createElement( "div" ); //Create a "fake body" for testing based on method used in jQuery.support testElement = document.createElement( body ? "div" : "body" ); testElementStyle = { visibility: "hidden", width: 0, height: 0, border: 0, margin: 0, background: "none" }; if ( body ) { $.extend( testElementStyle, { position: "absolute", left: "-1000px", top: "-1000px" }); } for ( i in testElementStyle ) { testElement.style[ i ] = testElementStyle[ i ]; } testElement.appendChild( div ); testElementParent = body || document.documentElement; testElementParent.insertBefore( testElement, testElementParent.firstChild ); div.style.cssText = "position: absolute; left: 10.7432222px;"; offsetLeft = $( div ).offset().left; supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11; testElement.innerHTML = ""; testElementParent.removeChild( testElement ); })(); })(); var position = $.ui.position; /*! * jQuery UI Accordion 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/accordion/ */ var accordion = $.widget( "ui.accordion", { version: "1.11.4", options: { active: 0, animate: {}, collapsible: false, event: "click", header: "> li > :first-child,> :not(li):even", heightStyle: "auto", icons: { activeHeader: "ui-icon-triangle-1-s", header: "ui-icon-triangle-1-e" }, // callbacks activate: null, beforeActivate: null }, hideProps: { borderTopWidth: "hide", borderBottomWidth: "hide", paddingTop: "hide", paddingBottom: "hide", height: "hide" }, showProps: { borderTopWidth: "show", borderBottomWidth: "show", paddingTop: "show", paddingBottom: "show", height: "show" }, _create: function() { var options = this.options; this.prevShow = this.prevHide = $(); this.element.addClass( "ui-accordion ui-widget ui-helper-reset" ) // ARIA .attr( "role", "tablist" ); // don't allow collapsible: false and active: false / null if ( !options.collapsible && (options.active === false || options.active == null) ) { options.active = 0; } this._processPanels(); // handle negative values if ( options.active < 0 ) { options.active += this.headers.length; } this._refresh(); }, _getCreateEventData: function() { return { header: this.active, panel: !this.active.length ? $() : this.active.next() }; }, _createIcons: function() { var icons = this.options.icons; if ( icons ) { $( "" ) .addClass( "ui-accordion-header-icon ui-icon " + icons.header ) .prependTo( this.headers ); this.active.children( ".ui-accordion-header-icon" ) .removeClass( icons.header ) .addClass( icons.activeHeader ); this.headers.addClass( "ui-accordion-icons" ); } }, _destroyIcons: function() { this.headers .removeClass( "ui-accordion-icons" ) .children( ".ui-accordion-header-icon" ) .remove(); }, _destroy: function() { var contents; // clean up main element this.element .removeClass( "ui-accordion ui-widget ui-helper-reset" ) .removeAttr( "role" ); // clean up headers this.headers .removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " + "ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) .removeAttr( "role" ) .removeAttr( "aria-expanded" ) .removeAttr( "aria-selected" ) .removeAttr( "aria-controls" ) .removeAttr( "tabIndex" ) .removeUniqueId(); this._destroyIcons(); // clean up content panels contents = this.headers.next() .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " + "ui-accordion-content ui-accordion-content-active ui-state-disabled" ) .css( "display", "" ) .removeAttr( "role" ) .removeAttr( "aria-hidden" ) .removeAttr( "aria-labelledby" ) .removeUniqueId(); if ( this.options.heightStyle !== "content" ) { contents.css( "height", "" ); } }, _setOption: function( key, value ) { if ( key === "active" ) { // _activate() will handle invalid values and update this.options this._activate( value ); return; } if ( key === "event" ) { if ( this.options.event ) { this._off( this.headers, this.options.event ); } this._setupEvents( value ); } this._super( key, value ); // setting collapsible: false while collapsed; open first panel if ( key === "collapsible" && !value && this.options.active === false ) { this._activate( 0 ); } if ( key === "icons" ) { this._destroyIcons(); if ( value ) { this._createIcons(); } } // #5332 - opacity doesn't cascade to positioned elements in IE // so we need to add the disabled class to the headers and panels if ( key === "disabled" ) { this.element .toggleClass( "ui-state-disabled", !!value ) .attr( "aria-disabled", value ); this.headers.add( this.headers.next() ) .toggleClass( "ui-state-disabled", !!value ); } }, _keydown: function( event ) { if ( event.altKey || event.ctrlKey ) { return; } var keyCode = $.ui.keyCode, length = this.headers.length, currentIndex = this.headers.index( event.target ), toFocus = false; switch ( event.keyCode ) { case keyCode.RIGHT: case keyCode.DOWN: toFocus = this.headers[ ( currentIndex + 1 ) % length ]; break; case keyCode.LEFT: case keyCode.UP: toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; break; case keyCode.SPACE: case keyCode.ENTER: this._eventHandler( event ); break; case keyCode.HOME: toFocus = this.headers[ 0 ]; break; case keyCode.END: toFocus = this.headers[ length - 1 ]; break; } if ( toFocus ) { $( event.target ).attr( "tabIndex", -1 ); $( toFocus ).attr( "tabIndex", 0 ); toFocus.focus(); event.preventDefault(); } }, _panelKeyDown: function( event ) { if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { $( event.currentTarget ).prev().focus(); } }, refresh: function() { var options = this.options; this._processPanels(); // was collapsed or no panel if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) { options.active = false; this.active = $(); // active false only when collapsible is true } else if ( options.active === false ) { this._activate( 0 ); // was active, but active panel is gone } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { // all remaining panel are disabled if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) { options.active = false; this.active = $(); // activate previous panel } else { this._activate( Math.max( 0, options.active - 1 ) ); } // was active, active panel still exists } else { // make sure active index is correct options.active = this.headers.index( this.active ); } this._destroyIcons(); this._refresh(); }, _processPanels: function() { var prevHeaders = this.headers, prevPanels = this.panels; this.headers = this.element.find( this.options.header ) .addClass( "ui-accordion-header ui-state-default ui-corner-all" ); this.panels = this.headers.next() .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ) .filter( ":not(.ui-accordion-content-active)" ) .hide(); // Avoid memory leaks (#10056) if ( prevPanels ) { this._off( prevHeaders.not( this.headers ) ); this._off( prevPanels.not( this.panels ) ); } }, _refresh: function() { var maxHeight, options = this.options, heightStyle = options.heightStyle, parent = this.element.parent(); this.active = this._findActive( options.active ) .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ) .removeClass( "ui-corner-all" ); this.active.next() .addClass( "ui-accordion-content-active" ) .show(); this.headers .attr( "role", "tab" ) .each(function() { var header = $( this ), headerId = header.uniqueId().attr( "id" ), panel = header.next(), panelId = panel.uniqueId().attr( "id" ); header.attr( "aria-controls", panelId ); panel.attr( "aria-labelledby", headerId ); }) .next() .attr( "role", "tabpanel" ); this.headers .not( this.active ) .attr({ "aria-selected": "false", "aria-expanded": "false", tabIndex: -1 }) .next() .attr({ "aria-hidden": "true" }) .hide(); // make sure at least one header is in the tab order if ( !this.active.length ) { this.headers.eq( 0 ).attr( "tabIndex", 0 ); } else { this.active.attr({ "aria-selected": "true", "aria-expanded": "true", tabIndex: 0 }) .next() .attr({ "aria-hidden": "false" }); } this._createIcons(); this._setupEvents( options.event ); if ( heightStyle === "fill" ) { maxHeight = parent.height(); this.element.siblings( ":visible" ).each(function() { var elem = $( this ), position = elem.css( "position" ); if ( position === "absolute" || position === "fixed" ) { return; } maxHeight -= elem.outerHeight( true ); }); this.headers.each(function() { maxHeight -= $( this ).outerHeight( true ); }); this.headers.next() .each(function() { $( this ).height( Math.max( 0, maxHeight - $( this ).innerHeight() + $( this ).height() ) ); }) .css( "overflow", "auto" ); } else if ( heightStyle === "auto" ) { maxHeight = 0; this.headers.next() .each(function() { maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); }) .height( maxHeight ); } }, _activate: function( index ) { var active = this._findActive( index )[ 0 ]; // trying to activate the already active panel if ( active === this.active[ 0 ] ) { return; } // trying to collapse, simulate a click on the currently active header active = active || this.active[ 0 ]; this._eventHandler({ target: active, currentTarget: active, preventDefault: $.noop }); }, _findActive: function( selector ) { return typeof selector === "number" ? this.headers.eq( selector ) : $(); }, _setupEvents: function( event ) { var events = { keydown: "_keydown" }; if ( event ) { $.each( event.split( " " ), function( index, eventName ) { events[ eventName ] = "_eventHandler"; }); } this._off( this.headers.add( this.headers.next() ) ); this._on( this.headers, events ); this._on( this.headers.next(), { keydown: "_panelKeyDown" }); this._hoverable( this.headers ); this._focusable( this.headers ); }, _eventHandler: function( event ) { var options = this.options, active = this.active, clicked = $( event.currentTarget ), clickedIsActive = clicked[ 0 ] === active[ 0 ], collapsing = clickedIsActive && options.collapsible, toShow = collapsing ? $() : clicked.next(), toHide = active.next(), eventData = { oldHeader: active, oldPanel: toHide, newHeader: collapsing ? $() : clicked, newPanel: toShow }; event.preventDefault(); if ( // click on active header, but not collapsible ( clickedIsActive && !options.collapsible ) || // allow canceling activation ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { return; } options.active = collapsing ? false : this.headers.index( clicked ); // when the call to ._toggle() comes after the class changes // it causes a very odd bug in IE 8 (see #6720) this.active = clickedIsActive ? $() : clicked; this._toggle( eventData ); // switch classes // corner classes on the previously active header stay after the animation active.removeClass( "ui-accordion-header-active ui-state-active" ); if ( options.icons ) { active.children( ".ui-accordion-header-icon" ) .removeClass( options.icons.activeHeader ) .addClass( options.icons.header ); } if ( !clickedIsActive ) { clicked .removeClass( "ui-corner-all" ) .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ); if ( options.icons ) { clicked.children( ".ui-accordion-header-icon" ) .removeClass( options.icons.header ) .addClass( options.icons.activeHeader ); } clicked .next() .addClass( "ui-accordion-content-active" ); } }, _toggle: function( data ) { var toShow = data.newPanel, toHide = this.prevShow.length ? this.prevShow : data.oldPanel; // handle activating a panel during the animation for another activation this.prevShow.add( this.prevHide ).stop( true, true ); this.prevShow = toShow; this.prevHide = toHide; if ( this.options.animate ) { this._animate( toShow, toHide, data ); } else { toHide.hide(); toShow.show(); this._toggleComplete( data ); } toHide.attr({ "aria-hidden": "true" }); toHide.prev().attr({ "aria-selected": "false", "aria-expanded": "false" }); // if we're switching panels, remove the old header from the tab order // if we're opening from collapsed state, remove the previous header from the tab order // if we're collapsing, then keep the collapsing header in the tab order if ( toShow.length && toHide.length ) { toHide.prev().attr({ "tabIndex": -1, "aria-expanded": "false" }); } else if ( toShow.length ) { this.headers.filter(function() { return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; }) .attr( "tabIndex", -1 ); } toShow .attr( "aria-hidden", "false" ) .prev() .attr({ "aria-selected": "true", "aria-expanded": "true", tabIndex: 0 }); }, _animate: function( toShow, toHide, data ) { var total, easing, duration, that = this, adjust = 0, boxSizing = toShow.css( "box-sizing" ), down = toShow.length && ( !toHide.length || ( toShow.index() < toHide.index() ) ), animate = this.options.animate || {}, options = down && animate.down || animate, complete = function() { that._toggleComplete( data ); }; if ( typeof options === "number" ) { duration = options; } if ( typeof options === "string" ) { easing = options; } // fall back from options to animation in case of partial down settings easing = easing || options.easing || animate.easing; duration = duration || options.duration || animate.duration; if ( !toHide.length ) { return toShow.animate( this.showProps, duration, easing, complete ); } if ( !toShow.length ) { return toHide.animate( this.hideProps, duration, easing, complete ); } total = toShow.show().outerHeight(); toHide.animate( this.hideProps, { duration: duration, easing: easing, step: function( now, fx ) { fx.now = Math.round( now ); } }); toShow .hide() .animate( this.showProps, { duration: duration, easing: easing, complete: complete, step: function( now, fx ) { fx.now = Math.round( now ); if ( fx.prop !== "height" ) { if ( boxSizing === "content-box" ) { adjust += fx.now; } } else if ( that.options.heightStyle !== "content" ) { fx.now = Math.round( total - toHide.outerHeight() - adjust ); adjust = 0; } } }); }, _toggleComplete: function( data ) { var toHide = data.oldPanel; toHide .removeClass( "ui-accordion-content-active" ) .prev() .removeClass( "ui-corner-top" ) .addClass( "ui-corner-all" ); // Work around for rendering bug in IE (#5421) if ( toHide.length ) { toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; } this._trigger( "activate", null, data ); } }); /*! * jQuery UI Menu 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/menu/ */ var menu = $.widget( "ui.menu", { version: "1.11.4", defaultElement: "
        ", delay: 300, options: { icons: { submenu: "ui-icon-carat-1-e" }, items: "> *", menus: "ul", position: { my: "left-1 top", at: "right top" }, role: "menu", // callbacks blur: null, focus: null, select: null }, _create: function() { this.activeMenu = this.element; // Flag used to prevent firing of the click handler // as the event bubbles up through nested menus this.mouseHandled = false; this.element .uniqueId() .addClass( "ui-menu ui-widget ui-widget-content" ) .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ) .attr({ role: this.options.role, tabIndex: 0 }); if ( this.options.disabled ) { this.element .addClass( "ui-state-disabled" ) .attr( "aria-disabled", "true" ); } this._on({ // Prevent focus from sticking to links inside menu after clicking // them (focus should always stay on UL during navigation). "mousedown .ui-menu-item": function( event ) { event.preventDefault(); }, "click .ui-menu-item": function( event ) { var target = $( event.target ); if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { this.select( event ); // Only set the mouseHandled flag if the event will bubble, see #9469. if ( !event.isPropagationStopped() ) { this.mouseHandled = true; } // Open submenu on click if ( target.has( ".ui-menu" ).length ) { this.expand( event ); } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) { // Redirect focus to the menu this.element.trigger( "focus", [ true ] ); // If the active item is on the top level, let it stay active. // Otherwise, blur the active item since it is no longer visible. if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { clearTimeout( this.timer ); } } } }, "mouseenter .ui-menu-item": function( event ) { // Ignore mouse events while typeahead is active, see #10458. // Prevents focusing the wrong item when typeahead causes a scroll while the mouse // is over an item in the menu if ( this.previousFilter ) { return; } var target = $( event.currentTarget ); // Remove ui-state-active class from siblings of the newly focused menu item // to avoid a jump caused by adjacent elements both having a class with a border target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" ); this.focus( event, target ); }, mouseleave: "collapseAll", "mouseleave .ui-menu": "collapseAll", focus: function( event, keepActiveItem ) { // If there's already an active item, keep it active // If not, activate the first item var item = this.active || this.element.find( this.options.items ).eq( 0 ); if ( !keepActiveItem ) { this.focus( event, item ); } }, blur: function( event ) { this._delay(function() { if ( !$.contains( this.element[0], this.document[0].activeElement ) ) { this.collapseAll( event ); } }); }, keydown: "_keydown" }); this.refresh(); // Clicks outside of a menu collapse any open menus this._on( this.document, { click: function( event ) { if ( this._closeOnDocumentClick( event ) ) { this.collapseAll( event ); } // Reset the mouseHandled flag this.mouseHandled = false; } }); }, _destroy: function() { // Destroy (sub)menus this.element .removeAttr( "aria-activedescendant" ) .find( ".ui-menu" ).addBack() .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" ) .removeAttr( "role" ) .removeAttr( "tabIndex" ) .removeAttr( "aria-labelledby" ) .removeAttr( "aria-expanded" ) .removeAttr( "aria-hidden" ) .removeAttr( "aria-disabled" ) .removeUniqueId() .show(); // Destroy menu items this.element.find( ".ui-menu-item" ) .removeClass( "ui-menu-item" ) .removeAttr( "role" ) .removeAttr( "aria-disabled" ) .removeUniqueId() .removeClass( "ui-state-hover" ) .removeAttr( "tabIndex" ) .removeAttr( "role" ) .removeAttr( "aria-haspopup" ) .children().each( function() { var elem = $( this ); if ( elem.data( "ui-menu-submenu-carat" ) ) { elem.remove(); } }); // Destroy menu dividers this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); }, _keydown: function( event ) { var match, prev, character, skip, preventDefault = true; switch ( event.keyCode ) { case $.ui.keyCode.PAGE_UP: this.previousPage( event ); break; case $.ui.keyCode.PAGE_DOWN: this.nextPage( event ); break; case $.ui.keyCode.HOME: this._move( "first", "first", event ); break; case $.ui.keyCode.END: this._move( "last", "last", event ); break; case $.ui.keyCode.UP: this.previous( event ); break; case $.ui.keyCode.DOWN: this.next( event ); break; case $.ui.keyCode.LEFT: this.collapse( event ); break; case $.ui.keyCode.RIGHT: if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { this.expand( event ); } break; case $.ui.keyCode.ENTER: case $.ui.keyCode.SPACE: this._activate( event ); break; case $.ui.keyCode.ESCAPE: this.collapse( event ); break; default: preventDefault = false; prev = this.previousFilter || ""; character = String.fromCharCode( event.keyCode ); skip = false; clearTimeout( this.filterTimer ); if ( character === prev ) { skip = true; } else { character = prev + character; } match = this._filterMenuItems( character ); match = skip && match.index( this.active.next() ) !== -1 ? this.active.nextAll( ".ui-menu-item" ) : match; // If no matches on the current filter, reset to the last character pressed // to move down the menu to the first item that starts with that character if ( !match.length ) { character = String.fromCharCode( event.keyCode ); match = this._filterMenuItems( character ); } if ( match.length ) { this.focus( event, match ); this.previousFilter = character; this.filterTimer = this._delay(function() { delete this.previousFilter; }, 1000 ); } else { delete this.previousFilter; } } if ( preventDefault ) { event.preventDefault(); } }, _activate: function( event ) { if ( !this.active.is( ".ui-state-disabled" ) ) { if ( this.active.is( "[aria-haspopup='true']" ) ) { this.expand( event ); } else { this.select( event ); } } }, refresh: function() { var menus, items, that = this, icon = this.options.icons.submenu, submenus = this.element.find( this.options.menus ); this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ); // Initialize nested menus submenus.filter( ":not(.ui-menu)" ) .addClass( "ui-menu ui-widget ui-widget-content ui-front" ) .hide() .attr({ role: this.options.role, "aria-hidden": "true", "aria-expanded": "false" }) .each(function() { var menu = $( this ), item = menu.parent(), submenuCarat = $( "" ) .addClass( "ui-menu-icon ui-icon " + icon ) .data( "ui-menu-submenu-carat", true ); item .attr( "aria-haspopup", "true" ) .prepend( submenuCarat ); menu.attr( "aria-labelledby", item.attr( "id" ) ); }); menus = submenus.add( this.element ); items = menus.find( this.options.items ); // Initialize menu-items containing spaces and/or dashes only as dividers items.not( ".ui-menu-item" ).each(function() { var item = $( this ); if ( that._isDivider( item ) ) { item.addClass( "ui-widget-content ui-menu-divider" ); } }); // Don't refresh list items that are already adapted items.not( ".ui-menu-item, .ui-menu-divider" ) .addClass( "ui-menu-item" ) .uniqueId() .attr({ tabIndex: -1, role: this._itemRole() }); // Add aria-disabled attribute to any disabled menu item items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); // If the active item has been removed, blur the menu if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { this.blur(); } }, _itemRole: function() { return { menu: "menuitem", listbox: "option" }[ this.options.role ]; }, _setOption: function( key, value ) { if ( key === "icons" ) { this.element.find( ".ui-menu-icon" ) .removeClass( this.options.icons.submenu ) .addClass( value.submenu ); } if ( key === "disabled" ) { this.element .toggleClass( "ui-state-disabled", !!value ) .attr( "aria-disabled", value ); } this._super( key, value ); }, focus: function( event, item ) { var nested, focused; this.blur( event, event && event.type === "focus" ); this._scrollIntoView( item ); this.active = item.first(); focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" ); // Only update aria-activedescendant if there's a role // otherwise we assume focus is managed elsewhere if ( this.options.role ) { this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); } // Highlight active parent menu item, if any this.active .parent() .closest( ".ui-menu-item" ) .addClass( "ui-state-active" ); if ( event && event.type === "keydown" ) { this._close(); } else { this.timer = this._delay(function() { this._close(); }, this.delay ); } nested = item.children( ".ui-menu" ); if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) { this._startOpening(nested); } this.activeMenu = item.parent(); this._trigger( "focus", event, { item: item } ); }, _scrollIntoView: function( item ) { var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; if ( this._hasScroll() ) { borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0; paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0; offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; scroll = this.activeMenu.scrollTop(); elementHeight = this.activeMenu.height(); itemHeight = item.outerHeight(); if ( offset < 0 ) { this.activeMenu.scrollTop( scroll + offset ); } else if ( offset + itemHeight > elementHeight ) { this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); } } }, blur: function( event, fromFocus ) { if ( !fromFocus ) { clearTimeout( this.timer ); } if ( !this.active ) { return; } this.active.removeClass( "ui-state-focus" ); this.active = null; this._trigger( "blur", event, { item: this.active } ); }, _startOpening: function( submenu ) { clearTimeout( this.timer ); // Don't open if already open fixes a Firefox bug that caused a .5 pixel // shift in the submenu position when mousing over the carat icon if ( submenu.attr( "aria-hidden" ) !== "true" ) { return; } this.timer = this._delay(function() { this._close(); this._open( submenu ); }, this.delay ); }, _open: function( submenu ) { var position = $.extend({ of: this.active }, this.options.position ); clearTimeout( this.timer ); this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) .hide() .attr( "aria-hidden", "true" ); submenu .show() .removeAttr( "aria-hidden" ) .attr( "aria-expanded", "true" ) .position( position ); }, collapseAll: function( event, all ) { clearTimeout( this.timer ); this.timer = this._delay(function() { // If we were passed an event, look for the submenu that contains the event var currentMenu = all ? this.element : $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway if ( !currentMenu.length ) { currentMenu = this.element; } this._close( currentMenu ); this.blur( event ); this.activeMenu = currentMenu; }, this.delay ); }, // With no arguments, closes the currently active menu - if nothing is active // it closes all menus. If passed an argument, it will search for menus BELOW _close: function( startMenu ) { if ( !startMenu ) { startMenu = this.active ? this.active.parent() : this.element; } startMenu .find( ".ui-menu" ) .hide() .attr( "aria-hidden", "true" ) .attr( "aria-expanded", "false" ) .end() .find( ".ui-state-active" ).not( ".ui-state-focus" ) .removeClass( "ui-state-active" ); }, _closeOnDocumentClick: function( event ) { return !$( event.target ).closest( ".ui-menu" ).length; }, _isDivider: function( item ) { // Match hyphen, em dash, en dash return !/[^\-\u2014\u2013\s]/.test( item.text() ); }, collapse: function( event ) { var newItem = this.active && this.active.parent().closest( ".ui-menu-item", this.element ); if ( newItem && newItem.length ) { this._close(); this.focus( event, newItem ); } }, expand: function( event ) { var newItem = this.active && this.active .children( ".ui-menu " ) .find( this.options.items ) .first(); if ( newItem && newItem.length ) { this._open( newItem.parent() ); // Delay so Firefox will not hide activedescendant change in expanding submenu from AT this._delay(function() { this.focus( event, newItem ); }); } }, next: function( event ) { this._move( "next", "first", event ); }, previous: function( event ) { this._move( "prev", "last", event ); }, isFirstItem: function() { return this.active && !this.active.prevAll( ".ui-menu-item" ).length; }, isLastItem: function() { return this.active && !this.active.nextAll( ".ui-menu-item" ).length; }, _move: function( direction, filter, event ) { var next; if ( this.active ) { if ( direction === "first" || direction === "last" ) { next = this.active [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) .eq( -1 ); } else { next = this.active [ direction + "All" ]( ".ui-menu-item" ) .eq( 0 ); } } if ( !next || !next.length || !this.active ) { next = this.activeMenu.find( this.options.items )[ filter ](); } this.focus( event, next ); }, nextPage: function( event ) { var item, base, height; if ( !this.active ) { this.next( event ); return; } if ( this.isLastItem() ) { return; } if ( this._hasScroll() ) { base = this.active.offset().top; height = this.element.height(); this.active.nextAll( ".ui-menu-item" ).each(function() { item = $( this ); return item.offset().top - base - height < 0; }); this.focus( event, item ); } else { this.focus( event, this.activeMenu.find( this.options.items ) [ !this.active ? "first" : "last" ]() ); } }, previousPage: function( event ) { var item, base, height; if ( !this.active ) { this.next( event ); return; } if ( this.isFirstItem() ) { return; } if ( this._hasScroll() ) { base = this.active.offset().top; height = this.element.height(); this.active.prevAll( ".ui-menu-item" ).each(function() { item = $( this ); return item.offset().top - base + height > 0; }); this.focus( event, item ); } else { this.focus( event, this.activeMenu.find( this.options.items ).first() ); } }, _hasScroll: function() { return this.element.outerHeight() < this.element.prop( "scrollHeight" ); }, select: function( event ) { // TODO: It should never be possible to not have an active item at this // point, but the tests don't trigger mouseenter before click. this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); var ui = { item: this.active }; if ( !this.active.has( ".ui-menu" ).length ) { this.collapseAll( event, true ); } this._trigger( "select", event, ui ); }, _filterMenuItems: function(character) { var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ), regex = new RegExp( "^" + escapedCharacter, "i" ); return this.activeMenu .find( this.options.items ) // Only match on items, not dividers or other content (#10571) .filter( ".ui-menu-item" ) .filter(function() { return regex.test( $.trim( $( this ).text() ) ); }); } }); /*! * jQuery UI Autocomplete 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/autocomplete/ */ $.widget( "ui.autocomplete", { version: "1.11.4", defaultElement: "", options: { appendTo: null, autoFocus: false, delay: 300, minLength: 1, position: { my: "left top", at: "left bottom", collision: "none" }, source: null, // callbacks change: null, close: null, focus: null, open: null, response: null, search: null, select: null }, requestIndex: 0, pending: 0, _create: function() { // Some browsers only repeat keydown events, not keypress events, // so we use the suppressKeyPress flag to determine if we've already // handled the keydown event. #7269 // Unfortunately the code for & in keypress is the same as the up arrow, // so we use the suppressKeyPressRepeat flag to avoid handling keypress // events when we know the keydown event was used to modify the // search term. #7799 var suppressKeyPress, suppressKeyPressRepeat, suppressInput, nodeName = this.element[ 0 ].nodeName.toLowerCase(), isTextarea = nodeName === "textarea", isInput = nodeName === "input"; this.isMultiLine = // Textareas are always multi-line isTextarea ? true : // Inputs are always single-line, even if inside a contentEditable element // IE also treats inputs as contentEditable isInput ? false : // All other element types are determined by whether or not they're contentEditable this.element.prop( "isContentEditable" ); this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; this.isNewMenu = true; this.element .addClass( "ui-autocomplete-input" ) .attr( "autocomplete", "off" ); this._on( this.element, { keydown: function( event ) { if ( this.element.prop( "readOnly" ) ) { suppressKeyPress = true; suppressInput = true; suppressKeyPressRepeat = true; return; } suppressKeyPress = false; suppressInput = false; suppressKeyPressRepeat = false; var keyCode = $.ui.keyCode; switch ( event.keyCode ) { case keyCode.PAGE_UP: suppressKeyPress = true; this._move( "previousPage", event ); break; case keyCode.PAGE_DOWN: suppressKeyPress = true; this._move( "nextPage", event ); break; case keyCode.UP: suppressKeyPress = true; this._keyEvent( "previous", event ); break; case keyCode.DOWN: suppressKeyPress = true; this._keyEvent( "next", event ); break; case keyCode.ENTER: // when menu is open and has focus if ( this.menu.active ) { // #6055 - Opera still allows the keypress to occur // which causes forms to submit suppressKeyPress = true; event.preventDefault(); this.menu.select( event ); } break; case keyCode.TAB: if ( this.menu.active ) { this.menu.select( event ); } break; case keyCode.ESCAPE: if ( this.menu.element.is( ":visible" ) ) { if ( !this.isMultiLine ) { this._value( this.term ); } this.close( event ); // Different browsers have different default behavior for escape // Single press can mean undo or clear // Double press in IE means clear the whole form event.preventDefault(); } break; default: suppressKeyPressRepeat = true; // search timeout should be triggered before the input value is changed this._searchTimeout( event ); break; } }, keypress: function( event ) { if ( suppressKeyPress ) { suppressKeyPress = false; if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { event.preventDefault(); } return; } if ( suppressKeyPressRepeat ) { return; } // replicate some key handlers to allow them to repeat in Firefox and Opera var keyCode = $.ui.keyCode; switch ( event.keyCode ) { case keyCode.PAGE_UP: this._move( "previousPage", event ); break; case keyCode.PAGE_DOWN: this._move( "nextPage", event ); break; case keyCode.UP: this._keyEvent( "previous", event ); break; case keyCode.DOWN: this._keyEvent( "next", event ); break; } }, input: function( event ) { if ( suppressInput ) { suppressInput = false; event.preventDefault(); return; } this._searchTimeout( event ); }, focus: function() { this.selectedItem = null; this.previous = this._value(); }, blur: function( event ) { if ( this.cancelBlur ) { delete this.cancelBlur; return; } clearTimeout( this.searching ); this.close( event ); this._change( event ); } }); this._initSource(); this.menu = $( "
          " ) .addClass( "ui-autocomplete ui-front" ) .appendTo( this._appendTo() ) .menu({ // disable ARIA support, the live region takes care of that role: null }) .hide() .menu( "instance" ); this._on( this.menu.element, { mousedown: function( event ) { // prevent moving focus out of the text field event.preventDefault(); // IE doesn't prevent moving focus even with event.preventDefault() // so we set a flag to know when we should ignore the blur event this.cancelBlur = true; this._delay(function() { delete this.cancelBlur; }); // clicking on the scrollbar causes focus to shift to the body // but we can't detect a mouseup or a click immediately afterward // so we have to track the next mousedown and close the menu if // the user clicks somewhere outside of the autocomplete var menuElement = this.menu.element[ 0 ]; if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { this._delay(function() { var that = this; this.document.one( "mousedown", function( event ) { if ( event.target !== that.element[ 0 ] && event.target !== menuElement && !$.contains( menuElement, event.target ) ) { that.close(); } }); }); } }, menufocus: function( event, ui ) { var label, item; // support: Firefox // Prevent accidental activation of menu items in Firefox (#7024 #9118) if ( this.isNewMenu ) { this.isNewMenu = false; if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { this.menu.blur(); this.document.one( "mousemove", function() { $( event.target ).trigger( event.originalEvent ); }); return; } } item = ui.item.data( "ui-autocomplete-item" ); if ( false !== this._trigger( "focus", event, { item: item } ) ) { // use value to match what will end up in the input, if it was a key event if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { this._value( item.value ); } } // Announce the value in the liveRegion label = ui.item.attr( "aria-label" ) || item.value; if ( label && $.trim( label ).length ) { this.liveRegion.children().hide(); $( "
          " ).text( label ).appendTo( this.liveRegion ); } }, menuselect: function( event, ui ) { var item = ui.item.data( "ui-autocomplete-item" ), previous = this.previous; // only trigger when focus was lost (click on menu) if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) { this.element.focus(); this.previous = previous; // #6109 - IE triggers two focus events and the second // is asynchronous, so we need to reset the previous // term synchronously and asynchronously :-( this._delay(function() { this.previous = previous; this.selectedItem = item; }); } if ( false !== this._trigger( "select", event, { item: item } ) ) { this._value( item.value ); } // reset the term after the select event // this allows custom select handling to work properly this.term = this._value(); this.close( event ); this.selectedItem = item; } }); this.liveRegion = $( "", { role: "status", "aria-live": "assertive", "aria-relevant": "additions" }) .addClass( "ui-helper-hidden-accessible" ) .appendTo( this.document[ 0 ].body ); // turning off autocomplete prevents the browser from remembering the // value when navigating through history, so we re-enable autocomplete // if the page is unloaded before the widget is destroyed. #7790 this._on( this.window, { beforeunload: function() { this.element.removeAttr( "autocomplete" ); } }); }, _destroy: function() { clearTimeout( this.searching ); this.element .removeClass( "ui-autocomplete-input" ) .removeAttr( "autocomplete" ); this.menu.element.remove(); this.liveRegion.remove(); }, _setOption: function( key, value ) { this._super( key, value ); if ( key === "source" ) { this._initSource(); } if ( key === "appendTo" ) { this.menu.element.appendTo( this._appendTo() ); } if ( key === "disabled" && value && this.xhr ) { this.xhr.abort(); } }, _appendTo: function() { var element = this.options.appendTo; if ( element ) { element = element.jquery || element.nodeType ? $( element ) : this.document.find( element ).eq( 0 ); } if ( !element || !element[ 0 ] ) { element = this.element.closest( ".ui-front" ); } if ( !element.length ) { element = this.document[ 0 ].body; } return element; }, _initSource: function() { var array, url, that = this; if ( $.isArray( this.options.source ) ) { array = this.options.source; this.source = function( request, response ) { response( $.ui.autocomplete.filter( array, request.term ) ); }; } else if ( typeof this.options.source === "string" ) { url = this.options.source; this.source = function( request, response ) { if ( that.xhr ) { that.xhr.abort(); } that.xhr = $.ajax({ url: url, data: request, dataType: "json", success: function( data ) { response( data ); }, error: function() { response([]); } }); }; } else { this.source = this.options.source; } }, _searchTimeout: function( event ) { clearTimeout( this.searching ); this.searching = this._delay(function() { // Search if the value has changed, or if the user retypes the same value (see #7434) var equalValues = this.term === this._value(), menuVisible = this.menu.element.is( ":visible" ), modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) { this.selectedItem = null; this.search( null, event ); } }, this.options.delay ); }, search: function( value, event ) { value = value != null ? value : this._value(); // always save the actual value, not the one passed as an argument this.term = this._value(); if ( value.length < this.options.minLength ) { return this.close( event ); } if ( this._trigger( "search", event ) === false ) { return; } return this._search( value ); }, _search: function( value ) { this.pending++; this.element.addClass( "ui-autocomplete-loading" ); this.cancelSearch = false; this.source( { term: value }, this._response() ); }, _response: function() { var index = ++this.requestIndex; return $.proxy(function( content ) { if ( index === this.requestIndex ) { this.__response( content ); } this.pending--; if ( !this.pending ) { this.element.removeClass( "ui-autocomplete-loading" ); } }, this ); }, __response: function( content ) { if ( content ) { content = this._normalize( content ); } this._trigger( "response", null, { content: content } ); if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { this._suggest( content ); this._trigger( "open" ); } else { // use ._close() instead of .close() so we don't cancel future searches this._close(); } }, close: function( event ) { this.cancelSearch = true; this._close( event ); }, _close: function( event ) { if ( this.menu.element.is( ":visible" ) ) { this.menu.element.hide(); this.menu.blur(); this.isNewMenu = true; this._trigger( "close", event ); } }, _change: function( event ) { if ( this.previous !== this._value() ) { this._trigger( "change", event, { item: this.selectedItem } ); } }, _normalize: function( items ) { // assume all items have the right format when the first item is complete if ( items.length && items[ 0 ].label && items[ 0 ].value ) { return items; } return $.map( items, function( item ) { if ( typeof item === "string" ) { return { label: item, value: item }; } return $.extend( {}, item, { label: item.label || item.value, value: item.value || item.label }); }); }, _suggest: function( items ) { var ul = this.menu.element.empty(); this._renderMenu( ul, items ); this.isNewMenu = true; this.menu.refresh(); // size and position menu ul.show(); this._resizeMenu(); ul.position( $.extend({ of: this.element }, this.options.position ) ); if ( this.options.autoFocus ) { this.menu.next(); } }, _resizeMenu: function() { var ul = this.menu.element; ul.outerWidth( Math.max( // Firefox wraps long text (possibly a rounding bug) // so we add 1px to avoid the wrapping (#7513) ul.width( "" ).outerWidth() + 1, this.element.outerWidth() ) ); }, _renderMenu: function( ul, items ) { var that = this; $.each( items, function( index, item ) { that._renderItemData( ul, item ); }); }, _renderItemData: function( ul, item ) { return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); }, _renderItem: function( ul, item ) { return $( "
        • " ).text( item.label ).appendTo( ul ); }, _move: function( direction, event ) { if ( !this.menu.element.is( ":visible" ) ) { this.search( null, event ); return; } if ( this.menu.isFirstItem() && /^previous/.test( direction ) || this.menu.isLastItem() && /^next/.test( direction ) ) { if ( !this.isMultiLine ) { this._value( this.term ); } this.menu.blur(); return; } this.menu[ direction ]( event ); }, widget: function() { return this.menu.element; }, _value: function() { return this.valueMethod.apply( this.element, arguments ); }, _keyEvent: function( keyEvent, event ) { if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { this._move( keyEvent, event ); // prevents moving cursor to beginning/end of the text field in some browsers event.preventDefault(); } } }); $.extend( $.ui.autocomplete, { escapeRegex: function( value ) { return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); }, filter: function( array, term ) { var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" ); return $.grep( array, function( value ) { return matcher.test( value.label || value.value || value ); }); } }); // live region extension, adding a `messages` option // NOTE: This is an experimental API. We are still investigating // a full solution for string manipulation and internationalization. $.widget( "ui.autocomplete", $.ui.autocomplete, { options: { messages: { noResults: "No search results.", results: function( amount ) { return amount + ( amount > 1 ? " results are" : " result is" ) + " available, use up and down arrow keys to navigate."; } } }, __response: function( content ) { var message; this._superApply( arguments ); if ( this.options.disabled || this.cancelSearch ) { return; } if ( content && content.length ) { message = this.options.messages.results( content.length ); } else { message = this.options.messages.noResults; } this.liveRegion.children().hide(); $( "
          " ).text( message ).appendTo( this.liveRegion ); } }); var autocomplete = $.ui.autocomplete; /*! * jQuery UI Datepicker 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/datepicker/ */ $.extend($.ui, { datepicker: { version: "1.11.4" } }); var datepicker_instActive; function datepicker_getZindex( elem ) { var position, value; while ( elem.length && elem[ 0 ] !== document ) { // Ignore z-index if position is set to a value where z-index is ignored by the browser // This makes behavior of this function consistent across browsers // WebKit always returns auto if the element is positioned position = elem.css( "position" ); if ( position === "absolute" || position === "relative" || position === "fixed" ) { // IE returns 0 when zIndex is not specified // other browsers return a string // we ignore the case of nested elements with an explicit value of 0 //
          value = parseInt( elem.css( "zIndex" ), 10 ); if ( !isNaN( value ) && value !== 0 ) { return value; } } elem = elem.parent(); } return 0; } /* Date picker manager. Use the singleton instance of this class, $.datepicker, to interact with the date picker. Settings for (groups of) date pickers are maintained in an instance object, allowing multiple different settings on the same page. */ function Datepicker() { this._curInst = null; // The current instance in use this._keyEvent = false; // If the last event was a key event this._disabledInputs = []; // List of date picker inputs that have been disabled this._datepickerShowing = false; // True if the popup picker is showing , false if not this._inDialog = false; // True if showing within a "dialog", false if not this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class this._appendClass = "ui-datepicker-append"; // The name of the append marker class this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class this.regional = []; // Available regional settings, indexed by language code this.regional[""] = { // Default regional settings closeText: "Done", // Display text for close link prevText: "Prev", // Display text for previous month link nextText: "Next", // Display text for next month link currentText: "Today", // Display text for current month link monthNames: ["January","February","March","April","May","June", "July","August","September","October","November","December"], // Names of months for drop-down and formatting monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday weekHeader: "Wk", // Column header for week of the year dateFormat: "mm/dd/yy", // See format options on parseDate firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... isRTL: false, // True if right-to-left language, false if left-to-right showMonthAfterYear: false, // True if the year select precedes month, false for month then year yearSuffix: "" // Additional text to append to the year in the month headers }; this._defaults = { // Global defaults for all the date picker instances showOn: "focus", // "focus" for popup on focus, // "button" for trigger button, or "both" for either showAnim: "fadeIn", // Name of jQuery animation for popup showOptions: {}, // Options for enhanced animations defaultDate: null, // Used when field is blank: actual date, // +/-number for offset from today, null for today appendText: "", // Display text following the input box, e.g. showing the format buttonText: "...", // Text for trigger button buttonImage: "", // URL for trigger button image buttonImageOnly: false, // True if the image appears alone, false if it appears on a button hideIfNoPrevNext: false, // True to hide next/previous month links // if not applicable, false to just disable them navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links gotoCurrent: false, // True if today link goes back to current selection instead changeMonth: false, // True if month can be selected directly, false if only prev/next changeYear: false, // True if year can be selected directly, false if only prev/next yearRange: "c-10:c+10", // Range of years to display in drop-down, // either relative to today's year (-nn:+nn), relative to currently displayed year // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) showOtherMonths: false, // True to show dates in other months, false to leave blank selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable showWeek: false, // True to show week of the year, false to not show it calculateWeek: this.iso8601Week, // How to calculate the week of the year, // takes a Date and returns the number of the week for it shortYearCutoff: "+10", // Short year values < this are in the current century, // > this are in the previous century, // string value starting with "+" for current year + value minDate: null, // The earliest selectable date, or null for no limit maxDate: null, // The latest selectable date, or null for no limit duration: "fast", // Duration of display/closure beforeShowDay: null, // Function that takes a date and returns an array with // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "", // [2] = cell title (optional), e.g. $.datepicker.noWeekends beforeShow: null, // Function that takes an input field and // returns a set of custom settings for the date picker onSelect: null, // Define a callback function when a date is selected onChangeMonthYear: null, // Define a callback function when the month or year is changed onClose: null, // Define a callback function when the datepicker is closed numberOfMonths: 1, // Number of months to show at a time showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) stepMonths: 1, // Number of months to step back/forward stepBigMonths: 12, // Number of months to step back/forward for the big links altField: "", // Selector for an alternate field to store selected dates into altFormat: "", // The date format to use for the alternate field constrainInput: true, // The input is constrained by the current date format showButtonPanel: false, // True to show button panel, false to not show it autoSize: false, // True to size the input for the date format, false to leave as is disabled: false // The initial disabled state }; $.extend(this._defaults, this.regional[""]); this.regional.en = $.extend( true, {}, this.regional[ "" ]); this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en ); this.dpDiv = datepicker_bindHover($("
          ")); } $.extend(Datepicker.prototype, { /* Class name added to elements to indicate already configured with a date picker. */ markerClassName: "hasDatepicker", //Keep track of the maximum number of rows displayed (see #7043) maxRows: 4, // TODO rename to "widget" when switching to widget factory _widgetDatepicker: function() { return this.dpDiv; }, /* Override the default settings for all instances of the date picker. * @param settings object - the new settings to use as defaults (anonymous object) * @return the manager object */ setDefaults: function(settings) { datepicker_extendRemove(this._defaults, settings || {}); return this; }, /* Attach the date picker to a jQuery selection. * @param target element - the target input field or division or span * @param settings object - the new settings to use for this date picker instance (anonymous) */ _attachDatepicker: function(target, settings) { var nodeName, inline, inst; nodeName = target.nodeName.toLowerCase(); inline = (nodeName === "div" || nodeName === "span"); if (!target.id) { this.uuid += 1; target.id = "dp" + this.uuid; } inst = this._newInst($(target), inline); inst.settings = $.extend({}, settings || {}); if (nodeName === "input") { this._connectDatepicker(target, inst); } else if (inline) { this._inlineDatepicker(target, inst); } }, /* Create a new instance object. */ _newInst: function(target, inline) { var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars return {id: id, input: target, // associated target selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection drawMonth: 0, drawYear: 0, // month being drawn inline: inline, // is datepicker inline or not dpDiv: (!inline ? this.dpDiv : // presentation div datepicker_bindHover($("
          ")))}; }, /* Attach the date picker to an input field. */ _connectDatepicker: function(target, inst) { var input = $(target); inst.append = $([]); inst.trigger = $([]); if (input.hasClass(this.markerClassName)) { return; } this._attachments(input, inst); input.addClass(this.markerClassName).keydown(this._doKeyDown). keypress(this._doKeyPress).keyup(this._doKeyUp); this._autoSize(inst); $.data(target, "datepicker", inst); //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) if( inst.settings.disabled ) { this._disableDatepicker( target ); } }, /* Make attachments based on settings. */ _attachments: function(input, inst) { var showOn, buttonText, buttonImage, appendText = this._get(inst, "appendText"), isRTL = this._get(inst, "isRTL"); if (inst.append) { inst.append.remove(); } if (appendText) { inst.append = $("" + appendText + ""); input[isRTL ? "before" : "after"](inst.append); } input.unbind("focus", this._showDatepicker); if (inst.trigger) { inst.trigger.remove(); } showOn = this._get(inst, "showOn"); if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field input.focus(this._showDatepicker); } if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked buttonText = this._get(inst, "buttonText"); buttonImage = this._get(inst, "buttonImage"); inst.trigger = $(this._get(inst, "buttonImageOnly") ? $("").addClass(this._triggerClass). attr({ src: buttonImage, alt: buttonText, title: buttonText }) : $("").addClass(this._triggerClass). html(!buttonImage ? buttonText : $("").attr( { src:buttonImage, alt:buttonText, title:buttonText }))); input[isRTL ? "before" : "after"](inst.trigger); inst.trigger.click(function() { if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) { $.datepicker._hideDatepicker(); } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) { $.datepicker._hideDatepicker(); $.datepicker._showDatepicker(input[0]); } else { $.datepicker._showDatepicker(input[0]); } return false; }); } }, /* Apply the maximum length for the date format. */ _autoSize: function(inst) { if (this._get(inst, "autoSize") && !inst.inline) { var findMax, max, maxI, i, date = new Date(2009, 12 - 1, 20), // Ensure double digits dateFormat = this._get(inst, "dateFormat"); if (dateFormat.match(/[DM]/)) { findMax = function(names) { max = 0; maxI = 0; for (i = 0; i < names.length; i++) { if (names[i].length > max) { max = names[i].length; maxI = i; } } return maxI; }; date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? "monthNames" : "monthNamesShort")))); date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? "dayNames" : "dayNamesShort"))) + 20 - date.getDay()); } inst.input.attr("size", this._formatDate(inst, date).length); } }, /* Attach an inline date picker to a div. */ _inlineDatepicker: function(target, inst) { var divSpan = $(target); if (divSpan.hasClass(this.markerClassName)) { return; } divSpan.addClass(this.markerClassName).append(inst.dpDiv); $.data(target, "datepicker", inst); this._setDate(inst, this._getDefaultDate(inst), true); this._updateDatepicker(inst); this._updateAlternate(inst); //If disabled option is true, disable the datepicker before showing it (see ticket #5665) if( inst.settings.disabled ) { this._disableDatepicker( target ); } // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height inst.dpDiv.css( "display", "block" ); }, /* Pop-up the date picker in a "dialog" box. * @param input element - ignored * @param date string or Date - the initial date to display * @param onSelect function - the function to call when a date is selected * @param settings object - update the dialog date picker instance's settings (anonymous object) * @param pos int[2] - coordinates for the dialog's position within the screen or * event - with x/y coordinates or * leave empty for default (screen centre) * @return the manager object */ _dialogDatepicker: function(input, date, onSelect, settings, pos) { var id, browserWidth, browserHeight, scrollX, scrollY, inst = this._dialogInst; // internal instance if (!inst) { this.uuid += 1; id = "dp" + this.uuid; this._dialogInput = $(""); this._dialogInput.keydown(this._doKeyDown); $("body").append(this._dialogInput); inst = this._dialogInst = this._newInst(this._dialogInput, false); inst.settings = {}; $.data(this._dialogInput[0], "datepicker", inst); } datepicker_extendRemove(inst.settings, settings || {}); date = (date && date.constructor === Date ? this._formatDate(inst, date) : date); this._dialogInput.val(date); this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); if (!this._pos) { browserWidth = document.documentElement.clientWidth; browserHeight = document.documentElement.clientHeight; scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; scrollY = document.documentElement.scrollTop || document.body.scrollTop; this._pos = // should use actual width/height below [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; } // move input on screen for focus, but hidden behind dialog this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px"); inst.settings.onSelect = onSelect; this._inDialog = true; this.dpDiv.addClass(this._dialogClass); this._showDatepicker(this._dialogInput[0]); if ($.blockUI) { $.blockUI(this.dpDiv); } $.data(this._dialogInput[0], "datepicker", inst); return this; }, /* Detach a datepicker from its control. * @param target element - the target input field or division or span */ _destroyDatepicker: function(target) { var nodeName, $target = $(target), inst = $.data(target, "datepicker"); if (!$target.hasClass(this.markerClassName)) { return; } nodeName = target.nodeName.toLowerCase(); $.removeData(target, "datepicker"); if (nodeName === "input") { inst.append.remove(); inst.trigger.remove(); $target.removeClass(this.markerClassName). unbind("focus", this._showDatepicker). unbind("keydown", this._doKeyDown). unbind("keypress", this._doKeyPress). unbind("keyup", this._doKeyUp); } else if (nodeName === "div" || nodeName === "span") { $target.removeClass(this.markerClassName).empty(); } if ( datepicker_instActive === inst ) { datepicker_instActive = null; } }, /* Enable the date picker to a jQuery selection. * @param target element - the target input field or division or span */ _enableDatepicker: function(target) { var nodeName, inline, $target = $(target), inst = $.data(target, "datepicker"); if (!$target.hasClass(this.markerClassName)) { return; } nodeName = target.nodeName.toLowerCase(); if (nodeName === "input") { target.disabled = false; inst.trigger.filter("button"). each(function() { this.disabled = false; }).end(). filter("img").css({opacity: "1.0", cursor: ""}); } else if (nodeName === "div" || nodeName === "span") { inline = $target.children("." + this._inlineClass); inline.children().removeClass("ui-state-disabled"); inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). prop("disabled", false); } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value === target ? null : value); }); // delete entry }, /* Disable the date picker to a jQuery selection. * @param target element - the target input field or division or span */ _disableDatepicker: function(target) { var nodeName, inline, $target = $(target), inst = $.data(target, "datepicker"); if (!$target.hasClass(this.markerClassName)) { return; } nodeName = target.nodeName.toLowerCase(); if (nodeName === "input") { target.disabled = true; inst.trigger.filter("button"). each(function() { this.disabled = true; }).end(). filter("img").css({opacity: "0.5", cursor: "default"}); } else if (nodeName === "div" || nodeName === "span") { inline = $target.children("." + this._inlineClass); inline.children().addClass("ui-state-disabled"); inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). prop("disabled", true); } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value === target ? null : value); }); // delete entry this._disabledInputs[this._disabledInputs.length] = target; }, /* Is the first field in a jQuery collection disabled as a datepicker? * @param target element - the target input field or division or span * @return boolean - true if disabled, false if enabled */ _isDisabledDatepicker: function(target) { if (!target) { return false; } for (var i = 0; i < this._disabledInputs.length; i++) { if (this._disabledInputs[i] === target) { return true; } } return false; }, /* Retrieve the instance data for the target control. * @param target element - the target input field or division or span * @return object - the associated instance data * @throws error if a jQuery problem getting data */ _getInst: function(target) { try { return $.data(target, "datepicker"); } catch (err) { throw "Missing instance data for this datepicker"; } }, /* Update or retrieve the settings for a date picker attached to an input field or division. * @param target element - the target input field or division or span * @param name object - the new settings to update or * string - the name of the setting to change or retrieve, * when retrieving also "all" for all instance settings or * "defaults" for all global defaults * @param value any - the new value for the setting * (omit if above is an object or to retrieve a value) */ _optionDatepicker: function(target, name, value) { var settings, date, minDate, maxDate, inst = this._getInst(target); if (arguments.length === 2 && typeof name === "string") { return (name === "defaults" ? $.extend({}, $.datepicker._defaults) : (inst ? (name === "all" ? $.extend({}, inst.settings) : this._get(inst, name)) : null)); } settings = name || {}; if (typeof name === "string") { settings = {}; settings[name] = value; } if (inst) { if (this._curInst === inst) { this._hideDatepicker(); } date = this._getDateDatepicker(target, true); minDate = this._getMinMaxDate(inst, "min"); maxDate = this._getMinMaxDate(inst, "max"); datepicker_extendRemove(inst.settings, settings); // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) { inst.settings.minDate = this._formatDate(inst, minDate); } if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) { inst.settings.maxDate = this._formatDate(inst, maxDate); } if ( "disabled" in settings ) { if ( settings.disabled ) { this._disableDatepicker(target); } else { this._enableDatepicker(target); } } this._attachments($(target), inst); this._autoSize(inst); this._setDate(inst, date); this._updateAlternate(inst); this._updateDatepicker(inst); } }, // change method deprecated _changeDatepicker: function(target, name, value) { this._optionDatepicker(target, name, value); }, /* Redraw the date picker attached to an input field or division. * @param target element - the target input field or division or span */ _refreshDatepicker: function(target) { var inst = this._getInst(target); if (inst) { this._updateDatepicker(inst); } }, /* Set the dates for a jQuery selection. * @param target element - the target input field or division or span * @param date Date - the new date */ _setDateDatepicker: function(target, date) { var inst = this._getInst(target); if (inst) { this._setDate(inst, date); this._updateDatepicker(inst); this._updateAlternate(inst); } }, /* Get the date(s) for the first entry in a jQuery selection. * @param target element - the target input field or division or span * @param noDefault boolean - true if no default date is to be used * @return Date - the current date */ _getDateDatepicker: function(target, noDefault) { var inst = this._getInst(target); if (inst && !inst.inline) { this._setDateFromField(inst, noDefault); } return (inst ? this._getDate(inst) : null); }, /* Handle keystrokes. */ _doKeyDown: function(event) { var onSelect, dateStr, sel, inst = $.datepicker._getInst(event.target), handled = true, isRTL = inst.dpDiv.is(".ui-datepicker-rtl"); inst._keyEvent = true; if ($.datepicker._datepickerShowing) { switch (event.keyCode) { case 9: $.datepicker._hideDatepicker(); handled = false; break; // hide on tab out case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." + $.datepicker._currentClass + ")", inst.dpDiv); if (sel[0]) { $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); } onSelect = $.datepicker._get(inst, "onSelect"); if (onSelect) { dateStr = $.datepicker._formatDate(inst); // trigger custom callback onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); } else { $.datepicker._hideDatepicker(); } return false; // don't submit the form case 27: $.datepicker._hideDatepicker(); break; // hide on escape case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, "stepBigMonths") : -$.datepicker._get(inst, "stepMonths")), "M"); break; // previous month/year on page up/+ ctrl case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, "stepBigMonths") : +$.datepicker._get(inst, "stepMonths")), "M"); break; // next month/year on page down/+ ctrl case 35: if (event.ctrlKey || event.metaKey) { $.datepicker._clearDate(event.target); } handled = event.ctrlKey || event.metaKey; break; // clear on ctrl or command +end case 36: if (event.ctrlKey || event.metaKey) { $.datepicker._gotoToday(event.target); } handled = event.ctrlKey || event.metaKey; break; // current on ctrl or command +home case 37: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D"); } handled = event.ctrlKey || event.metaKey; // -1 day on ctrl or command +left if (event.originalEvent.altKey) { $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, "stepBigMonths") : -$.datepicker._get(inst, "stepMonths")), "M"); } // next month/year on alt +left on Mac break; case 38: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, -7, "D"); } handled = event.ctrlKey || event.metaKey; break; // -1 week on ctrl or command +up case 39: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D"); } handled = event.ctrlKey || event.metaKey; // +1 day on ctrl or command +right if (event.originalEvent.altKey) { $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, "stepBigMonths") : +$.datepicker._get(inst, "stepMonths")), "M"); } // next month/year on alt +right break; case 40: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, +7, "D"); } handled = event.ctrlKey || event.metaKey; break; // +1 week on ctrl or command +down default: handled = false; } } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home $.datepicker._showDatepicker(this); } else { handled = false; } if (handled) { event.preventDefault(); event.stopPropagation(); } }, /* Filter entered characters - based on date format. */ _doKeyPress: function(event) { var chars, chr, inst = $.datepicker._getInst(event.target); if ($.datepicker._get(inst, "constrainInput")) { chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")); chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode); return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1); } }, /* Synchronise manual entry and field/alternate field. */ _doKeyUp: function(event) { var date, inst = $.datepicker._getInst(event.target); if (inst.input.val() !== inst.lastVal) { try { date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), (inst.input ? inst.input.val() : null), $.datepicker._getFormatConfig(inst)); if (date) { // only if valid $.datepicker._setDateFromField(inst); $.datepicker._updateAlternate(inst); $.datepicker._updateDatepicker(inst); } } catch (err) { } } return true; }, /* Pop-up the date picker for a given input field. * If false returned from beforeShow event handler do not show. * @param input element - the input field attached to the date picker or * event - if triggered by focus */ _showDatepicker: function(input) { input = input.target || input; if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger input = $("input", input.parentNode)[0]; } if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here return; } var inst, beforeShow, beforeShowSettings, isFixed, offset, showAnim, duration; inst = $.datepicker._getInst(input); if ($.datepicker._curInst && $.datepicker._curInst !== inst) { $.datepicker._curInst.dpDiv.stop(true, true); if ( inst && $.datepicker._datepickerShowing ) { $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] ); } } beforeShow = $.datepicker._get(inst, "beforeShow"); beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; if(beforeShowSettings === false){ return; } datepicker_extendRemove(inst.settings, beforeShowSettings); inst.lastVal = null; $.datepicker._lastInput = input; $.datepicker._setDateFromField(inst); if ($.datepicker._inDialog) { // hide cursor input.value = ""; } if (!$.datepicker._pos) { // position below input $.datepicker._pos = $.datepicker._findPos(input); $.datepicker._pos[1] += input.offsetHeight; // add the height } isFixed = false; $(input).parents().each(function() { isFixed |= $(this).css("position") === "fixed"; return !isFixed; }); offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; $.datepicker._pos = null; //to avoid flashes on Firefox inst.dpDiv.empty(); // determine sizing offscreen inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"}); $.datepicker._updateDatepicker(inst); // fix width for dynamic number of date pickers // and adjust position before showing offset = $.datepicker._checkOffset(inst, offset, isFixed); inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? "static" : (isFixed ? "fixed" : "absolute")), display: "none", left: offset.left + "px", top: offset.top + "px"}); if (!inst.inline) { showAnim = $.datepicker._get(inst, "showAnim"); duration = $.datepicker._get(inst, "duration"); inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); $.datepicker._datepickerShowing = true; if ( $.effects && $.effects.effect[ showAnim ] ) { inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration); } else { inst.dpDiv[showAnim || "show"](showAnim ? duration : null); } if ( $.datepicker._shouldFocusInput( inst ) ) { inst.input.focus(); } $.datepicker._curInst = inst; } }, /* Generate the date picker content. */ _updateDatepicker: function(inst) { this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) datepicker_instActive = inst; // for delegate hover events inst.dpDiv.empty().append(this._generateHTML(inst)); this._attachHandlers(inst); var origyearshtml, numMonths = this._getNumberOfMonths(inst), cols = numMonths[1], width = 17, activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ); if ( activeCell.length > 0 ) { datepicker_handleMouseover.apply( activeCell.get( 0 ) ); } inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""); if (cols > 1) { inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em"); } inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") + "Class"]("ui-datepicker-multi"); inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"); if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { inst.input.focus(); } // deffered render of the years select (to avoid flashes on Firefox) if( inst.yearshtml ){ origyearshtml = inst.yearshtml; setTimeout(function(){ //assure that inst.yearshtml didn't change. if( origyearshtml === inst.yearshtml && inst.yearshtml ){ inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml); } origyearshtml = inst.yearshtml = null; }, 0); } }, // #6694 - don't focus the input if it's already focused // this breaks the change event in IE // Support: IE and jQuery <1.9 _shouldFocusInput: function( inst ) { return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); }, /* Check positioning to remain on screen. */ _checkOffset: function(inst, offset, isFixed) { var dpWidth = inst.dpDiv.outerWidth(), dpHeight = inst.dpDiv.outerHeight(), inputWidth = inst.input ? inst.input.outerWidth() : 0, inputHeight = inst.input ? inst.input.outerHeight() : 0, viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()), viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop()); offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0); offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0; offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; // now check if datepicker is showing outside window viewport - move to a better place if so. offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0); offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(dpHeight + inputHeight) : 0); return offset; }, /* Find an object's position on the screen. */ _findPos: function(obj) { var position, inst = this._getInst(obj), isRTL = this._get(inst, "isRTL"); while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) { obj = obj[isRTL ? "previousSibling" : "nextSibling"]; } position = $(obj).offset(); return [position.left, position.top]; }, /* Hide the date picker from view. * @param input element - the input field attached to the date picker */ _hideDatepicker: function(input) { var showAnim, duration, postProcess, onClose, inst = this._curInst; if (!inst || (input && inst !== $.data(input, "datepicker"))) { return; } if (this._datepickerShowing) { showAnim = this._get(inst, "showAnim"); duration = this._get(inst, "duration"); postProcess = function() { $.datepicker._tidyDialog(inst); }; // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess); } else { inst.dpDiv[(showAnim === "slideDown" ? "slideUp" : (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess); } if (!showAnim) { postProcess(); } this._datepickerShowing = false; onClose = this._get(inst, "onClose"); if (onClose) { onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]); } this._lastInput = null; if (this._inDialog) { this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" }); if ($.blockUI) { $.unblockUI(); $("body").append(this.dpDiv); } } this._inDialog = false; } }, /* Tidy up after a dialog display. */ _tidyDialog: function(inst) { inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar"); }, /* Close date picker if clicked elsewhere. */ _checkExternalClick: function(event) { if (!$.datepicker._curInst) { return; } var $target = $(event.target), inst = $.datepicker._getInst($target[0]); if ( ( ( $target[0].id !== $.datepicker._mainDivId && $target.parents("#" + $.datepicker._mainDivId).length === 0 && !$target.hasClass($.datepicker.markerClassName) && !$target.closest("." + $.datepicker._triggerClass).length && $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) || ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) { $.datepicker._hideDatepicker(); } }, /* Adjust one of the date sub-fields. */ _adjustDate: function(id, offset, period) { var target = $(id), inst = this._getInst(target[0]); if (this._isDisabledDatepicker(target[0])) { return; } this._adjustInstDate(inst, offset + (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning period); this._updateDatepicker(inst); }, /* Action for current link. */ _gotoToday: function(id) { var date, target = $(id), inst = this._getInst(target[0]); if (this._get(inst, "gotoCurrent") && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear; } else { date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); } this._notifyChange(inst); this._adjustDate(target); }, /* Action for selecting a new month/year. */ _selectMonthYear: function(id, select, period) { var target = $(id), inst = this._getInst(target[0]); inst["selected" + (period === "M" ? "Month" : "Year")] = inst["draw" + (period === "M" ? "Month" : "Year")] = parseInt(select.options[select.selectedIndex].value,10); this._notifyChange(inst); this._adjustDate(target); }, /* Action for selecting a day. */ _selectDay: function(id, month, year, td) { var inst, target = $(id); if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { return; } inst = this._getInst(target[0]); inst.selectedDay = inst.currentDay = $("a", td).html(); inst.selectedMonth = inst.currentMonth = month; inst.selectedYear = inst.currentYear = year; this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); }, /* Erase the input field and hide the date picker. */ _clearDate: function(id) { var target = $(id); this._selectDate(target, ""); }, /* Update the input field with the selected date. */ _selectDate: function(id, dateStr) { var onSelect, target = $(id), inst = this._getInst(target[0]); dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); if (inst.input) { inst.input.val(dateStr); } this._updateAlternate(inst); onSelect = this._get(inst, "onSelect"); if (onSelect) { onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback } else if (inst.input) { inst.input.trigger("change"); // fire the change event } if (inst.inline){ this._updateDatepicker(inst); } else { this._hideDatepicker(); this._lastInput = inst.input[0]; if (typeof(inst.input[0]) !== "object") { inst.input.focus(); // restore focus } this._lastInput = null; } }, /* Update any alternate field to synchronise with the main field. */ _updateAlternate: function(inst) { var altFormat, date, dateStr, altField = this._get(inst, "altField"); if (altField) { // update alternate field too altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat"); date = this._getDate(inst); dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); $(altField).each(function() { $(this).val(dateStr); }); } }, /* Set as beforeShowDay function to prevent selection of weekends. * @param date Date - the date to customise * @return [boolean, string] - is this date selectable?, what is its CSS class? */ noWeekends: function(date) { var day = date.getDay(); return [(day > 0 && day < 6), ""]; }, /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. * @param date Date - the date to get the week for * @return number - the number of the week within the year that contains this date */ iso8601Week: function(date) { var time, checkDate = new Date(date.getTime()); // Find Thursday of this week starting on Monday checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); time = checkDate.getTime(); checkDate.setMonth(0); // Compare with Jan 1 checkDate.setDate(1); return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; }, /* Parse a string value into a date object. * See formatDate below for the possible formats. * * @param format string - the expected format of the date * @param value string - the date in the above format * @param settings Object - attributes include: * shortYearCutoff number - the cutoff year for determining the century (optional) * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) * dayNames string[7] - names of the days from Sunday (optional) * monthNamesShort string[12] - abbreviated names of the months (optional) * monthNames string[12] - names of the months (optional) * @return Date - the extracted date value or null if value is blank */ parseDate: function (format, value, settings) { if (format == null || value == null) { throw "Invalid arguments"; } value = (typeof value === "object" ? value.toString() : value + ""); if (value === "") { return null; } var iFormat, dim, extra, iValue = 0, shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff, shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp : new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)), dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, year = -1, month = -1, day = -1, doy = -1, literal = false, date, // Check whether a format character is doubled lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); if (matches) { iFormat++; } return matches; }, // Extract a number from the string value getNumber = function(match) { var isDoubled = lookAhead(match), size = (match === "@" ? 14 : (match === "!" ? 20 : (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))), minSize = (match === "y" ? size : 1), digits = new RegExp("^\\d{" + minSize + "," + size + "}"), num = value.substring(iValue).match(digits); if (!num) { throw "Missing number at position " + iValue; } iValue += num[0].length; return parseInt(num[0], 10); }, // Extract a name from the string value and convert to an index getName = function(match, shortNames, longNames) { var index = -1, names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { return [ [k, v] ]; }).sort(function (a, b) { return -(a[1].length - b[1].length); }); $.each(names, function (i, pair) { var name = pair[1]; if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) { index = pair[0]; iValue += name.length; return false; } }); if (index !== -1) { return index + 1; } else { throw "Unknown name at position " + iValue; } }, // Confirm that a literal character matches the string value checkLiteral = function() { if (value.charAt(iValue) !== format.charAt(iFormat)) { throw "Unexpected literal at position " + iValue; } iValue++; }; for (iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) === "'" && !lookAhead("'")) { literal = false; } else { checkLiteral(); } } else { switch (format.charAt(iFormat)) { case "d": day = getNumber("d"); break; case "D": getName("D", dayNamesShort, dayNames); break; case "o": doy = getNumber("o"); break; case "m": month = getNumber("m"); break; case "M": month = getName("M", monthNamesShort, monthNames); break; case "y": year = getNumber("y"); break; case "@": date = new Date(getNumber("@")); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; case "!": date = new Date((getNumber("!") - this._ticksTo1970) / 10000); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; case "'": if (lookAhead("'")){ checkLiteral(); } else { literal = true; } break; default: checkLiteral(); } } } if (iValue < value.length){ extra = value.substr(iValue); if (!/^\s+/.test(extra)) { throw "Extra/unparsed characters found in date: " + extra; } } if (year === -1) { year = new Date().getFullYear(); } else if (year < 100) { year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff ? 0 : -100); } if (doy > -1) { month = 1; day = doy; do { dim = this._getDaysInMonth(year, month - 1); if (day <= dim) { break; } month++; day -= dim; } while (true); } date = this._daylightSavingAdjust(new Date(year, month - 1, day)); if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) { throw "Invalid date"; // E.g. 31/02/00 } return date; }, /* Standard date formats. */ ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) COOKIE: "D, dd M yy", ISO_8601: "yy-mm-dd", RFC_822: "D, d M y", RFC_850: "DD, dd-M-y", RFC_1036: "D, d M y", RFC_1123: "D, d M yy", RFC_2822: "D, d M yy", RSS: "D, d M y", // RFC 822 TICKS: "!", TIMESTAMP: "@", W3C: "yy-mm-dd", // ISO 8601 _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), /* Format a date object into a string value. * The format can be combinations of the following: * d - day of month (no leading zero) * dd - day of month (two digit) * o - day of year (no leading zeros) * oo - day of year (three digit) * D - day name short * DD - day name long * m - month of year (no leading zero) * mm - month of year (two digit) * M - month name short * MM - month name long * y - year (two digit) * yy - year (four digit) * @ - Unix timestamp (ms since 01/01/1970) * ! - Windows ticks (100ns since 01/01/0001) * "..." - literal text * '' - single quote * * @param format string - the desired format of the date * @param date Date - the date value to format * @param settings Object - attributes include: * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) * dayNames string[7] - names of the days from Sunday (optional) * monthNamesShort string[12] - abbreviated names of the months (optional) * monthNames string[12] - names of the months (optional) * @return string - the date in the above format */ formatDate: function (format, date, settings) { if (!date) { return ""; } var iFormat, dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, // Check whether a format character is doubled lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); if (matches) { iFormat++; } return matches; }, // Format a number, with leading zero if necessary formatNumber = function(match, value, len) { var num = "" + value; if (lookAhead(match)) { while (num.length < len) { num = "0" + num; } } return num; }, // Format a name, short or long as requested formatName = function(match, value, shortNames, longNames) { return (lookAhead(match) ? longNames[value] : shortNames[value]); }, output = "", literal = false; if (date) { for (iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) === "'" && !lookAhead("'")) { literal = false; } else { output += format.charAt(iFormat); } } else { switch (format.charAt(iFormat)) { case "d": output += formatNumber("d", date.getDate(), 2); break; case "D": output += formatName("D", date.getDay(), dayNamesShort, dayNames); break; case "o": output += formatNumber("o", Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); break; case "m": output += formatNumber("m", date.getMonth() + 1, 2); break; case "M": output += formatName("M", date.getMonth(), monthNamesShort, monthNames); break; case "y": output += (lookAhead("y") ? date.getFullYear() : (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100); break; case "@": output += date.getTime(); break; case "!": output += date.getTime() * 10000 + this._ticksTo1970; break; case "'": if (lookAhead("'")) { output += "'"; } else { literal = true; } break; default: output += format.charAt(iFormat); } } } } return output; }, /* Extract all possible characters from the date format. */ _possibleChars: function (format) { var iFormat, chars = "", literal = false, // Check whether a format character is doubled lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); if (matches) { iFormat++; } return matches; }; for (iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) === "'" && !lookAhead("'")) { literal = false; } else { chars += format.charAt(iFormat); } } else { switch (format.charAt(iFormat)) { case "d": case "m": case "y": case "@": chars += "0123456789"; break; case "D": case "M": return null; // Accept anything case "'": if (lookAhead("'")) { chars += "'"; } else { literal = true; } break; default: chars += format.charAt(iFormat); } } } return chars; }, /* Get a setting value, defaulting if necessary. */ _get: function(inst, name) { return inst.settings[name] !== undefined ? inst.settings[name] : this._defaults[name]; }, /* Parse existing date and initialise date picker. */ _setDateFromField: function(inst, noDefault) { if (inst.input.val() === inst.lastVal) { return; } var dateFormat = this._get(inst, "dateFormat"), dates = inst.lastVal = inst.input ? inst.input.val() : null, defaultDate = this._getDefaultDate(inst), date = defaultDate, settings = this._getFormatConfig(inst); try { date = this.parseDate(dateFormat, dates, settings) || defaultDate; } catch (event) { dates = (noDefault ? "" : dates); } inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); inst.currentDay = (dates ? date.getDate() : 0); inst.currentMonth = (dates ? date.getMonth() : 0); inst.currentYear = (dates ? date.getFullYear() : 0); this._adjustInstDate(inst); }, /* Retrieve the default date shown on opening. */ _getDefaultDate: function(inst) { return this._restrictMinMax(inst, this._determineDate(inst, this._get(inst, "defaultDate"), new Date())); }, /* A date may be specified as an exact value or a relative one. */ _determineDate: function(inst, date, defaultDate) { var offsetNumeric = function(offset) { var date = new Date(); date.setDate(date.getDate() + offset); return date; }, offsetString = function(offset) { try { return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), offset, $.datepicker._getFormatConfig(inst)); } catch (e) { // Ignore } var date = (offset.toLowerCase().match(/^c/) ? $.datepicker._getDate(inst) : null) || new Date(), year = date.getFullYear(), month = date.getMonth(), day = date.getDate(), pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, matches = pattern.exec(offset); while (matches) { switch (matches[2] || "d") { case "d" : case "D" : day += parseInt(matches[1],10); break; case "w" : case "W" : day += parseInt(matches[1],10) * 7; break; case "m" : case "M" : month += parseInt(matches[1],10); day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); break; case "y": case "Y" : year += parseInt(matches[1],10); day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); break; } matches = pattern.exec(offset); } return new Date(year, month, day); }, newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) : (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate); if (newDate) { newDate.setHours(0); newDate.setMinutes(0); newDate.setSeconds(0); newDate.setMilliseconds(0); } return this._daylightSavingAdjust(newDate); }, /* Handle switch to/from daylight saving. * Hours may be non-zero on daylight saving cut-over: * > 12 when midnight changeover, but then cannot generate * midnight datetime, so jump to 1AM, otherwise reset. * @param date (Date) the date to check * @return (Date) the corrected date */ _daylightSavingAdjust: function(date) { if (!date) { return null; } date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); return date; }, /* Set the date(s) directly. */ _setDate: function(inst, date, noChange) { var clear = !date, origMonth = inst.selectedMonth, origYear = inst.selectedYear, newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); inst.selectedDay = inst.currentDay = newDate.getDate(); inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) { this._notifyChange(inst); } this._adjustInstDate(inst); if (inst.input) { inst.input.val(clear ? "" : this._formatDate(inst)); } }, /* Retrieve the date(s) directly. */ _getDate: function(inst) { var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null : this._daylightSavingAdjust(new Date( inst.currentYear, inst.currentMonth, inst.currentDay))); return startDate; }, /* Attach the onxxx handlers. These are declared statically so * they work with static code transformers like Caja. */ _attachHandlers: function(inst) { var stepMonths = this._get(inst, "stepMonths"), id = "#" + inst.id.replace( /\\\\/g, "\\" ); inst.dpDiv.find("[data-handler]").map(function () { var handler = { prev: function () { $.datepicker._adjustDate(id, -stepMonths, "M"); }, next: function () { $.datepicker._adjustDate(id, +stepMonths, "M"); }, hide: function () { $.datepicker._hideDatepicker(); }, today: function () { $.datepicker._gotoToday(id); }, selectDay: function () { $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this); return false; }, selectMonth: function () { $.datepicker._selectMonthYear(id, this, "M"); return false; }, selectYear: function () { $.datepicker._selectMonthYear(id, this, "Y"); return false; } }; $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]); }); }, /* Generate the HTML for the current state of the date picker. */ _generateHTML: function(inst) { var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, monthNames, monthNamesShort, beforeShowDay, showOtherMonths, selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, printDate, dRow, tbody, daySettings, otherMonth, unselectable, tempDate = new Date(), today = this._daylightSavingAdjust( new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time isRTL = this._get(inst, "isRTL"), showButtonPanel = this._get(inst, "showButtonPanel"), hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"), navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"), numMonths = this._getNumberOfMonths(inst), showCurrentAtPos = this._get(inst, "showCurrentAtPos"), stepMonths = this._get(inst, "stepMonths"), isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1), currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay))), minDate = this._getMinMaxDate(inst, "min"), maxDate = this._getMinMaxDate(inst, "max"), drawMonth = inst.drawMonth - showCurrentAtPos, drawYear = inst.drawYear; if (drawMonth < 0) { drawMonth += 12; drawYear--; } if (maxDate) { maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { drawMonth--; if (drawMonth < 0) { drawMonth = 11; drawYear--; } } } inst.drawMonth = drawMonth; inst.drawYear = drawYear; prevText = this._get(inst, "prevText"); prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? "
          " + prevText + "" : (hideIfNoPrevNext ? "" : "" + prevText + "")); nextText = this._get(inst, "nextText"); nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? "" + nextText + "" : (hideIfNoPrevNext ? "" : "" + nextText + "")); currentText = this._get(inst, "currentText"); gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today); currentText = (!navigationAsDateFormat ? currentText : this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); controls = (!inst.inline ? "" : ""); buttonPanel = (showButtonPanel) ? "
          " + (isRTL ? controls : "") + (this._isInRange(inst, gotoDate) ? "" : "") + (isRTL ? "" : controls) + "
          " : ""; firstDay = parseInt(this._get(inst, "firstDay"),10); firstDay = (isNaN(firstDay) ? 0 : firstDay); showWeek = this._get(inst, "showWeek"); dayNames = this._get(inst, "dayNames"); dayNamesMin = this._get(inst, "dayNamesMin"); monthNames = this._get(inst, "monthNames"); monthNamesShort = this._get(inst, "monthNamesShort"); beforeShowDay = this._get(inst, "beforeShowDay"); showOtherMonths = this._get(inst, "showOtherMonths"); selectOtherMonths = this._get(inst, "selectOtherMonths"); defaultDate = this._getDefaultDate(inst); html = ""; dow; for (row = 0; row < numMonths[0]; row++) { group = ""; this.maxRows = 4; for (col = 0; col < numMonths[1]; col++) { selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); cornerClass = " ui-corner-all"; calender = ""; if (isMultiMonth) { calender += "
          "; } calender += "
          " + (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") + (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers "
          " + ""; thead = (showWeek ? "" : ""); for (dow = 0; dow < 7; dow++) { // days of the week day = (dow + firstDay) % 7; thead += ""; } calender += thead + ""; daysInMonth = this._getDaysInMonth(drawYear, drawMonth); if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) { inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); } leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043) this.maxRows = numRows; printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows calender += ""; tbody = (!showWeek ? "" : ""); for (dow = 0; dow < 7; dow++) { // create date picker days daySettings = (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]); otherMonth = (printDate.getMonth() !== drawMonth); unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate); tbody += ""; // display selectable date printDate.setDate(printDate.getDate() + 1); printDate = this._daylightSavingAdjust(printDate); } calender += tbody + ""; } drawMonth++; if (drawMonth > 11) { drawMonth = 0; drawYear++; } calender += "
          " + this._get(inst, "weekHeader") + "= 5 ? " class='ui-datepicker-week-end'" : "") + ">" + "" + dayNamesMin[day] + "
          " + this._get(inst, "calculateWeek")(printDate) + "" + // actions (otherMonth && !showOtherMonths ? " " : // display for other months (unselectable ? "" + printDate.getDate() + "" : "" + printDate.getDate() + "")) + "
          " + (isMultiMonth ? "
          " + ((numMonths[0] > 0 && col === numMonths[1]-1) ? "
          " : "") : ""); group += calender; } html += group; } html += buttonPanel; inst._keyEvent = false; return html; }, /* Generate the month and year header. */ _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, secondary, monthNames, monthNamesShort) { var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, changeMonth = this._get(inst, "changeMonth"), changeYear = this._get(inst, "changeYear"), showMonthAfterYear = this._get(inst, "showMonthAfterYear"), html = "
          ", monthHtml = ""; // month selection if (secondary || !changeMonth) { monthHtml += "" + monthNames[drawMonth] + ""; } else { inMinYear = (minDate && minDate.getFullYear() === drawYear); inMaxYear = (maxDate && maxDate.getFullYear() === drawYear); monthHtml += ""; } if (!showMonthAfterYear) { html += monthHtml + (secondary || !(changeMonth && changeYear) ? " " : ""); } // year selection if ( !inst.yearshtml ) { inst.yearshtml = ""; if (secondary || !changeYear) { html += "" + drawYear + ""; } else { // determine range of years to display years = this._get(inst, "yearRange").split(":"); thisYear = new Date().getFullYear(); determineYear = function(value) { var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) : (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) : parseInt(value, 10))); return (isNaN(year) ? thisYear : year); }; year = determineYear(years[0]); endYear = Math.max(year, determineYear(years[1] || "")); year = (minDate ? Math.max(year, minDate.getFullYear()) : year); endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); inst.yearshtml += ""; html += inst.yearshtml; inst.yearshtml = null; } } html += this._get(inst, "yearSuffix"); if (showMonthAfterYear) { html += (secondary || !(changeMonth && changeYear) ? " " : "") + monthHtml; } html += "
          "; // Close datepicker_header return html; }, /* Adjust one of the date sub-fields. */ _adjustInstDate: function(inst, offset, period) { var year = inst.drawYear + (period === "Y" ? offset : 0), month = inst.drawMonth + (period === "M" ? offset : 0), day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0), date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); if (period === "M" || period === "Y") { this._notifyChange(inst); } }, /* Ensure a date is within any min/max bounds. */ _restrictMinMax: function(inst, date) { var minDate = this._getMinMaxDate(inst, "min"), maxDate = this._getMinMaxDate(inst, "max"), newDate = (minDate && date < minDate ? minDate : date); return (maxDate && newDate > maxDate ? maxDate : newDate); }, /* Notify change of month/year. */ _notifyChange: function(inst) { var onChange = this._get(inst, "onChangeMonthYear"); if (onChange) { onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]); } }, /* Determine the number of months to show. */ _getNumberOfMonths: function(inst) { var numMonths = this._get(inst, "numberOfMonths"); return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths)); }, /* Determine the current maximum date - ensure no time components are set. */ _getMinMaxDate: function(inst, minMax) { return this._determineDate(inst, this._get(inst, minMax + "Date"), null); }, /* Find the number of days in a given month. */ _getDaysInMonth: function(year, month) { return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); }, /* Find the day of the week of the first of a month. */ _getFirstDayOfMonth: function(year, month) { return new Date(year, month, 1).getDay(); }, /* Determines if we should allow a "next/prev" month display change. */ _canAdjustMonth: function(inst, offset, curYear, curMonth) { var numMonths = this._getNumberOfMonths(inst), date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); if (offset < 0) { date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); } return this._isInRange(inst, date); }, /* Is the given date in the accepted range? */ _isInRange: function(inst, date) { var yearSplit, currentYear, minDate = this._getMinMaxDate(inst, "min"), maxDate = this._getMinMaxDate(inst, "max"), minYear = null, maxYear = null, years = this._get(inst, "yearRange"); if (years){ yearSplit = years.split(":"); currentYear = new Date().getFullYear(); minYear = parseInt(yearSplit[0], 10); maxYear = parseInt(yearSplit[1], 10); if ( yearSplit[0].match(/[+\-].*/) ) { minYear += currentYear; } if ( yearSplit[1].match(/[+\-].*/) ) { maxYear += currentYear; } } return ((!minDate || date.getTime() >= minDate.getTime()) && (!maxDate || date.getTime() <= maxDate.getTime()) && (!minYear || date.getFullYear() >= minYear) && (!maxYear || date.getFullYear() <= maxYear)); }, /* Provide the configuration settings for formatting/parsing. */ _getFormatConfig: function(inst) { var shortYearCutoff = this._get(inst, "shortYearCutoff"); shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); return {shortYearCutoff: shortYearCutoff, dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"), monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")}; }, /* Format the given date for display. */ _formatDate: function(inst, day, month, year) { if (!day) { inst.currentDay = inst.selectedDay; inst.currentMonth = inst.selectedMonth; inst.currentYear = inst.selectedYear; } var date = (day ? (typeof day === "object" ? day : this._daylightSavingAdjust(new Date(year, month, day))) : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst)); } }); /* * Bind hover events for datepicker elements. * Done via delegate so the binding only occurs once in the lifetime of the parent div. * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. */ function datepicker_bindHover(dpDiv) { var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; return dpDiv.delegate(selector, "mouseout", function() { $(this).removeClass("ui-state-hover"); if (this.className.indexOf("ui-datepicker-prev") !== -1) { $(this).removeClass("ui-datepicker-prev-hover"); } if (this.className.indexOf("ui-datepicker-next") !== -1) { $(this).removeClass("ui-datepicker-next-hover"); } }) .delegate( selector, "mouseover", datepicker_handleMouseover ); } function datepicker_handleMouseover() { if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) { $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); $(this).addClass("ui-state-hover"); if (this.className.indexOf("ui-datepicker-prev") !== -1) { $(this).addClass("ui-datepicker-prev-hover"); } if (this.className.indexOf("ui-datepicker-next") !== -1) { $(this).addClass("ui-datepicker-next-hover"); } } } /* jQuery extend now ignores nulls! */ function datepicker_extendRemove(target, props) { $.extend(target, props); for (var name in props) { if (props[name] == null) { target[name] = props[name]; } } return target; } /* Invoke the datepicker functionality. @param options string - a command, optionally followed by additional parameters or Object - settings for attaching new datepicker functionality @return jQuery object */ $.fn.datepicker = function(options){ /* Verify an empty collection wasn't passed - Fixes #6976 */ if ( !this.length ) { return this; } /* Initialise the date picker. */ if (!$.datepicker.initialized) { $(document).mousedown($.datepicker._checkExternalClick); $.datepicker.initialized = true; } /* Append datepicker main container to body if not exist. */ if ($("#"+$.datepicker._mainDivId).length === 0) { $("body").append($.datepicker.dpDiv); } var otherArgs = Array.prototype.slice.call(arguments, 1); if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) { return $.datepicker["_" + options + "Datepicker"]. apply($.datepicker, [this[0]].concat(otherArgs)); } if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") { return $.datepicker["_" + options + "Datepicker"]. apply($.datepicker, [this[0]].concat(otherArgs)); } return this.each(function() { typeof options === "string" ? $.datepicker["_" + options + "Datepicker"]. apply($.datepicker, [this].concat(otherArgs)) : $.datepicker._attachDatepicker(this, options); }); }; $.datepicker = new Datepicker(); // singleton instance $.datepicker.initialized = false; $.datepicker.uuid = new Date().getTime(); $.datepicker.version = "1.11.4"; var datepicker = $.datepicker; /*! * jQuery UI Slider 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/slider/ */ var slider = $.widget( "ui.slider", $.ui.mouse, { version: "1.11.4", widgetEventPrefix: "slide", options: { animate: false, distance: 0, max: 100, min: 0, orientation: "horizontal", range: false, step: 1, value: 0, values: null, // callbacks change: null, slide: null, start: null, stop: null }, // number of pages in a slider // (how many times can you page up/down to go through the whole range) numPages: 5, _create: function() { this._keySliding = false; this._mouseSliding = false; this._animateOff = true; this._handleIndex = null; this._detectOrientation(); this._mouseInit(); this._calculateNewMax(); this.element .addClass( "ui-slider" + " ui-slider-" + this.orientation + " ui-widget" + " ui-widget-content" + " ui-corner-all"); this._refresh(); this._setOption( "disabled", this.options.disabled ); this._animateOff = false; }, _refresh: function() { this._createRange(); this._createHandles(); this._setupEvents(); this._refreshValue(); }, _createHandles: function() { var i, handleCount, options = this.options, existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ), handle = "", handles = []; handleCount = ( options.values && options.values.length ) || 1; if ( existingHandles.length > handleCount ) { existingHandles.slice( handleCount ).remove(); existingHandles = existingHandles.slice( 0, handleCount ); } for ( i = existingHandles.length; i < handleCount; i++ ) { handles.push( handle ); } this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) ); this.handle = this.handles.eq( 0 ); this.handles.each(function( i ) { $( this ).data( "ui-slider-handle-index", i ); }); }, _createRange: function() { var options = this.options, classes = ""; if ( options.range ) { if ( options.range === true ) { if ( !options.values ) { options.values = [ this._valueMin(), this._valueMin() ]; } else if ( options.values.length && options.values.length !== 2 ) { options.values = [ options.values[0], options.values[0] ]; } else if ( $.isArray( options.values ) ) { options.values = options.values.slice(0); } } if ( !this.range || !this.range.length ) { this.range = $( "
          " ) .appendTo( this.element ); classes = "ui-slider-range" + // note: this isn't the most fittingly semantic framework class for this element, // but worked best visually with a variety of themes " ui-widget-header ui-corner-all"; } else { this.range.removeClass( "ui-slider-range-min ui-slider-range-max" ) // Handle range switching from true to min/max .css({ "left": "", "bottom": "" }); } this.range.addClass( classes + ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) ); } else { if ( this.range ) { this.range.remove(); } this.range = null; } }, _setupEvents: function() { this._off( this.handles ); this._on( this.handles, this._handleEvents ); this._hoverable( this.handles ); this._focusable( this.handles ); }, _destroy: function() { this.handles.remove(); if ( this.range ) { this.range.remove(); } this.element .removeClass( "ui-slider" + " ui-slider-horizontal" + " ui-slider-vertical" + " ui-widget" + " ui-widget-content" + " ui-corner-all" ); this._mouseDestroy(); }, _mouseCapture: function( event ) { var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, that = this, o = this.options; if ( o.disabled ) { return false; } this.elementSize = { width: this.element.outerWidth(), height: this.element.outerHeight() }; this.elementOffset = this.element.offset(); position = { x: event.pageX, y: event.pageY }; normValue = this._normValueFromMouse( position ); distance = this._valueMax() - this._valueMin() + 1; this.handles.each(function( i ) { var thisDistance = Math.abs( normValue - that.values(i) ); if (( distance > thisDistance ) || ( distance === thisDistance && (i === that._lastChangedValue || that.values(i) === o.min ))) { distance = thisDistance; closestHandle = $( this ); index = i; } }); allowed = this._start( event, index ); if ( allowed === false ) { return false; } this._mouseSliding = true; this._handleIndex = index; closestHandle .addClass( "ui-state-active" ) .focus(); offset = closestHandle.offset(); mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" ); this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { left: event.pageX - offset.left - ( closestHandle.width() / 2 ), top: event.pageY - offset.top - ( closestHandle.height() / 2 ) - ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) }; if ( !this.handles.hasClass( "ui-state-hover" ) ) { this._slide( event, index, normValue ); } this._animateOff = true; return true; }, _mouseStart: function() { return true; }, _mouseDrag: function( event ) { var position = { x: event.pageX, y: event.pageY }, normValue = this._normValueFromMouse( position ); this._slide( event, this._handleIndex, normValue ); return false; }, _mouseStop: function( event ) { this.handles.removeClass( "ui-state-active" ); this._mouseSliding = false; this._stop( event, this._handleIndex ); this._change( event, this._handleIndex ); this._handleIndex = null; this._clickOffset = null; this._animateOff = false; return false; }, _detectOrientation: function() { this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; }, _normValueFromMouse: function( position ) { var pixelTotal, pixelMouse, percentMouse, valueTotal, valueMouse; if ( this.orientation === "horizontal" ) { pixelTotal = this.elementSize.width; pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); } else { pixelTotal = this.elementSize.height; pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); } percentMouse = ( pixelMouse / pixelTotal ); if ( percentMouse > 1 ) { percentMouse = 1; } if ( percentMouse < 0 ) { percentMouse = 0; } if ( this.orientation === "vertical" ) { percentMouse = 1 - percentMouse; } valueTotal = this._valueMax() - this._valueMin(); valueMouse = this._valueMin() + percentMouse * valueTotal; return this._trimAlignValue( valueMouse ); }, _start: function( event, index ) { var uiHash = { handle: this.handles[ index ], value: this.value() }; if ( this.options.values && this.options.values.length ) { uiHash.value = this.values( index ); uiHash.values = this.values(); } return this._trigger( "start", event, uiHash ); }, _slide: function( event, index, newVal ) { var otherVal, newValues, allowed; if ( this.options.values && this.options.values.length ) { otherVal = this.values( index ? 0 : 1 ); if ( ( this.options.values.length === 2 && this.options.range === true ) && ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) ) { newVal = otherVal; } if ( newVal !== this.values( index ) ) { newValues = this.values(); newValues[ index ] = newVal; // A slide can be canceled by returning false from the slide callback allowed = this._trigger( "slide", event, { handle: this.handles[ index ], value: newVal, values: newValues } ); otherVal = this.values( index ? 0 : 1 ); if ( allowed !== false ) { this.values( index, newVal ); } } } else { if ( newVal !== this.value() ) { // A slide can be canceled by returning false from the slide callback allowed = this._trigger( "slide", event, { handle: this.handles[ index ], value: newVal } ); if ( allowed !== false ) { this.value( newVal ); } } } }, _stop: function( event, index ) { var uiHash = { handle: this.handles[ index ], value: this.value() }; if ( this.options.values && this.options.values.length ) { uiHash.value = this.values( index ); uiHash.values = this.values(); } this._trigger( "stop", event, uiHash ); }, _change: function( event, index ) { if ( !this._keySliding && !this._mouseSliding ) { var uiHash = { handle: this.handles[ index ], value: this.value() }; if ( this.options.values && this.options.values.length ) { uiHash.value = this.values( index ); uiHash.values = this.values(); } //store the last changed value index for reference when handles overlap this._lastChangedValue = index; this._trigger( "change", event, uiHash ); } }, value: function( newValue ) { if ( arguments.length ) { this.options.value = this._trimAlignValue( newValue ); this._refreshValue(); this._change( null, 0 ); return; } return this._value(); }, values: function( index, newValue ) { var vals, newValues, i; if ( arguments.length > 1 ) { this.options.values[ index ] = this._trimAlignValue( newValue ); this._refreshValue(); this._change( null, index ); return; } if ( arguments.length ) { if ( $.isArray( arguments[ 0 ] ) ) { vals = this.options.values; newValues = arguments[ 0 ]; for ( i = 0; i < vals.length; i += 1 ) { vals[ i ] = this._trimAlignValue( newValues[ i ] ); this._change( null, i ); } this._refreshValue(); } else { if ( this.options.values && this.options.values.length ) { return this._values( index ); } else { return this.value(); } } } else { return this._values(); } }, _setOption: function( key, value ) { var i, valsLength = 0; if ( key === "range" && this.options.range === true ) { if ( value === "min" ) { this.options.value = this._values( 0 ); this.options.values = null; } else if ( value === "max" ) { this.options.value = this._values( this.options.values.length - 1 ); this.options.values = null; } } if ( $.isArray( this.options.values ) ) { valsLength = this.options.values.length; } if ( key === "disabled" ) { this.element.toggleClass( "ui-state-disabled", !!value ); } this._super( key, value ); switch ( key ) { case "orientation": this._detectOrientation(); this.element .removeClass( "ui-slider-horizontal ui-slider-vertical" ) .addClass( "ui-slider-" + this.orientation ); this._refreshValue(); // Reset positioning from previous orientation this.handles.css( value === "horizontal" ? "bottom" : "left", "" ); break; case "value": this._animateOff = true; this._refreshValue(); this._change( null, 0 ); this._animateOff = false; break; case "values": this._animateOff = true; this._refreshValue(); for ( i = 0; i < valsLength; i += 1 ) { this._change( null, i ); } this._animateOff = false; break; case "step": case "min": case "max": this._animateOff = true; this._calculateNewMax(); this._refreshValue(); this._animateOff = false; break; case "range": this._animateOff = true; this._refresh(); this._animateOff = false; break; } }, //internal value getter // _value() returns value trimmed by min and max, aligned by step _value: function() { var val = this.options.value; val = this._trimAlignValue( val ); return val; }, //internal values getter // _values() returns array of values trimmed by min and max, aligned by step // _values( index ) returns single value trimmed by min and max, aligned by step _values: function( index ) { var val, vals, i; if ( arguments.length ) { val = this.options.values[ index ]; val = this._trimAlignValue( val ); return val; } else if ( this.options.values && this.options.values.length ) { // .slice() creates a copy of the array // this copy gets trimmed by min and max and then returned vals = this.options.values.slice(); for ( i = 0; i < vals.length; i += 1) { vals[ i ] = this._trimAlignValue( vals[ i ] ); } return vals; } else { return []; } }, // returns the step-aligned value that val is closest to, between (inclusive) min and max _trimAlignValue: function( val ) { if ( val <= this._valueMin() ) { return this._valueMin(); } if ( val >= this._valueMax() ) { return this._valueMax(); } var step = ( this.options.step > 0 ) ? this.options.step : 1, valModStep = (val - this._valueMin()) % step, alignValue = val - valModStep; if ( Math.abs(valModStep) * 2 >= step ) { alignValue += ( valModStep > 0 ) ? step : ( -step ); } // Since JavaScript has problems with large floats, round // the final value to 5 digits after the decimal point (see #4124) return parseFloat( alignValue.toFixed(5) ); }, _calculateNewMax: function() { var max = this.options.max, min = this._valueMin(), step = this.options.step, aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step; max = aboveMin + min; this.max = parseFloat( max.toFixed( this._precision() ) ); }, _precision: function() { var precision = this._precisionOf( this.options.step ); if ( this.options.min !== null ) { precision = Math.max( precision, this._precisionOf( this.options.min ) ); } return precision; }, _precisionOf: function( num ) { var str = num.toString(), decimal = str.indexOf( "." ); return decimal === -1 ? 0 : str.length - decimal - 1; }, _valueMin: function() { return this.options.min; }, _valueMax: function() { return this.max; }, _refreshValue: function() { var lastValPercent, valPercent, value, valueMin, valueMax, oRange = this.options.range, o = this.options, that = this, animate = ( !this._animateOff ) ? o.animate : false, _set = {}; if ( this.options.values && this.options.values.length ) { this.handles.each(function( i ) { valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100; _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); if ( that.options.range === true ) { if ( that.orientation === "horizontal" ) { if ( i === 0 ) { that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); } if ( i === 1 ) { that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); } } else { if ( i === 0 ) { that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); } if ( i === 1 ) { that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); } } } lastValPercent = valPercent; }); } else { value = this.value(); valueMin = this._valueMin(); valueMax = this._valueMax(); valPercent = ( valueMax !== valueMin ) ? ( value - valueMin ) / ( valueMax - valueMin ) * 100 : 0; _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); if ( oRange === "min" && this.orientation === "horizontal" ) { this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); } if ( oRange === "max" && this.orientation === "horizontal" ) { this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); } if ( oRange === "min" && this.orientation === "vertical" ) { this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); } if ( oRange === "max" && this.orientation === "vertical" ) { this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); } } }, _handleEvents: { keydown: function( event ) { var allowed, curVal, newVal, step, index = $( event.target ).data( "ui-slider-handle-index" ); switch ( event.keyCode ) { case $.ui.keyCode.HOME: case $.ui.keyCode.END: case $.ui.keyCode.PAGE_UP: case $.ui.keyCode.PAGE_DOWN: case $.ui.keyCode.UP: case $.ui.keyCode.RIGHT: case $.ui.keyCode.DOWN: case $.ui.keyCode.LEFT: event.preventDefault(); if ( !this._keySliding ) { this._keySliding = true; $( event.target ).addClass( "ui-state-active" ); allowed = this._start( event, index ); if ( allowed === false ) { return; } } break; } step = this.options.step; if ( this.options.values && this.options.values.length ) { curVal = newVal = this.values( index ); } else { curVal = newVal = this.value(); } switch ( event.keyCode ) { case $.ui.keyCode.HOME: newVal = this._valueMin(); break; case $.ui.keyCode.END: newVal = this._valueMax(); break; case $.ui.keyCode.PAGE_UP: newVal = this._trimAlignValue( curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages ) ); break; case $.ui.keyCode.PAGE_DOWN: newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) ); break; case $.ui.keyCode.UP: case $.ui.keyCode.RIGHT: if ( curVal === this._valueMax() ) { return; } newVal = this._trimAlignValue( curVal + step ); break; case $.ui.keyCode.DOWN: case $.ui.keyCode.LEFT: if ( curVal === this._valueMin() ) { return; } newVal = this._trimAlignValue( curVal - step ); break; } this._slide( event, index, newVal ); }, keyup: function( event ) { var index = $( event.target ).data( "ui-slider-handle-index" ); if ( this._keySliding ) { this._keySliding = false; this._stop( event, index ); this._change( event, index ); $( event.target ).removeClass( "ui-state-active" ); } } } }); /*! * jQuery UI Tabs 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/tabs/ */ var tabs = $.widget( "ui.tabs", { version: "1.11.4", delay: 300, options: { active: null, collapsible: false, event: "click", heightStyle: "content", hide: null, show: null, // callbacks activate: null, beforeActivate: null, beforeLoad: null, load: null }, _isLocal: (function() { var rhash = /#.*$/; return function( anchor ) { var anchorUrl, locationUrl; // support: IE7 // IE7 doesn't normalize the href property when set via script (#9317) anchor = anchor.cloneNode( false ); anchorUrl = anchor.href.replace( rhash, "" ); locationUrl = location.href.replace( rhash, "" ); // decoding may throw an error if the URL isn't UTF-8 (#9518) try { anchorUrl = decodeURIComponent( anchorUrl ); } catch ( error ) {} try { locationUrl = decodeURIComponent( locationUrl ); } catch ( error ) {} return anchor.hash.length > 1 && anchorUrl === locationUrl; }; })(), _create: function() { var that = this, options = this.options; this.running = false; this.element .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ) .toggleClass( "ui-tabs-collapsible", options.collapsible ); this._processTabs(); options.active = this._initialActive(); // Take disabling tabs via class attribute from HTML // into account and update option properly. if ( $.isArray( options.disabled ) ) { options.disabled = $.unique( options.disabled.concat( $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { return that.tabs.index( li ); }) ) ).sort(); } // check for length avoids error when initializing empty list if ( this.options.active !== false && this.anchors.length ) { this.active = this._findActive( options.active ); } else { this.active = $(); } this._refresh(); if ( this.active.length ) { this.load( options.active ); } }, _initialActive: function() { var active = this.options.active, collapsible = this.options.collapsible, locationHash = location.hash.substring( 1 ); if ( active === null ) { // check the fragment identifier in the URL if ( locationHash ) { this.tabs.each(function( i, tab ) { if ( $( tab ).attr( "aria-controls" ) === locationHash ) { active = i; return false; } }); } // check for a tab marked active via a class if ( active === null ) { active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); } // no active tab, set to false if ( active === null || active === -1 ) { active = this.tabs.length ? 0 : false; } } // handle numbers: negative, out of range if ( active !== false ) { active = this.tabs.index( this.tabs.eq( active ) ); if ( active === -1 ) { active = collapsible ? false : 0; } } // don't allow collapsible: false and active: false if ( !collapsible && active === false && this.anchors.length ) { active = 0; } return active; }, _getCreateEventData: function() { return { tab: this.active, panel: !this.active.length ? $() : this._getPanelForTab( this.active ) }; }, _tabKeydown: function( event ) { var focusedTab = $( this.document[0].activeElement ).closest( "li" ), selectedIndex = this.tabs.index( focusedTab ), goingForward = true; if ( this._handlePageNav( event ) ) { return; } switch ( event.keyCode ) { case $.ui.keyCode.RIGHT: case $.ui.keyCode.DOWN: selectedIndex++; break; case $.ui.keyCode.UP: case $.ui.keyCode.LEFT: goingForward = false; selectedIndex--; break; case $.ui.keyCode.END: selectedIndex = this.anchors.length - 1; break; case $.ui.keyCode.HOME: selectedIndex = 0; break; case $.ui.keyCode.SPACE: // Activate only, no collapsing event.preventDefault(); clearTimeout( this.activating ); this._activate( selectedIndex ); return; case $.ui.keyCode.ENTER: // Toggle (cancel delayed activation, allow collapsing) event.preventDefault(); clearTimeout( this.activating ); // Determine if we should collapse or activate this._activate( selectedIndex === this.options.active ? false : selectedIndex ); return; default: return; } // Focus the appropriate tab, based on which key was pressed event.preventDefault(); clearTimeout( this.activating ); selectedIndex = this._focusNextTab( selectedIndex, goingForward ); // Navigating with control/command key will prevent automatic activation if ( !event.ctrlKey && !event.metaKey ) { // Update aria-selected immediately so that AT think the tab is already selected. // Otherwise AT may confuse the user by stating that they need to activate the tab, // but the tab will already be activated by the time the announcement finishes. focusedTab.attr( "aria-selected", "false" ); this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); this.activating = this._delay(function() { this.option( "active", selectedIndex ); }, this.delay ); } }, _panelKeydown: function( event ) { if ( this._handlePageNav( event ) ) { return; } // Ctrl+up moves focus to the current tab if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { event.preventDefault(); this.active.focus(); } }, // Alt+page up/down moves focus to the previous/next tab (and activates) _handlePageNav: function( event ) { if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { this._activate( this._focusNextTab( this.options.active - 1, false ) ); return true; } if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { this._activate( this._focusNextTab( this.options.active + 1, true ) ); return true; } }, _findNextTab: function( index, goingForward ) { var lastTabIndex = this.tabs.length - 1; function constrain() { if ( index > lastTabIndex ) { index = 0; } if ( index < 0 ) { index = lastTabIndex; } return index; } while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { index = goingForward ? index + 1 : index - 1; } return index; }, _focusNextTab: function( index, goingForward ) { index = this._findNextTab( index, goingForward ); this.tabs.eq( index ).focus(); return index; }, _setOption: function( key, value ) { if ( key === "active" ) { // _activate() will handle invalid values and update this.options this._activate( value ); return; } if ( key === "disabled" ) { // don't use the widget factory's disabled handling this._setupDisabled( value ); return; } this._super( key, value); if ( key === "collapsible" ) { this.element.toggleClass( "ui-tabs-collapsible", value ); // Setting collapsible: false while collapsed; open first panel if ( !value && this.options.active === false ) { this._activate( 0 ); } } if ( key === "event" ) { this._setupEvents( value ); } if ( key === "heightStyle" ) { this._setupHeightStyle( value ); } }, _sanitizeSelector: function( hash ) { return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; }, refresh: function() { var options = this.options, lis = this.tablist.children( ":has(a[href])" ); // get disabled tabs from class attribute from HTML // this will get converted to a boolean if needed in _refresh() options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { return lis.index( tab ); }); this._processTabs(); // was collapsed or no tabs if ( options.active === false || !this.anchors.length ) { options.active = false; this.active = $(); // was active, but active tab is gone } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { // all remaining tabs are disabled if ( this.tabs.length === options.disabled.length ) { options.active = false; this.active = $(); // activate previous tab } else { this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); } // was active, active tab still exists } else { // make sure active index is correct options.active = this.tabs.index( this.active ); } this._refresh(); }, _refresh: function() { this._setupDisabled( this.options.disabled ); this._setupEvents( this.options.event ); this._setupHeightStyle( this.options.heightStyle ); this.tabs.not( this.active ).attr({ "aria-selected": "false", "aria-expanded": "false", tabIndex: -1 }); this.panels.not( this._getPanelForTab( this.active ) ) .hide() .attr({ "aria-hidden": "true" }); // Make sure one tab is in the tab order if ( !this.active.length ) { this.tabs.eq( 0 ).attr( "tabIndex", 0 ); } else { this.active .addClass( "ui-tabs-active ui-state-active" ) .attr({ "aria-selected": "true", "aria-expanded": "true", tabIndex: 0 }); this._getPanelForTab( this.active ) .show() .attr({ "aria-hidden": "false" }); } }, _processTabs: function() { var that = this, prevTabs = this.tabs, prevAnchors = this.anchors, prevPanels = this.panels; this.tablist = this._getList() .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) .attr( "role", "tablist" ) // Prevent users from focusing disabled tabs via click .delegate( "> li", "mousedown" + this.eventNamespace, function( event ) { if ( $( this ).is( ".ui-state-disabled" ) ) { event.preventDefault(); } }) // support: IE <9 // Preventing the default action in mousedown doesn't prevent IE // from focusing the element, so if the anchor gets focused, blur. // We don't have to worry about focusing the previously focused // element since clicking on a non-focusable element should focus // the body anyway. .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() { if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { this.blur(); } }); this.tabs = this.tablist.find( "> li:has(a[href])" ) .addClass( "ui-state-default ui-corner-top" ) .attr({ role: "tab", tabIndex: -1 }); this.anchors = this.tabs.map(function() { return $( "a", this )[ 0 ]; }) .addClass( "ui-tabs-anchor" ) .attr({ role: "presentation", tabIndex: -1 }); this.panels = $(); this.anchors.each(function( i, anchor ) { var selector, panel, panelId, anchorId = $( anchor ).uniqueId().attr( "id" ), tab = $( anchor ).closest( "li" ), originalAriaControls = tab.attr( "aria-controls" ); // inline tab if ( that._isLocal( anchor ) ) { selector = anchor.hash; panelId = selector.substring( 1 ); panel = that.element.find( that._sanitizeSelector( selector ) ); // remote tab } else { // If the tab doesn't already have aria-controls, // generate an id by using a throw-away element panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id; selector = "#" + panelId; panel = that.element.find( selector ); if ( !panel.length ) { panel = that._createPanel( panelId ); panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); } panel.attr( "aria-live", "polite" ); } if ( panel.length) { that.panels = that.panels.add( panel ); } if ( originalAriaControls ) { tab.data( "ui-tabs-aria-controls", originalAriaControls ); } tab.attr({ "aria-controls": panelId, "aria-labelledby": anchorId }); panel.attr( "aria-labelledby", anchorId ); }); this.panels .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) .attr( "role", "tabpanel" ); // Avoid memory leaks (#10056) if ( prevTabs ) { this._off( prevTabs.not( this.tabs ) ); this._off( prevAnchors.not( this.anchors ) ); this._off( prevPanels.not( this.panels ) ); } }, // allow overriding how to find the list for rare usage scenarios (#7715) _getList: function() { return this.tablist || this.element.find( "ol,ul" ).eq( 0 ); }, _createPanel: function( id ) { return $( "
          " ) .attr( "id", id ) .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) .data( "ui-tabs-destroy", true ); }, _setupDisabled: function( disabled ) { if ( $.isArray( disabled ) ) { if ( !disabled.length ) { disabled = false; } else if ( disabled.length === this.anchors.length ) { disabled = true; } } // disable tabs for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) { if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { $( li ) .addClass( "ui-state-disabled" ) .attr( "aria-disabled", "true" ); } else { $( li ) .removeClass( "ui-state-disabled" ) .removeAttr( "aria-disabled" ); } } this.options.disabled = disabled; }, _setupEvents: function( event ) { var events = {}; if ( event ) { $.each( event.split(" "), function( index, eventName ) { events[ eventName ] = "_eventHandler"; }); } this._off( this.anchors.add( this.tabs ).add( this.panels ) ); // Always prevent the default action, even when disabled this._on( true, this.anchors, { click: function( event ) { event.preventDefault(); } }); this._on( this.anchors, events ); this._on( this.tabs, { keydown: "_tabKeydown" } ); this._on( this.panels, { keydown: "_panelKeydown" } ); this._focusable( this.tabs ); this._hoverable( this.tabs ); }, _setupHeightStyle: function( heightStyle ) { var maxHeight, parent = this.element.parent(); if ( heightStyle === "fill" ) { maxHeight = parent.height(); maxHeight -= this.element.outerHeight() - this.element.height(); this.element.siblings( ":visible" ).each(function() { var elem = $( this ), position = elem.css( "position" ); if ( position === "absolute" || position === "fixed" ) { return; } maxHeight -= elem.outerHeight( true ); }); this.element.children().not( this.panels ).each(function() { maxHeight -= $( this ).outerHeight( true ); }); this.panels.each(function() { $( this ).height( Math.max( 0, maxHeight - $( this ).innerHeight() + $( this ).height() ) ); }) .css( "overflow", "auto" ); } else if ( heightStyle === "auto" ) { maxHeight = 0; this.panels.each(function() { maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); }).height( maxHeight ); } }, _eventHandler: function( event ) { var options = this.options, active = this.active, anchor = $( event.currentTarget ), tab = anchor.closest( "li" ), clickedIsActive = tab[ 0 ] === active[ 0 ], collapsing = clickedIsActive && options.collapsible, toShow = collapsing ? $() : this._getPanelForTab( tab ), toHide = !active.length ? $() : this._getPanelForTab( active ), eventData = { oldTab: active, oldPanel: toHide, newTab: collapsing ? $() : tab, newPanel: toShow }; event.preventDefault(); if ( tab.hasClass( "ui-state-disabled" ) || // tab is already loading tab.hasClass( "ui-tabs-loading" ) || // can't switch durning an animation this.running || // click on active header, but not collapsible ( clickedIsActive && !options.collapsible ) || // allow canceling activation ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { return; } options.active = collapsing ? false : this.tabs.index( tab ); this.active = clickedIsActive ? $() : tab; if ( this.xhr ) { this.xhr.abort(); } if ( !toHide.length && !toShow.length ) { $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); } if ( toShow.length ) { this.load( this.tabs.index( tab ), event ); } this._toggle( event, eventData ); }, // handles show/hide for selecting tabs _toggle: function( event, eventData ) { var that = this, toShow = eventData.newPanel, toHide = eventData.oldPanel; this.running = true; function complete() { that.running = false; that._trigger( "activate", event, eventData ); } function show() { eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" ); if ( toShow.length && that.options.show ) { that._show( toShow, that.options.show, complete ); } else { toShow.show(); complete(); } } // start out by hiding, then showing, then completing if ( toHide.length && this.options.hide ) { this._hide( toHide, this.options.hide, function() { eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); show(); }); } else { eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); toHide.hide(); show(); } toHide.attr( "aria-hidden", "true" ); eventData.oldTab.attr({ "aria-selected": "false", "aria-expanded": "false" }); // If we're switching tabs, remove the old tab from the tab order. // If we're opening from collapsed state, remove the previous tab from the tab order. // If we're collapsing, then keep the collapsing tab in the tab order. if ( toShow.length && toHide.length ) { eventData.oldTab.attr( "tabIndex", -1 ); } else if ( toShow.length ) { this.tabs.filter(function() { return $( this ).attr( "tabIndex" ) === 0; }) .attr( "tabIndex", -1 ); } toShow.attr( "aria-hidden", "false" ); eventData.newTab.attr({ "aria-selected": "true", "aria-expanded": "true", tabIndex: 0 }); }, _activate: function( index ) { var anchor, active = this._findActive( index ); // trying to activate the already active panel if ( active[ 0 ] === this.active[ 0 ] ) { return; } // trying to collapse, simulate a click on the current active header if ( !active.length ) { active = this.active; } anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; this._eventHandler({ target: anchor, currentTarget: anchor, preventDefault: $.noop }); }, _findActive: function( index ) { return index === false ? $() : this.tabs.eq( index ); }, _getIndex: function( index ) { // meta-function to give users option to provide a href string instead of a numerical index. if ( typeof index === "string" ) { index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) ); } return index; }, _destroy: function() { if ( this.xhr ) { this.xhr.abort(); } this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ); this.tablist .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) .removeAttr( "role" ); this.anchors .removeClass( "ui-tabs-anchor" ) .removeAttr( "role" ) .removeAttr( "tabIndex" ) .removeUniqueId(); this.tablist.unbind( this.eventNamespace ); this.tabs.add( this.panels ).each(function() { if ( $.data( this, "ui-tabs-destroy" ) ) { $( this ).remove(); } else { $( this ) .removeClass( "ui-state-default ui-state-active ui-state-disabled " + "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" ) .removeAttr( "tabIndex" ) .removeAttr( "aria-live" ) .removeAttr( "aria-busy" ) .removeAttr( "aria-selected" ) .removeAttr( "aria-labelledby" ) .removeAttr( "aria-hidden" ) .removeAttr( "aria-expanded" ) .removeAttr( "role" ); } }); this.tabs.each(function() { var li = $( this ), prev = li.data( "ui-tabs-aria-controls" ); if ( prev ) { li .attr( "aria-controls", prev ) .removeData( "ui-tabs-aria-controls" ); } else { li.removeAttr( "aria-controls" ); } }); this.panels.show(); if ( this.options.heightStyle !== "content" ) { this.panels.css( "height", "" ); } }, enable: function( index ) { var disabled = this.options.disabled; if ( disabled === false ) { return; } if ( index === undefined ) { disabled = false; } else { index = this._getIndex( index ); if ( $.isArray( disabled ) ) { disabled = $.map( disabled, function( num ) { return num !== index ? num : null; }); } else { disabled = $.map( this.tabs, function( li, num ) { return num !== index ? num : null; }); } } this._setupDisabled( disabled ); }, disable: function( index ) { var disabled = this.options.disabled; if ( disabled === true ) { return; } if ( index === undefined ) { disabled = true; } else { index = this._getIndex( index ); if ( $.inArray( index, disabled ) !== -1 ) { return; } if ( $.isArray( disabled ) ) { disabled = $.merge( [ index ], disabled ).sort(); } else { disabled = [ index ]; } } this._setupDisabled( disabled ); }, load: function( index, event ) { index = this._getIndex( index ); var that = this, tab = this.tabs.eq( index ), anchor = tab.find( ".ui-tabs-anchor" ), panel = this._getPanelForTab( tab ), eventData = { tab: tab, panel: panel }, complete = function( jqXHR, status ) { if ( status === "abort" ) { that.panels.stop( false, true ); } tab.removeClass( "ui-tabs-loading" ); panel.removeAttr( "aria-busy" ); if ( jqXHR === that.xhr ) { delete that.xhr; } }; // not remote if ( this._isLocal( anchor[ 0 ] ) ) { return; } this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); // support: jQuery <1.8 // jQuery <1.8 returns false if the request is canceled in beforeSend, // but as of 1.8, $.ajax() always returns a jqXHR object. if ( this.xhr && this.xhr.statusText !== "canceled" ) { tab.addClass( "ui-tabs-loading" ); panel.attr( "aria-busy", "true" ); this.xhr .done(function( response, status, jqXHR ) { // support: jQuery <1.8 // http://bugs.jquery.com/ticket/11778 setTimeout(function() { panel.html( response ); that._trigger( "load", event, eventData ); complete( jqXHR, status ); }, 1 ); }) .fail(function( jqXHR, status ) { // support: jQuery <1.8 // http://bugs.jquery.com/ticket/11778 setTimeout(function() { complete( jqXHR, status ); }, 1 ); }); } }, _ajaxSettings: function( anchor, event, eventData ) { var that = this; return { url: anchor.attr( "href" ), beforeSend: function( jqXHR, settings ) { return that._trigger( "beforeLoad", event, $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) ); } }; }, _getPanelForTab: function( tab ) { var id = $( tab ).attr( "aria-controls" ); return this.element.find( this._sanitizeSelector( "#" + id ) ); } }); }));rt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/index.html0000644000175000017500000006367013437512115021634 0ustar domdom jQuery UI Example Page

          Welcome to jQuery UI!

          This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.

          YOUR COMPONENTS:

          Accordion

          First

          Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.

          Second

          Phasellus mattis tincidunt nibh.

          Third

          Nam dui erat, auctor a, dignissim quis.

          Autocomplete

          Tabs

          Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
          Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.
          Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.

          Framework Icons (content color preview)

          Slider

          Datepicker

          Menu

          Highlight / Error

          Hey! Sample ui-state-highlight style.


          Alert: Sample ui-state-error style.

          rt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/jquery-ui.theme.css0000644000175000017500000004132013437512115023370 0ustar domdom/*! * jQuery UI CSS Framework 1.11.4 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/category/theming/ * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fwDefault=normal&fsDefault=1em&cornerRadius=0.3em&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Arial,Helvetica,sans-serif; font-size: 1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,Helvetica,sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff; color: #222222; } .ui-widget-content a { color: #222222; } .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; color: #222222; font-weight: bold; } .ui-widget-header a { color: #222222; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #555555; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited, .ui-state-focus a, .ui-state-focus a:hover, .ui-state-focus a:link, .ui-state-focus a:visited { color: #212121; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #fcefa1; background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #cd0a0a; background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); /* support: IE8 */ font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); /* support: IE8 */ background-image: none; } .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; } .ui-icon, .ui-widget-content .ui-icon { background-image: url("images/ui-icons_222222_256x240.png"); } .ui-widget-header .ui-icon { background-image: url("images/ui-icons_222222_256x240.png"); } .ui-state-default .ui-icon { background-image: url("images/ui-icons_888888_256x240.png"); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon { background-image: url("images/ui-icons_454545_256x240.png"); } .ui-state-active .ui-icon { background-image: url("images/ui-icons_454545_256x240.png"); } .ui-state-highlight .ui-icon { background-image: url("images/ui-icons_2e83ff_256x240.png"); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { background-image: url("images/ui-icons_cd0a0a_256x240.png"); } /* positioning */ .ui-icon-blank { background-position: 16px 16px; } .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-on { background-position: -96px -144px; } .ui-icon-radio-off { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { border-top-left-radius: 0.3em; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { border-top-right-radius: 0.3em; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { border-bottom-left-radius: 0.3em; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { border-bottom-right-radius: 0.3em; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa; opacity: .3; filter: Alpha(Opacity=30); /* support: IE8 */ } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa; opacity: .3; filter: Alpha(Opacity=30); /* support: IE8 */ border-radius: 8px; } rt-4.4.4/devel/third-party/jquery-ui-1.11.4.custom/jquery-ui.min.css0000644000175000017500000005232613437512115023061 0ustar domdom/*! jQuery UI - v1.11.4 - 2015-10-30 * http://jqueryui.com * Includes: core.css, accordion.css, autocomplete.css, datepicker.css, menu.css, slider.css, tabs.css, theme.css * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fwDefault=normal&fsDefault=1em&cornerRadius=0.3em&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px * Copyright jQuery Foundation and other contributors; Licensed MIT */ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:0.3em}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:0.3em}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:0.3em}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:0.3em}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}rt-4.4.4/devel/third-party/ckeditor-4.5.3/0000755000175000017500000000000013437512115016111 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/styles.js0000644000175000017500000000701313437512115017773 0ustar domdom/** * Copyright (c) 2003-2015, 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' } } ] ); rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/0000755000175000017500000000000013437512115017555 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/0000755000175000017500000000000013437512115020333 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/ajax.html0000644000175000017500000000522213437512115022145 0ustar domdom Ajax — CKEditor Sample

          CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing area will be displayed in a <div> element.

          For details of how to create this setup check the source code of this sample page for JavaScript code responsible for the creation and destruction of a CKEditor instance.

          Click the buttons to create and remove a CKEditor instance.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/sample.js0000644000175000017500000000321313437512115022151 0ustar domdom/** * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ // Tool scripts for the sample pages. // This file can be ignored and is not required to make use of CKEditor. ( function() { CKEDITOR.on( 'instanceReady', function( ev ) { // Check for sample compliance. var editor = ev.editor, meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], missing = [], i; if ( requires.length ) { for ( i = 0; i < requires.length; i++ ) { if ( !editor.plugins[ requires[ i ] ] ) missing.push( '' + requires[ i ] + '' ); } if ( missing.length ) { var warn = CKEDITOR.dom.element.createFromHtml( '
          ' + 'To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.' + '
          ' ); warn.insertBefore( editor.container ); } } // Set icons. var doc = new CKEDITOR.dom.document( document ), icons = doc.find( '.button_icon' ); for ( i = 0; i < icons.count(); i++ ) { var icon = icons.getItem( i ), name = icon.getAttribute( 'data-icon' ), style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); icon.addClass( 'cke_button_icon' ); icon.addClass( 'cke_button__' + name + '_icon' ); icon.setAttribute( 'style', style ); icon.setStyle( 'float', 'none' ); } } ); } )(); rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/replacebyclass.html0000644000175000017500000001554313437512115024225 0ustar domdom Replace Textareas by Class Name — CKEditor Sample

          CKEditor Samples » Replace Textarea Elements by Class Name

          This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

          This sample shows how to automatically replace all <textarea> elements of a given class with a CKEditor instance.

          To replace a <textarea> element, simply assign it the ckeditor class, as in the code below:

          <textarea class="ckeditor" name="editor1"></textarea>
          

          Note that other <textarea> attributes (like id or name) need to be adjusted to your document.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/inlinetextarea.html0000644000175000017500000001147013437512115024240 0ustar domdom Replace Textarea with Inline Editor — CKEditor Sample

          CKEditor Samples » Replace Textarea with Inline Editor

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          You can also create an inline editor from a textarea element. In this case the textarea will be replaced by a div element with inline editing enabled.

          // "article-body" is the name of a textarea element.
          var editor = CKEDITOR.inline( 'article-body' );
          

          This is a sample form with some fields

          Title:

          Article Body (Textarea converted to CKEditor):

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/readonly.html0000644000175000017500000000550613437512115023044 0ustar domdom Using the CKEditor Read-Only API — CKEditor Sample

          CKEditor Samples » Using the CKEditor Read-Only API

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to use the setReadOnly API to put editor into the read-only state that makes it impossible for users to change the editor contents.

          For details on how to create this setup check the source code of this sample page.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/xhtmlstyle.html0000644000175000017500000001556313437512115023450 0ustar domdom XHTML Compliant Output — CKEditor Sample

          CKEditor Samples » Producing XHTML Compliant Output

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to configure CKEditor to output valid XHTML 1.1 code. Deprecated elements (<font>, <u>) or attributes (size, face) will be replaced with XHTML compliant code.

          To add a CKEditor instance outputting valid XHTML code, load the editor using a standard JavaScript call and define CKEditor features to use the XHTML compliant elements and styles.

          A snippet of the configuration code can be seen below; check the source of this page for full definition:

          CKEDITOR.replace( 'textarea_id', {
          	contentsCss: 'assets/outputxhtml.css',
          
          	coreStyles_bold: {
          		element: 'span',
          		attributes: { 'class': 'Bold' }
          	},
          	coreStyles_italic: {
          		element: 'span',
          		attributes: { 'class': 'Italic' }
          	},
          
          	...
          });

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/enterkey/0000755000175000017500000000000013437512115022161 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/enterkey/enterkey.html0000644000175000017500000001040013437512115024670 0ustar domdom ENTER Key Configuration — CKEditor Sample

          CKEditor Samples » ENTER Key Configuration

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to configure the Enter and Shift+Enter keys to perform actions specified in the enterMode and shiftEnterMode parameters, respectively. You can choose from the following options:

          • ENTER_P – new <p> paragraphs are created;
          • ENTER_BR – lines are broken with <br> elements;
          • ENTER_DIV – new <div> blocks are created.

          The sample code below shows how to configure CKEditor to create a <div> block when Enter key is pressed.

          CKEDITOR.replace( 'textarea_id', {
          	enterMode: CKEDITOR.ENTER_DIV
          });

          Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

          When Enter is pressed:
          When Shift+Enter is pressed:


          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/inlinebycode.html0000644000175000017500000001405613437512115023673 0ustar domdom Inline Editing by Code — CKEditor Sample

          CKEditor Samples » Inline Editing by Code

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to create an inline editor instance of CKEditor. It is created with a JavaScript call using the following code:

          // This property tells CKEditor to not activate every element with contenteditable=true element.
          CKEDITOR.disableAutoInline = true;
          
          var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
          

          Note that editable in the code above is the id attribute of the <div> element to be converted into an inline instance.

          Saturn V carrying Apollo 11 Apollo 11

          Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

          Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

          Broadcasting and quotes

          Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

          One small step for [a] man, one giant leap for mankind.

          Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

          [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

          Technical details

          Mission crew
          Position Astronaut
          Commander Neil A. Armstrong
          Command Module Pilot Michael Collins
          Lunar Module Pilot Edwin "Buzz" E. Aldrin, Jr.

          Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

          1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
          2. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
          3. Lunar Module for landing on the Moon.

          After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.


          Source: Wikipedia.org

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/magicline/0000755000175000017500000000000013437512115022263 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/magicline/magicline.html0000644000175000017500000002027413437512115025106 0ustar domdom Using Magicline plugin — CKEditor Sample

          CKEditor Samples » Using Magicline plugin

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows the advantages of Magicline plugin which is to enhance the editing process. Thanks to this plugin, a number of difficult focus spaces which are inaccessible due to browser issues can now be focused.

          Magicline plugin shows a red line with a handler which, when clicked, inserts a paragraph and allows typing. To see this, focus an editor and move your mouse above the focus space you want to access. The plugin is enabled by default so no additional configuration is necessary.

          This editor uses a default Magicline setup.


          This editor is using a blue line.

          CKEDITOR.replace( 'editor2', {
          	magicline_color: 'blue'
          });
          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/uicolor.html0000644000175000017500000000505413437512115022701 0ustar domdom UI Color Picker — CKEditor Sample

          CKEditor Samples » UI Color

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to automatically replace <textarea> elements with a CKEditor instance with an option to change the color of its user interface.
          Note:The UI skin color feature depends on the CKEditor skin compatibility. The Moono and Kama skins are examples of skins that work with it.

          This editor instance has a UI color value defined in configuration to change the skin color, To specify the color of the user interface, set the uiColor property:

          CKEDITOR.replace( 'textarea_id', {
          	uiColor: '#14B8C4'
          });

          Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/toolbar/0000755000175000017500000000000013437512115021775 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/toolbar/toolbar.html0000644000175000017500000002130413437512115024325 0ustar domdom Toolbar Configuration — CKEditor Sample

          CKEditor Samples » Toolbar Configuration

          This sample is not maintained anymore. Check out the brand new CKEditor Toolbar Configurator.

          This sample page demonstrates editor with loaded full toolbar (all registered buttons) and, if current editor's configuration modifies default settings, also editor with modified toolbar.

          Since CKEditor 4 there are two ways to configure toolbar buttons.

          By config.toolbar

          You can explicitly define which buttons are displayed in which groups and in which order. This is the more precise setting, but less flexible. If newly added plugin adds its own button you'll have to add it manually to your config.toolbar setting as well.

          To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:

          CKEDITOR.replace( 'textarea_id', {
          	toolbar: [
          		{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },	// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
          		[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],			// Defines toolbar group without name.
          		'/',																					// Line break - next group will be placed in new line.
          		{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
          	]
          });

          By config.toolbarGroups

          You can define which groups of buttons (like e.g. basicstyles, clipboard and forms) are displayed and in which order. Registered buttons are associated with toolbar groups by toolbar property in their definition. This setting's advantage is that you don't have to modify toolbar configuration when adding/removing plugins which register their own buttons.

          To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:

          CKEDITOR.replace( 'textarea_id', {
          	toolbarGroups: [
          		{ name: 'document',	   groups: [ 'mode', 'document' ] },			// Displays document group with its two subgroups.
           		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },			// Group's name will be used to create voice label.
           		'/',																// Line break - next group will be placed in new line.
           		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
           		{ name: 'links' }
          	]
          
          	// NOTE: Remember to leave 'toolbar' property with the default value (null).
          });

          Full toolbar configuration

          Below you can see editor with full toolbar, generated automatically by the editor.

          Note: To create editor instance with full toolbar you don't have to set anything. Just leave toolbar and toolbarGroups with the default, null values.

          
          	
          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/tabindex.html0000644000175000017500000000454413437512115023026 0ustar domdom TAB Key-Based Navigation — CKEditor Sample

          CKEditor Samples » TAB Key-Based Navigation

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how tab key navigation among editor instances is affected by the tabIndex attribute from the original page element. Use TAB key to move between the editors.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/divreplace.html0000644000175000017500000001107613437512115023344 0ustar domdom Replace DIV — CKEditor Sample

          CKEditor Samples » Replace DIV with CKEditor on the Fly

          This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

          This sample shows how to automatically replace <div> elements with a CKEditor instance on the fly, following user's doubleclick. The content that was previously placed inside the <div> element will now be moved into CKEditor editing area.

          For details on how to create this setup check the source code of this sample page.

          Double-click any of the following <div> elements to transform them into editor instances.

          Part 1

          Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.

          Part 2

          Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.

          Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate.

          Part 3

          Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/inlineall.html0000644000175000017500000002372313437512115023177 0ustar domdom Massive inline editing — CKEditor Sample

          CKEditor Samples » Massive inline editing

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

          <div contenteditable="true" > ... </div>

          Click inside of any element below to start editing.

          Fusce vitae porttitor

          Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor.

          Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat.

          Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum

          Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu.

          Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

          Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

          Integer condimentum sit amet

          Aenean nonummy a, mattis varius. Cras aliquet. Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

          Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

          Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

          Praesent wisi accumsan sit amet nibh

          Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

          Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

          In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

          CKEditor logo

          Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

          Nullam laoreet vel consectetuer tellus suscipit

          • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
          • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
          • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

          Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

          Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

          Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

          Tags of this article:

          inline, editing, floating, CKEditor

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/index.html0000644000175000017500000001317613437512115022340 0ustar domdom CKEditor Samples

          CKEditor Samples

          These samples are not maintained anymore. Check out the brand new samples in CKEditor SDK.

          Basic Samples

          Replace textarea elements by class name
          Automatic replacement of all textarea elements of a given class with a CKEditor instance.
          Replace textarea elements by code
          Replacement of textarea elements with CKEditor instances by using a JavaScript call.
          Create editors with jQuery
          Creating standard and inline CKEditor instances with jQuery adapter.

          Basic Customization

          User Interface color
          Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
          User Interface languages
          Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.

          Plugins

          Magicline plugin
          Using the Magicline plugin to access difficult focus spaces.
          Full page support
          CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.

          Inline Editing

          Massive inline editor creation
          Turn all elements with contentEditable = true attribute into inline editors.
          Convert element into an inline editor by code
          Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
          Replace textarea with inline editor New!
          A form with a textarea that is replaced by an inline editor at runtime.

          Advanced Samples

          Data filtering and features activation New!
          Data filtering and automatic features activation basing on configuration.
          Replace DIV elements on the fly
          Transforming a div element into an instance of CKEditor with a mouse click.
          Append editor instances
          Appending editor instances to existing DOM elements.
          Create and destroy editor instances for Ajax applications
          Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
          Basic usage of the API
          Using the CKEditor JavaScript API to interact with the editor at runtime.
          XHTML-compliant style
          Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
          Read-only mode
          Using the readOnly API to block introducing changes to the editor contents.
          "Tab" key-based navigation
          Navigating among editor instances with tab key.
          Using the JavaScript API to customize dialog windows
          Using the dialog windows API to customize dialog windows without changing the original editor code.
          Using the "Enter" key in CKEditor
          Configuring the behavior of Enter and Shift+Enter keys.
          Output for Flash
          Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
          Output HTML
          Configuring CKEditor to produce legacy HTML 4 code.
          Toolbar Configurations
          Configuring CKEditor to display full or custom toolbar layout.
          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/appendto.html0000644000175000017500000000432313437512115023035 0ustar domdom Append To Page Element Using JavaScript Code — CKEditor Sample

          CKEditor Samples » Append To Page Element Using JavaScript Code

          This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

          The CKEDITOR.appendTo() method serves to to place editors inside existing DOM elements. Unlike CKEDITOR.replace(), a target container to be replaced is no longer necessary. A new editor instance is inserted directly wherever it is desired.

          CKEDITOR.appendTo( 'container_id',
          	{ /* Configuration options to be used. */ }
          	'Editor content to be used.'
          );

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/0000755000175000017500000000000013437512115022534 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/outputforflash.html0000644000175000017500000002357413437512115026522 0ustar domdom Output for Flash — CKEditor Sample

          CKEditor Samples » Producing Flash Compliant HTML Output

          This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

          This sample shows how to configure CKEditor to output HTML code that can be used with Adobe Flash. The code will contain a subset of standard HTML elements like <b>, <i>, and <p> as well as HTML attributes.

          To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard JavaScript call, and define CKEditor features to use HTML elements and attributes.

          For details on how to create this setup check the source code of this sample page.

          To see how it works, create some content in the editing area of CKEditor on the left and send it to the Flash object on the right side of the page by using the Send to Flash button.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/outputhtml.html0000644000175000017500000001623113437512115025652 0ustar domdom HTML Compliant Output — CKEditor Sample

          CKEditor Samples » Producing HTML Compliant Output

          This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

          This sample shows how to configure CKEditor to output valid HTML 4.01 code. Traditional HTML elements like <b>, <i>, and <font> are used in place of <strong>, <em>, and CSS styles.

          To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes.

          A snippet of the configuration code can be seen below; check the source of this page for full definition:

          CKEDITOR.replace( 'textarea_id', {
          	coreStyles_bold: { element: 'b' },
          	coreStyles_italic: { element: 'i' },
          
          	fontSize_style: {
          		element: 'font',
          		attributes: { 'size': '#(size)' }
          	}
          
          	...
          });

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/assets/0000755000175000017500000000000013437512115024036 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/assets/outputforflash/0000755000175000017500000000000013437512115027123 5ustar domdom././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/assets/outputforflash/outputforflash.flart-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/assets/outputforflash/outputforflas0000644000175000017500000024700013437512115031766 0ustar domdomࡱ> qRoot Entryp|YrRASH>ޱ3q@ContentsLyFP 1 1212997365AS 1 1216047046,(Root Entry5HZEޱ-3q Contentsr9fP 1 1212997365!S 1 1216047046,( -./0123456789:;<=>?@BCDEFGHIJKMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoM 1 1287673773O= x] tEK ʀ . `PG(#;&gQt2-*a=,N<8ΝQi%%A$]鮪ֽ'O< סԘqRZN*c&=S{~@LݦI1#Ǥv͂ﬕoIɵ ꭅrտyyy퐆?g2 yB8!2Kǥ7XXQt\Pjbt{oo\u_$)aN``18 ptc74{ɚ'bE$u5.m7n)sNS2`_,#ɍ{N`q p8> > >D鲩 tk0 Layer 1OO?mimport flash.external.ExternalInterface; FCKTextArea.htmlText = ""; function setData(htData) { FCKTextArea.htmlText = htData; } ExternalInterface.addCallback("setData", this, setData);  Actions3import flash.ext{@|>x,δ2h<<<|F:tF;-Ĥ>{XnuOlj':D呤7ګ~m9vMXgBYp?~N+<'Oȯɉwڜsp-Wnp:'w'8pjRWbcRo]X^+ ,0 ;YVXW./aHLNCuu~Rz\g%D@7<1'`vyQR{^EG0s/'ɦM͔1%,&慠ڨ~ėp<88TN ܽn{lo K'.09 ?ӋW|eʫ!g3 {dx%\\A+ /yƒ/#'¾"8b*kI u r"핹BO]9=#NT{Ň_]tK9Dyrmn|$WVIF|ՇC>+k>qc`G/m 1gjpaz67[͕krVW? 0'J.pl{eE+>D9_l]y8qi0^ϭY(-7$W2XkB6}8_Ɯ1grpĜɉ9o9sQӴW8F$ñ8};/ljyBNiyvUF@J9]Ù? [~mƜr"0:3XX}YqĜ>-nɉb6oHJ >w_+ }8DƜ_~f?pH>v|Eu{OZugsMmGO(br|`s}/g1͛mӶ]q\ 3su^l4:Zܼg_רQc]o9S/x]du:vds uZ4lp͔xk蛲$~mrƜO|ps6h̙sdYDƜM|v̹:z=l#+c>ϒflƇU%;b0g\T(G](XQ~}3Zjm"qH|.۴/=hĮ^G> ̨=zߺ=?}IJwL#L9gt0gp~Qq3vɉiohfr4[uP?=Ѹ[_ù=8@|E3 x}MֲbuM| >|qI\X{V.][<>Ų`1? ò۰Swy89s]k?\1=^qD]K)b>g`p#`X4}8]3S|WC?'JO?gLCF=8tP``:Edd$ǘ o6=,FDHq^s[ޘ/vT`9 ^|v@7[7@>E{}ʉ=QϾ^V8.ro^3z?\3oߘߛ4sSQL?ZG #Ok&1ˬӶyfgp#+gkT'_1 NytbZiXgFK7_D`q4pW)oJ&M"A;:6+M,{ob(\,_^b:)斊9'Ek;cvH)N/ѱιT̙im Nd|6 K4X|X\urĘ[EcGgdt,G)/ۚ$6,ip:&=m߁YWx%}]=HClPḍɉ7l9,g }c!'&lטeJ)NXܖqt#[㶷|}r>Fvpo>"=!%2D5ɉYgXɉRmWh=Hb5MS>կ=iDžcbO c"Ӱv؟{cYˇcñ9q+N{E"/q/bژFMj7+K  u[wι\8cö89Wy8.X{ČѵRsbzO^@`M_uֺL+ p>X`3b&'eCz^qӸC^/Ñ@zE/ۃ_ 5}TCfD>,{#b ^#I~(uΆR3^[Iu=޴2:Lc_&cl`3us^Ӣ_85p9T^ݚ%vi[co>{:s݀ߤ7Frv%Qm**#Fܫ.>Niplo_JګRN 53%E $G$#K/‘W֓'O< T^uD]zQ\27c@qp 9ΜzY3e ,>7}Rq# C1F\DnGVGi s39 XYr g9ܨb8Uz0jh"U-A(%bq5trr_~s^Y*d 8%><%'xxj`.tbB7<OFLw7pH$OoMd?oGF M$džK~{b:EJ$o3&mdbc]{Ƀ?A&aSbc6f!VYf4ÚYglmwgY /y$I@"G4#PublishGifProperties::PaletteOption"PublishPNGProperties::DitherOption0PublishFormatProperties::projectorMacDefaultName1'PublishFormatProperties::pngDefaultName1-PublishFormatProperties::projectorWinFileN "#$%&'()*p-./0123456789:;<=>?@stuvwxyz{|}~M 1 1287673773OS 2 1287674123QM 3 1287674134O= x] tEK ʀ . `PG(#;&gQt2-*a=,N<8ΝQi%%A$]鮪ֽ'O< סԘqRZN*c&=S{~@LݦI1#Ǥv͂ﬕoIɵ ꭅrտyyy퐆?g2 yB8!2Kǥ7XXQt\Pjbt{oo\u_$)aN``18 ptc74{ɚ'bE$u5.m7n)sNS2`_,#ɍ{N`q p8> > >D鲩 tk0x,δ2h<<<|F:tF;-Ĥ>{XnuOlj':D呤7ګ~m9vMXgBYp?~N+<'Oȯɉwڜsp-Wnp:'w'8pjRWbcRo]X^+ ,0 ;YVXW./aHLNCuu~Rz\g%D@7<1'`vyQR{^EG0s/'ɦM͔1%,&慠ڨ~ėp<88TN ܽn{lo K'.09 ?ӋW|eʫ!g3 {dx%\\A+ /yƒ/#'¾"8b*kI u r"핹BO]9=#NT{Ň_]tK9Dyrmn|$WVIF|ՇC>+k>qc`G/m 1gjpaz67[͕krVW? 0'J.pl{eE+>D9_l]y8qi0^ϭY(-7$W2XkB6}8_Ɯ1grpĜɉ9o9sQӴW8F$ñ8};/ljyBNiyvUF@J9]Ù? [~mƜr"0:3XX}YqĜ>-nɉb6oHJ >w_+ }8DƜ_~f?pH>v|Eu{OZugsMmGO(br|`s}/g1͛mӶ]q\ 3su^l4:Zܼg_רQc]o9S/x]du:vds uZ4lp͔xk蛲$~mrƜO|ps6h̙sdYDƜM|v̹:z=l#+c>ϒflƇU%;b0g\T(G](XQ~}3Zjm"qH|.۴/=hĮ^G> ̨=zߺ=?}IJwL#L9gt0gp~Qq3vɉiohfr4[uP?=Ѹ[_ù=8@|E3 x}MֲbuM| >|qI\X{V.][<>Ų`1? ò۰Swy89s]k?\1=^qD]K)b>g`p#`X4}8]3S|WC?'JO?gLCF=8tP``:Edd$ǘ o6=,FDHq^s[ޘ/vT`9 ^|v@7[7@>E{}ʉ=QϾ^V8.ro^3z?\3oߘߛ4sSQL?ZG #Ok&1ˬӶyfgp#+gkT'_1 NytbZiXgFK7_D`q4pW)oJ&M"A;:6+M,{ob(\,_^b:)斊9'Ek;cvH)N/ѱιT̙im Nd|6 K4X|X\urĘ[EcGgdt,G)/ۚ$6,ip:&=m߁YWx%}]=HClPḍɉ7l9,g }c!'&lטeJ)NXܖqt#[㶷|}r>Fvpo>"=!%2D5ɉYgXɉRmWh=Hb5MS>կ=iDžcbO c"Ӱv؟{cYˇcñ9q+N{E"/q/bژFMj7+K  u[wι\8cö89Wy8.X{ČѵRsbzO^@`M_uֺL+ p>X`3b&'eCz^qӸC^/Ñ@zE/ۃ_ 5}TCfD>,{#b ^#I~(uΆR3^[Iu=޴2:Lc_&cl`3us^Ӣ_85p9T^ݚ%vi[co>{:s݀ߤ7Frv%Qm**#Fܫ.>Niplo_JګRN 53%E $G$#K/‘W֓'O< T^uD]zQ\27c@qp 9ΜzY3e ,>7}Rq# C1F\DnGVGi s39 XYr g9ܨb8Uz0jh"U-A(%bq5trr_~s^Y*d 8%><%'xxj`.tbB7<OFLw7pH$OoMd?oGF M$džK~{b:EJ$o3&mdbc]{Ƀ?A&aSbc6f!VYf4ÚYglmwgY /y$I@"G4ntrollerOption0"PublishQTProperties::PausedAtStart0 CColorDef3PfP0PHP`Px333(3f<03CH3F`3Hxf0f30ff(0f5HCPicPage CPicLayer CPicFrame CPicBitmap&? Layer 1OO Layer 1OOCPicPage CPicLayer CPicFrameCPicText X2ArialArialMT@"(The following text has been produced with CKEditor XhArial Arial-BoldMT@"(Flash Output Sample CPicSymbol????K29g&f0'&44 l< #PaaaDDDDdrrD]grrrrrprrprpppp |nnn_XvXQnXXQXQXQXXXQXXX55X555555555XX5XXXXwXwXXwXwXwaaXwa+%&%aDj""&&f<a%8d&6#8' zz[,zzeO,,, bSS,n_S S,S,SYfzzS,SOadozzzzzzzz;.L'l..7.&L))))m -HM)0.0F1 '  EEDBEEBnBBBBuBn1h tl DDDBDDDEEDE8B - ]0>H H H rH H H H XH XH H XrH XH XH XXXH XXoH XXXXX:CPicText (  Myriad-RomanxEthe text editor for Internet?\ Logo FCKeditor.aiOOCPicPage CPicLayer CPicFrameCPicText  X3 Arial(The following text has been produced with FCKeditor CPicSymbol h  X hArial(Flash Output SampleK29g&f0'&44 l<  <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:12:18 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <xmp:CreatorTool>Adobe Flash CS4 Professional</xmp:CreatorTool> <xmp:CreateDate>2010-10-21T17:08:13+02:00</xmp:CreateDate> <xmp:MetadataDate>2010-10-21T17:18:13+02:00</xmp:MetadataDate> <xmp:ModifyDate>2010-10-21T17:18:13+02:00</xmp:ModifyDate> </rdf:Description> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/vnd.adobe.fla</dc:format> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"> <xmpMM:DerivedFrom rdf:parseType="Resource"/> <xmpMM:DocumentID>xmp.did:97FEEC6B26DDDF119CC2FB8A8AACE65D</xmpMM:DocumentID> <xmpMM:InstanceID>xmp.iid:97FEEC6B26DDDF119CC2FB8A8AACE65D</xmpMM:InstanceID> <xmpMM:OriginalDocumentID>xmp.did:97FEEC6B26DDDF119CC2FB8A8AACE65D</xmpMM:OriginalDocumentID> <xmpMM:History> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <stEvt:action>saved</stEvt:action> <stEvt:instanceID>xmp.iid:97FEEC6B26DDDF119CC2FB8A8AACE65D</stEvt:instanceID> <stEvt:when>2010-10-21T17:18:13+02:00</stEvt:when> <stEvt:softwareAgent>Adobe Flash CS4 Professional</stEvt:softwareAgent> <stEvt:changed>/</stEvt:changed> </rdf:li> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?> CSaved by Adobe Flash Windows 10.0 build 544 timecount = 1287674293K@|././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/assets/outputforflash/outputforflash.swfrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/assets/outputforflash/outputforflas0000644000175000017500000003632313437512115031772 0ustar domdomFWS<x_ DC?^ FCKTextAreahtmlTextFCETextAreasetDatathisflashexternalExternalInterfaceaddCallbacksetData*htDataOO NN RxT txRo!=wLfqbEaXdz:pn~hoQ_z~Ro4 :>Xa`T!'l=z=2J0iH4:?cͯՌ2+"K:Qie4 ު\Qf>VGB Ed u(B̿|W7 Arial24%B3>WnTmG  5zWgP(Wv8UaF|/X.7 TlҤʙ!S%d3hwR#'?wX* p0Im& Y匪24UTjN"exʤ~+%< x*FT XמZ:[ g1^tDŽ ^)z#(l/J Xם)7#R74dQe<9'{P$=l _iLz-dl/ CYAtC` =qi J4xWp*L2+:= EWdGYhsK߫D' 8* .>Sz *xn;yT,DڝQj"tuH!Њ*RԊ=T(%@9`  P&.t]aD@\ea`BUuAAƁDhd`52:ԀD8<4 WRʱ|U r ^c^t8G#57PRp2c (cP#`UVU].OQP;*d ʠwb5*I[*I5/ J_"0ۀd @j0@ 8gzPsUMkH!U 4w|4^ TGUQWIlIʴ6"aT&̕J:-Jl䏀 =J\< !pfʨ)J$j]@ zkbX (/sQ*-DlP&jJSBMNQf]@(:'D}Lʣ\?$ p *3L6D|*ˌ 8RkP> k9Rz sU kG U$cv4^ V GGhRQUYQT#P@tU)R `iѼ*+t5 2Ϫ>en [Q mrRA*"UW$$R{Ɉs f`ՅzXWzWz  ozRQ.U$@T@UJ>TAU+twr3^3 T DQW j%H!:&"tC>zܬ a*$X bp nꭻ)R0@\NuPC>F|x &F%TiPCRaY5VxZeU XםeII$0Rَa|f  x2Tu=Vl3TCIM:3[QcUڅ ⵗD| T'i{o菀XZ=TtG <Xם> ZН ҼՒK%H/2K *ARd`U qx3bTiO.W`Sy50\fmUGD| TVz3F*Ud{ +qh++qe*.rI+n(H+P5M9UVP?F~J)V7'd6U YU]CY ~@  F74C4t%)k-Qms2J W ^TBI P2([dTW]YYS:Д -犆] gԨϏQ'\ƥ@^,* 8.@ dZН UeLR4v']hjkfzd1QhpCtV> vzwEA,dGUA&pTKJX@R,UtwRGU1LS+ tRE%# IKkR9#>'R AM1RuLˍ*4`{jf&Wbq"u8Z*wa/Jw\)5ɰ9@ šǀyﲓ% Psm mMS TM0e^I@54tVMDt)GmnvĺU;XB0 7'-7* " (K zg"* )c=^Js/:#p*`zKQ1e@T6fceYN-0 =TtM 4НiGyj{N:1HIGR^yf3Gw芀 )`8yNew2n9 Ml.X e؆o8'};.o$7F^ CEKTabcdefghilnoprstuwxlH` D9\5\50,,(,,D,,,,,(D,9(A L P T Y         F,P,T,V,W,Y,r,v,w,y,,,,,,,,<,< ,",#,`3,44@4 B4XC4XD44M44N44555 5|"5x#5152535475:5B5C5E5F5I5M5!6#6X-6162656>6A6B6C6N67#7x07174273757477:7<7>7@7E7F7M78x"8|#8h#9X":|#:h;;x;";h#;$;X-;X.;h1;h2; 3;45;X7;:;>;4@;DB;4C;4D;4M;4N;4<<x"<|#<h-<.<1<42<C<N<=x#=h>>>> >|">#>%>2>3>47>:>;>A>B>C>E>F>I>M>"?|#?h@x"@x#@hC@AA"Ax#A1A2A3A47A:ABACAEAFAB4BX0B42B45BX:B>B4@B4DB4EBLBMB4NB4CC4CCCCCC"Cx%C4)C0C1C42C45C6C7C:C<C>C@CBCDCICD1D2D7DCDEDEE"E|#Eh1EX5E4>E@EMENE#FhGXG!G0G41GX2Gh5GX6G7GX;G4>G4@G4AGDG4EG4LGNG4#Hh"I|#Ih1JX2JX4J46J7J4Kx"K|Lx"L|MM M41M4M:MAMCMNx"N|#NhOO OX"Ox#O-O1O42O3O@OCODOMO 4 4" 4#  4  A L f |r      x* ,   @=3Bz6BV6B>B*?B6B2B.?Bh2B6BA?B)6>B6B3B(6>B82%?B 6B 6B3B6B6>B3B3B?ArialTypeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reservedqp  2"MT@CQW \5֍^Z:҅0؅*g̅J(W@CE!P無P֍hCb0FVhCE P`-Arial @tZl ? XמлSa"wkcM,+vQ Gq@*K6l2JZ Pjh ññ& t ;`;`Tq쑪VU#7PT@Y V ne]UFU@t ^ ` rZtT TdQQBK, <& mM1N#yUi];eRUWViP]@aD텉aU%74VU+r]3w +Nb2ǀ &!*qQT rFCC "j 8$CnQ2DD!ʬ(+ 4] ]ooY FY`T5Z9Y8`TsK7YT.EPMLШ# z %>Ktv > SL+½S0bVCXR#ᮨt4uFЋi=G`p 5e\WT  e9poɂ(yۃn nц bP)_Y`Ojݦ eU oUUu.^ V EՕD>iBVEYV1FOxIP'E*)Y<J LRp .y{J6bR c@ z) G +^|UT')؀ah )0K*0eXV7B{QGӅNfVxSQ*ݢ]U*dvT5b |XםrP` ;+B{=ҵU+t<R4Hx*W2K*ˎ`T@eCK*:AT$EP 7eAhJ'SҜj& Z)+ʼhwB2BA6>BN6B3>B6BN6Bx6B06>B?Arial BoldTypeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved;hЀ @hqD2(cpBF0ܱM7,x2!@qE2 PװA C   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((( }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzJFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((=" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?R4S%1:}냂 \+ |#]V}6RK&hV` PO3zRZۢ<x {"d0[(^^* iў|ʹ+> i66^?uDKO+.dmח"O'TBxZhHKuf1\~l7FwSЧ߯c]S^QI>9_ 궃N22THrU>k>:i‹rS9 )_ʾuJQ{.X$e7y+zX(=p(((((((ٿ\7~#fM:lP4"?_0ZQi؎zW}%IP~kyZuew׷|ьGui/]&Fm"<I tcjt-r{f2@6}3 E'NIzHS}b.-ңc+FLZ?Ǫ޻sw_&J?v}_r?txeǓtu܇RU =}6^5џe߈:o5(Tb7OL?y Z?}QU9M;lK%n b>˩@>5)^kC>W}i`@m}A;YJJɳ~|銫]57Zx1T?s@udnnd%Zڰ-}_<]7 5fhԬ`2j?A~[ hڬ2T3p~u[#܃ǽzkRu}q$9S=.i6lK\ m/$"8R̀Fp?Z/bɳɺ }\Oq#>$fd==%/l[+XQ'!NԈ/]Eq![(dMm#TZDžtXSX&3#3`}+:k!;mI=#Ry[{;1Hn08y}6ƛM-l;n1LَH\j3Z-v-L9 MU{ TĞ+{x"AX.]tX8aqָ(l-ޯ}n`D Vb]eH8>SƗe'5_i)ϗe!Y|@ο[֢ռ?ͺ8Rp#XGB((1?i%y@" 2+ѧZ<"ռEjۿu+B'8+&(8S5 (((((((((x홻v@g$&ql.nb[QZRY[avcDwRD@w|?x:6*|6L_t'$m.0j YJo{mֲl:fm#&1!qqq\}$l> "ig-4 "ہjssx#e[|RЅs&q^ ED:Е`?Jač|UDMۇѠm#}tKw`r!O<}ݧ<4PB9 Ά( n/&z΍ -MtU( ΍dMMpPFԉ#j} /-ADid~Q0E&\ Ш8fDhF8R (p#E4-KD--c5$9@DfTD"Gef _4 {Q6HF""DJqEMEqJ-j. $#(e@6Q'6a (XKDZ#(S?thO:x]YU<í[@mTDޔyq@.c0/%՘zk-WNKUMFh ,ݓ1@۵ԿM'ٔw!ۭ]kz0nf#oJlc6KKtg?5ng#a|l?.Bĕ+*װ|Z)s\e3,鲗"W֮Vk]jԯ• ,#lTF|fs%>=y?{OχNٸƔ< B[{{}qڷȑj/2(ҥrvDZvulԯZy]ds<*q2+q\-o;EC3dճ>ΓC@C@ L7d:l󱗝)G 3w"(

           H&jT`FCKTextArea@rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/htmlwriter/assets/outputforflash/swfobject.js0000644000175000017500000002172013437512115031451 0ustar domdomvar swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;cf){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;ke.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;fe.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='');g.outerHTML='"+h+"";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& (a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), e.ie&&(e.win&&typeof d.styleSheets!=i&&0\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, 0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;be.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c Replace Textarea by Code — CKEditor Sample

          CKEditor Samples » Replace Textarea Elements Using JavaScript Code

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin.

          CKEDITOR.replace( 'textarea_id' )
          

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/sample.css0000644000175000017500000001174613437512115022337 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre { line-height: 1.5; } body { padding: 10px 30px; } input, textarea, select, option, optgroup, button, td, th { font-size: 100%; } pre { -moz-tab-size: 4; tab-size: 4; } pre, code, kbd, samp, tt { font-family: monospace,monospace; font-size: 1em; } body { width: 960px; margin: 0 auto; } code { background: #f3f3f3; border: 1px solid #ddd; padding: 1px 4px; border-radius: 3px; } abbr { border-bottom: 1px dotted #555; cursor: pointer; } .new, .beta { text-transform: uppercase; font-size: 10px; font-weight: bold; padding: 1px 4px; margin: 0 0 0 5px; color: #fff; float: right; border-radius: 3px; } .new { background: #FF7E00; border: 1px solid #DA8028; text-shadow: 0 1px 0 #C97626; box-shadow: 0 2px 3px 0 #FFA54E inset; } .beta { background: #18C0DF; border: 1px solid #19AAD8; text-shadow: 0 1px 0 #048CAD; font-style: italic; box-shadow: 0 2px 3px 0 #50D4FD inset; } h1.samples { color: #0782C1; font-size: 200%; font-weight: normal; margin: 0; padding: 0; } h1.samples a { color: #0782C1; text-decoration: none; border-bottom: 1px dotted #0782C1; } .samples a:hover { border-bottom: 1px dotted #0782C1; } h2.samples { color: #000000; font-size: 130%; margin: 15px 0 0 0; padding: 0; } p, blockquote, address, form, pre, dl, h1.samples, h2.samples { margin-bottom: 15px; } ul.samples { margin-bottom: 15px; } .clear { clear: both; } fieldset { margin: 0; padding: 10px; } body, input, textarea { color: #333333; font-family: Arial, Helvetica, sans-serif; } body { font-size: 75%; } a.samples { color: #189DE1; text-decoration: none; } form { margin: 0; padding: 0; } pre.samples { background-color: #F7F7F7; border: 1px solid #D7D7D7; overflow: auto; padding: 0.25em; white-space: pre-wrap; /* CSS 2.1 */ word-wrap: break-word; /* IE7 */ } #footer { clear: both; padding-top: 10px; } #footer hr { margin: 10px 0 15px 0; height: 1px; border: solid 1px gray; border-bottom: none; } #footer p { margin: 0 10px 10px 10px; float: left; } #footer #copy { float: right; } #outputSample { width: 100%; table-layout: fixed; } #outputSample thead th { color: #dddddd; background-color: #999999; padding: 4px; white-space: nowrap; } #outputSample tbody th { vertical-align: top; text-align: left; } #outputSample pre { margin: 0; padding: 0; } .description { border: 1px dotted #B7B7B7; margin-bottom: 10px; padding: 10px 10px 0; overflow: hidden; } label { display: block; margin-bottom: 6px; } /** * CKEditor editables are automatically set with the "cke_editable" class * plus cke_editable_(inline|themed) depending on the editor type. */ /* Style a bit the inline editables. */ .cke_editable.cke_editable_inline { cursor: pointer; } /* Once an editable element gets focused, the "cke_focus" class is added to it, so we can style it differently. */ .cke_editable.cke_editable_inline.cke_focus { box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; outline: none; background: #eee; cursor: text; } /* Avoid pre-formatted overflows inline editable. */ .cke_editable_inline pre { white-space: pre-wrap; word-wrap: break-word; } /** * Samples index styles. */ .twoColumns, .twoColumnsLeft, .twoColumnsRight { overflow: hidden; } .twoColumnsLeft, .twoColumnsRight { width: 45%; } .twoColumnsLeft { float: left; } .twoColumnsRight { float: right; } dl.samples { padding: 0 0 0 40px; } dl.samples > dt { display: list-item; list-style-type: disc; list-style-position: outside; margin: 0 0 3px; } dl.samples > dd { margin: 0 0 3px; } .warning { color: #ff0000; background-color: #FFCCBA; border: 2px dotted #ff0000; padding: 15px 10px; margin: 10px 0; } .warning.deprecated { font-size: 1.3em; } /* Used on inline samples */ blockquote { font-style: italic; font-family: Georgia, Times, "Times New Roman", serif; padding: 2px 0; border-style: solid; border-color: #ccc; border-width: 0; } .cke_contents_ltr blockquote { padding-left: 20px; padding-right: 8px; border-left-width: 5px; } .cke_contents_rtl blockquote { padding-left: 8px; padding-right: 20px; border-right-width: 5px; } img.right { border: 1px solid #ccc; float: right; margin-left: 15px; padding: 5px; } img.left { border: 1px solid #ccc; float: left; margin-right: 15px; padding: 5px; } .marker { background-color: Yellow; } rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/sample_posteddata.php0000644000175000017500000000142513437512115024537 0ustar domdom
          
          -------------------------------------------------------------------------------------------
            CKEditor - Posted Data
          
            We are sorry, but your Web server does not support the PHP language used in this script.
          
            Please note that CKEditor can be used with any other server-side language than just PHP.
            To save the content created with CKEditor you need to read the POST data on the server
            side and write it to a file or the database.
          
            Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
            For licensing, see LICENSE.md or http://ckeditor.com/license
          -------------------------------------------------------------------------------------------
          
          
          */ include "assets/posteddata.php"; ?> rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/wysiwygarea/0000755000175000017500000000000013437512115022706 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/wysiwygarea/fullpage.html0000644000175000017500000001765213437512115025406 0ustar domdom Full Page Editing — CKEditor Sample

          CKEditor Samples » Full Page Editing

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to configure CKEditor to edit entire HTML pages, from the <html> tag to the </html> tag.

          The CKEditor instance below is inserted with a JavaScript call using the following code:

          CKEDITOR.replace( 'textarea_id', {
          	fullPage: true,
          	allowedContent: true
          });
          

          Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

          The allowedContent in the code above is set to true to disable content filtering. Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/uilanguages.html0000644000175000017500000001061713437512115023532 0ustar domdom User Interface Globalization — CKEditor Sample

          CKEditor Samples » User Interface Languages

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to automatically replace <textarea> elements with a CKEditor instance with an option to change the language of its user interface.

          It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates a drop-down list that lets the user change the UI language.

          By default, CKEditor automatically localizes the editor to the language of the user. The UI language can be controlled with two configuration options: language and defaultLanguage. The defaultLanguage setting specifies the default CKEditor language to be used when a localization suitable for user's settings is not available.

          To specify the user interface language that will be used no matter what language is specified in user's browser or operating system, set the language property:

          CKEDITOR.replace( 'textarea_id', {
          	// Load the German interface.
          	language: 'de'
          });

          Note that textarea_id in the code above is the id attribute of the <textarea> element to be replaced.

          Available languages ( languages!):

          (You may see strange characters if your system does not support the selected language)

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/dialog/0000755000175000017500000000000013437512115021572 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/dialog/dialog.html0000644000175000017500000001626113437512115023725 0ustar domdom Using API to Customize Dialog Windows — CKEditor Sample

          CKEditor Samples » Using CKEditor Dialog API

          This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

          This sample shows how to use the CKEditor Dialog API to customize CKEditor dialog windows without changing the original editor code. The following customizations are being done in the example below:

          For details on how to create this setup check the source code of this sample page.

          A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

          1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
          2. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.

          The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

          1. Adding dialog tab – Add new tab "My Tab" to dialog window.
          2. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
          3. Adding dialog window fields – Add "My Custom Field" to the dialog window.
          4. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
          5. Setting default values for dialog window fields – Set default value of "Text Field" text field.
          6. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/dialog/assets/0000755000175000017500000000000013437512115023074 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/dialog/assets/my_dialog.js0000644000175000017500000000155513437512115025404 0ustar domdom/** * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'myDialog', function() { return { title: 'My Dialog', minWidth: 400, minHeight: 200, contents: [ { id: 'tab1', label: 'First Tab', title: 'First Tab', elements: [ { id: 'input1', type: 'text', label: 'Text Field' }, { id: 'select1', type: 'select', label: 'Select Field', items: [ [ 'option1', 'value1' ], [ 'option2', 'value2' ] ] } ] }, { id: 'tab2', label: 'Second Tab', title: 'Second Tab', elements: [ { id: 'button1', type: 'button', label: 'Button Field' } ] } ] }; } ); rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/jquery.html0000644000175000017500000001652713437512115022553 0ustar domdom jQuery Adapter — CKEditor Sample

          CKEditor Samples » Create Editors with jQuery

          This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK.

          This sample shows how to use the jQuery adapter. Note that you have to include both CKEditor and jQuery scripts before including the adapter.

          <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
          <script src="/ckedit../../ckeditor.js"></script>
          <script src="/ckeditor/adapters/jquery.js"></script>
          

          Then you can replace HTML elements with a CKEditor instance using the ckeditor() method.

          $( document ).ready( function() {
          	$( 'textarea#editor1' ).ckeditor();
          } );
          

          Inline Example

          Saturn V carrying Apollo 11Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

          Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

          Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

          One small step for [a] man, one giant leap for mankind.

          Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

          [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.


          Classic (iframe-based) Example

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/datafiltering.html0000644000175000017500000013450613437512115024047 0ustar domdom Data Filtering — CKEditor Sample

          CKEditor Samples » Data Filtering and Features Activation

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample page demonstrates the idea of Advanced Content Filter (ACF), a sophisticated tool that takes control over what kind of data is accepted by the editor and what kind of output is produced.

          When and what is being filtered?

          ACF controls every single source of data that comes to the editor. It process both HTML that is inserted manually (i.e. pasted by the user) and programmatically like:

          editor.setData( '<p>Hello world!</p>' );
          

          ACF discards invalid, useless HTML tags and attributes so the editor remains "clean" during runtime. ACF behaviour can be configured and adjusted for a particular case to prevent the output HTML (i.e. in CMS systems) from being polluted. This kind of filtering is a first, client-side line of defense against "tag soups", the tool that precisely restricts which tags, attributes and styles are allowed (desired). When properly configured, ACF is an easy and fast way to produce a high-quality, intentionally filtered HTML.

          How to configure or disable ACF?

          Advanced Content Filter is enabled by default, working in "automatic mode", yet it provides a set of easy rules that allow adjusting filtering rules and disabling the entire feature when necessary. The config property responsible for this feature is config.allowedContent.

          By "automatic mode" is meant that loaded plugins decide which kind of content is enabled and which is not. For example, if the link plugin is loaded it implies that <a> tag is automatically allowed. Each plugin is given a set of predefined ACF rules that control the editor until config.allowedContent is defined manually.

          Let's assume our intention is to restrict the editor to accept (produce) paragraphs only: no attributes, no styles, no other tags. With ACF this is very simple. Basically set config.allowedContent to 'p':

          var editor = CKEDITOR.replace( textarea_id, {
          	allowedContent: 'p'
          } );
          

          Now try to play with allowed content:

          // Trying to insert disallowed tag and attribute.
          editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
          alert( editor.getData() );
          
          // Filtered data is returned.
          "<p>Hello world!</p>"
          

          What happened? Since config.allowedContent: 'p' is set the editor assumes that only plain <p> are accepted. Nothing more. This is why style attribute and <em> tag are gone. The same filtering would happen if we pasted disallowed HTML into this editor.

          This is just a small sample of what ACF can do. To know more, please refer to the sample section below and the official Advanced Content Filter guide.

          You may, of course, want CKEditor to avoid filtering of any kind. To get rid of ACF, basically set config.allowedContent to true like this:

          CKEDITOR.replace( textarea_id, {
          	allowedContent: true
          } );
          

          Beyond data flow: Features activation

          ACF is far more than I/O control: the entire UI of the editor is adjusted to what filters restrict. For example: if <a> tag is disallowed by ACF, then accordingly link command, toolbar button and link dialog are also disabled. Editor is smart: it knows which features must be removed from the interface to match filtering rules.

          CKEditor can be far more specific. If <a> tag is allowed by filtering rules to be used but it is restricted to have only one attribute (href) config.allowedContent = 'a[!href]', then "Target" tab of the link dialog is automatically disabled as target attribute isn't included in ACF rules for <a>. This behaviour applies to dialog fields, context menus and toolbar buttons.

          Sample configurations

          There are several editor instances below that present different ACF setups. All of them, except the inline instance, share the same HTML content to visualize how different filtering rules affect the same input data.

          This editor is using default configuration ("automatic mode"). It means that config.allowedContent is defined by loaded plugins. Each plugin extends filtering rules to make it's own associated content available for the user.


          This editor is using a custom configuration for ACF:

          CKEDITOR.replace( 'editor2', {
          	allowedContent:
          		'h1 h2 h3 p blockquote strong em;' +
          		'a[!href];' +
          		'img(left,right)[!src,alt,width,height];' +
          		'table tr th td caption;' +
          		'span{!font-family};' +'
          		'span{!color};' +
          		'span(!marker);' +
          		'del ins'
          } );
          

          The following rules may require additional explanation:

          • h1 h2 h3 p blockquote strong em - These tags are accepted by the editor. Any tag attributes will be discarded.
          • a[!href] - href attribute is obligatory for <a> tag. Tags without this attribute are disarded. No other attribute will be accepted.
          • img(left,right)[!src,alt,width,height] - src attribute is obligatory for <img> tag. alt, width, height and class attributes are accepted but class must be either class="left" or class="right"
          • table tr th td caption - These tags are accepted by the editor. Any tag attributes will be discarded.
          • span{!font-family}, span{!color}, span(!marker) - <span> tags will be accepted if either font-family or color style is set or class="marker" is present.
          • del ins - These tags are accepted by the editor. Any tag attributes will be discarded.

          Please note that UI of the editor is different. It's a response to what happened to the filters. Since text-align isn't allowed, the align toolbar is gone. The same thing happened to subscript/superscript, strike, underline (<u>, <sub>, <sup> are disallowed by config.allowedContent) and many other buttons.


          This editor is using a custom configuration for ACF. Note that filters can be configured as an object literal as an alternative to a string-based definition.

          CKEDITOR.replace( 'editor3', {
          	allowedContent: {
          		'b i ul ol big small': true,
          		'h1 h2 h3 p blockquote li': {
          			styles: 'text-align'
          		},
          		a: { attributes: '!href,target' },
          		img: {
          			attributes: '!src,alt',
          			styles: 'width,height',
          			classes: 'left,right'
          		}
          	}
          } );
          

          This editor is using a custom set of plugins and buttons.

          CKEDITOR.replace( 'editor4', {
          	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
          	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
          	format_tags: 'p;h1;h2;h3;pre;address'
          } );
          

          As you can see, removing plugins and buttons implies filtering. Several tags are not allowed in the editor because there's no plugin/button that is responsible for creating and editing this kind of content (for example: the image is missing because of removeButtons: 'Image'). The conclusion is that ACF works "backwards" as well: modifying UI elements is changing allowed content rules.


          This editor is built on editable <h1> element. ACF takes care of what can be included in <h1>. Note that there are no block styles in Styles combo. Also why lists, indentation, blockquote, div, form and other buttons are missing.

          ACF makes sure that no disallowed tags will come to <h1> so the final markup is valid. If the user tried to paste some invalid HTML into this editor (let's say a list), it would be automatically converted into plain text.

          Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC.


          This editor is using a custom configuration for ACF. It's using the Disallowed Content property of the filter to eliminate all title attributes.

          CKEDITOR.replace( 'editor6', {
          	allowedContent: {
          		'b i ul ol big small': true,
          		'h1 h2 h3 p blockquote li': {
          			styles: 'text-align'
          		},
          		a: {attributes: '!href,target'},
          		img: {
          			attributes: '!src,alt',
          			styles: 'width,height',
          			classes: 'left,right'
          		}
          	},
          	disallowedContent: '*{title*}'
          } );
          

          This editor is using a custom configuration for ACF. It's using the Disallowed Content property of the filter to eliminate all a and img tags, while allowing all other tags.

          CKEDITOR.replace( 'editor7', {
          	allowedContent: {
          		// Allow all content.
          		$1: {
          			elements: CKEDITOR.dtd,
          			attributes: true,
          			styles: true,
          			classes: true
          		}
          	},
          	disallowedContent: 'img a'
          } );
          
          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/api.html0000644000175000017500000001601313437512115021773 0ustar domdom API Usage — CKEditor Sample

          CKEditor Samples » Using CKEditor JavaScript API

          This sample is not maintained anymore. Check out its brand new version in CKEditor SDK.

          This sample shows how to use the CKEditor JavaScript API to interact with the editor at runtime.

          For details on how to create this setup check the source code of this sample page.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/0000755000175000017500000000000013437512115021635 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/outputxhtml/0000755000175000017500000000000013437512115024252 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/outputxhtml/outputxhtml.css0000644000175000017500000000413713437512115027406 0ustar domdom/* * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license * * Styles used by the XHTML 1.1 sample page (xhtml.html). */ /** * Basic definitions for the editing area. */ body { font-family: Arial, Verdana, sans-serif; font-size: 80%; color: #000000; background-color: #ffffff; padding: 5px; margin: 0px; } /** * Core styles. */ .Bold { font-weight: bold; } .Italic { font-style: italic; } .Underline { text-decoration: underline; } .StrikeThrough { text-decoration: line-through; } .Subscript { vertical-align: sub; font-size: smaller; } .Superscript { vertical-align: super; font-size: smaller; } /** * Font faces. */ .FontComic { font-family: 'Comic Sans MS'; } .FontCourier { font-family: 'Courier New'; } .FontTimes { font-family: 'Times New Roman'; } /** * Font sizes. */ .FontSmaller { font-size: smaller; } .FontLarger { font-size: larger; } .FontSmall { font-size: 8pt; } .FontBig { font-size: 14pt; } .FontDouble { font-size: 200%; } /** * Font colors. */ .FontColor1 { color: #ff9900; } .FontColor2 { color: #0066cc; } .FontColor3 { color: #ff0000; } .FontColor1BG { background-color: #ff9900; } .FontColor2BG { background-color: #0066cc; } .FontColor3BG { background-color: #ff0000; } /** * Indentation. */ .Indent1 { margin-left: 40px; } .Indent2 { margin-left: 80px; } .Indent3 { margin-left: 120px; } /** * Alignment. */ .JustifyLeft { text-align: left; } .JustifyRight { text-align: right; } .JustifyCenter { text-align: center; } .JustifyFull { text-align: justify; } /** * Other. */ code { font-family: courier, monospace; background-color: #eeeeee; padding-left: 1px; padding-right: 1px; border: #c0c0c0 1px solid; } kbd { padding: 0px 1px 0px 1px; border-width: 1px 2px 2px 1px; border-style: solid; } blockquote { color: #808080; } rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/sample.jpg0000644000175000017500000003416113437512115023625 0ustar domdomJFIF,,C   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((( itwQ˪NDp`gU̥<՛ !rqmX7{=͍bfbfVa+z{.㡨"Y>%JB22ū?A1$E}XuJ{|OK7,|{jOs4sOWs3]a3YDxfz"Lh$h{Wڦu;Z3--yÎri+z#iTd35VHnUKtSDe=f!ќlZR]MF9ͣiʛVp:Sd͠6%<̚vZˠ][gtSEd=l4ؤxDjxy^/>*Q8‹J9z$4ϒ8d/:{ּζǘ}2bsɠg==٣ҔGy!~s& wyK)0i'ش7^jqH,}F:T3әv':4<-@tX8_Lоt>#K 2B+!"#12 3$5AB7M'K=} LSɒ5ggR6;Vv, a7X+%c;a7a|L*N\]K9بKfTńmC}Kq݀,&П/e Z ?+{~BXQ Z:'UƄeqQ Pc`Y֝ܪcsU.hZIi zQ J)_ q ,2˰hud\[hPkg)Y3s I>T~+}KmD*"E%}f& Ck` 8djyVήo$>Wu*ɬZεJfM&ɏXL_+On.ZGPkjAV.7MXOVWLe^>߸u? iW Cqߒ3! j^UJNOif5zr5UUZ[3 q| !Y3 ha5N?亄@r.x KV9Xї\rV8J2hGKg_ t6 kXByYVَhOs,*Sr~uܼ]~Nəg5CbZLkKo0lߋĬBzcvVRكi9%A\L.pL[Qf-?V d ,#]iV Y^^vAS vZ+tB@ȻJ]1jj*ؗS?YX~[kVuOʮ&tk@ O%t<J}̬{];=sz+z'a}[rڟ6WRҰВT!@d]Հr&nYJJ}߻f؏ZaO8¿[]l=kcX|o?g3R:-Qzݜ`{-!o,ۑbSvL FaU7<6ǿ"jfl>i5]kźc{w]bex稷̞2 k1ӭVV82^5L[.ܯmnS[ps?,!1A"2Q Ba#3R?eG%85Em{k{  QģRJ(oe38 <"ٖ4jGfh#4sfŵ%p=4=/GPE !+D(h 0$PXh(h{2C[GMy8PĨjƬq$28P (M2**'"% Kh"HR\z(pzȿhrb"YTN"(:[7"9Q=&ݒU {GyeБ!gr$iɓZ01Kjgnĉe,=Q Y%c-'oږRbY+4rLvkjdv"LB-oO20fH!Q} ]YE{=,ly:D*xT6Nl2YԌTb _,.$ KӨY:!9E%8 N$cy$Cnmq;)4.EJ3Q5r"4kivEffxID̲Ec~dEвg1d9"3ƼOԨ'cf?ibdYlo[:%;2R.ȳ܉e:yNlr%ddCtatFDEY7蔆wfd-N6ro,e:$L$я7c>}$}4dTݜY=#*C,Ye,G,kd9ҍYg#/ "?L1rZ$cɤb9Heֆt6EPcڱvY ZSC$szؑN(oEђN&G:u"'gL&nD/¯_%&13db}chdQ/q'  1ʴ8ˈrd#0 +v%F:kĐݳ.׌j+piL5'}V8"+#+D$>̒Gd\hS#ƹIFiވV"*#FNHt oT{n?fKBb6bw- HH4N4c~^R壣l QЄ/R>|˱NZgbEbF?#ؚc/j膾'/vճ$Q[>^iEtqtqMZI+2%Q,ʬg*51qĆ.=.4]ZďpԭH~KBĔlI|볍= !1AQ"2aq #3BRrCbs%0S?]l6@.k5 ܫ|W\?2*jpZw71«5 AEw9IaSJf|߲z~JNlJ`BiI  ;O "VP\Lq,[uV HQ[ˮwϹ\6~+JpFVH[%6{zm(R湿 d£GJɍu.桱 h-`DWUWGhe-^{$l.] cpqXe(TC]d˺Y arEgaD:R.TZ0'@gϪغȻ7AnWvscӽ^\S:N]2Ɖp(?57{j3&҄.+RH9pr L; 0U,fop6 Mr6OR?%LS2CsNXKzto4,.ʩN;O RIa sy艐Dt}Y|討VQcmwB܁.c'sܩS&J]ʨٻ]qt.NS&.uQ=uQ\z ? 13e 3w]38A>1A3.0xQN $4ܙFHpjULHUH Cpm:RN|u_'cEJkXNrsMPPwjS fe h3\|n&7 PP7Φ|M'u_pEY= 0_R%W|]E o<>îK=y/v)ɓJAԤ\wXQMO"QLs~u.E`[fX;K"XRLߘ4a,_ hqJF@>IkBE_`wآau6ǰZb j'XU{X]G_($EӢgpz#?̙){(7W.2, )ܩRpsC3.>"u;cTTe${8p]DԘr^߬qQJ+70h!KsoY YI X6Ee4 ]4E>*d-9zVJ j Hu՜$> nW%$dh 48S&S.Xc& .JpKRtb]w.JuM L5=/c]SJB Y(_{Krbg(d ڭ䔐 {`NJmeP1Yn%5r,<7 l홺<alRۣ97Nx㯙0[l0+Es«UV6|\j c}ˑ /I.O;ePu.tJ1`/b x _:@ES֟DO) "z[9kg/XIWo&o>~Xu c0$7]u1ꙶ/}B<^'Õb= 1*wBvޥD%D1wee!/4>B؛{L-,_B:hDX+bõ9u ,L;5Yzu)VNy% |=`K׶)ۗ&NYe~*\}ϼ0xoكDݻ"ѷpHKhF7}b}{iNJ©dW Am-Mݺ{V~n0_d☌@1fR2#^Ub'%D4tOe s\Eiv8*40zjEsK_`n 0p٣sʎfk?k'L2Xc־Q˪d*zo_Gsgl4%O7X"tsN{V` rǦVIn.1sQᱳ+e/Ic ieתx5/oxf]F'pSU>[ܠ˃?:U2 b !'SP85EUlF;Pu޷\<C>k^o0,CܥR rbvu~fFU1G`T(" xcZkVn[~Jbm?@6XefzpÓ mO[׹(-ݞ{FM>}>T?1 =2Վ#+ ?!.-o; śUu6(9iy(2G>""m|WZgU'uȺmA ߇K>XLl\ l uׯ?;FP>MlwL\>%WT jk^aCS i=&=NNU_=#J7 #W0[;Z Ǐ&!1AQaqѡ?n$fS`$ҢcIq; JX6)c-P<$‘HaDGN%U/#yRU1ͳ̶cv o 4)ԳS8&pe3 Hn/j 3(;a!r2- !fr#'DF% m5aB.+>[J`(N H][Ddmde!1Gܧ krp mxp+1 /ܥ8ě3D%Bs-<+t]GUBDkFx!ĬڙK(DYJg4Ɗ _ ʲ )s a]@˗b2"(A),Y`TT@L ix2C& C>L+ iWg]0DOD89?c̼+~FɣRg!]%y||M㜦\0j <=J^R[1vRTY2]w?&!1AQaq?0Ne XjX *[;'+Jc$Caˊ\\0X.e'zEkK&G$hԪWF CLa n'`mm{Z B-yʂw `ea+X@[j%5~<7UQˈ;"fF#d 2z`B .\ GD18V', 6ǽEeD*4haRȪpFziY" +u2b#0&Xw*ȊweK1d0s*@˙KC!MDaMI.7",{Kܪx,\?AEa6+j5) y_C|5r!&CSD࿠80Dv xwvZ i?؆3 3*7hؖP t(-;L" n:BۘI3"Kc9M΍3 v*,"Sx1e[ |6%Hۉ j*pVu "5gO}xq}#T3 0a/9\K ~u (heF* K/} 1 ]wyV'A;8T#7(7(ճ')zE.'BRQ- ksf9랍$D%2Y5}_+^~J001wЖx5  :y&^q丣Qt" 5?_2w)bp_Rd*N}짌"*Ym80E Au5e!>\ArX'!-Ax\#K.P#蘥iz|ho>* ܳ/ 2|b/#}?>f;2+^yqU|ŗ;|13B2x.S%!1AQaq?T]ސX[au\PU* L+n#>;ɑ4< 8YD bT}@ r ްUzŻ@I5ɑhZo o9tDZ-:2㋖:!kK(7yiqʂƆ;пSl1#]bۖ|5ڙ f:7y8hlӍj&f,rxC_y]C)B{/b#$ʻFXAB^5WNswm^8 8|ݺ+եQEJl8sFiD/ErB%BycyE+'-Su-vj?.~ ;"/Qb#&*ہ3 aFr$?Qׁ!`sDŧ(;_n_ =>H_-7R=|gy&3ejiUܥj~\௎W& ehpcщ*f\ !k"!>3˻;(s| ۩qGUJ#DbpY` ֧|a֤;x mj:LAGRSS$_h0 qӸ"a 2K̀sǷT]Tcf{D Bco~@ {~}nkYFִ*ze7 ;=?,D8 ?MWlڽёޟGY9,"O)].yl@CxE[ڜa6Kz 0?Qy!j@5q,D?%ģC)t!̺ٔ4{~2UO_Ás~9WbaY;( pt:wW8@b^Xa7 {lsYG6#ÁTEƃA hN fȲ/{Vը}4WG0ıaM3q~39h.1@Vӌ&'4QJ H _xI|xrz cho|L\ 6 4P A}aPN4eT5Tk8FZr)Rz`yE~|[HaEe!;&"a-;1R!O>V-" y}?HT]~08Gq Fh7ӬHC[5*ݻxnok,6/9J`.& (Iӆ$Y2klĵN]d>'=$쎿8l9E[z0uMoEi u;H""y<rMRe.lKxלsݧLv&v0@5+yq8Gz∀\1TQ:4ZqtʤE +54Q E[[H^PS_է"-"oh.8lԂAnL$k×AM EoK5]/{&ymjn^& D(5G 5|CK0F"#+9P 5)]Z a8ϙxLD70NP 0s[*v*V-&,xp$Pӓh`޵C_.5CB4[]@ #?ʇy+ ze;I#SBQoQ fv%m(@ysF´yѧwv܍A&e#`Vj& Er)47q_1؈üFଆȜ0Pm<0hÛjr}`'|JޏKbQ>C TJFQXd5 d,Vi!ploa tfG :w"^؂|FNرRfov~1y [PTZ`Py"h d,f uvNœ BMx :]qU򈿼)l bdtƈw'~W\EF6:ՃEj{C8vS%PCMzw+̫de5Y!JzԃMa$@D| 9PSdR 'xmט =~&P CzAbz :kKMZPV0aw+ Ď4B%!*ki9eʧ&ڦ7Jb@Ggl뚆R GŃHVTÞ^p%u;0"ʵ7 lq, e\ZlF`4Sߌr(۫r%W|G;Fjk. @w^]PLC4݀6<>4 k`|٦*sByL9ADKD8 U޸602] .^=!'Pmmq&ȑ_ |p\rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/inlineall/0000755000175000017500000000000013437512115023604 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/inlineall/logo.png0000644000175000017500000001027313437512115025255 0ustar domdomPNG  IHDR?MO2IDATx tSU&KRdjQPP*Fh(FVq8Lݰ"v`*c]Nϙ9z+0:Jiӽi.iZ`}{mҌs9$シh~}/pq'pq8\\l.^/|!RݰlK,uzL>[kn˵$ߜc1t7f[0PRfեqBEBB!11? s0'ni-=FGg"`U',1lҶHѮ_Z"=\,q_(VAoGoAz} =d]"O skJsS3M&jZa32;&[ l`u&c3ԭ70nj[`n0>SI6<\w۳!!~"G*p:0ȯω[[#o# ԭ ԫЭ7b<'ȧ[;`K nk|LƓJ;=tr+`?@n1>ބ`ht7uhti a;::R܇q50>>UP|&6r;)|PPO4a|ހe‹s0:eݗ w/ѭqB?ktQ AV#]f1a\tNQ`v {19Po;@,-Av Q:']aiI?ҡKiQ?'0E_M_zETo1n-bH #[ޓAKƺr{xSXT-P&$acktĭ3JFC&@`N>$:Bև`גd}R.2QέsĢl v|UkI_cAHyPɭ0{J ]qI O1$aGm AD>`7BD1<@Ylԑ2(~gQ[׋(E\\/&]| =۽'nm Q*y, Hb"Rk\ށkB+=z#]~*Y+*AJa y`w uP;Hu[$qi=! ㊲&X >g{j˽ N7aRH0 !{Tة[[D.Jx/V `+}^_hd--/աcܝ܋ 9b\.%\]c 9u1+4 ˄_PkՎQ4N$M y.9d% Q^[gjJ% [I{W3˽H?r)amE–[1 "S#*r%$/ 9-,)̾>MMqϕ~'^8 y80Z+%,n^#"zT'4A;INQqg$#' E|9g >/ke&{q ^Z %V#=Dy֥dw1L~£GwMԭn=ro! S#YA[^2ys>⼾9S)~1RcAY”1 Gɴ8^-&)h8ON> >m-򉝄^;奻gl%R4phOdA7uP8A5{]e6~M4ʝ0Y S+, u6&;]{H H聽X!qdyF > rh"Iܚӎ$.E)sտVw"u|l`bn?o9gر! 6lؽW`!]{?H cUb ݙgl lmȂЖ&<܋$NfmRޓD܋TBx8֝0"W,cob=z<34zԱ;B {3Y,R?[#nM\[fIH wtc"&S2J2t5zra3q> `Q'xt7#~z+yTsCH5۽GiSӣTr/bqa PI^>4Au `zܧU cΙc-vդB*DVK{e\Sqńq(֗@eI28}l[U;&hX(zi&FSAV*YwA ~*F-a!;g@3?ҏ~X?~,4P~l`M˝Y AR]5)[+$rzF&3ĩ۟aȺȆ%)jB ə0<# WU~ )`PdrJpYCA$l.5Ky\IENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/posteddata.php0000644000175000017500000000264313437512115024503 0ustar domdom Sample — CKEditor

          CKEditor — Posted Data

          $value ) { if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) continue; if ( get_magic_quotes_gpc() ) $value = htmlspecialchars( stripslashes((string)$value) ); else $value = htmlspecialchars( (string)$value ); ?>
          Field Name Value
          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/uilanguages/0000755000175000017500000000000013437512115024141 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/old/assets/uilanguages/languages.js0000644000175000017500000000251313437512115026446 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name4+&;j,6=:~$#n$l7f9רy_ ɐCLDzu,Aј[4Ս`q\Ϳ9.koB9fa۝,6CQi[+pDxG ݑʮ2¦}:%)}0% 9l~|6nvLм F6M(Rnl\,_2leqqŷ,,~ WA͒|Pr?1-0FxM(+IJ ou pc\w2y%X[BV1[Q]Z[ ~B8ll.`3*[&q;I [ru"c%plni^F?yGZx+lEk JK%b\f{])\)@[+q[';0n?|m(RtC >xyWZpu~* V唰nO أAvj>WAn9Y*Y8.-ep}DzٞJIu leޙV:/})V$\i![ u[͍B`Mn)9ɊϜ+T $8esd@Y;= n`, δzQ䗲J۳pO\i[6JSCtd;+T9 Mճ Y~9;BS @JNn:jqѕR )>a5gؗE'Ki.ʺ Nbv7QF_l?mywZE°JgJQ >*R(H>=Փq% 3 i6O7U!= [sKG|]FMaߧ>eޝcV䔜[QK KB%<rvf ZWJ 8W J|e ⶏX8NΜeU5\Nɕp{Sو}fyҏe ۢ\JPH\MHiW ъ*f**gP'OMJqs@G` ' Yu2N+dU+ULe5˨>]GJh+M2)3;Y!~j])^J>Ɂ(w:|܈=i̻ DznZ $$W9+$ I5l3 ]!ɸz^J2N#'8lTېl讔Aң)yDjE q^d#{zBKx pWɸӜ2Ƕ•N4V:JWߛR õR! dwҺJ ZLKzgEqj diZG ޕn$cޝ\BoQwh]ql^@j%Gjwdr[")^C*ᶿA+aI7h'۝bޝ1~h% ((T ۽ fQX9t#7JB<׉P//m'w&Rtu# ܕͼ;tY ˑp I&+}R Kefes,8/FI $6=Y.1c4?8xuرcFY, Oxm34cXXX,4ٹ5S7ny1Lngܶvj=-Km·afA!-N\+tgf%D*|:גHFGfdP692TS zڪ+g&J]Dʸmur>߶ TH(QK ?Õ&sWJݖՒPЃY%o1!Ctds!<wy皋yskb_8wP"6FUW]P&5.nrڑQdwIN=q% TPmnܬ&(\uX])W>%!R6ˍ pN U \*qV]Nlwy*l~"3}G&zM& ,x֔  4v\n5\T(m1eۍ"Q ʖv=XIS,.I߭8(qބ6fVA)qއ#:kiw ׻Y\wN8R2`ڝ":K߶n6ǣ~~Cݹݍίcȅ0j7U"9+YBX ߣJyRH^or`|Fܦ{+l[M]Fՙ+_ 8R3ާW œC-pdk|>j#p9Dg>"D+㾒׉O?:~J9v{53:+UBɅ0fz=6Օ]U5}m ^TPpӮ$-QpO"x=w ppnM8?D&n$aQK XJs4ḉP4($C)Jre]jxx/S*ueW:Z!E3e.Wgh2XFi,S& r% To8QkXtRqڶ?#(nvPSDnۿ£S8> 58R hᑎ@;sl]뎕 J3#pCP[KJX(8ח$=TPyٺEoXS/km4rrSp*ARq >MO*Y97 $p-9vZ,}nnImgs{yƠl_9,\ƮT(u UM+dcMЦM1'N@& gDᵔB~8O4em?Ąan:%.b㢴bT*ڪ7cN < xsTSd~a)dQ qJw,74!VS+Oj|w!&D!"cKn5^fGZ1_~mM\3ȕ&z1/P (W'HK<~K+bWq۷J+%ؠpJmذŶ5܆f}k̫.{)oZj\SJntFGbrc%|T1*w|UPΖ1?HI&[W$SoS]8lfc6hc|{J=Oߧul%^O$:_ |H>{h_Dݕ^͕)BL6Y5O??VK>MIPr"z{YP66QMdܕn۸ e8w}wS=qb}ѣ W~;tk9{kеI 2#\*X=$D\f ќ0z=76BFÄ ߽Q@qnqڽSU.ULbu7^4R*da T`~۷,0+ll`X@l8 _ xҼ Qq] n֣pGM*P!3*ܵu*J 먨5!Za2fjf|GފjuQb]$frq% jz2U53/C R+W섽.4IENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/img/navigation-tip.png0000644000175000017500000002737513437512115024006 0ustar domdomPNG  IHDR,h.IDATx t[չ%YyB)q&2Alq&NHB ˒gْ;kKoܮ.Go{tWn弳O#\\t&I|}{t]zSmvy܆U'muؓF Nz}nF~ͳ o]a./ޜ\]5q`6 `I0)u[S[-\0@@g eN7]k67y)WLLu"~ڝ7dHDȲf+ЀXܖ}/֞$py'13!ctjg6'SrŢӥd׵=mߺ$·\w~[EBgS6ܵ'}ϾJL$Syvѝ7ۚl\CCW/mJduiPp>tNa^ٱ H!53 y[Zxڇ>AI gKuqxwm-kcǛ϶:жU֥nwv?>)W,z(+|>Ou@(s}Ui|urujf՛D;IPpmy\Ȼ:;/?|Qn:YuCkcIHhV Lx-]2hɒltJQ4Rݦm)-|ְt߿Hܨ~/Ll٦7 I,zr˼ϻ;. nm>Q%DKI-|#(, D(0ٳRfRiRlZ)!z [6teE:׆+7#]y+9㋔]躖q{=WRt$;I°7u+}Tַ͖7vu Oߊޗ;<7Ϋ 4wg8Bˆ6_5wū:4O vo80ٶg[;'Ρ~;Z5%_u^\1#7۵qCr6v4?~Mέq?X;/\[QfUSQkd\ۺ._yAy?7| ՉH[d[ؾy赻}p+캟c"xX_d|RNR)vjS32/O+^|=cw?Q_!V~\!d%8[AQLT4/(;β߆ ʘ &v@؂q}²#T1\T{[Ģb~m 9zG@fʛ$ik}Qr:f+Fx @#U-ɛ^ki!9`qbd03j Q8&m U-!{3! K%/Tr^8ДZ$4!>ȔuF&Dxx&x2z4ᰦ!BKN.Y916*(:?Z%(O:~5iԟbβFywJ}ROKF-&(dĈ񨨗sf:%7QK< oV[7d+1">ס)}.V8C^/=%ϔ]% Ii 봆|jh!Vƛ(cδ(z.ikx͸ZM0M(xDśN'W򂣒VxɮjҼEIJ3i)~ e8䵆QK|9%,q ZϳnfN2-?y2l@f"rv81ZxR2akru#EHT*"GYRKUz5Ğ@1pODŭ=>+9ס Ϭ *%SF,o&c*'ȽVjiBǝ]g+#mL.S&9G=j ?dTi*$>~yk+?FHK!p-2Aq4v]$&R4+5uc@ey5:&!][ZhmJu^KSvݚ$;EGF*t]P6|D# ǒv~GҮF +nDԮ!( a9~1Q[M-d$aaCCEnx8HCE͐ϐ.(xRd]&e>Ua"E5HQIgqF]õn]Zm4#Ԃr{5ϣdx cwB^'v=Y}< q|_9ܓE.K)'4wRp(*=)k%tcG^a dѮOV9.;NxfK͛F%kwT1.U@D!v.9=ܓU>|;&JJN '' U! B8B V8è$(,M2*xvElg51ZXI^"|7Կ;qdvY)r~x_g{rEOR' 4'OiJ"Sh!@BB$ո=lƀǛ`y*~ǣ}OLEj'; 7^f-IgwIڲs4sb;5}VQ&:Vi>-1~UNIhE;!$m{b/,0et5,E%%w0|.:{xb|ֱi)Κ\E'WK%v4/:,M¼KH*Ŗ}bqðA @`gFʛ9'jfvz[|_ ws>5kJTl9g<>_{HE럔İ 7:MG*Ϣ-T[B-7\JX5Tfer% q3|eZҌx<_Ǔkr׈H<Ņ߇ j-d4GۦȈBR_I*g&WC^Uj)H5ȏn+ACy*1iLƖ-(=2'Ȣ,aǪ|x2V fQzxl=10} 6*ZPXyt1J)5}4j%7һa1[Ǎ}ψ3}C{<yX7S8'ZEMۓ\Hh(zCPg.%t,?g:F0//O_Y]mE$]J0%Sl+kvTqqt1]%X˙lG_=ēHmE'9_HN'|и㓕w֖:Zz^hE|ki~QYƝWֆ~0x3-iy}}[uשMh{!>5C1;aKݾ7iݗ:yڇ[nC ʃN?T-؜,7\] P n|z_%5/X$mʕe6AHZ~eޓ3 i3ffNϝIʖ N{;B[K-sҧߔb+-5=66fx_(~,xE|f4̘63}5¾& >@?`H$ib7wNV&ﮝ9o &6U6wkr#; 3M:yͲGON6EOgq>);;$n2f-Rzh=uJgo! Y-c)s8%Y`±*>nm#8o޲qyiy3VxL@p)3ҶSr6KnMQRf&I}OH)j?[{kK\S VN;-`dǶ}xOK=vǥڿfiT$s&´=6޹y%1d[CwCiC.thvwl[]h.F]>]Wr3R^ю%⦤YeWܦ`d*[J/ntmߚpʹYflJZ&;!3[p}J&[SϿ[~Vm]=$swVe; a#&l#L >KEGN^6m=y2jPžb8j=kc*A;uEܛRV搄(%AZ6Y a{-tg,7miu`ⰲ/9["6kSϋ``k `ͽg˗>0 ?#})tKB;C;ssw؛{h %u6i20&ac^)PHoam} {C%^?_L6n^|乊6^q_{6|ȗ&s41OEbx  .9xQ]*P~o,|<e :N:/{P].[zVu.L,n? S6tqco7[K#󞧭o\j=}t+}n;oP_|\(XyPdKWKo:zfƺ`:_Foƞ;om yQp|}C3Co"C;2$5uuއ+f 7*;#frB[N7i޺t W =gSCu>uI%؟(؆"+2(=GW(:jyjH -vq:lmͽ/Y}w=3ʻ.{y vG%_lz$pz9f}_AϿ)jqrjl͡ߕ6v1~Y}s5=pG6t?sit@ LL苯<# ֿ=іpt\״վuԭ-=׼vՁ8cyqxxlDMI)9ft漂2|ƣMDW449/<$eҵ.-0_`dg"Pfz5d,o8:̸hmmےzvz8vt4uj>9 톀:}zH$T^bJ7o Q/ ((ˬmXQQbI@b3];Y,) (Ç#:], צO6UeAije; KWkjD,DB4EԐP[%nNK 8Xj 钜{ܡAGo .e# z5n|4x̐`ݸG<.#ڏB9ГMդ/Slg+뺃·t~`6l{ZVeGQXT y|m8p] }qEץKWmⶦtaf"blam6VYw1l O\V99üu.W)S*WWm˯|ɬ_'8xyzGu7"A? (Cӊ^f盞Kn?<'n_5[u#gkV@PĦ5=-WMBc޴UB =|5g7P(( +Hٻ]Ζ҆ο,kn8ֲ!z2g0\]&|D~nr i[O=N i^1Y ot 6| _]Ts&N끠SވX֎t_(qFمk%gZ"hnٶķ7@LI݋f6ԝjlG olg 򎭩]<кya`ޥ.^zm<]9[.Ty۳q Wa,s%֦kPUtFf@v Ń?k޶ev_+iDE3>UupA/ An r;$/ضQAZL@˖-{-6;C8=CT{(,$4U=csEAE#F0MDMZ&tME :຤Ji r;3>1li&OeosqWw?iX_)R5$(ǓA'A1B]]qD1%j$ Y\8`&E+5"D~moJ7:S{MecJzEӧ/"nu:Vx`$`EcaaclZAg |ގZny3y*\?:%WkY713Qo>OfBڄ>p~Xx(3"rs@,z}Q/Y4n A^GQbya7ĘgT`oM5cJ\@"ƍ!G{D0G |]_Z!Ej4TTHI ,H5kVJtkN~}+Л]'AD# E+# **7vSx74 ZQ<7>Wpj ]sc8eJ@h y]J5t#;gFeڴii,T1L`CwQcfky?<.CMsk2׋ʍNiFB+\MZ&-*ZåԘą>G)Mғ+#1-HΘ\\m.z-I? fuX+6%ёXAKh>C)S =Ix^x6y2Qxz ڡZJRh,){㉆w]y]'2 OLu!:DYpO8x&X %) m``u-@cQ\r#xD yezH(h)ENg>rɈ&Rhyn䌨Wim =/:5Fc^ٞbIHw"GX!+^G]hu+(y2<&6Oʒ}_V?SN^5cj7 \hX O>E˘\VZD-?=X_ŕ"'=Q7ߜ$NiDRb8<O S^+y&H2z0PO6jïF#od^y-b]_5ttuv-#C7iIՎ(˜b[n>Gk߫6-e}tT7UxQg wDfhJOĺsd}/q%PXD%4ƛQJ>KG:v,u XzEW~ }`|`k|?pɣ?iNg*ʖ)~Q\IcZ2ӧQK<>O߈[HՓ$@0ZK"NGɣiPtK(g( jhm*_ӛeusgH4'\sȓj(O>:llVo߉{yJwVtA,V_X&<ԓ cPʭpώ͈ |' RKEOjf; {A!B1~@ Hrӊ)+5ADHIx*bKhI:<T!J@ZxܫΣMUK"=| ;PړH.OxYT yb˜iCqkE5 "_ @6IENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/img/header-bg.png0000644000175000017500000003143613437512115022664 0ustar domdomPNG  IHDRqr%2IDATx}Yeu]H8H#P, NdPMٖĬzU)Ѳ# GĎl N#@䧃|(b%fwPU]Cwo>{uXUTΝog3;6v;Nۿ_}W 7蓏vse_~76ӏd4S 2qt])_7sĿIOݳx$Zk?g}AoyMV66ۛ9p' 磙}4VK7qsS$*ګtkZNtR+Y2U73g;-<"ۗ! eb9_L τ2E,"Jn:Uw߅칔 9;ݛ.w?67'ύ6{f[+@mOyegėp!_>; ؙ*|Ǿի_J!s@pik+kf A!X?n!ק {*;] e徻.$vxԜ*nsm cHSP+۔p_JjWJ-qŹB\)^Oŋ7QB۩_Aܙ.).-?qeh˸5vsp5U³qnۋ@jQ4>1P0U>)şm1?=6=^>Asב}*+x f p3*YwJ #}5WJ߆|=U>A;fʁs?M4MS@/l$+9|_cyZnc`m*kzZ x,rqr﹁cԖA k48 iW J-h&v\]9Mc :d4jrRB>J=u*TSkZyyT:V0𾦂n۸62 )#JӶ<6 33amY̳QA5W914eHS.5}K,CV]wUȺn#-SZ8mHwH;H;iפ 9VHq_0Lys&o2u~L}vs_NT&ۚʠ[!ߚ۵Y&wnp%GQwRжpiagDOEg h*_)Bo ‚1S݌%ʤI&]py-uTփF d0\Ux >][@F #0WMۄ4JA@6%iUx:CpvV*A#} vsLdm 3Zvt]̂VDT6lDՒ5x0wE:[(M}`|vb sTy1Th7,h"}{L0Q(*"Mj' AQh6-B4&q,zV2@C vDqϐktcpY ƹ>}vy@v{Cn[zO\zS>MY-u$``WLŔI]X /hHh6 ^`Q<iq8#xb& hG@(wa^ݩhxt@9amSMtws_}ׯ; "2 mK-6KJZ &*(M_N"5J4Pnmy< pA++E@bq@9>済F;h>oDAnHM\S{ vU+;j4;6Q!"*Ah v'`v*EHi' m:դRZ9RaÐͼ6Ԇq㽁6:pΜoytO⽓&VkPh)Af,+WE'I{ZS)w(KL]ȵt CWJ#cfÂ~|.Z08CDA!nB;"A?d֮?7n.q*h*Q8= xQCuf[h ab}%HfVc Ҏ%sfG"R8 1-ܬihe=@ԁ3u^r `. "ߐ6ˆZ :3Q ;mQ^j!GgT:izM$t%Ahal@6]_C#F@w=U7ʞ8M:db AXNm.-aD-8.ABh;(C1_*dK ^hߨi~h/OI٢f2%m +0DΫai %CUI(U1ԦJj-1p $i[;7Bul+ZOhl=6 aA @J ZBKAlgLRĠn"nAnsk uR+VPMC҄@V%lIU##astdaȝn4߫nt*;;eu[,2#(XilyG灮h[LP`ZhJZHPI[8 m>x wb:/i 4PC(v?™J+΍Ji滔M'6JH™j NfC/C'.Bnէ$:`o6USٍy YPQ9Hq { F9\spKL|!28,el&86Bv,ZaF.@B{;яbp"g}gŒ$Oܼ$s`8Ym6m di]46@gZ ڂ)^46@imZIMkp:\\R \͎RnVKtͦ~#E-eƐPfSS4Ѱ9:[oHh;YD3HE [4zScף`i&RZ+Cnt'U];О^ ؾR*ŷE qrT_#Łlzw];I2 4rslh+tĎʞLj:2L!Z*>i)imMnu&44YLrى˝g.B=3of|ҟy3/m? "3gw~/}h ryQ[whJ 2\!rv SktM} gŮGYsىսݳ{g'dDs3k(ې[:d6MW!oA^|U~%#/̯>4uB5@'D PÔWtkoc]J߿ii2 S5Jӻ3̙g_?YŸ6O7GmYR C#\ ɂV0n,Yw{3c0;f۞Ø=z[է>/>]Տ\xL<:~1sfRta`v=0ЌI#[L ObO=>؇>#O=#ih0>7{GyGޟ{艜w;Nw;~*~q+SK0sh?c_+q'4':/ZW꓅֊cIt._M|֋gPYBatУr>Jg˿r4ansaInU+IR=lCx;ZjDSWq|6,_+ M 4gƌ{dT@lg{=#%Tq$煵=.eF}=Sz[Է[&_jNjwPHl=lpvT@l?0I˘9װF666+[Soq.L+:jK#fgqP:[&.-&'7/qd}l:̞N>Y=>T +i%]KtZȨy?8Qgo伌)K`d”ݰ/4Xq3n*+JL0eYauThdqTAl Ri(ؼ5& ]Rpt#P_q4+ہ,MJgKBSej|FONr^\ct &=˝@e=^s_pX&񀬢1{t#fDP@Ok^X}r"id|.ԐL{fR)a5.}&8VZG0Ԩ\-;J*tc{#ߜjO sF$e,ڧV%pEJ(v5PEk˜IFZb(O!)Чfr pNr^ƌ'VF%'4KsZH)־¦ІJwZ8qǕUy(Ty'D!۞.+X{q^UI*@1\vdH ީ ku8(-0 ɬ,{#P =y!HkQ>!U椴>9N eMڤRfuĄ'QB{(8(-I>بw;yS2RW;I[@xNM4Ӏ͎+O4q*\.r<" )1P:[SJJ I AL:U:%)Dj0e f o jF7m QR9< %2Cm&*'9/"$.۵ZHNlhV^]*9xn))1P:[;3%4S"i`̓LF tyB:ùnpf6T)-ZxTA_K)H=TG{'9/c/'˅tš&n:*FNprڪl#5#r>Jg'ky퉉Jzb96q& UOM) A"=g)i5W4M8(-j}8; ;^ jtѼ8Ă#"H:*ޟ.RY3RM,Ԑmǃ#Ȩ '꘡Rv:'ԼIJY@u2FzC7J> (в՞h;埕Ozp q4+7>yK Fо8xY- LBYIP ,n}QR9_:eL8n5DjvBM4M5u&S8 4zcG'#UGF|Ζva^IkSX25 I& OI%g]UmWV-=qvay#wFK)-.|S+6ڰh8='wRDvDqr}v8R*ctM?% 伌NdRHa4h5@j&4\Q0r>JgtB.uk- ؼun*Iv* B`n!m7pNXʊi%qP:[Єr;q.'7/ci X"PHVFA! &2~Ȕ֗Ѡ%tTAl ն2HSvb+HECUKXYm,ꎚJzK?輤LQ!qP:[eaM˺.csb2FF\ԞL\@.v_|%9;q=]ҮgZf /pvZ}Ie(aH6Bl=I 4q-ȏ g'^`U˷[*d-!o1._nEM'| )@\lT9=a? +w>5/ۏ/~w>^1dJ~r6d&S^{C|gx>/'MeP'0zRr;, =qW6/H,=|mI5lSr ,7z\J7KNV#/Q87Z^ΉQ'ٶm/>[T'JUKgMkd\N=.یsE:aMَٗ~Z Xs2V^%$|F_(ۑ&rǏW?nO77z\27yaŸ v LJ,g-('7HW6Y{Lj^ iTd Prxl?m_n*rjlVw'~yhmY΃m[E ]sp(k2U#($R$vL+f9:VHf*WI%r*6Of>*m2͚/da3U;k# ?Jmoߟ/"/nem-T gBZ@'cI%VW®u ʶ$+[aiVٞ5g%90<m} /@&~qCFR^O"vțE N透.-QP v9% #c86Qf,XpɲoaA 2M *"uJuE+_ g*p;+,Xx.FqH/0zo_7YZ|)-ef2sYY_:q9`7 : V={:i6lBI.<>+WJE]D T$<>@[6JZ'kF=ccW *`?ﯻHYfi2 XZ ι0輅BH x9sXxòe^;6h;It%p5+ (YXl ?VC]]]Nga ̥/h˃g&_Լ$?Aւ>o Fz4c{B[j2ѓ8:k؃\!\dB$,N²5 5ϑ˝R:Do4qhIVBAe2f<U"5t΋P4&AĺG{/J_*i5S(S"İUR 8IWxxJ~/8'oDрs6ߴ?ϰ^!^< ĈH%]h*˔Q@ut$&iq5$ӶP@cCxVZ+o.R^ ,yIhowԼ/.7Æa{{ʹ7B?Y{[m_siQAkށCwBoa! NZBknM8Q ruk`(+7HrKn@Ƈ= ^-OEuh`yyf.mYf^g:;3GR˙7O Du7 i"R+ǔfoZLD!Pp:]Svрd {.xM\8E.SI ^7]j( @̨5w"[h{lv31'8M< Ӿh9 -Nk }m1Ӥ@)! sj_ঐNwZH: .D\KBbKaHbqcŽqzaBs>0 F$<>y!ޙp5h9y?'vLu imM+#@Y-5oB/yJ[X ~Hk3qV48St\\! so|`n5:(iNLhzX(NyA5"8q;]bXg$ ƪnNCž~B0ӳB"$ i[;G< VtZ$ c,M-}F%vD>jrTK (-4ެ ـ ڀfa~+ U=>̡٘S)61Z "Z\ :wsvU۲7ٹ5hs^P<wvt}?ۍ\sQkgF2=c쇝-;hZA8A yx05t@FRq@n( tFڮMNnk4<Qs q́)u{-7sQnm&Z(LAĉV5 bf;?TgW+轆[}o4g?n Ebk-~ ak~hRsb Ex9Y}Yf;+nUVBuDS23P%>~үσXπmNP@'OzBaJ7B Yi0Hva殟kTx5zܦK[&^V 4{ϠTvpqMU6i~-#kb=cdv?+W959lS9sf娋=m_lfѷiy};m>RҮskH} ?ms4lg/ؼZqLyy?W!*ݣ.)q+Qo;I1LT6}hAzH>CْrA5}! lFh` !%=29S< Y5l->fo*wsU/@hUL5֞ZύM >Ⱏя0I{Qar\-O<{ƃV:~u\6ϴzTVai^%V~AbƺL̹s4|"mqIENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/img/header-separator.png0000644000175000017500000000017313437512115024266 0ustar domdomPNG  IHDRM3BIDATxK CrCG!76]I2Y.|h +Y6--_ E7IENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/img/github-top.png0000644000175000017500000000057713437512115023132 0ustar domdomPNG  IHDR[iPLTEv"tRNS=\-gQ'Bv6kl|IDATEr0JnB°ٌ06Ov]vgU9Bp.V-y^PvZ E9k<;E=zШ9DjP#eU^KYa8e XU.\l5I_ʜ)dHyIENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/0000755000175000017500000000000013437512115023642 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/js/0000755000175000017500000000000013437512115024256 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/js/toolbarmodifier.js0000644000175000017500000003751413437512115030007 0ustar domdom(function(){function d(a,b){j.call(this,a,b);this.actualConfig=this.originalConfig=this.removedButtons=null;this.emptyVisible=!1;this.state="edit";this.toolbarButtons=[{text:{active:"Hide empty toolbar groups",inactive:"Show empty toolbar groups"},group:"edit",position:"left",cssClass:"button-a-soft",clickCallback:function(a,b){a[a.hasClass("button-a-background")?"removeClass":"addClass"]("button-a-background");this._toggleVisibilityEmptyElements();this.emptyVisible?a.setText(b.text.active):a.setText(b.text.inactive)}}, {text:"Add row separator",group:"edit",position:"left",cssClass:"button-a-soft",clickCallback:function(){this._addSeparator()}},{text:"Select config",group:"config",position:"left",cssClass:"button-a-soft",clickCallback:function(){this.configContainer.findOne("textarea").$.select()}},{text:"Back to configurator",group:"config",position:"right",cssClass:"button-a-background",clickCallback:function(){if("paste"===this.state){var a=this.configContainer.findOne("textarea").getValue();(a=d.evaluateToolbarGroupsConfig(a))? this.setConfig(a):alert("Your pasted config is wrong.")}this.state="edit";this._showConfigurationTool();this.showToolbarBtnsByGroupName(this.state)}},{text:'Get toolbar config',group:"edit",position:"right",cssClass:"button-a-background icon-pos-left icon-download",clickCallback:function(){this.state="config";this._showConfig();this.showToolbarBtnsByGroupName(this.state)}}];this.cachedActiveElement=null}var j=ToolbarConfigurator.AbstractToolbarModifier;ToolbarConfigurator.ToolbarModifier= d;d.prototype=Object.create(ToolbarConfigurator.AbstractToolbarModifier.prototype);d.prototype.getActualConfig=function(){var a=j.prototype.getActualConfig.call(this);if(a.toolbarGroups)for(var b=a.toolbarGroups.length,c=0;cCKEDITOR.editorConfig = function( config ) {\n',b?"\tconfig.toolbarGroups = ["+b+"\n\t];":"",c?"\n\n":"",c?"\tconfig.removeButtons = '"+c+"';":"","\n};"].join("");this.modifyContainer.addClass("hidden");this.configContainer.removeClass("hidden");this.configContainer.setHtml(a)};d.prototype._toggleVisibilityEmptyElements=function(){this.modifyContainer.hasClass("empty-visible")? (this.modifyContainer.removeClass("empty-visible"),this.emptyVisible=!1):(this.modifyContainer.addClass("empty-visible"),this.emptyVisible=!0);this._refreshMoveBtnsAvalibility()};d.prototype._createModifier=function(){function a(){b._highlightGroup(this.data("name"))}var b=this;j.prototype._createModifier.call(this);this.modifyContainer.setHtml(this._toolbarConfigToListString());var c=this.modifyContainer.find('li[data-type="group"]');this.modifyContainer.on("mouseleave",function(){this._dehighlightActiveToolGroup()}, this);for(var e=c.count(),f=0;f p > span > button.move.disabled"),e=c.count(),d=0;d li > ul"))}; d.prototype._refreshBtnTabIndexes=function(){for(var a=this.mainContainer.find('[data-tab="true"]'),b=a.count(),c=0;c")};d.prototype._getToolbarGroupString=function(a){var b=a.groups,c;c=""+['
        • "].join("");c+=d.getToolbarElementPreString(a)+"
            ";for(var a=b.length,e=0;e"};d.getToolbarSeparatorString=function(a){return['
          • ',d.getToolbarElementPreString("row separator"),"
          • "].join("")};d.getToolbarHeaderString=function(){return'
            • Toolbars

              • Toolbar groups

                Toolbar group items

            '};d.getFirstAncestor=function(a,b){for(var c=a.getParents(),d=c.length;d--;)if(b(c[d]))return c[d];return null};d.getFirstElementIndexWith= function(a,b,c,d){for(;"up"===c?b--:++b"].join("");c+=d.getToolbarElementPreString(a.name);c+="
              ";for(var e=b?b.length:0,f=0;f"};d.prototype._getConfigButtonName=function(a){var b=this.fullToolbarEditor.editorInstance.ui.items,c;for(c in b)if(b[c].name==a)return c;return null};d.prototype.isButtonRemoved=function(a){return-1!=CKEDITOR.tools.indexOf(this.removedButtons,this._getConfigButtonName(a))}; d.prototype.getButtonString=function(a){var b=this.isButtonRemoved(a.name)?"":'checked="checked"';return['
            • "].join("")};d.getToolbarElementPreString=function(a){a=a.name?a.name:a;return['

              ', "row separator"==a?'':"",a,"

              "].join("")};d.evaluateToolbarGroupsConfig=function(a){return a=function(a){var c={},d;try{d=eval("("+a+")")}catch(f){try{d=eval(a)}catch(g){return null}}return c.toolbarGroups&&"number"===typeof c.toolbarGroups.length?JSON.stringify(c):d&&"number"===typeof d.length?JSON.stringify({toolbarGroups:d}):d&&d.toolbarGroups?JSON.stringify(d):null}(a)};return d})();rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js0000644000175000017500000001463413437512115031531 0ustar domdom"function"!=typeof Object.create&&function(){var a=function(){};Object.create=function(b){if(1
        • ');a.ui.space("contents").append(c);c=a.editable(c);c.detach=CKEDITOR.tools.override(c.detach,function(b){return function(){b.apply(this,arguments);this.remove()}});a.setData(a.getData(1),b);a.fire("contentDom")});a.dataProcessor.toHtml=function(b){return b};a.dataProcessor.toDataFormat=function(b){return b}}}); Object.keys||(Object.keys=function(){var a=Object.prototype.hasOwnProperty,b=!{toString:null}.propertyIsEnumerable("toString"),c="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "),e=c.length;return function(d){if("object"!==typeof d&&("function"!==typeof d||null===d))throw new TypeError("Object.keys called on non-object");var g=[],f;for(f in d)a.call(d,f)&&g.push(f);if(b)for(f=0;f"+ a+" "}).join("");return["
          ",a.name,"
          ",b,"
          "].join("")}).join(" "),f='
          Toolbar group
          Unused items
          ';a.length||(f="

          All items are in use.

          ");this.codeContainer.refresh();this.hintContainer.setHtml("

          Unused toolbar items

          "+f+d+"
          ")};e.prototype.getToolbarGroupByButtonName=function(a){var d=this.fullToolbarEditor.buttonNamesByGroup,f;for(f in d)for(var c=d[f],b=c.length;b--;)if(a===c[b])return f; return null};e.prototype.getUnusedButtonsArray=function(a,d,f){var d=!0===d?!0:!1,c=e.mapToolbarCfgToElementsList(a),a=Object.keys(this.fullToolbarEditor.editorInstance.ui.items),a=g.filter(a,function(a){var d="-"===a,a=void 0===f||0===a.toLowerCase().indexOf(f.toLowerCase());return!d&&a}),a=g.filter(a,function(a){return-1==CKEDITOR.tools.indexOf(c,a)});d&&a.sort();return a};e.prototype.groupButtonNamesByGroup=function(a){var d=[],f=JSON.parse(JSON.stringify(this.fullToolbarEditor.buttonNamesByGroup)), c;for(c in f){var b=f[c],b=g.filter(b,function(b){return-1!==CKEDITOR.tools.indexOf(a,b)});b.length&&d.push({name:c,buttons:b})}return d};e.mapToolbarCfgToElementsList=function(a){function d(a){return"-"!==a}for(var f=[],c=a.length,b=0;bi&&(d.style.height=i-5+"px",d.style.top=(p=g.bottom-h.top)+"px",i=e.getCursor(),b.from.ch!=i.ch&&(g=e.cursorCoords(i),d.style.left=(o=g.left)+"px",h=d.getBoundingClientRect()))}i=h.right-j;0j&&(d.style.width=j-5+"px",i-=h.right-h.left-j),d.style.left=(o=g.left-i)+"px");e.addKeyMap(this.keyMap=t(a,{moveFocus:function(a,b){c.changeActive(c.selectedHint+a,b)},setFocus:function(a){c.changeActive(a)}, menuSize:function(){return c.screenAmount()},length:k.length,close:function(){a.close()},pick:function(){c.pick()},data:b}));if(a.options.closeOnUnfocus){var m;e.on("blur",this.onBlur=function(){m=setTimeout(function(){a.close()},100)});e.on("focus",this.onFocus=function(){clearTimeout(m)})}var n=e.getScrollInfo();e.on("scroll",this.onScroll=function(){var c=e.getScrollInfo(),b=e.getWrapperElement().getBoundingClientRect(),f=p+n.top-c.top,g=f-(window.pageYOffset||(document.documentElement||document.body).scrollTop); l||(g=g+d.offsetHeight);if(g<=b.top||g>=b.bottom)return a.close();d.style.top=f+"px";d.style.left=o+n.left-c.left+"px"});f.on(d,"dblclick",function(a){if((a=s(d,a.target||a.srcElement))&&a.hintId!=null){c.changeActive(a.hintId);c.pick()}});f.on(d,"click",function(b){if((b=s(d,b.target||b.srcElement))&&b.hintId!=null){c.changeActive(b.hintId);a.options.completeOnSingleClick&&c.pick()}});f.on(d,"mousedown",function(){setTimeout(function(){e.focus()},20)});f.signal(b,"select",k[0],d.firstChild);return!0} var u="CodeMirror-hint",q="CodeMirror-hint-active";f.showHint=function(a,b,c){if(!b)return a.showHint(c);c&&c.async&&(b.async=!0);b={hint:b};if(c)for(var e in c)b[e]=c[e];return a.showHint(b)};f.defineExtension("showHint",function(a){1=this.data.list.length?a=b?this.data.list.length-1:0:0>a&&(a=b?0:this.data.list.length-1); if(this.selectedHint!=a){var c=this.hints.childNodes[this.selectedHint];c.className=c.className.replace(" "+q,"");c=this.hints.childNodes[this.selectedHint=a];c.className+=" "+q;c.offsetTopthis.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=c.offsetTop+c.offsetHeight-this.hints.clientHeight+3);f.signal(this.data,"select",this.data.list[this.selectedHint],c)}},screenAmount:function(){return Math.floor(this.hints.clientHeight/ this.hints.firstChild.offsetHeight)||1}};f.registerHelper("hint","auto",function(a,b){var c=a.getHelpers(a.getCursor(),"hint");if(c.length)for(var e=0;e,]/,closeOnUnfocus:!0,completeOnSingleClick:!1,container:null,customKeys:null,extraKeys:null};f.defineOption("hintOptions",null)});rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/lib/codemirror/show-hint.css0000644000175000017500000000127413437512115031213 0ustar domdom.CodeMirror-hints { position: absolute; z-index: 10; overflow: hidden; list-style: none; margin: 0; padding: 2px; -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); box-shadow: 2px 3px 5px rgba(0,0,0,.2); border-radius: 3px; border: 1px solid silver; background: white; font-size: 90%; font-family: monospace; max-height: 20em; overflow-y: auto; } .CodeMirror-hint { margin: 0; padding: 0 4px; border-radius: 2px; max-width: 19em; overflow: hidden; white-space: pre; color: black; cursor: pointer; } li.CodeMirror-hint-active { background: #08f; color: white; } rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/lib/codemirror/codemirror.css0000644000175000017500000001764013437512115031444 0ustar domdom/* BASICS */ .CodeMirror { /* Set height, width, borders, and global font properties here */ font-family: monospace; height: 300px; color: black; } /* PADDING */ .CodeMirror-lines { padding: 4px 0; /* Vertical padding around content */ } .CodeMirror pre { padding: 0 4px; /* Horizontal padding of content */ } .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: white; /* The little square between H and V scrollbars */ } /* GUTTER */ .CodeMirror-gutters { border-right: 1px solid #ddd; background-color: #f7f7f7; white-space: nowrap; } .CodeMirror-linenumbers {} .CodeMirror-linenumber { padding: 0 3px 0 5px; min-width: 20px; text-align: right; color: #999; white-space: nowrap; } .CodeMirror-guttermarker { color: black; } .CodeMirror-guttermarker-subtle { color: #999; } /* CURSOR */ .CodeMirror div.CodeMirror-cursor { border-left: 1px solid black; } /* Shown when moving in bi-directional text */ .CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver; } .CodeMirror.cm-fat-cursor div.CodeMirror-cursor { width: auto; border: 0; background: #7e7; } .CodeMirror.cm-fat-cursor div.CodeMirror-cursors { z-index: 1; } .cm-animate-fat-cursor { width: auto; border: 0; -webkit-animation: blink 1.06s steps(1) infinite; -moz-animation: blink 1.06s steps(1) infinite; animation: blink 1.06s steps(1) infinite; } @-moz-keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } @-webkit-keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } @keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } /* Can style cursor different in overwrite (non-insert) mode */ div.CodeMirror-overwrite div.CodeMirror-cursor {} .cm-tab { display: inline-block; text-decoration: inherit; } .CodeMirror-ruler { border-left: 1px solid #ccc; position: absolute; } /* DEFAULT THEME */ .cm-s-default .cm-keyword {color: #708;} .cm-s-default .cm-atom {color: #219;} .cm-s-default .cm-number {color: #164;} .cm-s-default .cm-def {color: #00f;} .cm-s-default .cm-variable, .cm-s-default .cm-punctuation, .cm-s-default .cm-property, .cm-s-default .cm-operator {} .cm-s-default .cm-variable-2 {color: #05a;} .cm-s-default .cm-variable-3 {color: #085;} .cm-s-default .cm-comment {color: #a50;} .cm-s-default .cm-string {color: #a11;} .cm-s-default .cm-string-2 {color: #f50;} .cm-s-default .cm-meta {color: #555;} .cm-s-default .cm-qualifier {color: #555;} .cm-s-default .cm-builtin {color: #30a;} .cm-s-default .cm-bracket {color: #997;} .cm-s-default .cm-tag {color: #170;} .cm-s-default .cm-attribute {color: #00c;} .cm-s-default .cm-header {color: blue;} .cm-s-default .cm-quote {color: #090;} .cm-s-default .cm-hr {color: #999;} .cm-s-default .cm-link {color: #00c;} .cm-negative {color: #d44;} .cm-positive {color: #292;} .cm-header, .cm-strong {font-weight: bold;} .cm-em {font-style: italic;} .cm-link {text-decoration: underline;} .cm-strikethrough {text-decoration: line-through;} .cm-s-default .cm-error {color: #f00;} .cm-invalidchar {color: #f00;} .CodeMirror-composing { border-bottom: 2px solid; } /* Default styles for common addons */ div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } .CodeMirror-activeline-background {background: #e8f2ff;} /* STOP */ /* The rest of this file contains styles related to the mechanics of the editor. You probably shouldn't touch them. */ .CodeMirror { position: relative; overflow: hidden; background: white; } .CodeMirror-scroll { overflow: scroll !important; /* Things will break if this is overridden */ /* 30px is the magic margin used to hide the element's real scrollbars */ /* See overflow: hidden in .CodeMirror */ margin-bottom: -30px; margin-right: -30px; padding-bottom: 30px; height: 100%; outline: none; /* Prevent dragging from highlighting the element */ position: relative; } .CodeMirror-sizer { position: relative; border-right: 30px solid transparent; } /* The fake, visible scrollbars. Used to force redraw during scrolling before actuall scrolling happens, thus preventing shaking and flickering artifacts. */ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { position: absolute; z-index: 6; display: none; } .CodeMirror-vscrollbar { right: 0; top: 0; overflow-x: hidden; overflow-y: scroll; } .CodeMirror-hscrollbar { bottom: 0; left: 0; overflow-y: hidden; overflow-x: scroll; } .CodeMirror-scrollbar-filler { right: 0; bottom: 0; } .CodeMirror-gutter-filler { left: 0; bottom: 0; } .CodeMirror-gutters { position: absolute; left: 0; top: 0; z-index: 3; } .CodeMirror-gutter { white-space: normal; height: 100%; display: inline-block; margin-bottom: -30px; /* Hack to make IE7 behave */ *zoom:1; *display:inline; } .CodeMirror-gutter-wrapper { position: absolute; z-index: 4; height: 100%; } .CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; } .CodeMirror-gutter-wrapper { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .CodeMirror-lines { cursor: text; min-height: 1px; /* prevents collapsing before first draw */ } .CodeMirror pre { /* Reset some styles that the rest of the page might have set */ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-width: 0; background: transparent; font-family: inherit; font-size: inherit; margin: 0; white-space: pre; word-wrap: normal; line-height: inherit; color: inherit; z-index: 2; position: relative; overflow: visible; -webkit-tap-highlight-color: transparent; } .CodeMirror-wrap pre { word-wrap: break-word; white-space: pre-wrap; word-break: normal; } .CodeMirror-linebackground { position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: 0; } .CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; } .CodeMirror-widget {} .CodeMirror-code { outline: none; } /* Force content-box sizing for the elements where we expect it */ .CodeMirror-scroll, .CodeMirror-sizer, .CodeMirror-gutter, .CodeMirror-gutters, .CodeMirror-linenumber { -moz-box-sizing: content-box; box-sizing: content-box; } .CodeMirror-measure { position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; } .CodeMirror-measure pre { position: static; } .CodeMirror div.CodeMirror-cursor { position: absolute; border-right: none; width: 0; } div.CodeMirror-cursors { visibility: hidden; position: relative; z-index: 3; } .CodeMirror-focused div.CodeMirror-cursors { visibility: visible; } .CodeMirror-selected { background: #d9d9d9; } .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } .CodeMirror-crosshair { cursor: crosshair; } .CodeMirror ::selection { background: #d7d4f0; } .CodeMirror ::-moz-selection { background: #d7d4f0; } .cm-searching { background: #ffa; background: rgba(255, 255, 0, .4); } /* IE7 hack to prevent it from returning funny offsetTops on the spans */ .CodeMirror span { *vertical-align: text-bottom; } /* Used to force a border model for a node */ .cm-force-border { padding-right: .1px; } @media print { /* Hide the cursor when printing */ .CodeMirror div.CodeMirror-cursors { visibility: hidden; } } /* See issue #2901 */ .cm-tab-wrap-hack:after { content: ''; } /* Help users use markselection to safely style text background */ span.CodeMirror-selectedtext { background: none; } rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/lib/codemirror/javascript.js0000644000175000017500000002716213437512115031271 0ustar domdom(function(m){"object"==typeof exports&&"object"==typeof module?m(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],m):m(CodeMirror)})(function(m){m.defineMode("javascript",function(oa,p){var H,l,i,t,C;function n(a,d,e){D=a;I=e;return d}function u(a,d){var e=a.next();if('"'==e||"'"==e)return d.tokenize=pa(e),d.tokenize(a,d);if("."==e&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return n("number","number");if("."==e&&a.match(".."))return n("spread","meta"); if(/[\[\]{}\(\),;\:\.]/.test(e))return n(e);if("="==e&&a.eat(">"))return n("=>","operator");if("0"==e&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),n("number","number");if(/\d/.test(e))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),n("number","number");if("/"==e){if(a.eat("*"))return d.tokenize=J,J(a,d);if(a.eat("/"))return a.skipToEnd(),n("comment","comment");if("operator"==d.lastType||"keyword c"==d.lastType||"sof"==d.lastType||/^[\[{}\(,;:]$/.test(d.lastType)){a:for(var e=!1,c,b=!1;null!=(c=a.next());){if(!e){if("/"== c&&!b)break a;"["==c?b=!0:b&&"]"==c&&(b=!1)}e=!e&&"\\"==c}a.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);return n("regexp","string-2")}a.eatWhile(K);return n("operator","operator",a.current())}if("`"==e)return d.tokenize=Q,Q(a,d);if("#"==e)return a.skipToEnd(),n("error","error");if(K.test(e))return a.eatWhile(K),n("operator","operator",a.current());if(R.test(e))return a.eatWhile(R),e=a.current(),(c=ba.propertyIsEnumerable(e)&&ba[e])&&"."!=d.lastType?n(c.type,c.style,e):n("variable","variable",e)}function pa(a){return function(d, e){var c=!1,b;if(L&&"@"==d.peek()&&d.match(qa))return e.tokenize=u,n("jsonld-keyword","meta");for(;null!=(b=d.next())&&(b!=a||c);)c=!c&&"\\"==b;c||(e.tokenize=u);return n("string","string")}}function J(a,d){for(var b=!1,c;c=a.next();){if("/"==c&&b){d.tokenize=u;break}b="*"==c}return n("comment","comment")}function Q(a,d){for(var b=!1,c;null!=(c=a.next());){if(!b&&("`"==c||"$"==c&&a.eat("{"))){d.tokenize=u;break}b=!b&&"\\"==c}return n("quasi","string-2",a.current())}function S(a,d){d.fatArrowAt&&(d.fatArrowAt= null);var b=a.string.indexOf("=>",a.start);if(!(0>b)){for(var c=0,r=!1,b=b-1;0<=b;--b){var T=a.string.charAt(b),f=ra.indexOf(T);if(0<=f&&3>f){if(!c){++b;break}if(0==--c)break}else if(3<=f&&6>f)++c;else if(R.test(T))r=!0;else{if(/["'\/]/.test(T))return;if(r&&!c){++b;break}}}r&&!c&&(d.fatArrowAt=b)}}function ca(a,d,b,c,r,f){this.indented=a;this.column=d;this.type=b;this.prev=r;this.info=f;null!=c&&(this.align=c)}function f(){for(var a=arguments.length-1;0<=a;a--)H.push(arguments[a])}function b(){f.apply(null, arguments);return!0}function v(a){function d(b){for(;b;b=b.next)if(b.name==a)return!0;return!1}var b=l;b.context?(i="def",d(b.localVars)||(b.localVars={name:a,next:b.localVars})):!d(b.globalVars)&&p.globalVars&&(b.globalVars={name:a,next:b.globalVars})}function w(){l.context={prev:l.context,vars:l.localVars};l.localVars=sa}function x(){l.localVars=l.context.vars;l.context=l.context.prev}function g(a,b){var e=function(){var c=l,e=c.indented;if("stat"==c.lexical.type)e=c.lexical.indented;else for(var f= c.lexical;f&&")"==f.type&&f.align;f=f.prev)e=f.indented;c.lexical=new ca(e,t.column(),a,null,c.lexical,b)};e.lex=!0;return e}function h(){var a=l;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function j(a){function d(e){return e==a?b():";"==a?f():b(d)}return d}function o(a,d){return"var"==a?b(g("vardef",d.length),U,j(";"),h):"keyword a"==a?b(g("form"),k,o,h):"keyword b"==a?b(g("form"),o,h):"{"==a?b(g("}"),V,h):";"==a?b():"if"==a?("else"==l.lexical.info&& l.cc[l.cc.length-1]==h&&l.cc.pop()(),b(g("form"),k,o,h,da)):"function"==a?b(s):"for"==a?b(g("form"),ea,o,h):"variable"==a?b(g("stat"),ta):"switch"==a?b(g("form"),k,g("}","switch"),j("{"),V,h,h):"case"==a?b(k,j(":")):"default"==a?b(j(":")):"catch"==a?b(g("form"),w,j("("),W,j(")"),o,h,x):"module"==a?b(g("form"),w,ua,x,h):"class"==a?b(g("form"),va,h):"export"==a?b(g("form"),wa,h):"import"==a?b(g("form"),xa,h):f(g("stat"),k,j(";"),h)}function k(a){return fa(a,!1)}function q(a){return fa(a,!0)}function fa(a, d){if(l.fatArrowAt==t.start){var e=d?ga:ha;if("("==a)return b(w,g(")"),E(y,")"),h,j("=>"),e,x);if("variable"==a)return f(w,y,j("=>"),e,x)}e=d?X:M;return ya.hasOwnProperty(a)?b(e):"function"==a?b(s,e):"keyword c"==a?b(d?ia:Y):"("==a?b(g(")"),Y,N,j(")"),h,e):"operator"==a||"spread"==a?b(d?q:k):"["==a?b(g("]"),za,h,e):"{"==a?F(Aa,"}",null,e):"quasi"==a?f(O,e):b()}function Y(a){return a.match(/[;\}\)\],]/)?f():f(k)}function ia(a){return a.match(/[;\}\)\],]/)?f():f(q)}function M(a,d){return","==a?b(k): X(a,d,!1)}function X(a,d,e){var c=!1==e?M:X,r=!1==e?k:q;if("=>"==a)return b(w,e?ga:ha,x);if("operator"==a)return/\+\+|--/.test(d)?b(c):"?"==d?b(k,j(":"),r):b(r);if("quasi"==a)return f(O,c);if(";"!=a){if("("==a)return F(q,")","call",c);if("."==a)return b(Ba,c);if("["==a)return b(g("]"),Y,j("]"),h,c)}}function O(a,d){return"quasi"!=a?f():"${"!=d.slice(d.length-2)?b(O):b(k,Ca)}function Ca(a){if("}"==a)return i="string-2",l.tokenize=Q,b(O)}function ha(a){S(t,l);return f("{"==a?o:k)}function ga(a){S(t, l);return f("{"==a?o:q)}function ta(a){return":"==a?b(h,o):f(M,j(";"),h)}function Ba(a){if("variable"==a)return i="property",b()}function Aa(a,d){if("variable"==a||"keyword"==C)return i="property","get"==d||"set"==d?b(Da):b(G);if("number"==a||"string"==a)return i=L?"property":C+" property",b(G);if("jsonld-keyword"==a)return b(G);if("["==a)return b(k,j("]"),G)}function Da(a){if("variable"!=a)return f(G);i="property";return b(s)}function G(a){if(":"==a)return b(q);if("("==a)return f(s)}function E(a, d){function e(c){return","==c?(c=l.lexical,"call"==c.info&&(c.pos=(c.pos||0)+1),b(a,e)):c==d?b():b(j(d))}return function(c){return c==d?b():f(a,e)}}function F(a,d,e){for(var c=3;c!?|~^]/,qa=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/, D,I,ra="([{}])",ya={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0};H=i=l=null;C=t=void 0;var sa={name:"this",next:{name:"arguments"}};h.lex=!0;return{startState:function(a){a={tokenize:u,lastType:"sof",cc:[],lexical:new ca((a||0)-A,0,"block",!1),localVars:p.localVars,context:p.localVars&&{vars:p.localVars},indented:0};p.globalVars&&"object"==typeof p.globalVars&&(a.globalVars=p.globalVars);return a},token:function(a,b){a.sol()&&(b.lexical.hasOwnProperty("align")|| (b.lexical.align=!1),b.indented=a.indentation(),S(a,b));if(b.tokenize!=J&&a.eatSpace())return null;var e=b.tokenize(a,b);if("comment"==D)return e;b.lastType="operator"==D&&("++"==I||"--"==I)?"incdec":D;var c;a:{var f=D,h=I,g=b.cc;l=b;t=a;i=null;H=g;C=e;b.lexical.hasOwnProperty("align")||(b.lexical.align=!0);for(;;)if((g.length?g.pop():B?k:o)(f,h)){for(;g.length&&g[g.length-1].lex;)g.pop()();if(i){c=i;break a}if(c="variable"==f)b:{for(c=b.localVars;c;c=c.next)if(c.name==h){c=!0;break b}for(f=b.context;f;f= f.prev)for(c=f.vars;c;c=c.next)if(c.name==h){c=!0;break b}c=void 0}if(c){c="variable-2";break a}c=e;break a}}return c},indent:function(a,b){if(a.tokenize==J)return m.Pass;if(a.tokenize!=u)return 0;var e=b&&b.charAt(0),c=a.lexical;if(!/^\s*else\b/.test(b))for(var f=a.cc.length-1;0<=f;--f){var g=a.cc[f];if(g==h)c=c.prev;else if(g!=da)break}"stat"==c.type&&"}"==e&&(c=c.prev);na&&(")"==c.type&&"stat"==c.prev.type)&&(c=c.prev);f=c.type;g=e==f;return"vardef"==f?c.indented+("operator"==a.lastType||","== a.lastType?c.info+1:0):"form"==f&&"{"==e?c.indented:"form"==f?c.indented+A:"stat"==f?c.indented+("operator"==a.lastType||","==a.lastType||K.test(b.charAt(0))||/[,.]/.test(b.charAt(0))?na||A:0):"switch"==c.info&&!g&&!1!=p.doubleIndentSwitch?c.indented+(/^(?:case|default)\b/.test(b)?A:2*A):c.align?c.column+(g?0:1):c.indented+(g?0:A)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:B?null:"/*",blockCommentEnd:B?null:"*/",lineComment:B?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``", helperType:B?"json":"javascript",jsonldMode:L,jsonMode:B}});m.registerHelper("wordChars","javascript",/[\w$]/);m.defineMIME("text/javascript","javascript");m.defineMIME("text/ecmascript","javascript");m.defineMIME("application/javascript","javascript");m.defineMIME("application/x-javascript","javascript");m.defineMIME("application/ecmascript","javascript");m.defineMIME("application/json",{name:"javascript",json:!0});m.defineMIME("application/x-json",{name:"javascript",json:!0});m.defineMIME("application/ld+json", {name:"javascript",jsonld:!0});m.defineMIME("text/typescript",{name:"javascript",typescript:!0});m.defineMIME("application/typescript",{name:"javascript",typescript:!0})});rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/lib/codemirror/codemirror.js0000644000175000017500000044460313437512115031273 0ustar domdom(function(m){if("object"==typeof exports&&"object"==typeof module)module.exports=m();else{if("function"==typeof define&&define.amd)return define([],m);this.CodeMirror=m()}})(function(){function m(a,b){if(!(this instanceof m))return new m(a,b);this.options=b=b?S(b):{};S(jf,b,!1);rc(b);var c=b.value;"string"==typeof c&&(c=new M(c,b.mode));this.doc=c;var d=new m.inputStyles[b.inputStyle](this),d=this.display=new kf(a,c,d);d.wrapper.CodeMirror=this;sd(this);td(this);b.lineWrapping&&(this.display.wrapper.className+= " CodeMirror-wrap");b.autofocus&&!Xa&&d.input.focus();ud(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,draggingText:!1,highlight:new Ya,keySeq:null,specialChars:null};var e=this;y&&11>z&&setTimeout(function(){e.display.input.reset(true)},20);lf(this);vd||(mf(),vd=!0);Fa(this);this.curOp.forceUpdate=!0;wd(this,c);b.autofocus&&!Xa||e.hasFocus()?setTimeout(Za(sc,this),20):$a(this);for(var f in Ga)if(Ga.hasOwnProperty(f))Ga[f](this, b[f],xd);yd(this);b.finishInit&&b.finishInit(this);for(c=0;cz&&(this.gutters.style.zIndex=-1,this.scroller.style.paddingRight= 0);if(!E&&(!sa||!Xa))this.scroller.draggable=!0;a&&(a.appendChild?a.appendChild(this.wrapper):a(this.wrapper));this.reportedViewFrom=this.reportedViewTo=this.viewFrom=this.viewTo=b.first;this.view=[];this.externalMeasured=this.renderedView=null;this.lastWrapHeight=this.lastWrapWidth=this.viewOffset=0;this.updateLineNumbers=null;this.nativeBarWidth=this.barHeight=this.barWidth=0;this.scrollbarsClipped=!1;this.lineNumWidth=this.lineNumInnerWidth=this.lineNumChars=null;this.alignWidgets=!1;this.maxLine= this.cachedCharWidth=this.cachedTextHeight=this.cachedPaddingH=null;this.maxLineLength=0;this.maxLineChanged=!1;this.wheelDX=this.wheelDY=this.wheelStartX=this.wheelStartY=null;this.shift=!1;this.activeTouch=this.selForContextMenu=null;c.init(this)}function uc(a){a.doc.mode=m.getMode(a.options,a.doc.modeOption);ab(a)}function ab(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null);a.styles&&(a.styles=null)});a.doc.frontier=a.doc.first;bb(a,100);a.state.modeGen++;a.curOp&&N(a)}function Ad(a){var b= ta(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/cb(a.display)-3);return function(e){if(ua(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;gb.maxLineLength&&(b.maxLineLength=d,b.maxLine=a)})}function rc(a){var b=G(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]): -1z&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function Ac(){}function ud(a){a.display.scrollbars&& (a.display.scrollbars.clear(),a.display.scrollbars.addClass&&gb(a.display.wrapper,a.display.scrollbars.addClass));a.display.scrollbars=new m.scrollbarModel[a.options.scrollbarStyle](function(b){a.display.wrapper.insertBefore(b,a.display.scrollbarFiller);p(b,"mousedown",function(){a.state.focused&&setTimeout(function(){a.display.input.focus()},0)});b.setAttribute("cm-not-content","true")},function(b,c){c=="horizontal"?Ia(a,b):hb(a,b)},a);a.display.scrollbars.addClass&&ib(a.display.wrapper,a.display.scrollbars.addClass)} function Ja(a,b){b||(b=fb(a));var c=a.display.barWidth,d=a.display.barHeight;Bd(a,b);for(var e=0;4>e&&c!=a.display.barWidth||d!=a.display.barHeight;e++)c!=a.display.barWidth&&a.options.lineWrapping&&Hb(a),Bd(a,fb(a)),c=a.display.barWidth,d=a.display.barHeight}function Bd(a,b){var c=a.display,d=c.scrollbars.update(b);c.sizer.style.paddingRight=(c.barWidth=d.right)+"px";c.sizer.style.paddingBottom=(c.barHeight=d.bottom)+"px";d.right&&d.bottom?(c.scrollbarFiller.style.display="block",c.scrollbarFiller.style.height= d.bottom+"px",c.scrollbarFiller.style.width=d.right+"px"):c.scrollbarFiller.style.display="";d.bottom&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display="block",c.gutterFiller.style.height=d.bottom+"px",c.gutterFiller.style.width=b.gutterWidth+"px"):c.gutterFiller.style.display=""}function Bc(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop,d=Math.floor(d-a.lineSpace.offsetTop),e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,d=xa(b,d), e=xa(b,e);if(c&&c.ensure){var f=c.ensure.from.line,c=c.ensure.to.line;f=e&&(d=xa(b,ga(r(b,c))-a.wrapper.clientHeight),e=c)}return{from:d,to:Math.max(e,d+1)}}function wc(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=Cc(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&c.renderedView==c.view&&0==Cd(a))return!1;yd(a)&&(ma(a),b.dims=Dc(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);c.viewFromf-c.viewFrom&&(f=Math.max(d.first, c.viewFrom));c.viewTo>g&&20>c.viewTo-g&&(g=Math.min(e,c.viewTo));na&&(f=Fc(a.doc,f),g=Dd(a.doc,g));d=f!=c.viewFrom||g!=c.viewTo||c.lastWrapHeight!=b.wrapperHeight||c.lastWrapWidth!=b.wrapperWidth;e=a.display;0==e.view.length||f>=e.viewTo||g<=e.viewFrom?(e.view=Jb(a,f,g),e.viewFrom=f):(e.viewFrom>f?e.view=Jb(a,f,e.viewFrom).concat(e.view):e.viewFromg&&(e.view=e.view.slice(0,ya(a,g)));e.viewTo= g;c.viewOffset=ga(r(a.doc,c.viewFrom));a.display.mover.style.top=c.viewOffset+"px";g=Cd(a);if(!d&&0==g&&!b.force&&c.renderedView==c.view&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;f=aa();4=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!Ec(a,b))break;Hb(a);d=fb(a);jb(a);Hc(a,d);Ja(a,d)}b.signal(a,"update",a);if(a.display.viewFrom!=a.display.reportedViewFrom|| a.display.viewTo!=a.display.reportedViewTo)b.signal(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo}function Ic(a,b){var c=new Ib(a,b);if(Ec(a,c)){Hb(a);Ed(a,c);var d=fb(a);jb(a);Hc(a,d);Ja(a,d);c.finish()}}function Hc(a,b){a.display.sizer.style.minHeight=b.docHeight+"px";var c=b.docHeight+a.display.barHeight;a.display.heightForcer.style.top=c+"px";a.display.gutters.style.height=Math.max(c+$(a),b.clientHeight)+ "px"}function Hb(a){for(var a=a.display,b=a.lineDiv.offsetTop,c=0;cz){var f=d.node.offsetTop+d.node.offsetHeight;e=f-b;b=f}else e=d.node.getBoundingClientRect(),e=e.bottom-e.top;f=d.line.height-e;2>e&&(e=ta(a));if(0.001f)if(Z(d.line,e),Fd(d.line),d.rest)for(e=0;ez&&(a.node.style.zIndex=2));return a.node}function Hd(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):Kd(a,b)}function Jc(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line.bgClass;b&&(b+=" CodeMirror-linebackground"); if(a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),a.background=null);else if(b){var c=Kb(a);a.background=c.insertBefore(q("div",null,b),c.firstChild)}a.line.wrapClass?Kb(a).className=a.line.wrapClass:a.node!=a.text&&(a.node.className="");a.text.className=(a.textClass?a.textClass+" "+(a.line.textClass||""):a.line.textClass)||""}function Id(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);var e=b.line.gutterMarkers;if(a.options.lineNumbers|| e){var f=Kb(b),g=b.gutter=q("div",null,"CodeMirror-gutter-wrapper","left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px; width: "+d.gutterTotalWidth+"px");a.display.input.setUneditable(g);f.insertBefore(g,b.text);b.line.gutterClass&&(g.className+=" "+b.line.gutterClass);if(a.options.lineNumbers&&(!e||!e["CodeMirror-linenumbers"]))b.lineNumber=g.appendChild(q("div",""+a.options.lineNumberFormatter(c+a.options.firstLineNumber),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+d.gutterLeft["CodeMirror-linenumbers"]+ "px; width: "+a.display.lineNumInnerWidth+"px"));if(e)for(b=0;bv(a,b)?b:a}function Mb(a,b){return 0>v(a,b)?a:b}function Md(a){a.state.focused||(a.display.input.focus(),sc(a))}function Nb(a){return a.options.readOnly||a.doc.cantEdit}function Kc(a,b,c,d,e){var f=a.doc;a.display.shift=!1;d||(d=f.sel);var g=oa(b),h=null;a.state.pasteIncoming&&1j.head.ch&&(!i||d.ranges[i-1].head.line!=j.head.line)){j=a.getModeAt(j.head);k=pa(k);n=!1;if(j.electricChars)for(var s=0;se?i.map:j[e],g=0;ge?a.line:a.rest[e]);e=f[g]+d;if(0>d||h!=b)e=f[g+(d?1:0)];return o(c,e)}}}var e=a.text.firstChild,f=!1;if(!b||!Oc(e,b))return Na(o(C(a.line),0),!0);if(b==e&&(f=!0,b=e.childNodes[c],c=0,!b))return c=a.rest?x(a.rest):a.line,Na(o(C(c),c.text.length),f);var g=3==b.nodeType?b:null,h=b;!g&&(1==b.childNodes.length&& 3==b.firstChild.nodeType)&&(g=b.firstChild,c&&(c=g.nodeValue.length));for(;h.parentNode!=e;)h=h.parentNode;var i=a.measure,j=i.maps;if(b=d(g,h,c))return Na(b,f);e=h.nextSibling;for(g=g?g.nodeValue.length-c:0;e;e=e.nextSibling){if(b=d(e,e.firstChild,0))return Na(o(b.line,b.ch-g),f);g+=e.textContent.length}h=h.previousSibling;for(g=c;h;h=h.previousSibling){if(b=d(h,h.firstChild,-1))return Na(o(b.line,b.ch+g),f);g+=e.textContent.length}}function qf(a,b,c,d,e){function f(a){return function(b){return b.id== a}}function g(b){if(1==b.nodeType){var c=b.getAttribute("cm-text");if(null!=c)""==c&&(c=b.textContent.replace(/\u200b/g,"")),h+=c;else{var c=b.getAttribute("cm-marker"),n;if(c){if(b=a.findMarks(o(d,0),o(e+1,0),f(+c)),b.length&&(n=b[0].find()))h+=za(a.doc,n.from,n.to).join("\n")}else if("false"!=b.getAttribute("contenteditable")){for(n=0;nc)return o(c,r(a,c).text.length);var c=r(a,b.line).text.length,d=b.ch,c=null==d||d>c?o(b.line,c):0>d?o(b.line,0):b;return c}function mb(a,b){return b>=a.first&&bv(c,a),b!=0>v(d,a)?(a=c,c=d):b!=0>v(c,d)&&(c=d)),new w(a,c)):new w(d||c,c)}function Qb(a,b,c,d){A(a,new ha([nb(a,a.sel.primary(),b,c)],0),d)}function Td(a, b,c){for(var d=[],e=0;ev(b.primary().head,a.sel.primary().head)?-1:1);Wd(a,Xd(a,b,d,!0));!(c&&!1===c.scroll)&&a.cm&&La(a.cm)}function Wd(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=!0,Yd(a.cm)),H(a,"cursorActivity",a))}function Zd(a){Wd(a,Xd(a,a.sel,null, !1),ca)}function Xd(a,b,c,d){for(var e,f=0;f=f.ch: j.to>f.ch))){if(d&&(F(k,"beforeCursorEnter"),k.explicitlyCleared))if(h.markedSpans){--i;continue}else break;if(k.atomic){i=k.find(0>g?-1:1);if(0==v(i,f)&&(i.ch+=g,0>i.ch?i=i.line>a.first?t(a,o(i.line-1)):null:i.ch>h.text.length&&(i=i.lineb&&(b=0);b=Math.round(b);d=Math.round(d);h.appendChild(q("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?k-a:c)+"px; height: "+(d-b)+"px"))}function e(b,c,e){var f=r(g,b),h=f.text.length,i,n;tf(V(f), c||0,null==e?h:e,function(g,m,q){var r=Ub(a,o(b,g),"div",f,"left"),p,t;g==m?(p=r,q=t=r.left):(p=Ub(a,o(b,m-1),"div",f,"right"),"rtl"==q&&(q=r,r=p,p=q),q=r.left,t=p.right);null==c&&0==g&&(q=j);3n.bottom||p.bottom==n.bottom&&p.right>n.right)n=p;qa.options.cursorBlinkRate&&(b.cursorDiv.style.visibility="hidden")}}function bb(a,b){a.doc.mode.startState&&a.doc.frontier=a.display.viewTo)){var c=+new Date+ a.options.workTime,d=Oa(b.mode,ob(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=be(a,f,d,true);f.styles=h.styles;var i=f.styleClasses;if(h=h.classes)f.styleClasses=h;else if(i)f.styleClasses=null;i=!g||g.length!=f.styles.length||i!=h&&(!i||!h||i.bgClass!=h.bgClass||i.textClass!=h.textClass);for(h=0;!i&&hc){bb(a,a.options.workDelay);return true}});e.length&&Q(a,function(){for(var b=0;bg;--b){if(b<=f.first)return f.first;var h=r(f,b-1);if(h.stateAfter&&(!c||b<=f.frontier))return b;h=X(h.text,null,a.options.tabSize);if(null==e||d>h)e=b-1,d=h}return e}function ob(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0; var f=vf(a,b,c),g=f>d.first&&r(d,f-1).stateAfter,g=g?Oa(d.mode,g):wf(d.mode);d.iter(f,b,function(c){Rc(a,c.text,g);c.stateAfter=f==b-1||0==f%5||f>=e.viewFrom&&fc)return{map:a.measure.maps[d],cache:a.measure.caches[d],before:!0}} function Nc(a,b){if(b>=a.display.viewFrom&&b=c.lineN&&bk;k++){for(;h&&pb(b.line.text.charAt(i.coverStart+h));)--h;for(;i.coverStart+jz&&0==h&&j==i.coverEnd-i.coverStart)l=d.parentNode.getBoundingClientRect();else if(y&&a.options.lineWrapping){var s=Aa(d,h,j).getClientRects();l=s.length?s["right"==g?s.length-1:0]:Tc}else l=Aa(d,h,j).getBoundingClientRect()||Tc;if(l.left||l.right||0==h)break;j= h;h-=1;c="right"}if(y&&11>z){if(!(s=!window.screen))if(!(s=null==screen.logicalXDPI))if(!(s=screen.logicalXDPI==screen.deviceXDPI))null!=Uc?s=Uc:(k=R(a.display.measure,q("span","x")),s=k.getBoundingClientRect(),k=Aa(k,0,1).getBoundingClientRect(),s=Uc=1z&&!h&&(!l||!l.left&&!l.right))l=(l=d.parentNode.getClientRects()[0])?{left:l.left,right:l.left+cb(a.display),top:l.top,bottom:l.bottom}:Tc;s=l.top-b.rect.top;d=l.bottom-b.rect.top;h=(s+d)/2;g=b.view.measure.heights;for(k=0;kb)f=j-i,e=f-1,b>=j&&(g="right");if(null!=e){d=a[h+2];if(i==j&&c==(d.insertLeft?"left":"right"))g=c;if("left"==c&&0==e)for(;h&&a[h-2]==a[h-3]&&a[h-1].insertLeft;)d=a[(h-=3)+2],g="left";if("right"==c&&e==j-i)for(;h< a.length-3&&a[h+3]==a[h+4]&&!a[h+5].insertLeft;)d=a[(h+=3)+2],g="right";break}}return{node:d,start:e,end:f,collapse:g,coverStart:i,coverEnd:j}}function de(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,a.rest))for(var b=0;bc.from? g(a-1):g(a,d)}d=d||r(a.doc,b.line);e||(e=Vb(a,d));var i=V(d),b=b.ch;if(!i)return g(b);var j=Ob(i,b),j=h(b,j);null!=rb&&(j.other=h(b,rb));return j}function ge(a,b){var c=0,b=t(a.doc,b);a.options.lineWrapping||(c=cb(a.display)*b.ch);var d=r(a.doc,b.line),e=ga(d)+a.display.lineSpace.offsetTop;return{left:c,right:c,top:e,bottom:e+d.height}}function Wb(a,b,c,d){a=o(a,b);a.xRel=d;c&&(a.outside=!0);return a}function Xc(a,b,c){var d=a.doc,c=c+a.display.viewOffset;if(0>c)return Wb(d.first,0,!0,-1);var e=xa(d, c),f=d.first+d.size-1;if(e>f)return Wb(d.first+d.size-1,r(d,f).text.length,!0,1);0>b&&(b=0);for(d=r(d,e);;)if(e=xf(a,d,e,b,c),f=(d=wa(d,!1))&&d.find(0,!0),d&&(e.ch>f.from.ch||e.ch==f.from.ch&&0d.bottom)return d.left-i;if(gm)return Wb(c,l,q,1);for(;;){if(k?l==e||l==Yc(b,e,1):1>=l-e){k=dd?-1:1d){l=p;m=t;if(q=h)m+=1E3;n=r}else e=p,s=t,I=h,n-=r}}function ta(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==Ba){Ba=q("pre");for(var b=0;49>b;++b)Ba.appendChild(document.createTextNode("x")),Ba.appendChild(q("br"));Ba.appendChild(document.createTextNode("x"))}R(a.measure, Ba);b=Ba.offsetHeight/50;3=d.viewTo)|| d.maxLineChanged&&c.options.lineWrapping;e.update=e.mustUpdate&&new Ib(c,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}for(b=0;bj;j++){var k=!1,n=ia(c,h),l=!g||g==h?n:ia(c,g),l=Zb(c,Math.min(n.left,l.left),Math.min(n.top,l.top)-i,Math.max(n.left,l.left),Math.max(n.bottom,l.bottom)+i),s=c.doc.scrollTop,I=c.doc.scrollLeft;null!=l.scrollTop&&(hb(c,l.scrollTop),1g.top+j.top)h=!0;else if(g.bottom+j.top>(window.innerHeight||document.documentElement.clientHeight))h=!1;null!=h&&!zf&&(g=q("div","​",null,"position: absolute; top: "+(g.top-i.viewOffset-c.display.lineSpace.offsetTop)+"px; height: "+(g.bottom-g.top+$(c)+i.barHeight)+"px; left: "+g.left+"px; width: 2px;"),c.display.lineSpace.appendChild(g),g.scrollIntoView(h),c.display.lineSpace.removeChild(g))}}h=e.maybeHiddenMarkers;g=e.maybeUnhiddenMarkers;if(h)for(i=0;ib))e.updateLineNumbers=b;a.curOp.viewChanged=!0;if(b>=e.viewTo)na&&Fc(a.doc,b)e.viewFrom?ma(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)ma(a);else if(b<=e.viewFrom){var f=$b(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):ma(a)}else if(c>= e.viewTo)(f=$b(a,b,b,-1))?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):ma(a);else{var f=$b(a,b,b,-1),g=$b(a,c,c+d,1);f&&g?(e.view=e.view.slice(0,f.index).concat(Jb(a,f.lineN,g.lineN)).concat(e.view.slice(g.index)),e.viewTo+=d):ma(a)}if(a=e.externalMeasured)c=e.lineN&&b=d.viewTo|| (a=d.view[ya(a,b)],null!=a.node&&(a=a.changes||(a.changes=[]),-1==G(a,c)&&a.push(c)))}function ma(a){a.display.viewFrom=a.display.viewTo=a.doc.first;a.display.view=[];a.display.viewOffset=0}function ya(a,b){if(b>=a.display.viewTo)return null;b-=a.display.viewFrom;if(0>b)return null;for(var c=a.display.view,d=0;db)return d}function $b(a,b,c,d){var e=ya(a,b),f=a.display.view;if(!na||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var g=0,h=a.display.viewFrom;g< e;g++)h+=f[g].size;if(h!=b){if(0d?0:f.length-1))return null;c+=d*f[e-(0>d?1:0)].size;e+=d}return{index:e,lineN:c}}function Cd(a){for(var a=a.display.view,b=0,c=0;cz?p(d.scroller,"dblclick",B(a,function(b){if(!ea(a,b)){var c=Qa(a,b);c&&(!Zc(a,b,"gutterClick",!0,H)&&!ka(a.display,b))&&(L(b),b=a.findWordAt(c),Qb(a.doc,b.anchor,b.head))}})):p(d.scroller,"dblclick",function(b){ea(a,b)||L(b)});$c||p(d.scroller,"contextmenu",function(b){ie(a,b)});var e,f={end:0};p(d.scroller,"touchstart",function(a){var b;1!=a.touches.length?b=!1:(b=a.touches[0],b=1>=b.radiusX&& 1>=b.radiusY);b||(clearTimeout(e),b=+new Date,d.activeTouch={start:b,moved:!1,prev:300>=b-f.end?f:null},1==a.touches.length&&(d.activeTouch.left=a.touches[0].pageX,d.activeTouch.top=a.touches[0].pageY))});p(d.scroller,"touchmove",function(){d.activeTouch&&(d.activeTouch.moved=!0)});p(d.scroller,"touchend",function(e){var f=d.activeTouch;if(f&&!ka(d,e)&&null!=f.left&&!f.moved&&300>new Date-f.start){var g=a.coordsChar(d.activeTouch,"page"),f=!f.prev||c(f,f.prev)?new w(g,g):!f.prev.prev||c(f,f.prev.prev)? a.findWordAt(g):new w(o(g.line,0),t(a.doc,o(g.line+1,0)));a.setSelection(f.anchor,f.head);a.focus();L(e)}b()});p(d.scroller,"touchcancel",b);p(d.scroller,"scroll",function(){d.scroller.clientHeight&&(hb(a,d.scroller.scrollTop),Ia(a,d.scroller.scrollLeft,!0),F(a,"scroll",a))});p(d.scroller,"mousewheel",function(b){je(a,b)});p(d.scroller,"DOMMouseScroll",function(b){je(a,b)});p(d.wrapper,"scroll",function(){d.wrapper.scrollTop=d.wrapper.scrollLeft=0});d.dragFunctions={simple:function(b){ea(a,b)||ad(b)}, start:function(b){if(y&&(!a.state.draggingText||100>+new Date-ke))ad(b);else if(!ea(a,b)&&!ka(a.display,b)&&(b.dataTransfer.setData("Text",a.getSelection()),b.dataTransfer.setDragImage&&!le)){var c=q("img",null,null,"position: fixed; left: 0; top: 0;");c.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";Y&&(c.width=c.height=1,a.display.wrapper.appendChild(c),c._top=c.offsetTop);b.dataTransfer.setDragImage(c,0,0);Y&&c.parentNode.removeChild(c)}},drop:B(a,Af)};var g=d.input.getField(); p(g,"keyup",function(b){me.call(a,b)});p(g,"keydown",B(a,ne));p(g,"keypress",B(a,oe));p(g,"focus",Za(sc,a));p(g,"blur",Za($a,a))}function Bf(a){var b=a.display;b.lastWrapHeight==b.wrapper.clientHeight&&b.lastWrapWidth==b.wrapper.clientWidth||(b.cachedCharWidth=b.cachedTextHeight=b.cachedPaddingH=null,b.scrollbarsClipped=!1,a.setSize())}function ka(a,b){for(var c=b.target||b.srcElement;c!=a.wrapper;c=c.parentNode)if(!c||1==c.nodeType&&"true"==c.getAttribute("cm-ignore-events")||c.parentNode==a.sizer&& c!=a.mover)return!0}function Qa(a,b,c,d){var e=a.display;if(!c&&"true"==(b.target||b.srcElement).getAttribute("cm-not-content"))return null;var f,g,c=e.lineSpace.getBoundingClientRect();try{f=b.clientX-c.left,g=b.clientY-c.top}catch(h){return null}var b=Xc(a,f,g),i;if(d&&1==b.xRel&&(i=r(a.doc,b.line).text).length==b.ch)d=X(i,i.length,a.options.tabSize)-i.length,b=o(b.line,Math.max(0,Math.round((f-ae(a.display).left)/cb(a.display))-d));return b}function he(a){var b=this.display;if(!(b.activeTouch&& b.input.supportsTouch()||ea(this,a)))if(b.shift=a.shiftKey,ka(b,a))E||(b.scroller.draggable=!1,setTimeout(function(){b.scroller.draggable=!0},100));else if(!Zc(this,a,"gutterClick",!0,H)){var c=Qa(this,a);window.focus();switch(pe(a)){case 1:c?Cf(this,a,c):(a.target||a.srcElement)==b.scroller&&L(a);break;case 2:E&&(this.state.lastMiddleDown=+new Date);c&&Qb(this.doc,c);setTimeout(function(){b.input.focus()},20);L(a);break;case 3:$c?ie(this,a):Df(this)}}}function Cf(a,b,c){y?setTimeout(Za(Md,a),0): a.curOp.focus=aa();var d=+new Date,e;ac&&ac.time>d-400&&0==v(ac.pos,c)?e="triple":bc&&bc.time>d-400&&0==v(bc.pos,c)?(e="double",ac={time:d,pos:c}):(e="single",bc={time:d,pos:c});var d=a.doc.sel,f=T?b.metaKey:b.ctrlKey,g;a.options.dragDrop&&Ef&&!Nb(a)&&"single"==e&&-1<(g=d.contains(c))&&!d.ranges[g].empty()?Ff(a,b,c,f):Gf(a,b,c,e,f)}function Ff(a,b,c,d){var e=a.display,f=+new Date,g=B(a,function(h){E&&(e.scroller.draggable=!1);a.state.draggingText=!1;fa(document,"mouseup",g);fa(e.scroller,"drop",g); 10>Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)&&(L(h),!d&&+new Date-200q&&e.push(new w(o(h,q),o(h,qe(I,g,f))))}e.length||e.push(new w(c,c));A(j,W(l.ranges.slice(0,n).concat(e),n),{origin:"*mouse",scroll:!1});a.scrollIntoView(b)}else e=k,f=e.anchor,i=b,"single"!=d&&(b="double"==d?a.findWordAt(b):new w(o(b.line,0),t(j,o(b.line+1,0))),0=h.to||e.lineq.bottom?20:0;k&&setTimeout(B(a,function(){u==c&&(i.scroller.scrollTop+=k,g(b))}),50)}}function h(a){u=Infinity;L(a);i.input.focus();fa(document,"mousemove",y);fa(document,"mouseup",x);j.history.lastSelOrigin= null}var i=a.display,j=a.doc;L(b);var k,n,l=j.sel,s=l.ranges;e&&!b.shiftKey?(n=j.sel.contains(c),k=-1=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&L(b);var d=a.display,i=d.lineDiv.getBoundingClientRect(); if(g>i.bottom||!P(a,c))return cd(b);g-=i.top-d.viewOffset;for(i=0;i=f)return f=xa(a.doc,g),e(a,c,a,f,a.options.gutters[i],b),cd(b)}}function Af(a){var b=this;if(!ea(b,a)&&!ka(b.display,a)){L(a);y&&(ke=+new Date);var c=Qa(b,a,!0),d=a.dataTransfer.files;if(c&&!Nb(b))if(d&&d.length&&window.FileReader&&window.File)for(var e=d.length,f=Array(e),g=0,a=function(a,d){var h=new FileReader;h.onload=B(b,function(){f[d]= h.result;if(++g==e){c=t(b.doc,c);var a={from:c,to:c,text:oa(f.join("\n")),origin:"paste"};Ka(b.doc,a);Ud(b.doc,ba(c,pa(a)))}});h.readAsText(a)},h=0;hMath.abs(a.doc.scrollTop-b)||(a.doc.scrollTop=b,sa||Ic(a,{top:b}),a.display.scroller.scrollTop!=b&&(a.display.scroller.scrollTop=b),a.display.scrollbars.setScrollTop(b),sa&&Ic(a),bb(a,100))}function Ia(a,b,c){if(!(c?b==a.doc.scrollLeft:2>Math.abs(a.doc.scrollLeft-b)))b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,wc(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft= b),a.display.scrollbars.setScrollLeft(b)}function je(a,b){var c=re(b),d=c.x,c=c.y,e=a.display,f=e.scroller;if(d&&f.scrollWidth>f.clientWidth||c&&f.scrollHeight>f.clientHeight){if(c&&T&&E){var g=b.target,h=e.view;a:for(;g!=f;g=g.parentNode)for(var i=0;ig?h=Math.max(0,h+g-50):i=Math.min(a.doc.height,i+g+50),Ic(a,{top:h,bottom:i})),20>cc)null==e.wheelStartX?(e.wheelStartX=f.scrollLeft,e.wheelStartY=f.scrollTop,e.wheelDX=d,e.wheelDY=c,setTimeout(function(){if(e.wheelStartX!=null){var a=f.scrollLeft-e.wheelStartX,b=f.scrollTop-e.wheelStartY,a=b&&e.wheelDY&&b/e.wheelDY||a&&e.wheelDX&&a/e.wheelDX;e.wheelStartX=e.wheelStartY=null;if(a){O=(O*cc+a)/(cc+1);++cc}}}, 200)):(e.wheelDX+=d,e.wheelDY+=c)}}function dc(a,b,c){if("string"==typeof b&&(b=ec[b],!b))return!1;a.display.input.ensurePolled();var d=a.display.shift,e=!1;try{Nb(a)&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=se}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function Hf(a,b,c){for(var d=0;dz&&27==a.keyCode)&&(a.returnValue=!1);var b=a.keyCode;this.display.shift=16==b||a.shiftKey;var c=te(this,a);Y&&(dd=c?b:null,!c&&(88==b&&!ue&&(T?a.metaKey:a.ctrlKey))&&this.replaceSelection("",null,"cut"));18==b&&!/\bCodeMirror-crosshair\b/.test(this.display.lineDiv.className)&&Mf(this)}}function Mf(a){function b(a){if(18== a.keyCode||!a.altKey)gb(c,"CodeMirror-crosshair"),fa(document,"keyup",b),fa(document,"mouseover",b)}var c=a.display.lineDiv;ib(c,"CodeMirror-crosshair");p(document,"keyup",b);p(document,"mouseover",b)}function me(a){16==a.keyCode&&(this.doc.sel.shift=!1);ea(this,a)}function oe(a){if(!ka(this.display,a)&&!ea(this,a)&&!(a.ctrlKey&&!a.altKey||T&&a.metaKey)){var b=a.keyCode,c=a.charCode;if(Y&&b==dd)dd=null,L(a);else if(!Y||a.which&&!(10>a.which)||!te(this,a))if(b=String.fromCharCode(null==c?b:c),!Lf(this, a,b))this.display.input.onKeyPress(a)}}function Df(a){a.state.delayingBlurEvent=!0;setTimeout(function(){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1,$a(a))},100)}function sc(a){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1);"nocursor"!=a.options.readOnly&&(a.state.focused||(F(a,"focus",a),a.state.focused=!0,ib(a.display.wrapper,"CodeMirror-focused"),!a.curOp&&a.display.selForContextMenu!=a.doc.sel&&(a.display.input.reset(),E&&setTimeout(function(){a.display.input.reset(true)}, 20)),a.display.input.receivedFocus()),Qc(a))}function $a(a){a.state.delayingBlurEvent||(a.state.focused&&(F(a,"blur",a),a.state.focused=!1,gb(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){if(!a.state.focused)a.display.shift=false},150))}function ie(a,b){var c;if(!(c=ka(a.display,b)))c=P(a,"gutterContextMenu")?Zc(a,b,"gutterContextMenu",!1,F):!1;if(!c)a.display.input.onContextMenu(b)}function ve(a,b){if(0>v(a,b.from))return a;if(0>=v(a,b.to))return pa(b); var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;a.line==b.to.line&&(d+=pa(b).ch-b.to.ch);return o(c,d)}function ed(a,b){for(var c=[],d=0;da.lastLine())){if(b.from.linee&&(b={from:b.from,to:o(e,r(a,e).text.length),text:[b.text[0]],origin:b.origin});b.removed=za(a,b.from,b.to);c||(c=ed(a,b));a.cm?Of(a.cm,b,d):hd(a,b,d);Rb(a,c,ca)}}function Of(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping|| (i=C(da(r(d,f.line))),d.iter(i,g.line+1,function(a){if(a==e.maxLine)return h=!0}));-1e.maxLineLength){e.maxLine=a;e.maxLineLength=b;e.maxLineChanged=true;h=false}}),h&&(a.curOp.updateMaxLine=!0));d.frontier=Math.min(d.frontier,f.line);bb(a,400);c=b.text.length-(g.line-f.line)-1;b.full?N(a):f.line==g.line&&1==b.text.length&&!Ee(a.doc,b)?ja(a,f.line,"text"):N(a,f.line, g.line+1,c);c=P(a,"changes");if((d=P(a,"change"))||c)b={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin},d&&H(a,"change",a,b),c&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(b);a.display.selForContextMenu=null}function sb(a,b,c,d,e){d||(d=c);if(0>v(d,c))var f=d,d=c,c=f;"string"==typeof b&&(b=oa(b));Ka(a,{from:c,to:d,text:b,origin:e})}function Zb(a,b,c,d,e){var f=a.display,g=ta(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=Gc(a), j={};e-c>i&&(e=c+i);var k=a.doc.height+(f.mover.offsetHeight-f.lineSpace.offsetHeight),n=ck-g;ch+i&&(c=Math.min(c,(g?k:e)-i),c!=h&&(j.scrollTop=c));h=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft;a=la(a)-(a.options.fixedGutter?f.gutters.offsetWidth:0);(f=d-b>a)&&(d=b+a);10>b?j.scrollLeft=0:ba+h-3&&(j.scrollLeft=d+(f?0:10)-a);return j}function id(a,b,c){(null!=b||null!=c)&&hc(a);null!=b&&(a.curOp.scrollLeft= (null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b);null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function La(a){hc(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?o(b.line,b.ch-1):b,d=o(b.line,b.ch+1));a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function hc(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=ge(a,b.from),d=ge(a,b.to),b=Zb(a,Math.min(c.left,d.left),Math.min(c.top, d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(b.scrollLeft,b.scrollTop)}}function lb(a,b,c,d){var e=a.doc,f;null==c&&(c="add");"smart"==c&&(e.mode.indent?f=ob(a,b):c="prev");var g=a.options.tabSize,h=r(e,b),i=X(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var j=h.text.match(/^\s*/)[0],k;if(!d&&!/\S/.test(h.text))k=0,c="not";else if("smart"==c&&(k=e.mode.indent(f,h.text.slice(j.length),h.text),k==se||150e.first? X(r(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c);k=Math.max(0,k);c="";d=0;if(a.options.indentWithTabs)for(a=Math.floor(k/g);a;--a)d+=g,c+="\t";d=v(f.from,x(d).to);){var g=d.pop();if(0>v(g.from,f.from)){f.from=g.from;break}}d.push(f)}Q(a,function(){for(var b=d.length-1;0<=b;b--)sb(a.doc,"",d[b].from,d[b].to,"+delete");La(a)})}function jd(a,b,c,d,e){function f(b){var d=(e?Yc:Ge)(j,h,c,!0);if(null==d){if(b=!b)b=g+c,b=a.first+ a.size?b=k=!1:(g=b,b=j=r(a,b));if(b)h=e?(0>c?Yb:Xb)(j):0>c?j.text.length:0;else return k=!1}else h=d;return!0}var g=b.line,h=b.ch,i=c,j=r(a,g),k=!0;if("char"==d)f();else if("column"==d)f(!0);else if("word"==d||"group"==d)for(var n=null,d="group"==d,b=a.cm&&a.cm.getHelper(b,"wordChars"),l=!0;!(0>c)||f(!l);l=!1){var s=j.text.charAt(h)||"\n",s=jc(s,b)?"w":d&&"\n"==s?"n":!d||/\s/.test(s)?null:"p";d&&(!l&&!s)&&(s="s");if(n&&n!=s){0>c&&(c=1,f());break}s&&(n=s);if(0c?1.5:0.5)*ta(a.display))):"line"==d&&(g=0c?0>=g:g>=e.height){h.hitSide=!0;break}g+=5*c}return h}function u(a,b,c,d){m.defaults[a]=b;c&&(Ga[a]=d?function(a,b,d){d!=xd&&c(a,b,d)}:c)}function Pf(a){for(var b=a.split(/-(?!$)/),a=b[b.length- 1],c,d,e,f,g=0;g=e:j.to>e);(i||(i=[])).push(new lc(k,j.from,n?null:j.to))}}c=i;if(d)for(var h=0,l;h=f:i.to>f)||i.from==f&&"bookmark"==j.type&&(!g||i.marker.insertLeft))k=null==i.from||(j.inclusiveLeft?i.from<=f:i.fromv(g.to,e.from)||0i||!c.inclusiveLeft&&!i)&&h.push({from:g.from,to:e.from});(0Ne(d,e.marker)))d=e.marker;return d}function Ie(a,b,c,d,e){a=r(a,b);if(a=na&&a.markedSpans)for(b=0;b=i||0>=h&&0<=i))if(0>=h&&(0v(g.from,d)||f.marker.inclusiveLeft&&e.inclusiveRight))return!0}}}function da(a){for(var b;b=wa(a,!0);)a=b.find(-1,!0).line;return a}function Fc(a,b){var c=r(a,b),d=da(c);return c==d?b:C(d)}function Dd(a,b){if(b> a.lastLine())return b;var c=r(a,b),d;if(!ua(a,c))return b;for(;d=wa(c,!1);)c=d.find(1,!0).line;return C(c)+1}function ua(a,b){var c=na&&b.markedSpans;if(c)for(var d,e=0;ee;e++){d&&(d[0]=m.innerMode(a,c).mode);var f=a.token(b,c);if(b.pos>b.start)return f}throw Error("Mode "+a.name+" failed to advance stream."); }function Re(a,b,c,d){function e(a){return{start:k.start,end:k.pos,string:k.current(),type:h||null,state:a?Oa(f.mode,j):j}}var f=a.doc,g=f.mode,h,b=t(f,b),i=r(f,b.line),j=ob(a,b.line,c),k=new oc(i.text,a.options.tabSize),n;for(d&&(n=[]);(d||k.posa.options.maxHighlightLength?(h=!1,g&&Rc(a,b,d,k.pos),k.pos=b.length,n=null):n=Pe(md(c,k,d,l),f);if(l){var s=l[0].name;s&&(n="m-"+(n?s+" "+n:s))}if(!h||j!=n){for(;ia&&e.splice(h,1,a,e[h+1],d);h=h+2;i=Math.min(a,d)}if(b)if(g.opaque){e.splice(c,h-c,a,"cm-overlay "+b);h=c+2}else for(;cAa(g,1,2).getBoundingClientRect().right-h.right}if(g&&(f=V(e)))c.addToken=Xf(c.addToken,f);c.map=[];h=b!=a.display.externalMeasured&&C(e);a:{g=c;var h=Te(a,e,h),i=e.markedSpans,j=e.text,k=0;if(i)for(var n=j.length,l=0,s=1,m="",o=void 0,r=void 0,p=0,t=void 0,u=void 0,v=void 0, x=void 0,w=void 0;;){if(p==l){for(var t=u=v=x=r="",w=null,p=Infinity,z=[],B=0;Bl||A.collapsed&&D.to==l&&D.from==l)){if(null!=D.to&&(D.to!=l&&p>D.to)&&(p=D.to,u=""),A.className&&(t+=" "+A.className),A.css&&(r=A.css),A.startStyle&&D.from==l&&(v+=" "+A.startStyle),A.endStyle&&D.to==p&&(u+=" "+A.endStyle),A.title&&!x&&(x=A.title),A.collapsed&&(!w||0>Ne(w.marker,A)))w=D}else D.from> l&&p>D.from&&(p=D.from)}if(w&&(w.from||0)==l){Ve(g,(null==w.to?n+1:w.to)-l,w.marker,null==w.from);if(null==w.to)break a;w.to==l&&(w=!1)}if(!w&&z.length)for(B=0;B=n)break;for(z=Math.min(n,p);;){if(m){B=l+m.length;w||(D=B>z?m.slice(0,z-l):m,g.addToken(g,D,o?o+t:t,v,l+D.length==p?u:"",x,r));if(B>=z){m=m.slice(z-l);l=z;break}l=B;v=""}m=j.slice(k,k=h[s++]);o=Ue(h[s++],g.cm.options)}}else for(var s=1;sz?k.appendChild(q("span",[m])):k.appendChild(m);a.map.push(a.pos,a.pos+s,m);a.col+=s;a.pos+=s}if(!l)break;n+=s+1;"\t"==l[0]?(m= a.cm.options.tabSize,l=m-a.col%m,m=k.appendChild(q("span",Fe(l),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),a.col+=l):(m=a.cm.options.specialCharPlaceholder(l[0]),m.setAttribute("cm-text",l[0]),y&&9>z?k.appendChild(q("span",[m])):k.appendChild(m),a.col+=1);a.map.push(a.pos,a.pos+1,m);a.pos++}else{a.col+=b.length;var k=document.createTextNode(h);a.map.push(a.pos,a.pos+b.length,k);y&&9>z&&(j=!0);a.pos+=b.length}if(c||d||e||j||g)return b=c||"",d&&(b+=d),e&&(b+=e), d=q("span",[k],b,g),f&&(d.title=f),a.content.appendChild(d);a.content.appendChild(k)}}function Zf(a){for(var b=" ",c=0;cj&&l.from<=j)break}if(l.to>=k)return a(c,d,e,f,g,h,i);a(c,d.slice(0,l.to-j),e,f,null,h,i);f=null;d=d.slice(l.to-j);j=l.to}}}function Ve(a,b,c,d){var e=!d&&c.widgetNode; e&&a.map.push(a.pos,a.pos+b,e);!d&&a.cm.display.input.needsContentAttribute&&(e||(e=a.content.appendChild(document.createElement("span"))),e.setAttribute("cm-marker",c.id));e&&(a.cm.display.input.setUneditable(e),a.content.appendChild(e));a.pos+=b}function Ee(a,b){return 0==b.from.ch&&0==b.to.ch&&""==x(b.text)&&(!a.cm||a.cm.options.wholeLineUpdateBefore)}function hd(a,b,c,d){function e(a){return c?c[a]:null}function f(a,c,e){var f=d;a.text=c;a.stateAfter&&(a.stateAfter=null);a.styles&&(a.styles=null); null!=a.order&&(a.order=null);Le(a);Me(a,e);c=f?f(a):1;c!=a.height&&Z(a,c);H(a,"change",a,b)}function g(a,b){for(var c=a,f=[];cb||b>=a.size)throw Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(bf-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0))){var i;e.lastOp==d?(Vd(e.done),i=x(e.done)):e.done.length&&!x(e.done).ranges? i=x(e.done):1e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c);e.generation=++e.maxGeneration;e.lastModTime=e.lastSelTime=f;e.lastOp=e.lastSelOp=d;e.lastOrigin=e.lastSelOrigin= b.origin;j||F(a,"historyAdded")}function Sb(a,b){var c=x(b);(!c||!c.ranges||!c.equals(a))&&b.push(a)}function We(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans);++f})}function Sf(a){if(!a)return null;for(var b=0,c;b=b)return d+Math.min(g,b-e);e+=f-d;e+=c-e%c;d=f+1;if(e>=b)return d}}function Fe(a){for(;qc.length<=a;)qc.push(x(qc)+" ");return qc[a]}function x(a){return a[a.length-1]}function G(a,b){for(var c=0;c=b.offsetWidth&&2z))}a=qd?q("span","​"):q("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");a.setAttribute("cm-text","");return a} function tf(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;fb||b==c&&g.to==b)d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0}e||d(b,c,"ltr")}function Wc(a){return a.level%2?a.from:a.to}function Xb(a){return(a=V(a))?a[0].level%2?a[0].to:a[0].from:0}function Yb(a){var b=V(a);return!b?a.text.length:Wc(x(b))}function cf(a,b){var c=r(a.doc,b),d=da(c);d!=c&&(b=C(d));c=V(d);d=!c?0:c[0].level%2?Yb(d):Xb(d);return o(b,d)}function df(a,b){var c= cf(a,b.line),d=r(a.doc,c.line),e=V(d);return!e||0==e[0].level?(d=Math.max(0,d.text.search(/\S/)),o(c.line,b.line==c.line&&b.ch<=d&&b.ch?0:d)):c}function Ob(a,b){rb=null;for(var c=0,d;cb)return c;if(e.from==b||e.to==b)if(null==d)d=c;else{var f;f=e.level;var g=a[d].level,h=a[0].level;f=f==h?!0:g==h?!1:fg.from&&bb||b>a.text.length?null:b}var sa=/gecko\/\d/i.test(navigator.userAgent),ef=/MSIE \d/.test(navigator.userAgent),ff=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent), y=ef||ff,z=y&&(ef?document.documentMode||6:ff[1]),E=/WebKit\//.test(navigator.userAgent),cg=E&&/Qt\/\d+\.\d+/.test(navigator.userAgent),dg=/Chrome\//.test(navigator.userAgent),Y=/Opera\//.test(navigator.userAgent),le=/Apple Computer/.test(navigator.vendor),eg=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),zf=/PhantomJS/.test(navigator.userAgent),Ma=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),Xa=Ma||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent), T=Ma||/Mac/.test(navigator.platform),fg=/win/i.test(navigator.platform),Ea=Y&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);Ea&&(Ea=Number(Ea[1]));Ea&&15<=Ea&&(Y=!1,E=!0);var gf=T&&(cg||Y&&(null==Ea||12.11>Ea)),$c=sa||y&&9<=z,ye=!1,na=!1;zc.prototype=S({update:function(a){var b=a.scrollWidth>a.clientWidth+1,c=a.scrollHeight>a.clientHeight+1,d=a.nativeBarWidth;if(c){this.vert.style.display="block";this.vert.style.bottom=b?d+"px":"0";this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+ (a.viewHeight-(b?d:0)))+"px"}else{this.vert.style.display="";this.vert.firstChild.style.height="0"}if(b){this.horiz.style.display="block";this.horiz.style.right=c?d+"px":"0";this.horiz.style.left=a.barLeft+"px";this.horiz.firstChild.style.width=a.scrollWidth-a.clientWidth+(a.viewWidth-a.barLeft-(c?d:0))+"px"}else{this.horiz.style.display="";this.horiz.firstChild.style.width="0"}if(!this.checkedOverlay&&a.clientHeight>0){d==0&&this.overlayHack();this.checkedOverlay=true}return{right:c?d:0,bottom:b? d:0}},setScrollLeft:function(a){if(this.horiz.scrollLeft!=a)this.horiz.scrollLeft=a},setScrollTop:function(a){if(this.vert.scrollTop!=a)this.vert.scrollTop=a},overlayHack:function(){this.horiz.style.minHeight=this.vert.style.minWidth=T&&!eg?"12px":"18px";var a=this,b=function(b){(b.target||b.srcElement)!=a.vert&&(b.target||b.srcElement)!=a.horiz&&B(a.cm,he)(b)};p(this.vert,"mousedown",b);p(this.horiz,"mousedown",b)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz);a.removeChild(this.vert)}}, zc.prototype);Ac.prototype=S({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},Ac.prototype);m.scrollbarModel={"native":zc,"null":Ac};Ib.prototype.signal=function(a,b){P(a,b)&&this.events.push(arguments)};Ib.prototype.finish=function(){for(var a=0;a=9&&c.hasSelection)c.hasSelection=null;c.poll()});p(f,"paste",function(){if(E&&!d.state.fakedLastChar&&!(new Date-d.state.lastMiddleDown<200)){var a=f.selectionStart,b=f.selectionEnd;f.value=f.value+"$";f.selectionEnd=b;f.selectionStart=a;d.state.fakedLastChar=true}d.state.pasteIncoming=true;c.fastPoll()});p(f,"cut",b);p(f,"copy",b);p(a.scroller,"paste",function(b){if(!ka(a,b)){d.state.pasteIncoming=true;c.focus()}});p(a.lineSpace, "selectstart",function(b){ka(a,b)||L(b)});p(f,"compositionstart",function(){var a=d.getCursor("from");c.composing={start:a,range:d.markText(a,d.getCursor("to"),{className:"CodeMirror-composing"})}});p(f,"compositionend",function(){if(c.composing){c.poll();c.composing.range.clear();c.composing=null}})},prepareSelection:function(){var a=this.cm,b=a.display,c=a.doc,d=$d(a);if(a.options.moveInputWithCursor){var a=ia(a,c.sel.primary().head,"div"),c=b.wrapper.getBoundingClientRect(),e=b.lineDiv.getBoundingClientRect(); d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,a.top+e.top-c.top));d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,a.left+e.left-c.left))}return d},showSelection:function(a){var b=this.cm.display;R(b.cursorDiv,a.cursors);R(b.selectionDiv,a.selection);if(a.teTop!=null){this.wrapper.style.top=a.teTop+"px";this.wrapper.style.left=a.teLeft+"px"}},reset:function(a){if(!this.contextMenuPending){var b,c,d=this.cm,e=d.doc;if(d.somethingSelected()){this.prevInput="";b=e.sel.primary();c=(b=ue&& (b.to().line-b.from().line>100||(c=d.getSelection()).length>1E3))?"-":c||d.getSelection();this.textarea.value=c;d.state.focused&&Va(this.textarea);if(y&&z>=9)this.hasSelection=c}else if(!a){this.prevInput=this.textarea.value="";if(y&&z>=9)this.hasSelection=null}this.inaccurateSelection=b}},getField:function(){return this.textarea},supportsTouch:function(){return false},focus:function(){if(this.cm.options.readOnly!="nocursor"&&(!Xa||aa()!=this.textarea))try{this.textarea.focus()}catch(a){}},blur:function(){this.textarea.blur()}, resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=this;a.pollingFast||a.polling.set(this.cm.options.pollInterval,function(){a.poll();a.cm.state.focused&&a.slowPoll()})},fastPoll:function(){function a(){if(!c.poll()&&!b){b=true;c.polling.set(60,a)}else{c.pollingFast=false;c.slowPoll()}}var b=false,c=this;c.pollingFast=true;c.polling.set(20,a)},poll:function(){var a=this.cm,b=this.textarea,c=this.prevInput; if(!a.state.focused||gg(b)&&!c||Nb(a)||a.options.disableInput||a.state.keySeq)return false;if(a.state.pasteIncoming&&a.state.fakedLastChar){b.value=b.value.substring(0,b.value.length-1);a.state.fakedLastChar=false}var d=b.value;if(d==c&&!a.somethingSelected())return false;if(y&&z>=9&&this.hasSelection===d||T&&/[\uf700-\uf7ff]/.test(d)){a.display.input.reset();return false}if(a.doc.sel==a.display.selForContextMenu){var e=d.charCodeAt(0);e==8203&&!c&&(c="​");if(e==8666){this.reset();return this.cm.execCommand("undo")}}for(var f= 0,e=Math.min(c.length,d.length);f1E3||d.indexOf("\n")>-1?b.value=g.prevInput="":g.prevInput=d;if(g.composing){g.composing.range.clear();g.composing.range=a.markText(g.composing.start,a.getCursor("to"),{className:"CodeMirror-composing"})}});return true},ensurePolled:function(){if(this.pollingFast&&this.poll())this.pollingFast=false},onKeyPress:function(){if(y&&z>= 9)this.hasSelection=null;this.fastPoll()},onContextMenu:function(a){function b(){if(g.selectionStart!=null){var a=e.somethingSelected(),b="​"+(a?g.value:"");g.value="⇚";g.value=b;d.prevInput=a?"":"​";g.selectionStart=1;g.selectionEnd=b.length;f.selForContextMenu=e.doc.sel}}function c(){d.contextMenuPending=false;d.wrapper.style.position="relative";g.style.cssText=j;if(y&&z<9)f.scrollbars.setScrollTop(f.scroller.scrollTop=i);if(g.selectionStart!=null){(!y||y&&z<9)&&b();var a=0,c=function(){f.selForContextMenu== e.doc.sel&&g.selectionStart==0&&g.selectionEnd>0&&d.prevInput=="​"?B(e,ec.selectAll)(e):a++<10?f.detectingSelectAll=setTimeout(c,500):f.input.reset()};f.detectingSelectAll=setTimeout(c,200)}}var d=this,e=d.cm,f=e.display,g=d.textarea,h=Qa(e,a),i=f.scroller.scrollTop;if(h&&!Y){e.options.resetSelectionOnContextMenu&&e.doc.sel.contains(h)==-1&&B(e,A)(e.doc,ba(h),ca);var j=g.style.cssText;d.wrapper.style.position="absolute";g.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(a.clientY- 5)+"px; left: "+(a.clientX-5)+"px; z-index: 1000; background: "+(y?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";if(E)var k=window.scrollY;f.input.focus();E&&window.scrollTo(null,k);f.input.reset();if(!e.somethingSelected())g.value=d.prevInput=" ";d.contextMenuPending=true;f.selForContextMenu=e.doc.sel;clearTimeout(f.detectingSelectAll);y&&z>=9&&b();if($c){ad(a);var n=function(){fa(window,"mouseup", n);setTimeout(c,20)};p(window,"mouseup",n)}else setTimeout(c,50)}},setUneditable:Ab,needsContentAttribute:!1},Lc.prototype);Mc.prototype=S({init:function(a){function b(a){if(d.somethingSelected()){U=d.getSelections();a.type=="cut"&&d.replaceSelection("",null,"cut")}else if(d.options.lineWiseCopyCut){var b=Nd(d);U=b.text;a.type=="cut"&&d.operation(function(){d.setSelections(b.ranges,0,ca);d.replaceSelection("",null,"cut")})}else return;if(a.clipboardData&&!Ma){a.preventDefault();a.clipboardData.clearData(); a.clipboardData.setData("text/plain",U.join("\n"))}else{var c=Pd(),a=c.firstChild;d.display.lineSpace.insertBefore(c,d.display.lineSpace.firstChild);a.value=U.join("\n");var h=document.activeElement;Va(a);setTimeout(function(){d.display.lineSpace.removeChild(c);h.focus()},50)}}var c=this,d=c.cm,a=c.div=a.lineDiv;a.contentEditable="true";Od(a);p(a,"paste",function(a){var b=a.clipboardData&&a.clipboardData.getData("text/plain");if(b){a.preventDefault();d.replaceSelection(b,null,"paste")}});p(a,"compositionstart", function(a){a=a.data;c.composing={sel:d.doc.sel,data:a,startData:a};if(a){var b=d.doc.sel.primary(),g=d.getLine(b.head.line).indexOf(a,Math.max(0,b.head.ch-a.length));if(g>-1&&g<=b.head.ch)c.composing.sel=ba(o(b.head.line,g),o(b.head.line,g+a.length))}});p(a,"compositionupdate",function(a){c.composing.data=a.data});p(a,"compositionend",function(a){var b=c.composing;if(b){if(a.data!=b.startData&&!/\u200b/.test(a.data))b.data=a.data;setTimeout(function(){b.handled||c.applyComposition(b);if(c.composing== b)c.composing=null},50)}});p(a,"touchstart",function(){c.forceCompositionEnd()});p(a,"input",function(){c.composing||c.pollContent()||Q(c.cm,function(){N(d)})});p(a,"copy",b);p(a,"cut",b)},prepareSelection:function(){var a=$d(this.cm,false);a.focus=this.cm.state.focused;return a},showSelection:function(a){if(a&&this.cm.display.view.length){a.focus&&this.showPrimarySelection();this.showMultipleSelections(a)}},showPrimarySelection:function(){var a=window.getSelection(),b=this.cm.doc.sel.primary(),c= Pb(this.cm,a.anchorNode,a.anchorOffset),d=Pb(this.cm,a.focusNode,a.focusOffset);if(!c||c.bad||!d||d.bad||!(v(Mb(c,d),b.from())==0&&v(Lb(c,d),b.to())==0)){c=Qd(this.cm,b.from());d=Qd(this.cm,b.to());if(c||d){var e=this.cm.display.view,b=a.rangeCount&&a.getRangeAt(0);if(c){if(!d){d=e[e.length-1].measure;d=d.maps?d.maps[d.maps.length-1]:d.map;d={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}}}else c={node:e[0].measure.map[2],offset:0};try{var f=Aa(c.node,c.offset,d.offset,d.node)}catch(g){}if(f){a.removeAllRanges(); a.addRange(f);b&&a.anchorNode==null?a.addRange(b):sa&&this.startGracePeriod()}this.rememberSelection()}}},startGracePeriod:function(){var a=this;clearTimeout(this.gracePeriod);this.gracePeriod=setTimeout(function(){a.gracePeriod=false;a.selectionChanged()&&a.cm.operation(function(){a.cm.curOp.selectionChanged=true})},20)},showMultipleSelections:function(a){R(this.cm.display.cursorDiv,a.cursors);R(this.cm.display.selectionDiv,a.selection)},rememberSelection:function(){var a=window.getSelection();this.lastAnchorNode= a.anchorNode;this.lastAnchorOffset=a.anchorOffset;this.lastFocusNode=a.focusNode;this.lastFocusOffset=a.focusOffset},selectionInEditor:function(){var a=window.getSelection();if(!a.rangeCount)return false;a=a.getRangeAt(0).commonAncestorContainer;return Oc(this.div,a)},focus:function(){this.cm.options.readOnly!="nocursor"&&this.div.focus()},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return true},receivedFocus:function(){function a(){if(b.cm.state.focused){b.pollSelection(); b.polling.set(b.cm.options.pollInterval,a)}}var b=this;this.selectionInEditor()?this.pollSelection():Q(this.cm,function(){b.cm.curOp.selectionChanged=true});this.polling.set(this.cm.options.pollInterval,a)},selectionChanged:function(){var a=window.getSelection();return a.anchorNode!=this.lastAnchorNode||a.anchorOffset!=this.lastAnchorOffset||a.focusNode!=this.lastFocusNode||a.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&!this.gracePeriod&&this.selectionChanged()){var a= window.getSelection(),b=this.cm;this.rememberSelection();var c=Pb(b,a.anchorNode,a.anchorOffset),d=Pb(b,a.focusNode,a.focusOffset);c&&d&&Q(b,function(){A(b.doc,ba(c,d),ca);if(c.bad||d.bad)b.curOp.selectionChanged=true})}},pollContent:function(){var a=this.cm,b=a.display,c=a.doc.sel.primary(),d=c.from(),c=c.to();if(d.lineb.viewTo-1)return false;var e;if(d.line==b.viewFrom||(e=ya(a,d.line))==0){d=C(b.view[0].line);e=b.view[0].node}else{d=C(b.view[e].line);e=b.view[e-1].node.nextSibling}var f= ya(a,c.line);if(f==b.view.length-1){c=b.viewTo-1;b=b.view[f].node}else{c=C(b.view[f+1].line)-1;b=b.view[f+1].node.previousSibling}b=oa(qf(a,e,b,d,c));for(e=za(a.doc,o(d,0),o(c,r(a.doc,c).text.length));b.length>1&&e.length>1;)if(x(b)==x(e)){b.pop();e.pop();c--}else if(b[0]==e[0]){b.shift();e.shift();d++}else break;for(var g=0,f=0,h=b[0],i=e[0],j=Math.min(h.length,i.length);g1||b[0]||v(d,c)){sb(a.doc,b,d,c,"+input");return true}},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){if(this.composing&&!this.composing.handled){this.applyComposition(this.composing);this.composing.handled=true;this.div.blur();this.div.focus()}},applyComposition:function(a){a.data&& a.data!=a.startData&&B(this.cm,Kc)(this.cm,a.data,0,a.sel)},setUneditable:function(a){a.setAttribute("contenteditable","false")},onKeyPress:function(a){a.preventDefault();B(this.cm,Kc)(this.cm,String.fromCharCode(a.charCode==null?a.keyCode:a.charCode),0)},onContextMenu:Ab,resetPosition:Ab,needsContentAttribute:!0},Mc.prototype);m.inputStyles={textarea:Lc,contenteditable:Mc};ha.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(a){if(a==this)return true;if(a.primIndex!= this.primIndex||a.ranges.length!=this.ranges.length)return false;for(var b=0;b=0&&v(a,d.to())<=0)return c}return-1}};w.prototype={from:function(){return Mb(this.anchor,this.head)},to:function(){return Lb(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var Tc={left:0,right:0,top:0,bottom:0},Ba,Pa=null,yf=0,bc,ac,ke=0,cc=0,O=null;y?O=-0.53:sa?O=15:dg?O=-0.7:le&&(O=-1/3);var re=function(a){var b= a.wheelDeltaX,c=a.wheelDeltaY;if(b==null&&a.detail&&a.axis==a.HORIZONTAL_AXIS)b=a.detail;if(c==null&&a.detail&&a.axis==a.VERTICAL_AXIS)c=a.detail;else if(c==null)c=a.wheelDelta;return{x:b,y:c}};m.wheelEventPixels=function(a){a=re(a);a.x=a.x*O;a.y=a.y*O;return a};var Jf=new Ya,dd=null,pa=m.changeEnd=function(a){return!a.text?a.to:o(a.from.line+a.text.length-1,x(a.text).length+(a.text.length==1?a.from.ch:0))};m.prototype={constructor:m,focus:function(){window.focus();this.display.input.focus()},setOption:function(a, b){var c=this.options,d=c[a];if(!(c[a]==b&&a!="mode")){c[a]=b;Ga.hasOwnProperty(a)&&B(this,Ga[a])(this,b,d)}},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](kc(a))},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;cc){lb(this,e.head.line,a,true);c=e.head.line;d==this.doc.sel.primIndex&&La(this)}}else{for(var f=e.from(),e=e.to(),g=Math.max(c,f.line),c=Math.min(this.lastLine(),e.line-(e.ch?0:1))+1,e=g;e0)&&Pc(this.doc,d,new w(f,e[d].to()),ca)}}}),getTokenAt:function(a,b){return Re(this,a,b)},getLineTokens:function(a,b){return Re(this,o(a),b,true)},getTokenTypeAt:function(a){var a= t(this.doc,a),b=Te(this,r(this.doc,a.line)),c=0,d=(b.length-1)/2,a=a.ch,e;if(a==0)e=b[2];else for(;;){var f=c+d>>1;if((f?b[f*2-1]:0)>=a)d=f;else if(b[f*2+1]d){a=d;c=true}d=r(this.doc,a)}else d=a;return Vc(this,d,{top:0,left:0},b||"page").top+(c?this.doc.height-ga(d):0)},defaultTextHeight:function(){return ta(this.display)},defaultCharWidth:function(){return cb(this.display)},setGutterMarker:J(function(a,b,c){return ic(this.doc,a,"gutter",function(a){var e=a.gutterMarkers||(a.gutterMarkers={});e[b]=c;if(!c&&af(e))a.gutterMarkers=null;return true})}),clearGutter:J(function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){if(c.gutterMarkers&& c.gutterMarkers[a]){c.gutterMarkers[a]=null;ja(b,d,"gutter");if(af(c.gutterMarkers))c.gutterMarkers=null}++d})}),lineInfo:function(a){if(typeof a=="number"){if(!mb(this.doc,a))return null;var b=a,a=r(this.doc,a);if(!a)return null}else{b=C(a);if(b==null)return null}return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a, b,c,d,e){var f=this.display,a=ia(this,t(this.doc,a)),g=a.bottom,h=a.left;b.style.position="absolute";b.setAttribute("cm-ignore-events","true");this.display.input.setUneditable(b);f.sizer.appendChild(b);if(d=="over")g=a.top;else if(d=="above"||d=="near"){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);if((d=="above"||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight)g=a.top-b.offsetHeight;else if(a.bottom+b.offsetHeight<=i)g=a.bottom;h+ b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px";b.style.left=b.style.right="";if(e=="right"){h=f.sizer.clientWidth-b.offsetWidth;b.style.right="0px"}else{e=="left"?h=0:e=="middle"&&(h=(f.sizer.clientWidth-b.offsetWidth)/2);b.style.left=h+"px"}if(c){a=Zb(this,h,g,h+b.offsetWidth,g+b.offsetHeight);a.scrollTop!=null&&hb(this,a.scrollTop);a.scrollLeft!=null&&Ia(this,a.scrollLeft)}},triggerOnKeyDown:J(ne),triggerOnKeyPress:J(oe),triggerOnKeyUp:me,execCommand:function(a){if(ec.hasOwnProperty(a))return ec[a](this)}, findPosH:function(a,b,c,d){var e=1;if(b<0){e=-1;b=-b}for(var f=0,a=t(this.doc,a);f0&&f(b.charAt(c-1));)--c;for(;d0.5)&&vc(this);F(this,"refresh",this)}),swapDoc:J(function(a){var b=this.doc;b.cm=null;wd(this,a);db(this);this.display.input.reset(); this.scrollTo(a.scrollLeft,a.scrollTop);this.curOp.forceScroll=true;H(this,"swapDoc",this,b);return b}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};Ua(m);var jf=m.defaults={},Ga=m.optionHandlers={},xd=m.Init={toString:function(){return"CodeMirror.Init"}};u("value","",function(a,b){a.setValue(b)},!0);u("mode", null,function(a,b){a.doc.modeOption=b;uc(a)},!0);u("indentUnit",2,uc,!0);u("indentWithTabs",!1);u("smartIndent",!0);u("tabSize",4,function(a){ab(a);db(a);N(a)},!0);u("specialChars",/[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b,c){a.state.specialChars=RegExp(b.source+(b.test("\t")?"":"|\t"),"g");c!=m.Init&&a.refresh()});u("specialCharPlaceholder",function(a){var b=q("span","•","cm-invalidchar");b.title="\\u"+a.charCodeAt(0).toString(16);b.setAttribute("aria-label",b.title); return b},function(a){a.refresh()},!0);u("electricChars",!0);u("inputStyle",Xa?"contenteditable":"textarea",function(){throw Error("inputStyle can not (yet) be changed in a running editor");},!0);u("rtlMoveVisually",!fg);u("wholeLineUpdateBefore",!0);u("theme","default",function(a){td(a);eb(a)},!0);u("keyMap","default",function(a,b,c){b=kc(b);(c=c!=m.Init&&kc(c))&&c.detach&&c.detach(a,b);b.attach&&b.attach(a,c||null)});u("extraKeys",null);u("lineWrapping",!1,function(a){if(a.options.lineWrapping){ib(a.display.wrapper, "CodeMirror-wrap");a.display.sizer.style.minWidth="";a.display.sizerWidth=null}else{gb(a.display.wrapper,"CodeMirror-wrap");yc(a)}vc(a);N(a);db(a);setTimeout(function(){Ja(a)},100)},!0);u("gutters",[],function(a){rc(a.options);eb(a)},!0);u("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?Cc(a.display)+"px":"0";a.refresh()},!0);u("coverGutterNextToScrollbar",!1,function(a){Ja(a)},!0);u("scrollbarStyle","native",function(a){ud(a);Ja(a);a.display.scrollbars.setScrollTop(a.doc.scrollTop); a.display.scrollbars.setScrollLeft(a.doc.scrollLeft)},!0);u("lineNumbers",!1,function(a){rc(a.options);eb(a)},!0);u("firstLineNumber",1,eb,!0);u("lineNumberFormatter",function(a){return a},eb,!0);u("showCursorWhenSelecting",!1,jb,!0);u("resetSelectionOnContextMenu",!0);u("lineWiseCopyCut",!0);u("readOnly",!1,function(a,b){if(b=="nocursor"){$a(a);a.display.input.blur();a.display.disabled=true}else{a.display.disabled=false;b||a.display.input.reset()}});u("disableInput",!1,function(a,b){b||a.display.input.reset()}, !0);u("dragDrop",!0,function(a,b,c){if(!b!=!(c&&c!=m.Init)){c=a.display.dragFunctions;b=b?p:fa;b(a.display.scroller,"dragstart",c.start);b(a.display.scroller,"dragenter",c.simple);b(a.display.scroller,"dragover",c.simple);b(a.display.scroller,"drop",c.drop)}});u("cursorBlinkRate",530);u("cursorScrollMargin",0);u("cursorHeight",1,jb,!0);u("singleCursorHeightPerLine",!0,jb,!0);u("workTime",100);u("workDelay",100);u("flattenSpans",!0,ab,!0);u("addModeClass",!1,ab,!0);u("pollInterval",100);u("undoDepth", 200,function(a,b){a.doc.history.undoDepth=b});u("historyEventDelay",1250);u("viewportMargin",10,function(a){a.refresh()},!0);u("maxHighlightLength",1E4,ab,!0);u("moveInputWithCursor",!0,function(a,b){b||a.display.input.resetPosition()});u("tabindex",null,function(a,b){a.display.input.getField().tabIndex=b||""});u("autofocus",null);var hf=m.modes={},Db=m.mimeModes={};m.defineMode=function(a,b){if(!m.defaults.mode&&a!="null")m.defaults.mode=a;if(arguments.length>2)b.dependencies=Array.prototype.slice.call(arguments, 2);hf[a]=b};m.defineMIME=function(a,b){Db[a]=b};m.resolveMode=function(a){if(typeof a=="string"&&Db.hasOwnProperty(a))a=Db[a];else if(a&&typeof a.name=="string"&&Db.hasOwnProperty(a.name)){var b=Db[a.name];typeof b=="string"&&(b={name:b});a=Ze(b,a);a.name=b.name}else if(typeof a=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return m.resolveMode("application/xml");return typeof a=="string"?{name:a}:a||{name:"null"}};m.getMode=function(a,b){var b=m.resolveMode(b),c=hf[b.name];if(!c)return m.getMode(a, "text/plain");c=c(a,b);if(Eb.hasOwnProperty(b.name)){var d=Eb[b.name],e;for(e in d)if(d.hasOwnProperty(e)){c.hasOwnProperty(e)&&(c["_"+e]=c[e]);c[e]=d[e]}}c.name=b.name;if(b.helperType)c.helperType=b.helperType;if(b.modeProps)for(e in b.modeProps)c[e]=b.modeProps[e];return c};m.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}});m.defineMIME("text/plain","null");var Eb=m.modeExtensions={};m.extendMode=function(a,b){var c=Eb.hasOwnProperty(a)?Eb[a]:Eb[a]={};S(b,c)};m.defineExtension= function(a,b){m.prototype[a]=b};m.defineDocExtension=function(a,b){M.prototype[a]=b};m.defineOption=u;var tc=[];m.defineInitHook=function(a){tc.push(a)};var Wa=m.helpers={};m.registerHelper=function(a,b,c){Wa.hasOwnProperty(a)||(Wa[a]=m[a]={_global:[]});Wa[a][b]=c};m.registerGlobalHelper=function(a,b,c,d){m.registerHelper(a,b,d);Wa[a]._global.push({pred:c,val:d})};var Oa=m.copyState=function(a,b){if(b===true)return b;if(a.copyState)return a.copyState(b);var c={},d;for(d in b){var e=b[d];e instanceof Array&&(e=e.concat([]));c[d]=e}return c},wf=m.startState=function(a,b,c){return a.startState?a.startState(b,c):true};m.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state;a=c.mode}return c||{mode:a,state:b}};var ec=m.commands={selectAll:function(a){a.setSelection(o(a.firstLine(),0),o(a.lastLine()),ca)},singleSelection:function(a){a.setSelection(a.getCursor("anchor"),a.getCursor("head"),ca)},killLine:function(a){Ra(a,function(b){if(b.empty()){var c=r(a.doc, b.head.line).text.length;return b.head.ch==c&&b.head.line0){e=new o(e.line,e.ch+1);a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),o(e.line,e.ch-2),e,"+transpose")}else if(e.line>a.doc.first){var g=r(a.doc,e.line-1).text;g&&a.replaceRange(f.charAt(0)+ "\n"+g.charAt(g.length-1),o(e.line-1,g.length-1),o(e.line,1),"+transpose")}}c.push(new w(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){Q(a,function(){for(var b=a.listSelections().length,c=0;c=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){if(this.posb},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){a=this.string.indexOf(a,this.pos);if(a>-1){this.pos=a;return true}},backUp:function(a){this.pos=this.pos-a},column:function(){if(this.lastColumnPos0)return null;if(a&&b!==false)this.pos=this.pos+a[0].length;return a}},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart=this.lineStart+a;try{return b()}finally{this.lineStart=this.lineStart-a}}};var kd=0,Da=m.TextMarker=function(a,b){this.lines=[];this.type=b;this.doc=a;this.id=++kd};Ua(Da);Da.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b= a&&!a.curOp;b&&Fa(a);if(P(this,"clear")){var c=this.find();c&&H(this,"clear",c.from,c.to)}for(var d=c=null,e=0;ea.display.maxLineLength){a.display.maxLine=f;a.display.maxLineLength=g;a.display.maxLineChanged=true}}c!=null&&(a&&this.collapsed)&&N(a,c,d+1);this.lines.length=0;this.explicitlyCleared=true;if(this.atomic&&this.doc.cantEdit){this.doc.cantEdit=false;a&&Zd(a.doc)}a&&H(a,"markerCleared",a,this);b&&Ha(a);this.parent&&this.parent.clear()}};Da.prototype.find=function(a,b){a==null&&this.type=="bookmark"&&(a=1);for(var c,d,e=0;e1||!(this.children[0]instanceof xb))){c=[];this.collapse(c);this.children=[new xb(c)];this.children[0].parent=this}},collapse:function(a){for(var b=0;b< this.children.length;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size=this.size+b.length;this.height=this.height+c;for(var d=0;d50){for(;e.lines.length>50;){a=e.lines.splice(e.lines.length-25,25);a=new xb(a);e.height=e.height-a.height;this.children.splice(d+1,0,a);a.parent=this}this.maybeSpill()}break}a=a-f}},maybeSpill:function(){if(!(this.children.length<= 10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),b=new yb(b);if(a.parent){a.size=a.size-b.size;a.height=a.height-b.height;var c=G(a.parent.children,a);a.parent.children.splice(c+1,0,b)}else{c=new yb(a.children);c.parent=a;a.children=[c,b];a=c}b.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0;d=0;f--)Ka(this,d[f]);b?Ud(this,b):this.cm&&La(this.cm)}),undo:K(function(){gc(this,"undo")}), redo:K(function(){gc(this,"redo")}),undoSelection:K(function(){gc(this,"undo",true)}),redoSelection:K(function(){gc(this,"redo",true)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d=a.ch))b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){var a=t(this,a),b=t(this,b),d=[],e=a.line;this.iter(a.line,b.line+1,function(f){if(f=f.markedSpans)for(var g=0;gh.to||h.from==null&&e!=a.line||e==b.line&&h.from>b.ch)&&(!c||c(h.marker)))d.push(h.marker.parent|| h.marker)}++e});return d},getAllMarks:function(){var a=[];this.iter(function(b){if(b=b.markedSpans)for(var c=0;ca){b=a;return true}a=a-d;++c});return t(this,o(c,b))},indexFromPos:function(a){var a=t(this,a),b=a.ch;if(a.lineb)b=a.from;if(a.to!=null&&a.toG(ig,Fb)&&(m.prototype[Fb]=function(a){return function(){return a.apply(this.doc,arguments)}}(M.prototype[Fb])); Ua(M);var L=m.e_preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=false},jg=m.e_stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=true},ad=m.e_stop=function(a){L(a);jg(a)},p=m.on=function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,false);else if(a.attachEvent)a.attachEvent("on"+b,c);else{a=a._handlers||(a._handlers={});(a[b]||(a[b]=[])).push(c)}},fa=m.off=function(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,false);else if(a.detachEvent)a.detachEvent("on"+ b,c);else if(a=a._handlers&&a._handlers[b])for(b=0;b=b)return e+(b-d);e=e+(f-d);e=e+(c-e%c);d=f+1}},qc=[""],Va=function(a){a.select()};Ma?Va=function(a){a.selectionStart=0;a.selectionEnd=a.value.length}:y&&(Va=function(a){try{a.select()}catch(b){}});var kg=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,$e=m.isWordChar=function(a){return/\w/.test(a)||a>"€"&&(a.toUpperCase()!=a.toLowerCase()|| kg.test(a))},bg=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/, Aa;Aa=document.createRange?function(a,b,c,d){var e=document.createRange();e.setEnd(d||a,c);e.setStart(a,b);return e}:function(a,b,c){var d=document.body.createTextRange();try{d.moveToElementText(a.parentNode)}catch(e){return d}d.collapse(true);d.moveEnd("character",c);d.moveStart("character",b);return d};var Oc=m.contains=function(a,b){if(b.nodeType==3)b=b.parentNode;if(a.contains)return a.contains(b);do{if(b.nodeType==11)b=b.host;if(b==a)return true}while(b=b.parentNode)};y&&11>z&&(aa=function(){try{return document.activeElement}catch(a){return document.body}}); var gb=m.rmClass=function(a,b){var c=a.className,d=Bb(b).exec(c);if(d){var e=c.slice(d.index+d[0].length);a.className=c.slice(0,d.index)+(e?d[1]+e:"")}},ib=m.addClass=function(a,b){var c=a.className;if(!Bb(b).test(c))a.className=a.className+((c?" ":"")+b)},vd=!1,Ef=function(){if(y&&z<9)return false;var a=q("div");return"draggable"in a||"dragDrop"in a}(),qd,nd,oa=m.splitLines=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;b<=d;){var e=a.indexOf("\n",b);if(e==-1)e=a.length;var f= a.slice(b,a.charAt(e-1)=="\r"?e-1:e),g=f.indexOf("\r");if(g!=-1){c.push(f.slice(0,g));b=b+(g+1)}else{c.push(f);b=e+1}}return c}:function(a){return a.split(/\r\n?|\n/)},gg=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return false}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return!b||b.parentElement()!=a?false:b.compareEndPoints("StartToEnd",b)!=0},ue=function(){var a=q("div");if("oncopy"in a)return true;a.setAttribute("oncopy","return;"); return typeof a.oncopy=="function"}(),Uc=null,ra={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",107:"=",109:"-",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right", 63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};m.keyNames=ra;(function(){for(var a=0;a<10;a++)ra[a+48]=ra[a+96]=""+a;for(a=65;a<=90;a++)ra[a]=String.fromCharCode(a);for(a=1;a<=12;a++)ra[a+111]=ra[a+63235]="F"+a})();var rb,$f=function(){function a(a){return a<=247?c.charAt(a):1424<=a&&a<=1524?"R":1536<=a&&a<=1773?d.charAt(a-1536):1774<=a&&a<=2220?"r":8192<=a&&a<=8203?"w":a==8204?"b":"L"}function b(a,b,c){this.level=a;this.from=b;this.to=c}var c="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN", d="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,f=/[stwN]/,g=/[LRr]/,h=/[Lb1n]/,i=/[1n]/;return function(c){if(!e.test(c))return false;for(var d=c.length,n=[],l=0,m;l and others 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. rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/lib/codemirror/neo.css0000644000175000017500000000152313437512115030051 0ustar domdom/* neo theme for codemirror */ /* Color scheme */ .cm-s-neo.CodeMirror { background-color:#ffffff; color:#2e383c; line-height:1.4375; } .cm-s-neo .cm-comment {color:#75787b} .cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} .cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} .cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} .cm-s-neo .cm-string {color:#b35e14} .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} /* Editor styling */ .cm-s-neo pre { padding:0; } .cm-s-neo .CodeMirror-gutters { border:none; border-right:10px solid transparent; background-color:transparent; } .cm-s-neo .CodeMirror-linenumber { padding:0; color:#e0e2e5; } .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/font/0000755000175000017500000000000013437512115024610 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/font/fontello.woff0000644000175000017500000000553013437512115027320 0ustar domdomwOFF XOS/2DDV=Hcmap:Jcvt Ifpgm x;gaspglyf head46,hhea $2Vhmtx 9loca , maxp 8 (name Xw̝post /B%/prep VVxc`dcTŴB3>`0ddb``b`ef \S^0`bf2 7xc```f`Fp| ^0RDK0B#Èfxc`@F F70xUvVkBV}=$t,ϾG[g:F#*}kԡ=JI\u/ q]OI$JjP.X*Y'X' VOUg eIDD&I'g%I %PB5RաLЫq@FuXTC'5ԬF*W9F/{:1x~*?vJNTqԡV0_L*@bEt1=t:.JF((ST]q@f \JltD&RN5G\BPj~"N$FXqW B1 S9tEf]1Ja= ~ N$+gQHcugPK;2C" 3a U_4g@4K)JoLh T]6)iϚbSҞ32]}iGnV!7mi/ 7FnU:viRA4aV@֌4|i`.bDGu ri".><FݰƑ0FzYM.22L e@: `\xJCT;y_9.\wy Y rcRd-T'G+'UkC*({(^瓐=B[a#Li%^S(=RC,o)< Zĸujkz !pH)]ߴwkzr*QTFڼf2)UOQYiT49Okto8h=T|4A#U5(c45t1V~hb=OUK഻*[Fm䊟#1- ;bd ; Y&wmm?&߆ErW;yՓQ%wMvYף6GN-7r,`A1wiQetm8Wvͱtz.A #.}rv!ȹ99_C0 `;!xH9!!Hȹ '|M7FNd΢@8dFM` Fxc`d``f `FCh -nZ xuj@ҋB[Z足*Ji`7 Xtn-1$32_ЇKY(Mw9sd\đ 8Errb*,п[*n thOWrrrܳ\ƭx|BY`"RU܋ZmuFun:r*JXk*ʾqO-3bYE(}90kDJL7SlxZp׮Ku%13'&'#+#!"&'#"&=46;7>73232 $ $ $ $ $ $ H  64%0%45 ' ,,'  A  A  A d  eAS$ .DB. $ ]] s):_< DDq RjZFCh -nZ 55=DL T_ +g  j   - = M c Vs &Copyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.comCopyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.com down-bigup-bigtrash22  , `f-, d P&ZE[X!#!X PPX!@Y 8PX!8YY Ead(PX! E 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B *! C +0%QX`PaRYX#Y! @SX+!@Y#PXeY-,C+C`B-,#B# #Bab`*-, E EcEb`D`-, E +#%` E#a d PX!0PX @YY#PXeY%#aDD`-,EaD- ,` CJPX #BY CJRX #BY- , b c#a C` ` #B#- ,KTXDY$ e#x- ,KQXKSXDY!Y$e#x- , CUX CaB +YC%B %B %B# %PXC`%B #a *!#a #a *!C`%B%a *!Y CG CG`b EcEb`#DC>C`B-,ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+-,+-,+-,+-, +-,+ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+- ,+-!,+-",+-#, +-$, <`-%, ` ` C#`C%a`$*!-&,%+%*-', G EcEb`#a8# UX G EcEb`#a8!Y-(,ETX'*0"Y-),+ETX'*0"Y-*, 5`-+,EcEb+EcEb+D>#8**-,, < G EcEb`Ca8--,.<-., < G EcEb`CaCc8-/,% . G#B%IG#G#a Xb!Y#B.*-0,%%G#G#aE+e.# <8-1,%% .G#G#a #BE+ `PX @QX  &YBB# C #G#G#a#F`Cb` + a C`d#CadPXCaC`Y%ba# &#Fa8#CF%CG#G#a` Cb`# +#C`+%a%b&a %`d#%`dPX!#!Y# &#Fa8Y-2, & .G#G#a#<8-3, #B F#G+#a8-4,%%G#G#aTX. <#!%%G#G#a %%G#G#a%%I%aEc# Xb!YcEb`#.# <8#!Y-5, C .G#G#a ` `fb# <8-6,# .F%FRX ,1+!# <#B#8&+C.&+-?, G#B.,*-@, G#B.,*-A,-*-B,/*-C,E# . F#a8&+-D,#BC+-E,<+-F,<+-G,<+-H,<+-I,=+-J,=+-K,=+-L,=+-M,9+-N,9+-O,9+-P,9+-Q,;+-R,;+-S,;+-T,;+-U,>+-V,>+-W,>+-X,>+-Y,:+-Z,:+-[,:+-\,:+-],2+.&+-^,2+6+-_,2+7+-`,2+8+-a,3+.&+-b,3+6+-c,3+7+-d,3+8+-e,4+.&+-f,4+6+-g,4+7+-h,4+8+-i,5+.&+-j,5+6+-k,5+7+-l,5+8+-m,+e$Px0-KRXYc #D#p( ERD *D$QX@XD&QXXDYYYYDrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/font/fontello.ttf0000644000175000017500000001132413437512115027152 0ustar domdom`OS/2=HVcmapDJcvt Ifpgm x; gaspglyf head,6hhea2VP$hmtx9tloca maxp ( name̝post%/Bprep|Vzz1PfEd@RjZ OD( $@!BhS D5+"'&4?6246732762:):*G*;*l;)*,w*$@!BhS D5+"/#"&5"/&4762*;(G*<*k<k4*w$&*;k /;CgI@F  [[ S C S Dfda^[YTROLIGA@4555553++"&546;2+"&546;2+"&546;2!3!2>3'&'#+#!"&'#"&=46;7>73232 $ $ $ $ $ $ H  64%0%45 ' ,,'  A  A  A d  eAS$ .DB. $ ]] s):_< DDq RjZFCh -nZ 55=DL T_ +g  j   - = M c Vs &Copyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.comCopyright (C) 2014 by original authors @ fontello.comfontelloRegularfontellofontelloVersion 1.0fontelloGenerated by svg2ttf from Fontello project.http://fontello.com down-bigup-bigtrash22  , `f-, d P&ZE[X!#!X PPX!@Y 8PX!8YY Ead(PX! E 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B *! C +0%QX`PaRYX#Y! @SX+!@Y#PXeY-,C+C`B-,#B# #Bab`*-, E EcEb`D`-, E +#%` E#a d PX!0PX @YY#PXeY%#aDD`-,EaD- ,` CJPX #BY CJRX #BY- , b c#a C` ` #B#- ,KTXDY$ e#x- ,KQXKSXDY!Y$e#x- , CUX CaB +YC%B %B %B# %PXC`%B #a *!#a #a *!C`%B%a *!Y CG CG`b EcEb`#DC>C`B-,ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+-,+-,+-,+-, +-,+ETX #B `a  BB` +m+"Y-,+-,+-,+-,+-,+-,+- ,+-!,+-",+-#, +-$, <`-%, ` ` C#`C%a`$*!-&,%+%*-', G EcEb`#a8# UX G EcEb`#a8!Y-(,ETX'*0"Y-),+ETX'*0"Y-*, 5`-+,EcEb+EcEb+D>#8**-,, < G EcEb`Ca8--,.<-., < G EcEb`CaCc8-/,% . G#B%IG#G#a Xb!Y#B.*-0,%%G#G#aE+e.# <8-1,%% .G#G#a #BE+ `PX @QX  &YBB# C #G#G#a#F`Cb` + a C`d#CadPXCaC`Y%ba# &#Fa8#CF%CG#G#a` Cb`# +#C`+%a%b&a %`d#%`dPX!#!Y# &#Fa8Y-2, & .G#G#a#<8-3, #B F#G+#a8-4,%%G#G#aTX. <#!%%G#G#a %%G#G#a%%I%aEc# Xb!YcEb`#.# <8#!Y-5, C .G#G#a ` `fb# <8-6,# .F%FRX ,1+!# <#B#8&+C.&+-?, G#B.,*-@, G#B.,*-A,-*-B,/*-C,E# . F#a8&+-D,#BC+-E,<+-F,<+-G,<+-H,<+-I,=+-J,=+-K,=+-L,=+-M,9+-N,9+-O,9+-P,9+-Q,;+-R,;+-S,;+-T,;+-U,>+-V,>+-W,>+-X,>+-Y,:+-Z,:+-[,:+-\,:+-],2+.&+-^,2+6+-_,2+7+-`,2+8+-a,3+.&+-b,3+6+-c,3+7+-d,3+8+-e,4+.&+-f,4+6+-g,4+7+-h,4+8+-i,5+.&+-j,5+6+-k,5+7+-l,5+8+-m,+e$Px0-KRXYc #D#p( ERD *D$QX@XD&QXXDYYYYDrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/font/fontello.svg0000644000175000017500000000324513437512115027157 0ustar domdom Copyright (C) 2014 by original authors @ fontello.com rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/index.html0000644000175000017500000003613113437512115025643 0ustar domdom Toolbar Configurator

          Toolbar Configurator Help

          Select configurator type

          What Am I Doing Here?

          Arrange toolbar groups, toggle button visibility according to your needs and get your toolbar configuration.

          You can replace the content of the config.js file with the generated configuration. If you already set some configuration options you will need to merge both configurations.

          Read more about different ways of setting configuration and do not forget about clearing browser cache.

          Arranging toolbar groups is the recommended way of configuring the toolbar, but if you need more freedom you can use the advanced configurator.

          CKEditor – The text editor for the Internet – http://ckeditor.com

          Copyright © 2003-2015, CKSource – Frederico Knabben. All rights reserved.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/css/0000755000175000017500000000000013437512115024432 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/toolbarconfigurator/css/fontello.css0000644000175000017500000000333613437512115026773 0ustar domdom@font-face { font-family: 'fontello'; src: url('../font/fontello.eot?89024372'); src: url('../font/fontello.eot?89024372#iefix') format('embedded-opentype'), url('../font/fontello.woff?89024372') format('woff'), url('../font/fontello.ttf?89024372') format('truetype'), url('../font/fontello.svg?89024372#fontello') format('svg'); font-weight: normal; font-style: normal; } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ /* @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; src: url('../font/fontello.svg?89024372#fontello') format('svg'); } } */ [class^="icon-"]:before, [class*=" icon-"]:before { font-family: "fontello"; font-style: normal; font-weight: normal; speak: none; display: inline-block; text-decoration: inherit; width: 1em; margin-right: .2em; text-align: center; /* opacity: .8; */ /* For safety - reset parent styles, that can break glyph codes*/ font-variant: normal; text-transform: none; /* fix buttons height, for twitter bootstrap */ line-height: 1em; /* Animation center compensation - margins should be symmetric */ /* remove if not needed */ margin-left: .2em; /* you can be more comfortable with increased icons size */ /* font-size: 120%; */ /* Uncomment for 3D effect */ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } .icon-trash:before { content: '\e802'; } /* '' */ .icon-down-big:before { content: '\e800'; } /* '' */ .icon-up-big:before { content: '\e801'; } /* '' */ rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/index.html0000644000175000017500000001504413437512115021556 0ustar domdom CKEditor Sample

          Congratulations!

          If you can see CKEditor below, it means that the installation succeeded. You can now try out your new editor version, see its features, and when you are ready to move on, check some of the most useful resources recommended below.

          Hello world!

          I'm an instance of CKEditor.

          Customize Your Editor

          Modular build and numerous configuration options give you nearly endless possibilities to customize CKEditor. Replace the content of your config.js file with the following code and refresh this page (remember to clear the browser cache)!

          CKEDITOR.editorConfig = function( config ) {
          	config.language = 'es';
          	config.uiColor = '#F7B42C';
          	config.height = 300;
          	config.toolbarCanCollapse = true;
          };

          Toolbar Configuration

          If you want to reorder toolbar buttons or remove some of them, check this handy tool!

          More Samples!

          Visit the CKEditor SDK for a huge collection of samples showcasing editor features, with source code readily available to copy and use in your own implementation.

          Developer's Guide

          The most important resource for all developers working with CKEditor, integrating it with their websites and applications, and customizing to their needs. You can start from here:

          • Getting Started – Explains most crucial editor concepts and practices as well as the installation process and integration with your website.
          • Advanced Installation Concepts – Describes how to upgrade, install additional components (plugins, skins), or create a custom build.

          When you have the basics sorted out, feel free to browse some more advanced sections like:

          CKEditor JavaScript API

          CKEditor boasts a rich JavaScript API that you can use to adjust the editor to your needs and integrate it with your website or application.

          CKEditor – The text editor for the Internet – http://ckeditor.com

          Copyright © 2003-2015, CKSource – Frederico Knabben. All rights reserved.

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/css/0000755000175000017500000000000013437512115020345 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/samples/css/samples.css0000644000175000017500000020531113437512115022525 0ustar domdom/** * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ @media (max-width: 900px) { .global-is-mobile-hidden { display: none !important; } } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section { display: block; } body, html { margin: 0; padding: 0; font: 16px / 1.8 Arial, 'Helvetica Neue', Helvetica, sans-serif; font-weight: 300; color: #575757; } .grid-width-10 { width: 10%; } .grid-width-20 { width: 20%; } .grid-width-30 { width: 30%; } .grid-width-40 { width: 40%; } .grid-width-50 { width: 50%; } .grid-width-60 { width: 60%; } .grid-width-70 { width: 70%; } .grid-width-80 { width: 80%; } .grid-width-90 { width: 90%; } .grid-width-100 { width: 100%; } @media (max-width: 900px) { .grid-width-10, .grid-width-20, .grid-width-30, .grid-width-40, .grid-width-50, .grid-width-60, .grid-width-70, .grid-width-80, .grid-width-90, .grid-width-100 { width: 100%; } } *[class*="grid-width"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 4%; padding-right: 4%; float: left; } *[class*="grid-width"]:after, .grid-container:after, *[class*="grid-width"]:before, .grid-container:before { content: ''; display: block; overflow: hidden; visibility: hidden; font-size: 0; line-height: 0; width: 0; height: 0; } *[class*="grid-width"]:after, .grid-container:after { clear: both; } .grid-container { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; margin-left: auto; margin-right: auto; } .grid-container-nested *[class*="grid-width"]:first-child { padding-left: 0; } .grid-container-nested *[class*="grid-width"]:last-child { padding-right: 0; } @media (max-width: 900px) { .grid-container-nested *[class*="grid-width"]:first-child { padding-left: 4%; } .grid-container-nested *[class*="grid-width"]:last-child { padding-right: 4%; } } .header-a { min-height: 140px; overflow: hidden; } .header-a .header-a-logo { margin: 40px 0 0; } @media (max-width: 900px) { .header-a .header-a-logo { text-align: center; } } .header-a .header-a-logo img { border: transparent; } .navigation-a { height: 30px; background: #3d3d3d; position: absolute; left: 0; right: 0; top: 0; padding: 0; overflow: hidden; } @media (max-width: 900px) { .navigation-a { text-align: center; } } .navigation-a ul { list-style: none; margin: 0; overflow: hidden; } .navigation-a ul li, .navigation-a ul li a { display: inline-block; } @media (max-width: 900px) { .navigation-a ul { width: auto; text-overflow: ellipsis; white-space: nowrap; display: inline-block; float: none; } .navigation-a ul:before, .navigation-a ul:after { display: none; } } .navigation-a ul.navigation-a-left { text-align: left; } @media (max-width: 900px) { .navigation-a ul.navigation-a-left { padding-right: 0; } } .navigation-a ul.navigation-a-right { text-align: right; } @media (max-width: 900px) { .navigation-a ul.navigation-a-right { padding-left: 23px; } } .navigation-a ul li + li { margin-left: 23px; } .navigation-a ul li a { font-size: 10px; font-size: 0.625rem; line-height: 18px; line-height: 1.13rem; line-height: 30px; float: left; color: #dddddd; font-weight: bold; text-decoration: none; text-transform: uppercase; } .navigation-a ul li a:hover { cursor: pointer; color: #ffffff; } .icon-navigation-a-github:before, .icon-navigation-a-github:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IArs4c6QAAAa9JREFUOBGNlM8rRGEUht0pDGosjKYZpUSIkuwsiCaxUEqK2VOUBcrWv2BjxUJho6wsLLDzY2fhD5iR5NeOcJvIjOfM3O927m3mmlPPnPec835nZprvjlVVJvL5fCOjMWiDCLzCLVxZlpUj/x8saYV9+IZS8UJzFWoCt2GYgk+oJG4wJUouZDANv5VsUZ47dNSzkEYHfIDEHixDWgoiB/rTHlPPwBNInPmXHRb7hdeUDFG10AN1Th1Fd5mD6BMwMVnoUyVA3t3EkjkQlDFfmwPkc7NsQTXf0bGgJWaGb16dk18+EmLYawzkC+6Q3KdK4kiZqtGdskx/kmdlCJS86RuGrDLFZJmtGi1KB0q+VhOGsDLZsiyjGsOY4qoOkrO+YUauwCDoOKWo9xk9JfM+MPdSzqZdA8UlyDO3AvKLPsIG9LsmBHUKduEHdCy6PrpJZyKXdwKMOemaissOHJ9O9xTeh57GluMYIsehWy8STW/d8ZhkI0b9PjFasA1fsAOb0KCN1PLXYyKLGNdzj2YYArnZDyDRrA3Ua4UuDzd5QM/KaoxhmAO5Om5Qt8OI2/CJP6MVa1dvltQ5AAAAAElFTkSuQmCC"); } .navigation-b { text-align: right; margin: 52px 0 0; overflow: visible; } @media (max-width: 900px) { .navigation-b { text-align: center; margin-top: 20px; padding: 0; } } .navigation-b ul { padding: 0; list-style: none; margin: 0; overflow: visible; } .navigation-b ul li, .navigation-b ul li a { display: inline-block; } @media (max-width: 900px) { .navigation-b ul { display: table; width: 100%; padding-bottom: 1.5em; } } @media (max-width: 900px) { .navigation-b ul li { display: table-row; } } .navigation-b ul li + li { margin-left: 20px; } @media (max-width: 900px) { .navigation-b ul li + li { margin-left: 0; } } .navigation-b ul li a { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; text-transform: uppercase; text-decoration: none; outline: none; } @media (max-width: 900px) { .navigation-b ul li a { width: 100%; -webkit-border-radius: 0; -webkit-background-clip: padding-box; -moz-border-radius: 0; -moz-background-clip: padding; border-radius: 0; background-clip: padding-box; } } .footer-a { font-size: 13px; font-size: 0.8125rem; line-height: 23.4px; line-height: 1.46rem; padding-top: 2.25em; padding-bottom: 2.25em; overflow: hidden; color: #8a8a8a; } .footer-a a { color: #27c0d8; text-decoration: none; border-bottom: 1px dotted #27c0d8; } .footer-a a:hover { color: #23adc2; } .footer-a p { margin: 0; display: inline-block; text-align: center; } .content { font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; overflow: hidden; padding-top: 1.5em; padding-bottom: 1.5em; } .content p { margin: 0.75em 0; } .content ul, .content ol, .content pre, .content blockquote, .content textarea:not([class^="cke"]), .content .cke { margin: 1.875em 0; } .content code, .content kbd { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; padding: 3px 4px; } .content pre, .content code, .content kbd, .content blockquote { background: #f5f5f5; } .content blockquote, .content pre { background: none; border-left: 4px solid #27c0d8; padding: 1.5em 2.25em; } .content p a, .content ul a, .content ol a, .content blockquote a, .content h1 a, .content h2 a, .content h3 a, .content h4 a, .content h5 a { color: #27c0d8; text-decoration: none; border-bottom: 1px dotted #27c0d8; } .content p a:hover, .content ul a:hover, .content ol a:hover, .content blockquote a:hover, .content h1 a:hover, .content h2 a:hover, .content h3 a:hover, .content h4 a:hover, .content h5 a:hover { color: #23adc2; } .content h1, .content h2, .content h3, .content h4, .content h5 { color: #000; font-weight: 100; } .content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h1 kbd, .content h2 kbd, .content h3 kbd, .content h4 kbd, .content h5 kbd { font-size: inherit; } .content h1 a.content-heading-anchor, .content h2 a.content-heading-anchor, .content h3 a.content-heading-anchor, .content h4 a.content-heading-anchor, .content h5 a.content-heading-anchor { font-weight: 100; vertical-align: middle; opacity: 0; border: 0; } .content h1:hover a.content-heading-anchor, .content h2:hover a.content-heading-anchor, .content h3:hover a.content-heading-anchor, .content h4:hover a.content-heading-anchor, .content h5:hover a.content-heading-anchor { opacity: 1; } .content h1:target lesshat-selector, .content h2:target lesshat-selector, .content h3:target lesshat-selector, .content h4:target lesshat-selector, .content h5:target lesshat-selector { -lh-property: 0; } @-webkit-keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }} @-moz-keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }} @-o-keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }} @keyframes targetLinkOpacity{ 0%{ opacity: 0 } 100%{ opacity: 1 }; } .content h1:target a, .content h2:target a, .content h3:target a, .content h4:target a, .content h5:target a { -webkit-animation: targetLinkOpacity 0.5s linear alternate; -moz-animation: targetLinkOpacity 0.5s linear alternate; -o-animation: targetLinkOpacity 0.5s linear alternate; animation: targetLinkOpacity 0.5s linear alternate; opacity: 1; } .content input, .content select, .content textarea:not([class^="cke"]) { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08); font: inherit; color: inherit; border: 1px solid #d9d9d9; padding: .2em .5em; } .content input:focus, .content select:focus, .content textarea:not([class^="cke"]):focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.08), 0 0 8px #93c6ef; } .content abbr { border-bottom: 1px dotted #666; cursor: pointer; } .content blockquote { font-style: italic; font-family: Georgia, Times, "Times New Roman", serif; font-size: 16px; font-size: 1rem; line-height: 28.8px; line-height: 1.8rem; } .content em { font-style: italic; } .content h1 { font-size: 36px; font-size: 2.25rem; line-height: 64.8px; line-height: 4.05rem; margin: 1.125em 0 0; } .content h2 { font-size: 27.2px; font-size: 1.7rem; line-height: 48.96px; line-height: 3.06rem; margin: 0.9em 0 0; } .content h3 { font-size: 24px; font-size: 1.5rem; line-height: 43.2px; line-height: 2.7rem; font-weight: 500; margin: 0.75em 0 0; } .content h4 { font-size: 19.2px; font-size: 1.2rem; line-height: 34.56px; line-height: 2.16rem; font-weight: 500; margin: 0.75em 0 0; } .content h5 { font-size: 17.6px; font-size: 1.1rem; line-height: 31.68px; line-height: 1.98rem; font-weight: 500; margin: 0.75em 0 0; } .content hr { border: 0; border-top: 4px solid #d9d9d9; margin: 1.5em 0; } .content input[type="text"] { height: 1.8em; line-height: 1.8em; } .content input[type="button"] { -webkit-appearance: button; -moz-appearance: button; appearance: button; } .content kbd { font-size: 12px; font-size: 0.75rem; line-height: 21.6px; line-height: 1.35rem; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; padding: 2px 6px; -webkit-box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9; -moz-box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9; box-shadow: 0 0 4px #ffffff inset, 0 2px 0 #d9d9d9; } .content p img { vertical-align: middle; } .content p pre { padding: 1.5em; } .content pre { padding: 0; border: 0; tab-size: 4; -o-tab-size: 4; -moz-tab-size: 4; } .content pre, .content code { font-size: 11.89px; font-size: 0.743rem; line-height: 21.4px; line-height: 1.34rem; font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; } .content pre a, .content code a { border: 0; } .content pre code { padding: 0.75em; display: block; } .content strong { color: #000; } .content ul ul, .content ol ul, .content ul ol, .content ol ol { margin: 0.75em 0; } .content ul li, .content ol li { font-size: 14px; font-size: 0.875rem; line-height: 30.24px; line-height: 1.89rem; } .content textarea:not([class^="cke"]) { width: 100%; } .content div.todo { border: 2px dotted #444; padding: 10px; margin: 60px 0 10px 0; /* Remove me some day */ } .content div.todo:before { content: "TODO"; font-weight: bold; } body a.button-a, body button.button-a, body input.button-a { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; height: 36px; line-height: 36px; padding: 0 1.1em; font-weight: 700; color: #3e3e3e; white-space: nowrap; text-decoration: none; display: inline-block; cursor: pointer; border: 0; vertical-align: middle; margin: 1px 0; background: transparent; } body a.button-a.icon-pos-left, body button.button-a.icon-pos-left, body input.button-a.icon-pos-left { padding-left: .8em; } body a.button-a.icon-pos-right, body button.button-a.icon-pos-right, body input.button-a.icon-pos-right { padding-right: .8em; } body a.button-a.button-a-no-text, body button.button-a.button-a-no-text, body input.button-a.button-a-no-text { -webkit-border-radius: 100px; -webkit-background-clip: padding-box; -moz-border-radius: 100px; -moz-background-clip: padding; border-radius: 100px; background-clip: padding-box; width: 36px; padding: 0; text-indent: -999px; overflow: hidden; position: relative; text-align: center; } body a.button-a.button-a-no-text:before, body button.button-a.button-a-no-text:before, body input.button-a.button-a-no-text:before { position: absolute; left: 50%; top: 50%; margin: -9px 0 0 -9px; } @media (max-width: 900px) { body a.button-a.button-a-mobile-collapsed, body button.button-a.button-a-mobile-collapsed, body input.button-a.button-a-mobile-collapsed { -webkit-border-radius: 100px; -webkit-background-clip: padding-box; -moz-border-radius: 100px; -moz-background-clip: padding; border-radius: 100px; background-clip: padding-box; width: 36px; padding: 0; text-indent: -999px; overflow: hidden; position: relative; text-align: center; } body a.button-a.button-a-mobile-collapsed:before, body button.button-a.button-a-mobile-collapsed:before, body input.button-a.button-a-mobile-collapsed:before { position: absolute; left: 50%; top: 50%; margin: -9px 0 0 -9px; } body a.button-a.button-a-mobile-collapsed:before, body button.button-a.button-a-mobile-collapsed:before, body input.button-a.button-a-mobile-collapsed:before { position: absolute; left: 50%; top: 50%; margin: -9px 0 0 -9px; } } body a.button-a:active, body button.button-a:active, body input.button-a:active, body a.button-a:hover, body button.button-a:hover, body input.button-a:hover { color: #fff; background: #23adc2; } body a.button-a:focus, body button.button-a:focus, body input.button-a:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #93c6ef; } body a.button-a-soft, body button.button-a-soft, body input.button-a-soft { background: #e7e7e7; } body a.button-a-soft:active, body button.button-a-soft:active, body input.button-a-soft:active, body a.button-a-soft:hover, body button.button-a-soft:hover, body input.button-a-soft:hover { color: #3e3e3e; background: #cecece; } body a.button-a-background, body button.button-a-background, body input.button-a-background, body a.navigation-b ul li a:hover, body button.navigation-b ul li a:hover, body input.navigation-b ul li a:hover { color: #fff; background: #27c0d8; } body a.button-a-background:active, body button.button-a-background:active, body input.button-a-background:active, body a.button-a-background:hover, body button.button-a-background:hover, body input.button-a-background:hover, body a.navigation-b ul li a:hover:active, body button.navigation-b ul li a:hover:active, body input.navigation-b ul li a:hover:active, body a.navigation-b ul li a:hover:hover, body button.navigation-b ul li a:hover:hover, body input.navigation-b ul li a:hover:hover { color: #fff; background: #23adc2; } .balloon-a { font-size: 12px; font-size: 0.75rem; line-height: 21.6px; line-height: 1.35rem; -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; border-bottom: 3px solid #d4d4d4; background: #ebebeb; display: inline-block; white-space: nowrap; padding: .4em 1.2em .2em; font-weight: 700; position: relative; z-index: 1000; text-transform: none; color: #575757; } .balloon-a:hover { color: #575757; } .balloon-a:before { content: ''; width: 0; height: 0; border-style: solid; position: absolute; } .balloon-a-ne:before, .balloon-a-nw:before { top: -13px; border-width: 0 9px 15.6px 9px; border-color: transparent transparent #ebebeb transparent; } .balloon-a-se:before, .balloon-a-sw:before { bottom: -13px; border-width: 15.6px 9px 0 9px; border-color: #ebebeb transparent transparent transparent; } .balloon-a-nw:before, .balloon-a-sw:before { left: 20px; } .balloon-a-ne:before, .balloon-a-se:before { right: 20px; } .icon-pos-left:before, .icon-pos-right:after { content: ''; display: inline-block; width: 18px; height: 18px; vertical-align: middle; background-repeat: no-repeat; } .icon-pos-left:before { margin-right: 10px; } .icon-pos-right:after { margin-left: 10px; } .icon-download:before, .icon-download:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAQFJREFUOBGtVDESgjAQBGfobHwE/AIa/AN/8EEWfMWGZ+gDaG2ws8BdyY13SRgGcGducre3WQ5NSJIIxnGsES3ijhhcMCdXR7ZYCqIc0SGWQE1ud7sKjRLxXHJQfWpLYwaCk6wxET/u+U2GIngd8yRViINau28bBH/YAGqvSQPhRNQHqBqj3FY0NKq27TW7qhSTDaCOhkaRAj7Hmm8S4V+c6C+gUa+crsizuWmoc70MKbWCnqPy2GvcUJxE4a/sIajRaGkU+/sf4IuISQGePR/T/QMbHEhwPLVnMWPuOCwGnWg41dwVeaN3ccHch70idIRi/6WV0WC2/zMiZm661R+2DxyEdjTuST3mAAAAAElFTkSuQmCC"); } .icon-question-mark:before, .icon-question-mark:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAUhJREFUOBGllLFOAkEQhjk0WthT2JFA7Czsqc7OxFLewEeAZ/AVbO0tTLTSBKhstTBUNkYLEoVAbD2//zILe5e9uwCT/JnZmX/+m83ebq0WsCRJYnANxmBhUKxcHGjJpiC1wQBUmTjtbLetKHTAT5WCVxe3kxEjoUmKRL6pvYEZyJt6VpOxCG3nmfyx+yJxBM7BFPg2SDlkTv2sxZqi4YnUvfgswI9FuHAkzz9EUTTRmqYeTifXsvoj/s9i57oi6ljz9kviFdyBCbgHe+rCn4C8jVXQ18rshuKOiTSIXwLkRZWQTurARJrE7wERpea7kD7BkcgB+yB3CFGlPmgqCNiXhEagSGif2qU1Ln8FW/tupK3pXhXZrWNDuCoikY/rHPMT5KFr2MAPTSM90rIrUjJIeq1WV0RTwN7+0rrtILb9M+LEbLq1H7Z/Ea3+RvBddl0AAAAASUVORK5CYII="); } .icon-close:before, .icon-close:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAUlJREFUOBGllDFuwzAMRe3Cd+jYKUCzd/XkDtm9dsoVOuUqBnqBoodwgBwiW8ZsXTIWqPu+Iia0LMAoTOBbJEV+UZTkosjIMAwN6MARXCKky9dkUsYuglagB3OimNU4O1pM1OB7jsHNK7YekeFQJZ5kj/0LcnLA+RMnlHOvDMNv5wO7BFuQkn3hq0ALjKwPVeF4BSaqpLRy0T1ZIHFz75bE2BR8dBImqmBrwRplg09QmR/9GZyBSadAHauXCZkRROKURLlHEemepJIlIyhHotzLg1/N6erTxtmmvqA8muHGIbc1rTBqrEuwnqWnGbbmmz0hwaHtvM2QhWbrXZnosvnTWWPrdCY9w7cDJtf3h9VHjy5Zq9UZ08beyJh7Aicg6W/VYvgnIjJdNn9PMIOITJWcgnV9VvcnEitY/mitNFZZ/hsxsljdv39sfybRQ4R/kU0MAAAAAElFTkSuQmCC"); } .ie8 .switch > * { vertical-align: middle; } .ie8 .switch input[type="radio"] { margin: 0 0.25em; display: inline-block; } .ie8 .switch label { margin-left: 0 !important; margin-right: 0 !important; } .ie8 .switch label[data-for="1"] { float: left; } .ie8 .switch label[data-for="2"] { float: right; } .ie8 .switch .switch-inner { display: none; } .switch { font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; font-weight: bold; background-color: #27c0d8; overflow: hidden; display: inline-block; padding: 0.75em 0.25em; color: #fff; -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; position: relative; } .switch input[type="radio"] { display: none; } .switch label { position: relative; z-index: 2; float: left; cursor: pointer; padding: 0 0.75em; } .switch label:hover { text-decoration: underline; } .switch .switch-inner { float: left; background-color: #FFF; height: 1.5em; width: 4.125em; padding: 2px; margin: 0 0.25em; -webkit-border-radius: 5.5px; -webkit-background-clip: padding-box; -moz-border-radius: 5.5px; -moz-background-clip: padding; border-radius: 5.5px; background-clip: padding-box; } .switch .switch-inner .handler { overflow: hidden; position: relative; display: block; height: 1.5em; width: 1.5em; background: #25b4cb; -webkit-border-radius: 4.5px; -webkit-background-clip: padding-box; -moz-border-radius: 4.5px; -moz-background-clip: padding; border-radius: 4.5px; background-clip: padding-box; } .switch .switch-inner .handler:before { content: ''; display: block; position: absolute; top: 0; right: 0; bottom: 3px; left: 0; background-color: #34c4da; -webkit-border-bottom-left-radius: 4.5px; -moz-border-radius-bottomleft: 4.5px; border-bottom-left-radius: 4.5px; -webkit-border-bottom-right-radius: 4.5px; -webkit-background-clip: padding-box; -moz-border-radius-bottomright: 4.5px; -moz-background-clip: padding; border-bottom-right-radius: 4.5px; background-clip: padding-box; } .switch:hover .switch-inner .handler:before { background: #45c9dd; } .switch input[data-num="2"]:checked ~ .switch-inner > .handler { margin-left: auto; } .switch input[data-num="2"]:checked ~ label[data-for="1"] { padding-right: 5.125em; margin-right: -4.375em; } .switch input[data-num="1"]:checked ~ label[data-for="2"] { padding-left: 5.125em; margin-left: -4.375em; } .toggler { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .toggler label { cursor: pointer; } .toggler [data-collapse] { display: inherit; } .toggler [data-expand] { display: none; } .toggler.collapsed [data-collapse] { display: none; } .toggler.collapsed [data-expand] { display: inherit; } .toggler-container { overflow: hidden; } .toggler-container.collapsed { height: 0; } .icon-toggler-expanded:before, .icon-toggler-collapsed:before, .icon-toggler-expanded:after, .icon-toggler-collapsed:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAByCAYAAABeOoENAAAAAXNSR0IArs4c6QAAAbxJREFUaAXtmT1KBEEQhRdFQdBEMfQEBoaGopl3MfECXsFERLyBh/AUIuwJDEUQM//eB11Dz1A1uzotGFTBY2rr58306+kNpmazP7Z98V8Kj8JrAT4xcgttXRVXwofwFYAcNdS6RuJegOBTuBUOhc0CfGLkqKHWJeMuFDwJJ0Jk5Kihlp6esW4embuNkVgTNdTS09MMEbkDj76sUUsPvZ2xIwTRATsQuBuxGsTIYdSSo7cztpggwprdyKlJ8ImZUUuM3s48ol1lXwQjwydm5hINl2bF53KMCL82d2mR2GvqnBfg1+aKPbb9p+oGtYXbT1GTFxKiZkfEyHgy7x0y0clR454zSGpDMzaA3fzV30hNln4qkAqkAqlAKpAKpAKpQCqQCqQCqUAqkAqkAqlAKpAKpAKpQCrw3xWY/GGcz++TP9U3Gx40GWdEAxabXA33NBywRCOfdzFcCztDJv12Rz7REMpmIc9qPBNWK0J3COWNxegxIrs+KHZcyHpjsZUSXPaypcLtseJFS3tT84WwUZG4S4vEZkl3wl5FYK4rdrT9R9Y1uIbbT12TFxKiZkfEyCYfWojMJv+NGNGPr99GI9DP7P9TCgAAAABJRU5ErkJggg=="); } .icon-toggler-expanded.icon-light:before, .icon-toggler-collapsed.icon-light:before, .icon-toggler-expanded.icon-light:after, .icon-toggler-collapsed.icon-light:after { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAByCAYAAABeOoENAAAAAXNSR0IArs4c6QAAAcVJREFUaAXtmT9KA1EQxhMlASE2SkpPkCJlStHOu3gGwRPYBAm5gYfwFBKwtrARRAh26vr7ljfx7TrLChtBcAa+zOSbPy/7vcTC6fV+04qimIArsALrBMXiJq1nUzQEc/AOmkw51QzdgUqAWyD7AEswA6MExeKUk6n2+zBInSJ7BKfuaZDKpRpcMa/UQUgTfWSd1jjEmlSTatXzpRlvJKJsacVtXrVlB72bWgjdiGwmEj8FOq1u4qapRprJVvkgXbFsZCTxomSqL4ssr0uQrY3TJ/AGjeFfVJlM8diaiCuDdlLiIfmNcP1+/wnu0hoVJ84oq7XeUhNXbE4dgPuEgU2Qh3PFbrx+Gs6E2hD/+tMJ3b+QadB2fiLZsG4/2poG3f6M5MMiDgVCgVAgFAgFQoFQIBQIBUKBUCAUCAVCgVAgFAgFQoFQIBQIBf66AiwLuv1jnAH/Zb/Go5abq/qdwvsLFhJNK583ctfg0Bnmrnwq+zVrYoDZM8E52M1yP9uvqcGmZP6O+CTl3LWYHdTm9yk4aCzilLZHe6XmAuzZEGL30ZrEpr64AUc2wDycK7a7X6P42BpzD+9fv4pIxn4tWznnwm0r/gQpiG1tFshTowAAAABJRU5ErkJggg=="); } .icon-toggler-expanded:before, .icon-toggler-expanded:after { background-position: top left; } .icon-toggler-collapsed:before, .icon-toggler-collapsed:after { background-position: bottom left; } .modal { padding: 20px; border-radius: 3px; background-color: white; max-width: 700px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 80% !important; top: 50% !important; -webkit-transform: translate(-50%, -50%) !important; -moz-transform: translate(-50%, -50%) !important; -o-transform: translate(-50%, -50%) !important; -ms-transform: translate(-50%, -50%) !important; transform: translate(-50%, -50%) !important; } .modal-close { -webkit-border-radius: 100px; -webkit-background-clip: padding-box; -moz-border-radius: 100px; -moz-background-clip: padding; border-radius: 100px; background-clip: padding-box; cursor: pointer; height: 18px; width: 18px; position: absolute; top: 10px; right: 10px; font-size: 17px; text-align: center; line-height: 19px; background: #cccccc; } main .grid-container, header .grid-container, .navigation-a > div, footer > div { max-width: 968px; } .header-a { margin-top: 30px; } .footer-a { border-top: 1px solid #d9d9d9; } .adjoined-top { background-color: #27c0d8; color: #fff; } .adjoined-top .content h1, .adjoined-top .content h2, .adjoined-top .content h3, .adjoined-top .content h4, .adjoined-top .content h5 { color: #fff; } .adjoined-top .content p { font-size: 18px; font-size: 1.125rem; line-height: 32.4px; line-height: 2.02rem; font-weight: 100; } .adjoined-top .content p a { text-decoration: none; border-bottom: 1px dotted #fff; color: inherit; } .adjoined-top .content p a:hover { color: #e6e6e6; } .adjoined-top .content button { color: #fff; } .adjoined-top .content strong { color: #fff; } .adjoined-top .content code { font-size: inherit; color: #27c0d8; } .adjoined-bottom { position: relative; } .adjoined-bottom:before { z-index: -1; content: ''; background: #27c0d8; position: absolute; top: 0; left: 0; right: 0; height: 50%; } main .grid-container, header .grid-container, .navigation-a > div, footer > div { max-width: 1052px; } main .grid-container.freed-width { max-width: none; } .switch { background: #25b4cb; float: right; overflow: visible; } .switch .balloon-a { position: absolute; top: -40px; right: 50%; margin-right: -15px; background: #FFEFC1; border-bottom-color: #DCDCA4; } .switch .balloon-a:before { border-color: #FFEFC1 transparent transparent transparent; } #toolbar .editors-container { overflow: hidden; height: 0; transition: height 200ms; } #toolbar .editors-container.active { height: auto; } #main #editor { background: #FFF; padding: 2% 4%; border: dashed 5px #27c0d8; } div.cke a.cke_button, div.cke .cke_combo_button { border-bottom: none; } div.cke a.cke_button.cke_combo_button, div.cke .cke_combo_button.cke_combo_button { border-bottom: 1px solid #a6a6a6; } #main .adjoined-top:before { height: 335px; } #toolbar .adjoined-top:before { height: 219px; } #toolbar .adjoined-top .grid-container-nested { height: 147px; } .content .grid-switch-magic { margin: 3.5em 0 0; } #info-box { padding-bottom: 0; } #info-box > div { width: 100%; text-align: right; } #info-box > div .toggler { padding-right: 0; } #info-box > div .toggler:hover { background: transparent; color: #000; } #info-box > div .toggler:hover > label { text-decoration: underline; } #info-box > div h2 { float: left; margin-top: 0; } #info-box > div#instructions-container { text-align: left; } #toolbarModifierWrapper { overflow: hidden; height: 0; opacity: 0; transition: height 200ms; } #toolbarModifierWrapper.active { height: auto; opacity: 1; } header { overflow: visible; } header div.grid-container { overflow: visible; } header .navigation-b { overflow: visible; } header .navigation-b ul { overflow: visible; } header .navigation-b a { position: relative; } header .balloon-a { position: absolute; top: 48px; left: 50%; margin-left: -35px; } @media (max-width: 1140px) { header .balloon-a { left: auto; margin-left: auto; right: 50%; margin-right: -35px; } header .balloon-a:before { left: auto; right: 22px; } } @media (max-width: 900px) { header .balloon-a { display: none; } } #toolbar .cke_toolbar { pointer-events: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: default; } .some-toolbar-active .cke_toolbar { zoom: 1; filter: alpha(opacity=50); -webkit-opacity: 0.5; -moz-opacity: 0.5; opacity: 0.5; } .cke_toolbar.active { position: relative; zoom: 1; filter: alpha(opacity=100); -webkit-opacity: 1; -moz-opacity: 1; opacity: 1; } .cke_toolbar.active:after { content: ''; display: block; position: absolute; top: 0; right: 6px; bottom: 5px; left: 0; -webkit-border-radius: 5px; -webkit-background-clip: padding-box; -moz-border-radius: 5px; -moz-background-clip: padding; border-radius: 5px; background-clip: padding-box; -webkit-box-shadow: 0px 0px 15px 3px #fff4b0; -moz-box-shadow: 0px 0px 15px 3px #fff4b0; box-shadow: 0px 0px 15px 3px #fff4b0; } .cke_toolbar.active .cke_toolgroup { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; border-color: #e3c300; } .cke_toolbar.active .cke_combo, .cke_toolbar.active .cke_toolgroup { position: relative; z-index: 2; } .cke_toolbar.active .cke_combo_button { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .unselectable { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .toolbar { padding: 5px 0; margin-bottom: 2.4em; overflow: hidden; background: #fff; } .toolbar button.button-a.cke_button { cursor: pointer; display: inline-block; padding: 4px 6px; outline: 0; border: 1px solid #a6a6a6; } .toolbar button.button-a.hidden { display: none; } .toolbar button.button-a.left { float: left; margin-right: 8px; } .toolbar button.button-a.right { float: right; margin-left: 8px; } .toolbar button.button-a .highlight { color: #ffefc1; } .configContainer.hidden, .toolbarModifier.hidden, .toolbarModifier-hints.hidden { display: none; } .toolbarModifier :focus, .toolbar button:focus, .configContainer textarea.configCode:focus { outline: none; } div.toolbarModifier { padding: 0; overflow: hidden; width: 100%; position: relative; display: table; border-collapse: collapse; } div.toolbarModifier ::-moz-focus-inner { border: 0; } div.toolbarModifier .empty { display: none; } div.toolbarModifier.empty-visible .empty { display: table-row; zoom: 1; filter: alpha(opacity=60); -webkit-opacity: 0.6; -moz-opacity: 0.6; opacity: 0.6; } div.toolbarModifier .empty > p { line-height: 31px; } div.toolbarModifier > ul { padding: 0; margin: 0; border-top: 1px solid #cccccc; width: 100%; } div.toolbarModifier > ul[data-type="table-header"] { display: table-header-group; } div.toolbarModifier > ul[data-type="table-body"] { display: table-row-group; } div.toolbarModifier > ul p { padding: 0; margin: 0; } div.toolbarModifier > ul > li { display: table-row; } div.toolbarModifier > ul > li[data-type="header"] { font-weight: bold; user-select: none; cursor: default; } div.toolbarModifier > ul > li[data-type="group"], div.toolbarModifier > ul > li[data-type="separator"] { border-bottom: 1px solid #cccccc; } div.toolbarModifier > ul > li[data-type="subgroup"] { border-top: 1px solid #eee; } div.toolbarModifier > ul > li[data-type="subgroup"]:first-child { border-top: none; } div.toolbarModifier > ul > li[data-type="group"].active, div.toolbarModifier > ul > li[data-type="group"]:hover, div.toolbarModifier > ul > li[data-type="separator"].active, div.toolbarModifier > ul > li[data-type="separator"]:hover { overflow: hidden; z-index: 2; } div.toolbarModifier > ul > li[data-type="group"].active, div.toolbarModifier > ul > li[data-type="separator"].active, div.toolbarModifier > ul > li[data-type="group"].active:hover, div.toolbarModifier > ul > li[data-type="separator"].active:hover { background: #f0fafb; } div.toolbarModifier > ul > li[data-type="group"]:hover, div.toolbarModifier > ul > li[data-type="separator"]:hover { background: #fffbe3; } div.toolbarModifier > ul > li[data-type="separator"] { background: #f5f5f5; } div.toolbarModifier > ul > li[data-type="separator"]:after { content: ''; width: 100%; } div.toolbarModifier > ul > li[data-type="separator"] > p { padding: 2px 5px; } div.toolbarModifier > ul > li > p, div.toolbarModifier > ul > li > ul { display: table-cell; vertical-align: middle; } div.toolbarModifier > ul > li p { padding-left: 5px; min-width: 200px; } div.toolbarModifier > ul > li p span { white-space: nowrap; cursor: default; } div.toolbarModifier > ul > li p span button { font-size: 12.666px; margin-right: 5px; cursor: pointer; background: #fff; -webkit-border-radius: 5px; -webkit-background-clip: padding-box; -moz-border-radius: 5px; -moz-background-clip: padding; border-radius: 5px; background-clip: padding-box; border: 1px solid #bbb; padding: 0 7px; line-height: 12px; height: 20px; } div.toolbarModifier > ul > li p span button:not(.disabled):hover, div.toolbarModifier > ul > li p span button:not(.disabled):focus { color: #fff; background-color: #454545; border-color: transparent; } div.toolbarModifier > ul > li p span button.move.disabled { cursor: default; zoom: 1; filter: alpha(opacity=20); -webkit-opacity: 0.2; -moz-opacity: 0.2; opacity: 0.2; } div.toolbarModifier > ul > li ul { border-collapse: collapse; padding: 0; width: 100%; } div.toolbarModifier > ul > li ul li { display: table-row; list-style-type: none; line-height: 1; } div.toolbarModifier > ul > li ul li[data-type="subgroup"] { border-top: 1px solid #dddddd; } div.toolbarModifier > ul > li ul li[data-type="subgroup"]:first-child { border-top: 0; } div.toolbarModifier > ul > li ul li[data-type="subgroup"] [data-type="button"] { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; padding: 0 2px; } div.toolbarModifier > ul > li ul li[data-type="subgroup"] [data-type="button"]:focus { background: rgba(0, 0, 0, 0.04); } div.toolbarModifier > ul > li ul li[data-type="subgroup"] [data-type="button"] input { vertical-align: middle; } div.toolbarModifier > ul > li ul li > p, div.toolbarModifier > ul > li ul li > ul { display: table-cell; vertical-align: middle; } div.toolbarModifier > ul > li ul li ul { padding: 0; } div.toolbarModifier > ul > li ul li ul li { padding: 0; display: inline-block; cursor: pointer; margin: 2px 5px 2px 0; } div.toolbarModifier > ul > li ul li ul li .cke_combo_text { cursor: pointer; white-space: nowrap; } div.toolbarModifier > ul > li ul li ul li .cke_toolgroup, div.toolbarModifier > ul > li ul li ul li .cke_combo_button { cursor: pointer; margin: 0; vertical-align: middle; border: 1px solid #ddd; font-size: 11.41px; font-size: 0.713rem; line-height: 20.54px; line-height: 1.28rem; } div.toolbarModifier > .codemirror-wrapper { overflow-y: auto; } div.toolbarModifier-hints { float: right; width: 350px; min-width: 150px; overflow-y: auto; margin-left: 1.5em; } div.toolbarModifier-hints h3 { font-size: 18.08px; font-size: 1.13rem; line-height: 32.54px; line-height: 2.03rem; padding: 0.36em 1.5em; background: #f5f5f5; border-bottom: 1px solid #dddddd; margin-top: 0; margin-bottom: 1.2em; } div.toolbarModifier-hints dl { margin-bottom: 1.2em; overflow: hidden; } div.toolbarModifier-hints dl .list-header { font-weight: bold; border: 0; padding-bottom: 0.6em; } div.toolbarModifier-hints dl > p { text-align: center; } div.toolbarModifier-hints dl dt { float: left; width: 9em; clear: both; text-align: right; border-top: 1px solid #dddddd; padding-left: 1.5em; padding-right: .1em; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } div.toolbarModifier-hints dl dt code { background: none; border: none; vertical-align: middle; } div.toolbarModifier-hints dl dd { margin-left: 10em; clear: right; padding-right: 1.5em; } div.toolbarModifier-hints dl dd code { line-height: 2.2em; } div.toolbarModifier-hints dl dd:after { content: '\00a0'; display: block; clear: left; float: right; height: 0; width: 0; } .toolbarModifier-hints, .configContainer textarea.configCode, .CodeMirror { -webkit-border-radius: 3px; -webkit-background-clip: padding-box; -moz-border-radius: 3px; -moz-background-clip: padding; border-radius: 3px; background-clip: padding-box; border: 1px solid #ccc; font-size: 13.01px; font-size: 0.813rem; line-height: 23.42px; line-height: 1.46rem; } .configContainer textarea.configCode, .CodeMirror pre, .CodeMirror-linenumber { font-size: 13.01px; font-size: 0.813rem; line-height: 23.42px; line-height: 1.46rem; font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; } .CodeMirror pre { border: none; padding: 0; margin: 0; } .configContainer textarea.configCode { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; color: #575757; padding: 10px; width: 100%; min-height: 500px; margin: 0; resize: none; outline: none; -moz-tab-size: 4; tab-size: 4; white-space: pre; word-wrap: normal; overflow: auto; } .CodeMirror-hints.toolbar-modifier { padding: 0; color: #575757; font-size: 14px; font-size: 0.875rem; line-height: 25.2px; line-height: 1.57rem; font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; } .CodeMirror-hints.toolbar-modifier .CodeMirror-hint-active { color: #575757; background: #f0fafb; } .CodeMirror-hints.toolbar-modifier > li:hover { background: #fffbe3; } /* Text modifier */ #toolbarModifierWrapper { margin-bottom: 1.2em; } #toolbarModifierWrapper .invalid .CodeMirror { background: #fff8f8; border-color: red; } #toolbarModifierWrapper .CodeMirror { height: auto; padding: 0 0.6em; } .staticContainer { position: fixed; top: 0; width: 100%; z-index: 10; } .staticContainer > .grid-container { max-width: 1052px; } .staticContainer > .grid-container .inner { background: #fff; } .staticContainer > .grid-container .inner .toolbar { margin-bottom: 0; } #help { position: relative; top: -15px; left: -5px; } #help-content { display: none; } /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2dsb2JhbC9nbG9iYWwubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2NvcmUvY29yZS5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvZ3JpZC9ncmlkLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xlc3NoYXQvYnVpbGQvbGVzc2hhdC5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvaGVhZGVyLWEvaGVhZGVyLWEubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL25hdmlnYXRpb24tYS9uYXZpZ2F0aW9uLWEubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL25hdmlnYXRpb24tYi9uYXZpZ2F0aW9uLWIubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Zvb3Rlci1hL2Zvb3Rlci1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2J1dHRvbi1hL2J1dHRvbi1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9iYWxsb29uLWEvYmFsbG9vbi1hLmxlc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2tzb3VyY2Utc2FtcGxlcy1mcmFtZXdvcmsvY29tcG9uZW50cy9pY29uL2ljb24ubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL3N3aXRjaC9zd2l0Y2gubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL3RvZ2dsZXIvdG9nZ2xlci5sZXNzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nrc291cmNlLXNhbXBsZXMtZnJhbWV3b3JrL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Jhc2ljc2FtcGxlL2NvcmUubGVzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ja3NvdXJjZS1zYW1wbGVzLWZyYW1ld29yay9jb21wb25lbnRzL2Jhc2ljc2FtcGxlL2Fkam9pbmVkLmxlc3MiLCIuLi8uLi9zYW1wbGVzL2xlc3MvY3VzdG9tLmxlc3MiLCIuLi8uLi9zYW1wbGVzL3Rvb2xiYXJjb25maWd1cmF0b3IvbGVzcy90b29sYmFybW9kaWZpZXIubGVzcyIsIi4uLy4uL3NhbXBsZXMvdG9vbGJhcmNvbmZpZ3VyYXRvci9sZXNzL2Jhc2UubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBc0RBLFFBSGlDO0VBeUNoQztJQUNDLHdCQUFBOzs7QUMxRkY7QUFBUztBQUFPO0FBQVM7QUFBWTtBQUFRO0FBQVE7QUFBUTtBQUFRO0FBQU07QUFBTTtBQUFLO0VBQ3JGLGNBQUE7O0FBR0Q7QUFBTTtFQUNMLFNBQUE7RUFDQSxVQUFBO0VBQ0Esd0JETitCLHVDQ00vQjtFQUNBLGdCQUFBO0VBQ0EsY0FBQTs7QUNIQSxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsVUFBQTs7QUFERCxZQUFZO0VBQ1gsV0FBQTs7QUY0Q0YsUUFIaUM7RUVqQ2hDO0VBS0MsWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0VBQVosWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0VBQVosWUFBWTtFQUFaLFlBQVk7RUFBWixZQUFZO0lBSlosV0FBQTs7O0FBYUYsQ0FBQztFQ3FSQyw4QkFBQTtFQUNBLDJCQUFBO0VBQ0Esc0JBQUE7RURyUkQsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7O0FBSUEsQ0FEQSxxQkFDQztBQUFELGVBQUM7QUFBUSxDQURULHFCQUNVO0FBQUQsZUFBQztFQUNULFNBQVMsRUFBVDtFQUNBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGNBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTs7QUFLRCxDQURBLHFCQUNDO0FBQUQsZUFBQztFQUNBLFdBQUE7O0FBSUY7RUMyUEUsOEJBQUE7RUFDQSwyQkFBQTtFQUNBLHNCQUFBO0VEM1BELGlCQUFBO0VBQ0Esa0JBQUE7O0FBS0Msc0JBREQsRUFBQyxxQkFDQztFQUNBLGVBQUE7O0FBR0Qsc0JBTEQsRUFBQyxxQkFLQztFQUNBLGdCQUFBOztBRmpCSCxRQUhpQztFRTBCOUIsc0JBREQsRUFBQyxxQkFDQztJQUNBLGdCQUFBOztFQUdELHNCQUxELEVBQUMscUJBS0M7SUFDQSxpQkFBQTs7O0FFN0VKO0VBQ0MsaUJBQUE7RUFHQSxnQkFBQTs7QUFKRCxTQU1DO0VBQ0MsZ0JBQUE7O0FKMENGLFFBSGlDO0VBR2pDLFNJM0NDO0lBSUUsa0JBQUE7OztBQVZILFNBTUMsZUFPQztFQUNDLG1CQUFBOztBQ1ZIO0VBQ0MsWUFBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLE1BQUE7RUFDQSxVQUFBO0VBQ0EsZ0JBQUE7O0FMcUNELFFBSGlDO0VBR2pDO0lLbENFLGtCQUFBOzs7QUFYRixhQWNDO0VBQ0MsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsZ0JBQUE7O0FBakJGLGFBY0MsR0FLQztBQW5CRixhQWNDLEdBS0ssR0FBRztFQUNOLHFCQUFBOztBTHlCSCxRQUhpQztFQUdqQyxhSy9CQztJQVVFLFdBQUE7SUFDQSx1QkFBQTtJQUNBLG1CQUFBO0lBQ0EscUJBQUE7SUFDQSxXQUFBOztFQUVBLGFBaEJGLEdBZ0JHO0VBQVMsYUFoQlosR0FnQmE7SUFDVixhQUFBOzs7QUFLRCxhQXRCRixHQXFCRSxhQUNDO0VBQ0EsZ0JBQUE7O0FMUUosUUFIaUM7RUFHakMsYUsvQkMsR0FxQkUsYUFDQztJQUlDLGdCQUFBOzs7QUFJRixhQTlCRixHQXFCRSxhQVNDO0VBQ0EsaUJBQUE7O0FMQUosUUFIaUM7RUFHakMsYUsvQkMsR0FxQkUsYUFTQztJQUlDLGtCQUFBOzs7QUFNRixhQXhDRixHQXVDQyxHQUNHO0VBQ0QsaUJBQUE7O0FBdkRKLGFBY0MsR0F1Q0MsR0FLQztFTHhDRixlQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VLdUNHLGlCQUFBO0VBQ0EsV0FBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLHFCQUFBO0VBQ0EseUJBQUE7O0FBRUEsYUFyREgsR0F1Q0MsR0FLQyxFQVNFO0VBQ0EsZUFBQTtFQUNBLGNBQUE7O0FBUUoseUJBQUM7QUFBUyx5QkFBQztFQUNWLHNCQUFrQixxckJBQWxCOztBQ3BGRjtFQUNDLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTs7QU5nREQsUUFIaUM7RUFHakM7SU03Q0Usa0JBQUE7SUFDQSxnQkFBQTtJQUdBLFVBQUE7OztBQVZGLGFBYUM7RUFDQyxVQUFBO0VBQ0EsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsaUJBQUE7O0FBakJGLGFBYUMsR0FNQztBQW5CRixhQWFDLEdBTUssR0FBRztFQUNOLHFCQUFBOztBTitCSCxRQUhpQztFQUdqQyxhTXRDQztJQVdFLGNBQUE7SUFDQSxXQUFBO0lBQ0EscUJBQUE7OztBTnlCSCxRQUhpQztFQUdqQyxhTXRDQyxHQWdCQztJQUVFLGtCQUFBOzs7QUFHRCxhQXJCRixHQWdCQyxHQUtHO0VBQ0QsaUJBQUE7O0FOZ0JKLFFBSGlDO0VBR2pDLGFNdENDLEdBZ0JDLEdBS0c7SUFJQSxjQUFBOzs7QUF0Q0wsYUFhQyxHQWdCQyxHQWFDO0VId1FELDhCQUFBO0VBQ0EsMkJBQUE7RUFDQSxzQkFBQTtFR3hRRSx5QkFBQTtFQUNBLHFCQUFBO0VBQ0EsYUFBQTs7QU5LSixRQUhpQztFQUdqQyxhTXRDQyxHQWdCQyxHQWFDO0lBT0UsV0FBQTtJSHFPSCx3QkFBQTtJQUFpQyxvQ0FBQTtJQUNqQyxxQkFBQTtJQUE4Qiw2QkFBQTtJQUM5QixnQkFBQTtJQUF5Qiw0QkFBQTs7O0FJeFIzQjtFUHdCQyxlQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VPeEJBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7O0FBTkQsU1A0RUM7RUFDQyxjQUFBO0VBQ0EscUJBQUE7RUFFQSxpQ0FBQTs7QUFFQSxTQU5ELEVBTUU7RUFDQSxjQUFBOztBT25GSCxTQVFDO0VBQ0MsU0FBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7O0FDWEY7RVJ3QkMsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUXpCQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EscUJBQUE7O0FBSkQsUUFTQztFQUNDLGdCQUFBOztBQVZGLFFBYUM7QUFiRCxRQWFLO0FBYkwsUUFhUztBQWJULFFBYWM7QUFiZCxRQWEwQixTQUFRLElBQUk7QUFidEMsUUFhd0Q7RUFDdEQsaUJBQUE7O0FBZEYsUUFpQkM7QUFqQkQsUUFpQk87RUxxUUwsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RUtyUXpCLGdCQUFBOztBQW5CRixRQXNCQztBQXRCRCxRQXNCTTtBQXRCTixRQXNCWTtBQXRCWixRQXNCaUI7RUFDZixtQkFBQTs7QUF2QkYsUUEwQkM7QUExQkQsUUEwQmE7RUFDWCxnQkFBQTtFQUNBLDhCQUFBO0VBQ0EscUJBQUE7O0FBN0JGLFFBb0NDLEVSd0NBO0FRNUVELFFBb0NJLEdSd0NIO0FRNUVELFFBb0NRLEdSd0NQO0FRNUVELFFBb0NZLFdSd0NYO0FRNUVELFFBb0N3QixHUndDdkI7QVE1RUQsUUFvQzRCLEdSd0MzQjtBUTVFRCxRQW9DZ0MsR1J3Qy9CO0FRNUVELFFBb0NvQyxHUndDbkM7QVE1RUQsUUFvQ3dDLEdSd0N2QztFQUNDLGNBQUE7RUFDQSxxQkFBQTtFQUVBLGlDQUFBOztBQUVBLFFROUNELEVSd0NBLEVBTUU7QUFBRCxRUTlDRSxHUndDSCxFQU1FO0FBQUQsUVE5Q00sR1J3Q1AsRUFNRTtBQUFELFFROUNVLFdSd0NYLEVBTUU7QUFBRCxRUTlDc0IsR1J3Q3ZCLEVBTUU7QUFBRCxRUTlDMEIsR1J3QzNCLEVBTUU7QUFBRCxRUTlDOEIsR1J3Qy9CLEVBTUU7QUFBRCxRUTlDa0MsR1J3Q25DLEVBTUU7QUFBRCxRUTlDc0MsR1J3Q3ZDLEVBTUU7RUFDQSxjQUFBOztBUW5GSCxRQXdDQztBQXhDRCxRQXdDSztBQXhDTCxRQXdDUztBQXhDVCxRQXdDYTtBQXhDYixRQXdDaUI7RUFDZixXQUFBO0VBQ0EsZ0JBQUE7O0FBMUNGLFFBd0NDLEdBS0M7QUE3Q0YsUUF3Q0ssR0FLSDtBQTdDRixRQXdDUyxHQUtQO0FBN0NGLFFBd0NhLEdBS1g7QUE3Q0YsUUF3Q2lCLEdBS2Y7QUE3Q0YsUUF3Q0MsR0FLTztBQTdDUixRQXdDSyxHQUtHO0FBN0NSLFFBd0NTLEdBS0Q7QUE3Q1IsUUF3Q2EsR0FLTDtBQTdDUixRQXdDaUIsR0FLVDtFQUNMLGtCQUFBOztBQTlDSCxRQXdDQyxHQVVDLEVBQUM7QUFsREgsUUF3Q0ssR0FVSCxFQUFDO0FBbERILFFBd0NTLEdBVVAsRUFBQztBQWxESCxRQXdDYSxHQVVYLEVBQUM7QUFsREgsUUF3Q2lCLEdBVWYsRUFBQztFQUNBLGdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTs7QUFHRCxRQWpCRCxHQWlCRSxNQUNBLEVBQUM7QUFERixRQWpCRyxHQWlCRixNQUNBLEVBQUM7QUFERixRQWpCTyxHQWlCTixNQUNBLEVBQUM7QUFERixRQWpCVyxHQWlCVixNQUNBLEVBQUM7QUFERixRQWpCZSxHQWlCZCxNQUNBLEVBQUM7RUFDQSxVQUFBOztBQUlGLFFBdkJELEdBdUJFLE9MMGJVO0FLMWJYLFFBdkJHLEdBdUJGLE9MMGJVO0FLMWJYLFFBdkJPLEdBdUJOLE9MMGJVO0FLMWJYLFFBdkJXLEdBdUJWLE9MMGJVO0FLMWJYLFFBdkJlLEdBdUJkLE9MMGJVO0VBQW1COzs7O2lFQUFBOztBSzFiOUIsUUF2QkQsR0F1QkUsT0FHQTtBQUhELFFBdkJHLEdBdUJGLE9BR0E7QUFIRCxRQXZCTyxHQXVCTixPQUdBO0FBSEQsUUF2QlcsR0F1QlYsT0FHQTtBQUhELFFBdkJlLEdBdUJkLE9BR0E7RUw0REQsMERBQUE7RUFDQSx1REFBQTtFQUNBLHFEQUFBO0VBQ0Esa0RBQUE7RUs3REUsVUFBQTs7QUFwRUosUUF5RUM7QUF6RUQsUUF5RVE7QUF6RVIsUUF5RWdCLFNBQVEsSUFBSTtFTDZNMUIsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RUFtQnpCLHVEQUFBO0VBQ0Esb0RBQUE7RUFDQSwrQ0FBQTtFS2hPQSxhQUFBO0VBQ0EsY0FBQTtFQUVBLHlCQUFBO0VBQ0Esa0JBQUE7O0FBRUEsUUFWRCxNQVVFO0FBQUQsUUFWTSxPQVVMO0FBQUQsUUFWYyxTQUFRLElBQUksZ0JBVXpCO0VBQ0EscUJBQUE7RUFDQSxVQUFBO0VMc05ELHdFQUFBO0VBQ0EscUVBQUE7RUFDQSxnRUFBQTs7QUs3U0YsUUFnR0M7RUFDQyw4QkFBQTtFQUNBLGVBQUE7O0FBbEdGLFFBcUdDO0VBQ0Msa0JBQUE7RUFDQSw2QlJyRzJDLHdCUXFHM0M7RVIvRUQsZUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBOztBUTNCRCxRQTJHQztFQUNDLGtCQUFBOztBQTVHRixRQStHQztFUnZGQSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VRc0ZDLG1CQUFBOztBQWpIRixRQW9IQztFUjVGQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFUTJGQyxpQkFBQTs7QUF0SEYsUUF5SEM7RVJqR0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFUWdHQyxnQkFBQTtFQUNBLGtCQUFBOztBQTVIRixRQStIQztFUnZHQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFUXNHQyxnQkFBQTtFQUNBLGtCQUFBOztBQWxJRixRQXFJQztFUjdHQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFUTRHQyxnQkFBQTtFQUNBLGtCQUFBOztBQXhJRixRQTJJQztFQUNDLFNBQUE7RUFDQSw2QkFBQTtFQUNBLGVBQUE7O0FBSUEsUUFERCxNQUNFO0VBQ0EsYUFBQTtFQUNBLGtCQUFBOztBQUdELFFBTkQsTUFNRTtFTCtDRCwwQkFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7O0FLeE1GLFFBOEpDO0VSdElBLGVBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RVFxSUMsb0JSL0o4Qix1Q1ErSjlCO0VBQ0EsZ0JBQUE7RUwwSUEsMERBQUE7RUFDQSx1REFBQTtFQUNBLGtEQUFBOztBSzdTRixRQXlLQyxFQUNDO0VBQ0Msc0JBQUE7O0FBM0tILFFBeUtDLEVBS0M7RUFDQyxjQUFBOztBQS9LSCxRQW1MQztFQUNDLFVBQUE7RUFDQSxTQUFBO0VBRUEsV0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTs7QUF6TEYsUUE0TEM7QUE1TEQsUUE0TE07RVJwS0wsa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RVFvS0MsZ0pBQUE7O0FBL0xGLFFBNExDLElBS0M7QUFqTUYsUUE0TE0sS0FLSjtFQUNDLFNBQUE7O0FBbE1ILFFBdU1DLElBQUk7RUFDSCxlQUFBO0VBQ0EsY0FBQTs7QUF6TUYsUUE0TUM7RUFDQyxXQUFBOztBQTdNRixRQWdOQyxHQUVDO0FBbE5GLFFBZ05LLEdBRUg7QUFsTkYsUUFnTkMsR0FFSztBQWxOTixRQWdOSyxHQUVDO0VBQ0gsZ0JBQUE7O0FBbk5ILFFBZ05DLEdBTUM7QUF0TkYsUUFnTkssR0FNSDtFUjlMRCxlQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLG9CQUFBOztBUTNCRCxRQTROQyxTQUFRLElBQUk7RUFDWCxXQUFBOztBQTdORixRQWdPQyxJQUFHO0VBQ0YsdUJBQUE7RUFDQSxhQUFBO0VBQ0EscUJBQUE7OztBQUdBLFFBTkQsSUFBRyxLQU1EO0VBQ0EsU0FBUyxNQUFUO0VBQ0EsaUJBQUE7O0FDbk9ELElBREQsRUFDRTtBQUFELElBREUsT0FDRDtBQUFELElBRFUsTUFDVDtFTmlSRCwwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFSGhRMUIsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFU25CRSxZQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLG1CQUFBO0VBQ0EscUJBQUE7RUFDQSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxTQUFBO0VBQ0Esc0JBQUE7RUFJQSxhQUFBO0VBR0EsdUJBQUE7O0FBRUEsSUF2QkYsRUFDRSxTQXNCQztBQUFELElBdkJDLE9BQ0QsU0FzQkM7QUFBRCxJQXZCUyxNQUNULFNBc0JDO0VBQ0Esa0JBQUE7O0FBR0QsSUEzQkYsRUFDRSxTQTBCQztBQUFELElBM0JDLE9BQ0QsU0EwQkM7QUFBRCxJQTNCUyxNQUNULFNBMEJDO0VBQ0EsbUJBQUE7O0FBb0JELElBaERGLEVBQ0UsU0ErQ0M7QUFBRCxJQWhEQyxPQUNELFNBK0NDO0FBQUQsSUFoRFMsTUFDVCxTQStDQztFTmtPRiw0QkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx5QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixvQkFBQTtFQUF5Qiw0QkFBQTtFTW5QdkIsV0FBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTs7QUFFQSxJQXhDSCxFQUNFLFNBK0NDLGlCQVJDO0FBQUQsSUF4Q0EsT0FDRCxTQStDQyxpQkFSQztBQUFELElBeENRLE1BQ1QsU0ErQ0MsaUJBUkM7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxRQUFBO0VBQ0EscUJBQUE7O0FUR0wsUUFIaUM7RUFHakMsSVMvQ0MsRUFDRSxTQW1EQztFVExKLElTL0NJLE9BQ0QsU0FtREM7RVRMSixJUy9DWSxNQUNULFNBbURDO0lOOE5GLDRCQUFBO0lBQWlDLG9DQUFBO0lBQ2pDLHlCQUFBO0lBQThCLDZCQUFBO0lBQzlCLG9CQUFBO0lBQXlCLDRCQUFBO0lNblB2QixXQUFBO0lBQ0EsVUFBQTtJQUNBLG1CQUFBO0lBQ0EsZ0JBQUE7SUFDQSxrQkFBQTtJQUNBLGtCQUFBOztFQUVBLElBeENILEVBQ0UsU0FtREMsMEJBWkM7RUFBRCxJQXhDQSxPQUNELFNBbURDLDBCQVpDO0VBQUQsSUF4Q1EsTUFDVCxTQW1EQywwQkFaQztJQUNBLGtCQUFBO0lBQ0EsU0FBQTtJQUNBLFFBQUE7SUFDQSxxQkFBQTs7RUFKRCxJQXhDSCxFQUNFLFNBbURDLDBCQVpDO0VBQUQsSUF4Q0EsT0FDRCxTQW1EQywwQkFaQztFQUFELElBeENRLE1BQ1QsU0FtREMsMEJBWkM7SUFDQSxrQkFBQTtJQUNBLFNBQUE7SUFDQSxRQUFBO0lBQ0EscUJBQUE7OztBQWNGLElBMURGLEVBQ0UsU0F5REM7QUFBRCxJQTFEQyxPQUNELFNBeURDO0FBQUQsSUExRFMsTUFDVCxTQXlEQztBQUNELElBM0RGLEVBQ0UsU0EwREM7QUFBRCxJQTNEQyxPQUNELFNBMERDO0FBQUQsSUEzRFMsTUFDVCxTQTBEQztFQUNBLFdBQUE7RUFDQSxtQkFBQTs7QUFHRCxJQWhFRixFQUNFLFNBK0RDO0FBQUQsSUFoRUMsT0FDRCxTQStEQztBQUFELElBaEVTLE1BQ1QsU0ErREM7RUFDQSxxQkFBQTtFQUNBLFVBQUE7RU5xT0YseUVBQUE7RUFDQSxzRUFBQTtFQUNBLGlFQUFBOztBTTVOQSxJQTdFRCxFQTZFRTtBQUFELElBN0VFLE9BNkVEO0FBQUQsSUE3RVUsTUE2RVQ7RUFDQSxtQkFBQTs7QUFFQSxJQWhGRixFQTZFRSxjQUdDO0FBQUQsSUFoRkMsT0E2RUQsY0FHQztBQUFELElBaEZTLE1BNkVULGNBR0M7QUFDRCxJQWpGRixFQTZFRSxjQUlDO0FBQUQsSUFqRkMsT0E2RUQsY0FJQztBQUFELElBakZTLE1BNkVULGNBSUM7RUFDQSxjQUFBO0VBQ0EsbUJBQUE7O0FBSUYsSUF2RkQsRUF1RkU7QUFBRCxJQXZGRSxPQXVGRDtBQUFELElBdkZVLE1BdUZUO0FBQUQsSUF2RkQsRUhpREcsYUF4Q0gsR0FnQkMsR0FhQyxFQVdFO0FHc0NILElBdkZFLE9IaURBLGFBeENILEdBZ0JDLEdBYUMsRUFXRTtBR3NDSCxJQXZGVSxNSGlEUixhQXhDSCxHQWdCQyxHQWFDLEVBV0U7RUd1Q0YsV0FBQTtFQUNBLG1CQUFBOztBQUVBLElBM0ZGLEVBdUZFLG9CQUlDO0FBQUQsSUEzRkMsT0F1RkQsb0JBSUM7QUFBRCxJQTNGUyxNQXVGVCxvQkFJQztBQUNELElBNUZGLEVBdUZFLG9CQUtDO0FBQUQsSUE1RkMsT0F1RkQsb0JBS0M7QUFBRCxJQTVGUyxNQXVGVCxvQkFLQztBQURELElBM0ZGLEVIaURHLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzBDRDtBQUFELElBM0ZDLE9IaURBLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzBDRDtBQUFELElBM0ZTLE1IaURSLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzBDRDtBQUNELElBNUZGLEVIaURHLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzJDRDtBQUFELElBNUZDLE9IaURBLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzJDRDtBQUFELElBNUZTLE1IaURSLGFBeENILEdBZ0JDLEdBYUMsRUFXRSxNRzJDRDtFQUNBLFdBQUE7RUFDQSxtQkFBQTs7QUNoR0o7RVZzQkMsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFRzJQQywwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFT25SMUIsZ0NBQUE7RUFFQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSx3QkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0VBQ0Esb0JBQUE7RUFDQSxjQUFBOztBQUVBLFVBQUM7RUFDQSxjQUFBOztBQUdELFVBQUM7RUFDQSxTQUFTLEVBQVQ7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7O0FBTUQsYUFBQztBQUFELGFBQUM7RUFDQSxVQUFBO0VBQ0EsOEJBQUE7RUFDQSx5REFBQTs7QUFNRCxhQUFDO0FBQUQsYUFBQztFQUNBLGFBQUE7RUFDQSw4QkFBQTtFQUNBLHlEQUFBOztBQU1ELGFBQUM7QUFBRCxhQUFDO0VBQ0EsVUFBQTs7QUFNRCxhQUFDO0FBQUQsYUFBQztFQUNBLFdBQUE7O0FDdkRGLGNBQWM7QUFDZCxlQUFlO0VBQ2QsU0FBUyxFQUFUO0VBQ0EscUJBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsNEJBQUE7O0FBR0QsY0FBYztFQUNiLGtCQUFBOztBQUdELGVBQWU7RUFDZCxpQkFBQTs7QUFJQSxjQUFDO0FBQVMsY0FBQztFQUNWLHNCQUFrQiw2Y0FBbEI7O0FBS0QsbUJBQUM7QUFBUyxtQkFBQztFQUNWLHNCQUFrQiw2aUJBQWxCOztBQUtELFdBQUM7QUFBUyxXQUFDO0VBQ1Ysc0JBQWtCLDZpQkFBbEI7O0FDNUJGLElBQUssUUFFSjtFQUNDLHNCQUFBOztBQUhGLElBQUssUUFNSixNQUFLO0VBQ0osZ0JBQUE7RUFDQSxxQkFBQTs7QUFSRixJQUFLLFFBV0o7RUFDQyx5QkFBQTtFQUNBLDBCQUFBOztBQUVBLElBZkcsUUFXSixNQUlFO0VBQ0EsV0FBQTs7QUFHRCxJQW5CRyxRQVdKLE1BUUU7RUFDQSxZQUFBOztBQXBCSCxJQUFLLFFBd0JKO0VBQ0MsYUFBQTs7QUFJRjtFWlpDLGVBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RVlXQSxpQkFBQTtFQUNBLHlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFVDJPQywwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFUzNPMUIsa0JBQUE7O0FBVEQsT0FXQyxNQUFLO0VBQ0osYUFBQTs7QUFaRixPQWVDO0VBQ0Msa0JBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTs7QUFFQSxPQVBELE1BT0U7RUFDQSwwQkFBQTs7QUF2QkgsT0EyQkM7RUFDQyxXQUFBO0VBQ0Esc0JBQUE7RUFDQSxhQUFBO0VBQ0EsY0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFVGlOQSw0QkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx5QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixvQkFBQTtFQUF5Qiw0QkFBQTs7QVNwUDNCLE9BMkJDLGNBU0M7RUFDQyxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsY0FBQTtFQUNBLGFBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RVR3TUQsNEJBQUE7RUFBaUMsb0NBQUE7RUFDakMseUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsb0JBQUE7RUFBeUIsNEJBQUE7O0FTdk14QixPQWxCRixjQVNDLFNBU0U7RUFDQSxTQUFTLEVBQVQ7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsUUFBQTtFQUNBLFdBQUE7RUFDQSxPQUFBO0VBRUEseUJBQUE7RVRzS0Ysd0NBQUE7RUFDQSxvQ0FBQTtFQUNBLGdDQUFBO0VBS0EseUNBQUE7RUFBOEMsb0NBQUE7RUFDOUMscUNBQUE7RUFBMEMsNkJBQUE7RUFDMUMsaUNBQUE7RUFBc0MsNEJBQUE7O0FTdkt2QyxPQUFDLE1BQ0EsY0FBYyxTQUFRO0VBQ3JCLG1CQUFBOztBQWhFSCxPQW9FQyxNQUFLLGNBQWdCLFFBRXBCLGdCQUFnQjtFQUNmLGlCQUFBOztBQXZFSCxPQW9FQyxNQUFLLGNBQWdCLFFBU3BCLFFBQU87RUFDTixzQkFBQTtFQUNBLHNCQUFBOztBQS9FSCxPQW1GQyxNQUFLLGNBQWdCLFFBQVMsUUFBTztFQUNwQyxxQkFBQTtFQUNBLHFCQUFBOztBQ3pIRjtFVmszQkUseUJBQUE7RUFDQSxzQkFBQTtFQUNBLHFCQUFBO0VBQ0EsaUJBQUE7O0FVcjNCRixRQUdDO0VBQ0MsZUFBQTs7QUFKRixRQU1DO0VBQ0MsZ0JBQUE7O0FBUEYsUUFVQztFQUNDLGFBQUE7O0FBR0QsUUFBQyxVQUNBO0VBQ0MsYUFBQTs7QUFGRixRQUFDLFVBS0E7RUFDQyxnQkFBQTs7QUFLSDtFQUNDLGdCQUFBOztBQUVBLGtCQUFDO0VBQ0EsU0FBQTs7QUFNRCxzQkFBQztBQUFELHVCQUFDO0FBQVMsc0JBQUM7QUFBRCx1QkFBQztFQUNWLHNCQUFrQix5c0JBQWxCOztBQUlBLHNCQURBLFdBQ0M7QUFBRCx1QkFEQSxXQUNDO0FBQVMsc0JBRFYsV0FDVztBQUFELHVCQURWLFdBQ1c7RUFDVixzQkFBa0IscXRCQUFsQjs7QUFNRixzQkFBQztBQUNELHNCQUFDO0VBQ0EsNkJBQUE7O0FBS0QsdUJBQUM7QUFDRCx1QkFBQztFQUNBLGdDQUFBOztBQ3RERjtFQUNDLGFBQUE7RUFDQSxrQkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0JBQUE7RVg0U0MsOEJBQUE7RUFDQSwyQkFBQTtFQUNBLHNCQUFBO0VXelNELHFCQUFBO0VBQ0EsbUJBQUE7RVhndkJDLHdDQUFBO0VBQ0EscUNBQUE7RUFDQSxtQ0FBQTtFQUNBLG9DQUFBO0VBQ0EsZ0NBQUE7O0FXanZCRCxNQUFDO0VYdVFBLDRCQUFBO0VBQWlDLG9DQUFBO0VBQ2pDLHlCQUFBO0VBQThCLDZCQUFBO0VBQzlCLG9CQUFBO0VBQXlCLDRCQUFBO0VXdlF6QixlQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTs7QUN6QkYsSUFBSztBQUNMLE1BQU87QUFDUCxhQUFjO0FBQ2QsTUFBTztFQUNOLGdCQUFBOztBQUlEO0VBQ0MsZ0JBQUE7O0FBR0Q7RUFDQyw2QkFBQTs7QUNYQSxTQUFDO0VBQ0EseUJBQUE7RUFDQSxXQUFBOztBQUZELFNBQUMsSUFJQSxTQUNDO0FBTEYsU0FBQyxJQUlBLFNBQ0s7QUFMTixTQUFDLElBSUEsU0FDUztBQUxWLFNBQUMsSUFJQSxTQUNhO0FBTGQsU0FBQyxJQUlBLFNBQ2lCO0VBQ2YsV0FBQTs7QUFOSCxTQUFDLElBSUEsU0FLQztFaEJZRixlQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VnQmJHLGdCQUFBOztBQVhILFNBQUMsSUFJQSxTQUtDLEVBSUM7RUFDQyxxQkFBQTtFQUNBLDhCQUFBO0VBQ0EsY0FBQTs7QUFFQSxTQWxCSCxJQUlBLFNBS0MsRUFJQyxFQUtFO0VBQ0EsY0FBQTs7QUFuQkwsU0FBQyxJQUlBLFNBb0JDO0VBQ0MsV0FBQTs7QUF6QkgsU0FBQyxJQUlBLFNBd0JDO0VBQ0MsV0FBQTs7QUE3QkgsU0FBQyxJQUlBLFNBNEJDO0VBQ0Msa0JBQUE7RUFDQSxjQUFBOztBQUtILFNBQUM7RUFDQSxrQkFBQTs7QUFFQSxTQUhBLE9BR0M7RUFDQSxXQUFBO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFdBQUE7O0FDeERILElBQUs7QUFDTCxNQUFPO0FBQ1AsYUFBYztBQUNkLE1BQU87RUFDTixpQkFBQTs7QUFHRCxJQUFLLGdCQUFlO0VBQ25CLGVBQUE7O0FBR0Q7RUFDQyxtQkFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTs7QUFIRCxPQU1DO0VBRUMsa0JBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtFQUNBLG1CQUFBO0VBR0EsbUJBQUE7RUFDQSw0QkFBQTs7QUFFQSxPQVhELFdBV0U7RUFDQSx5REFBQTs7QUFLSCxRQUFTO0VBQ1IsZ0JBQUE7RUFDQSxTQUFBO0VBQ0Esd0JBQUE7O0FBRUEsUUFMUSxtQkFLUDtFQUNBLFlBQUE7O0FBS0YsS0FBTTtFQUNMLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLDBCQUFBOztBQUlELEdBQUcsSUFBSyxFQUFDO0FBQ1QsR0FBRyxJQUFLO0VBQ1AsbUJBQUE7O0FBRUEsR0FKRSxJQUFLLEVBQUMsV0FJUDtBQUFELEdBSEUsSUFBSyxrQkFHTjtFQUNBLGdDQUFBOztBQUlGLEtBQU0sY0FBYTtFQUNsQixhQUFBOztBQUlBLFFBRFEsY0FDUDtFQUNBLGFBQUE7O0FBRkYsUUFBUyxjQUtSO0VBQ0MsYUFBQTs7QUFJRixRQUNDO0VBQ0MsaUJBQUE7O0FBSUY7RUFDQyxpQkFBQTs7QUFERCxTQUdDO0VBQ0MsV0FBQTtFQUNBLGlCQUFBOztBQUxGLFNBR0MsTUFJQztFQUNDLGdCQUFBOztBQUVBLFNBUEYsTUFJQyxTQUdFO0VBQ0EsdUJBQUE7RUFDQSxXQUFBOztBQUZELFNBUEYsTUFJQyxTQUdFLE1BSUE7RUFDQywwQkFBQTs7QUFmTCxTQUdDLE1BaUJDO0VBQ0MsV0FBQTtFQUNBLGFBQUE7O0FBR0QsU0F0QkQsTUFzQkU7RUFDQSxnQkFBQTs7QUFLSDtFQUNDLGdCQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSx3QkFBQTs7QUFFQSx1QkFBQztFQUNBLFlBQUE7RUFDQSxVQUFBOztBQUtGO0VBQ0MsaUJBQUE7O0FBREQsTUFHQyxJQUFHO0VBQ0YsaUJBQUE7O0FBSkYsTUFPQztFQUNDLGlCQUFBOztBQVJGLE1BT0MsY0FHQztFQUNDLGlCQUFBOztBQVhILE1BT0MsY0FPQztFQUVDLGtCQUFBOztBQWhCSCxNQW9CQztFQUNDLGtCQUFBO0VBQ0EsU0FBQTtFQUVBLFNBQUE7RUFDQSxrQkFBQTs7QWpCaEdGLFFBSGlDO0VBR2pDLE1pQjJGQztJQVVFLFVBQUE7SUFDQSxpQkFBQTtJQUVBLFVBQUE7SUFDQSxtQkFBQTs7RUFFQSxNQWhCRixXQWdCRztJQUNBLFVBQUE7SUFDQSxXQUFBOzs7QWpCN0dKLFFBSGlDO0VBR2pDLE1pQjJGQztJQXdCRSxhQUFBOzs7QUN4SkgsUUFBUztFQUNSLG9CQUFBO0VmbTJCQyx5QkFBQTtFQUNBLHNCQUFBO0VBQ0EscUJBQUE7RUFDQSxpQkFBQTtFZXAyQkQsZUFBQTs7QUFJRCxvQkFBcUI7RWY2ZWxCLE9BQUE7RUFBUyx5QkFBQTtFQUNWLG9CQUFBO0VBQ0EsaUJBQUE7RUFDQSxZQUFBOztBZTVlRixZQUFZO0VBQ1gsa0JBQUE7RWZ3ZUUsT0FBQTtFQUFTLDBCQUFBO0VBQ1Ysa0JBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTs7QWV0ZUQsWUFOVyxPQU1WO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsY0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsT0FBQTtFZmdQQSwwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFQW1CekIsNENBQUE7RUFDQSx5Q0FBQTtFQUNBLG9DQUFBOztBZXBSRixZQUFZLE9Ba0JYO0VmZ1FDLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxnQkFBQTtFZWhRQSxxQkFBQTs7QUFwQkYsWUFBWSxPQXVCWDtBQXZCRCxZQUFZLE9Bd0JYO0VBQ0Msa0JBQUE7RUFDQSxVQUFBOztBQTFCRixZQUFZLE9BNkJYO0VmcVBDLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxnQkFBQTs7QWVsUEY7RWZ1ekJFLHlCQUFBO0VBQ0Esc0JBQUE7RUFDQSxxQkFBQTtFQUNBLGlCQUFBOztBZXZ6QkY7RUFDQyxjQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBOztBQUdDLFFBREQsT0FBTSxTQUNKO0VBQ0EsZUFBQTtFQUVBLHFCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxVQUFBO0VBQ0EseUJBQUE7O0FBR0QsUUFWRCxPQUFNLFNBVUo7RUFDQSxhQUFBOztBQUdELFFBZEQsT0FBTSxTQWNKO0VBQ0EsV0FBQTtFQUNBLGlCQUFBOztBQUdELFFBbkJELE9BQU0sU0FtQko7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7O0FBM0JILFFBTUMsT0FBTSxTQXdCTDtFQUNDLGNBQUE7O0FBTUgsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixzQkFBc0I7RUFDckIsYUFBQTs7QUFHRCxnQkFBaUI7QUFDakIsUUFBUyxPQUFNO0FBQ2YsZ0JBQWlCLFNBQVEsV0FBVztFQUNuQyxhQUFBOztBQUdELEdBQUc7RUFDRixVQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBO0VBQ0EseUJBQUE7O0FBTkQsR0FBRyxnQkFRRjtFQUNDLFNBQUE7O0FBVEYsR0FBRyxnQkFZRjtFQUNDLGFBQUE7O0FBR0QsR0FoQkUsZ0JBZ0JELGNBQWU7RUFDZixrQkFBQTtFZmtZQyxPQUFBO0VBQVMseUJBQUE7RUFDVixvQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTs7QWV0WkYsR0FBRyxnQkF1QkYsT0FBTztFQUNOLGlCQUFBOztBQUlELEdBNUJFLGdCQTRCQTtFQUNELFVBQUE7RUFDQSxTQUFBO0VBQ0EsNkJBQUE7RUFDQSxXQUFBOztBQUVBLEdBbENDLGdCQTRCQSxLQU1BO0VBQ0EsMkJBQUE7O0FBR0QsR0F0Q0MsZ0JBNEJBLEtBVUE7RUFDQSx3QkFBQTs7QUFYRixHQTVCRSxnQkE0QkEsS0FlRDtFQUNDLFVBQUE7RUFDQSxTQUFBOztBQUlELEdBakRDLGdCQTRCQSxLQXFCQztFQUNELGtCQUFBOztBQUVBLEdBcERBLGdCQTRCQSxLQXFCQyxLQUdBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7O0FBR0QsR0ExREEsZ0JBNEJBLEtBcUJDLEtBU0E7QUFDRCxHQTNEQSxnQkE0QkEsS0FxQkMsS0FVQTtFQUNBLGdDQUFBOztBQUdELEdBL0RBLGdCQTRCQSxLQXFCQyxLQWNBO0VBQ0EsMEJBQUE7O0FBRUEsR0FsRUQsZ0JBNEJBLEtBcUJDLEtBY0Esc0JBR0M7RUFDQSxnQkFBQTs7QUFJRixHQXZFQSxnQkE0QkEsS0FxQkMsS0FzQkEsbUJBQW1CO0FBQ3BCLEdBeEVBLGdCQTRCQSxLQXFCQyxLQXVCQSxtQkFBbUI7QUFDcEIsR0F6RUEsZ0JBNEJBLEtBcUJDLEtBd0JBLHVCQUF1QjtBQUN4QixHQTFFQSxnQkE0QkEsS0FxQkMsS0F5QkEsdUJBQXVCO0VBQ3ZCLGdCQUFBO0VBQ0EsVUFBQTs7QUFHRCxHQS9FQSxnQkE0QkEsS0FxQkMsS0E4QkEsbUJBQW1CO0FBQ3BCLEdBaEZBLGdCQTRCQSxLQXFCQyxLQStCQSx1QkFBdUI7QUFDeEIsR0FqRkEsZ0JBNEJBLEtBcUJDLEtBZ0NBLG1CQUFtQixPQUFPO0FBQzNCLEdBbEZBLGdCQTRCQSxLQXFCQyxLQWlDQSx1QkFBdUIsT0FBTztFQUM5QixtQkFBQTs7QUFHRCxHQXRGQSxnQkE0QkEsS0FxQkMsS0FxQ0EsbUJBQW1CO0FBQ3BCLEdBdkZBLGdCQTRCQSxLQXFCQyxLQXNDQSx1QkFBdUI7RUFDdkIsbUJBQUE7O0FBR0QsR0EzRkEsZ0JBNEJBLEtBcUJDLEtBMENBO0VBTUEsbUJBQUE7O0FBTEEsR0E1RkQsZ0JBNEJBLEtBcUJDLEtBMENBLHVCQUNDO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsV0FBQTs7QUFLRCxHQW5HRCxnQkE0QkEsS0FxQkMsS0EwQ0EsdUJBUUU7RUFDRCxnQkFBQTs7QUFJRixHQXhHQSxnQkE0QkEsS0FxQkMsS0F1REM7QUFBSyxHQXhHUCxnQkE0QkEsS0FxQkMsS0F1RFE7RUFDUixtQkFBQTtFQUNBLHNCQUFBOztBQXpERixHQWpEQyxnQkE0QkEsS0FxQkMsS0E2REQ7RUFDQyxpQkFBQTtFQUNBLGdCQUFBOztBQS9ERixHQWpEQyxnQkE0QkEsS0FxQkMsS0E2REQsRUFJQztFQUNDLG1CQUFBO0VBQ0EsZUFBQTs7QUFuRUgsR0FqREMsZ0JBNEJBLEtBcUJDLEtBNkRELEVBSUMsS0FJQztFQUNDLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RWY2Q0osMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RWU3Q3JCLHNCQUFBO0VBQ0EsY0FBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTs7QUFHQyxHQWxJSixnQkE0QkEsS0FxQkMsS0E2REQsRUFJQyxLQUlDLE9BV0UsSUFBSSxXQUNIO0FBQ0QsR0FuSUosZ0JBNEJBLEtBcUJDLEtBNkRELEVBSUMsS0FJQyxPQVdFLElBQUksV0FFSDtFQUNBLFdBQUE7RUFDQSx5QkFBQTtFQUNBLHlCQUFBOztBQUlGLEdBMUlILGdCQTRCQSxLQXFCQyxLQTZERCxFQUlDLEtBSUMsT0FvQkUsS0FBSztFQUNMLGVBQUE7RWZ3UUosT0FBQTtFQUFTLHlCQUFBO0VBQ1Ysb0JBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7O0FlcldBLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRDtFQUNDLHlCQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7O0FBckdGLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DO0VBQ0Msa0JBQUE7RUFDQSxxQkFBQTtFQUdBLGNBQUE7O0FBRUEsR0FoS0YsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FPRTtFQUNBLDZCQUFBOztBQUVBLEdBbktILGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBT0Usc0JBR0M7RUFDQSxhQUFBOztBQUpGLEdBaEtGLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBT0Usc0JBT0E7RWZBSiwwQkFBQTtFQUFpQyxvQ0FBQTtFQUNqQyx1QkFBQTtFQUE4Qiw2QkFBQTtFQUM5QixrQkFBQTtFQUF5Qiw0QkFBQTtFZUFwQixjQUFBOztBQUVBLEdBM0tKLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBT0Usc0JBT0EscUJBSUU7RUFDQSwrQkFBQTs7QUFaSCxHQWhLRixnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQU9FLHNCQU9BLHFCQVFDO0VBQ0Msc0JBQUE7O0FBS0gsR0FyTEYsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0E0Qkc7QUFBSyxHQXJMVCxnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQTRCVTtFQUNSLG1CQUFBO0VBQ0Esc0JBQUE7O0FBdElKLEdBakRDLGdCQTRCQSxLQXFCQyxLQWtHRCxHQU1DLEdBa0NDO0VBQ0MsVUFBQTs7QUEzSUosR0FqREMsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FrQ0MsR0FJQztFQUNDLFVBQUE7RUFDQSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxxQkFBQTs7QUFsSkwsR0FqREMsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FrQ0MsR0FJQyxHQU9DO0VBQ0MsZUFBQTtFQUNBLG1CQUFBOztBQXZKTixHQWpEQyxnQkE0QkEsS0FxQkMsS0FrR0QsR0FNQyxHQWtDQyxHQUlDLEdBWUM7QUExSkwsR0FqREMsZ0JBNEJBLEtBcUJDLEtBa0dELEdBTUMsR0FrQ0MsR0FJQyxHQWFDO0VBQ0MsZUFBQTtFQUNBLFNBQUE7RUFDQSxzQkFBQTtFQUNBLHNCQUFBO0VDbFNQLGtCQUFBO0VBQ0EsbUJBQUE7RUFFQSxvQkFBQTtFQUNBLG9CQUFBOztBRHdTQSxHQTFORSxnQkEwTkE7RUFDRCxnQkFBQTs7QUFJRCxHQS9ORSxnQkErTkQ7RUFDQSxZQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTs7QUFMRCxHQS9ORSxnQkErTkQsTUFPQTtFQ3hURCxrQkFBQTtFQUNBLGtCQUFBO0VBRUEsb0JBQUE7RUFDQSxvQkFBQTtFRHNURSxxQkFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0NBQUE7RUFDQSxhQUFBO0VBQ0Esb0JBQUE7O0FBYkYsR0EvTkUsZ0JBK05ELE1BZ0JBO0VBRUMsb0JBQUE7RUFDQSxnQkFBQTs7QUFuQkYsR0EvTkUsZ0JBK05ELE1BZ0JBLEdBS0M7RUFDQyxpQkFBQTtFQUNBLFNBQUE7RUFDQSxxQkFBQTs7QUFHRCxHQTFQQSxnQkErTkQsTUFnQkEsR0FXRztFQUNELGtCQUFBOztBQTVCSCxHQS9ORSxnQkErTkQsTUFnQkEsR0FlQztFQUNDLFdBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsNkJBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0VmbEVGLDhCQUFBO0VBQ0EsMkJBQUE7RUFDQSxzQkFBQTs7QWUwQkQsR0EvTkUsZ0JBK05ELE1BZ0JBLEdBZUMsR0FVQztFQUNDLGdCQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBOztBQTVDSixHQS9ORSxnQkErTkQsTUFnQkEsR0FnQ0M7RUFDQyxpQkFBQTtFQUNBLFlBQUE7RUFDQSxvQkFBQTs7QUFuREgsR0EvTkUsZ0JBK05ELE1BZ0JBLEdBZ0NDLEdBS0M7RUFDQyxrQkFBQTs7QUFHRCxHQXhSRCxnQkErTkQsTUFnQkEsR0FnQ0MsR0FTRTtFQUNBLFNBQVMsT0FBVDtFQUNBLGNBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLFNBQUE7RUFDQSxRQUFBOztBQU9MO0FBQ0EsZ0JBQWlCLFNBQVE7QUFDekI7RWZoSUUsMEJBQUE7RUFBaUMsb0NBQUE7RUFDakMsdUJBQUE7RUFBOEIsNkJBQUE7RUFDOUIsa0JBQUE7RUFBeUIsNEJBQUE7RWVnSTFCLHNCQUFBO0VDM1hBLGtCQUFBO0VBQ0EsbUJBQUE7RUFFQSxvQkFBQTtFQUNBLG9CQUFBOztBRDJYRCxnQkFBaUIsU0FBUTtBQUN6QixXQUFZO0FBQ1o7RUNqWUMsa0JBQUE7RUFDQSxtQkFBQTtFQUVBLG9CQUFBO0VBQ0Esb0JBQUE7RUQrWEEsZ0pBQUE7O0FBR0QsV0FBWTtFQUNYLFlBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTs7QUFHRCxnQkFBaUIsU0FBUTtFZnZIdkIsOEJBQUE7RUFDQSwyQkFBQTtFQUNBLHNCQUFBO0VldUhELGNBQUE7RUFDQSxhQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsU0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGNBQUE7O0FBR0QsaUJBQWlCO0VBQ2hCLFVBQUE7RUFDQSxjQUFBO0VDOVpBLGVBQUE7RUFDQSxtQkFBQTtFQUVBLG1CQUFBO0VBQ0Esb0JBQUE7RURrYUEsZ0pBQUE7O0FBVkQsaUJBQWlCLGlCQUloQjtFQUNDLGNBQUE7RUFDQSxtQkFBQTs7QUFNRCxpQkFaZ0IsaUJBWWQsS0FBSTtFQUNMLG1CQUFBOzs7QUFLRjtFQUNDLG9CQUFBOztBQURELHVCQUdDLFNBQVM7RUFDUixtQkFBQTtFQUNBLGlCQUFBOztBQUxGLHVCQVFDO0VBRUMsWUFBQTtFQUdBLGdCQUFBOztBQUlGO0VBQ0MsZUFBQTtFQUNBLE1BQUE7RUFDQSxXQUFBO0VBQ0EsV0FBQTs7QUFKRCxnQkFNQztFQUNDLGlCQUFBOztBQVBGLGdCQU1DLGtCQUdDO0VBQ0MsZ0JBQUE7O0FBVkgsZ0JBTUMsa0JBR0MsT0FHQztFQUNDLGdCQUFBOztBQU9KO0VBQ0Msa0JBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTs7QUFFQSxLQUFDO0VBQ0EsYUFBQSJ9 */ rt-4.4.4/devel/third-party/ckeditor-4.5.3/ckeditor.js0000644000175000017500000174312413437512115020267 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ (function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"F7J9",version:"4.5.3",revision:"6c70c82",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;d=0;r--)if(g[r].priority<=i){g.splice(r+1,0,j);return{removeListener:n}}g.unshift(j)}return{removeListener:n}}, once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},f=0,h=function(){f=1};return function(i,j,n){var g=d(this)[i],i=a,A=f;a=f=0;if(g){var r=g.listeners;if(r.length)for(var r=r.slice(0),y,o=0;o=0&&f.listeners.splice(h,1)}},removeAllListeners:function(){var a=d(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=d(this)[a])&&a.listeners.length> 0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,d,this)},CKEDITOR.editor.prototype.fireOnce=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,d,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),d=a.match(/edge[ \/](\d+.?\d*)/),b=a.indexOf("trident/")>-1,b=!(!d&&!b),b={ie:b,edge:!!d,webkit:!b&&a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,b= window.location.hostname;return a!=b&&a!="["+b+"]"},secure:location.protocol=="https:"};b.gecko=navigator.product=="Gecko"&&!b.webkit&&!b.ie;if(b.webkit)a.indexOf("chrome")>-1?b.chrome=true:b.safari=true;var c=0;if(b.ie){c=d?parseFloat(d[1]):b.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;b.ie9Compat=c==9;b.ie8Compat=c==8;b.ie7Compat=c==7;b.ie6Compat=c<7||b.quirks}if(b.gecko)if(d=a.match(/rv:([\d\.]+)/)){d=d[1].split(".");c=d[0]*1E4+(d[1]||0)*100+(d[2]|| 0)*1}b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));b.webkit&&(c=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));b.version=c;b.isCompatible=!(b.ie&&c<7)&&!(b.gecko&&c<4E4)&&!(b.webkit&&c<534);b.hidpi=window.devicePixelRatio>=2;b.needsBrFiller=b.gecko||b.webkit||b.ie&&c>10;b.needsNbspFiller=b.ie&&c<11;b.cssClass="cke_browser_"+(b.ie?"ie":b.gecko?"gecko":b.webkit?"webkit":"unknown");if(b.quirks)b.cssClass=b.cssClass+" cke_browser_quirks";if(b.ie)b.cssClass=b.cssClass+(" cke_browser_ie"+(b.quirks? "6 cke_browser_iequirks":b.version));if(b.air)b.cssClass=b.cssClass+" cke_browser_air";if(b.iOS)b.cssClass=b.cssClass+" cke_browser_ios";if(b.hidpi)b.cssClass=b.cssClass+" cke_hidpi";return b}()); "unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},d*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; (function(){var a=[],d=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,e=/",amp:"&",quot:'"',nbsp:" ",shy:"­"},j=function(a,g){return g[0]=="#"?String.fromCharCode(parseInt(g.slice(1),10)):i[g]};CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,g){if(!a&&!g)return true;if(!a||!g||a.length!=g.length)return false;for(var b=0;b"+g+""):b.push('');return b.join("")},htmlEncode:function(a){return a===void 0||a===null?"":(""+a).replace(b,"&").replace(c,">").replace(e,"<")},htmlDecode:function(a){return a.replace(h,j)},htmlEncodeAttr:function(a){return CKEDITOR.tools.htmlEncode(a).replace(f,""")},htmlDecodeAttr:function(a){return CKEDITOR.tools.htmlDecode(a)},transformPlainTextToHtml:function(a, g){var b=g==CKEDITOR.ENTER_BR,c=this.htmlEncode(a.replace(/\r\n/g,"\n")),c=c.replace(/\t/g,"    "),i=g==CKEDITOR.ENTER_P?"p":"div";if(!b){var o=/\n{2}/g;if(o.test(c))var d="<"+i+">",j="",c=d+c.replace(o,function(){return j+d})+j}c=c.replace(/\n/g,"
          ");b||(c=c.replace(RegExp("
          (?=)"),function(a){return CKEDITOR.tools.repeat(a,2)}));c=c.replace(/^ | $/g," ");return c=c.replace(/(>|\s) /g,function(a,g){return g+" "}).replace(/ (?=<)/g," ")},getNextNumber:function(){var a= 0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",g=0;g<8;g++)a=a+Math.floor((1+Math.random())*65536).toString(16).substring(1);return a},override:function(a,g){var b=g(a);b.prototype=a.prototype;return b},setTimeout:function(a,g,b,c,i){i||(i=window);b||(b=i);return i.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)},g||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(a, "")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(g){return g.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(g){return g.replace(a,"")}}(),indexOf:function(a,g){if(typeof g=="function")for(var b=0,c=a.length;b=0?a[c]:null},bind:function(a,b){return function(){return a.apply(b, arguments)}},createClass:function(a){var b=a.$,c=a.base,i=a.privates||a._,d=a.proto,a=a.statics;!b&&(b=function(){c&&this.base.apply(this,arguments)});if(i)var o=b,b=function(){var a=this._||(this._={}),b;for(b in i){var g=i[b];a[b]=typeof g=="function"?CKEDITOR.tools.bind(g,this):g}o.apply(this,arguments)};if(c){b.prototype=this.prototypedCopy(c.prototype);b.prototype.constructor=b;b.base=c;b.baseProto=c.prototype;b.prototype.base=function(){this.base=c.prototype.base;c.apply(this,arguments);this.base= arguments.callee}}d&&this.extend(b.prototype,d,true);a&&this.extend(b,a,true);return b},addFunction:function(b,g){return a.push(function(){return b.apply(g||this,arguments)})-1},removeFunction:function(b){a[b]=null},callFunction:function(b){var g=a[b];return g&&g.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,b;return function(c){b=CKEDITOR.tools.trim(c+"")+"px";return a.test(b)?b:c||""}}(),convertToPx:function(){var a;return function(b){if(!a){a= CKEDITOR.dom.element.createFromHtml('
          ',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(b)){a.setStyle("width",b);return a.$.clientWidth}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,c=arguments.length;b]*?>)|^/i,'$&\n

          rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/wsc/dialogs/wsc.css0000644000175000017500000000232013437512115023313 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ html, body { background-color: transparent; margin: 0px; padding: 0px; } body { padding: 10px; } body, td, input, select, textarea { font-size: 11px; font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; } .midtext { padding:0px; margin:10px; } .midtext p { padding:0px; margin:10px; } .Button { border: #737357 1px solid; color: #3b3b1f; background-color: #c7c78f; } .PopupTabArea { color: #737357; background-color: #e3e3c7; } .PopupTitleBorder { border-bottom: #d5d59d 1px solid; } .PopupTabEmptyArea { padding-left: 10px; border-bottom: #d5d59d 1px solid; } .PopupTab, .PopupTabSelected { border-right: #d5d59d 1px solid; border-top: #d5d59d 1px solid; border-left: #d5d59d 1px solid; padding: 3px 5px 3px 5px; color: #737357; } .PopupTab { margin-top: 1px; border-bottom: #d5d59d 1px solid; cursor: pointer; } .PopupTabSelected { font-weight: bold; cursor: default; padding-top: 4px; border-bottom: #f1f1e3 1px solid; background-color: #f1f1e3; } rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/wsc/dialogs/tmpFrameset.html0000644000175000017500000000361713437512115025174 0ustar domdom rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/wsc/README.md0000644000175000017500000000171213437512115021646 0ustar domdomCKEditor WebSpellChecker Plugin =============================== This plugin brings Web Spell Checker (WSC) into CKEditor. WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. Installation ------------ 1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. 2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): config.extraPlugins = 'wsc'; That's all. WSC will appear on the editor toolbar and will be ready to use. License ------- 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. Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/wsc/LICENSE.md0000644000175000017500000000270213437512115021773 0ustar domdomSoftware License Agreement ========================== **CKEditor WSC Plugin** Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. Licensed under the terms of any of the following licenses at your choice: * GNU General Public License Version 2 or later (the "GPL"): http://www.gnu.org/licenses/gpl.html * GNU Lesser General Public License Version 2.1 or later (the "LGPL"): http://www.gnu.org/licenses/lgpl.html * Mozilla Public License Version 1.1 or later (the "MPL"): http://www.mozilla.org/MPL/MPL-1.1.html You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. Sources of Intellectual Property Included in this plugin -------------------------------------------------------- Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. Trademarks ---------- CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/icons_hidpi.png0000644000175000017500000011304513437512115022574 0ustar domdomPNG  IHDR (,R IDATx}wxչ{fgjZUK,˲$˒,˲pcǘL אNn%K !@$.!M(tp{-j}w13E!ygiwis} _0HX&=7[YR$APT3!0׿"$JJPv^oܹV $I@)(B$`li)XgδܵlڴR  <$@ J)z=V+rrr`21 u~챇4"$ y}}} 6rG_nݑc*, AlƜ o$Ie,jB$  IJCX}vC0%ID)C-^ܹa  wur8@ĉT1\"|v> \e}7K DE=`4!+-LlH_n`ٰ^!Bk3sεC!|el [~!E ?@(xyg-jLmCX"Rw <@)%!lI+G, Ҭ@ 4hРA ɊV>jP x?dsnC} swcSSEii)lV+v;L&8G(D0Goo/qВ.i:ӧMbaDIbzFa0tr)!2jlivFy-K$0 eFC b:doo6 ` ٌ*~dLFGG?.N0pl`޼V*IHJvmHnzd ܤH+.fU\.'O! )l^ `%B(@"^(#!0LG?_=43Y"EqJeJ 4800 ERF|5,˃B#,#S (_uUFnn.t:lG0҉'8B|)SgL:}WZe)).h#s0 N'qi֭ d"D?B!!7A>IgTFYEEy!-CA1fQ>B}߾}`YkGezCڷ㙊BfpppWpHB^Mϯ/,, KC\.VT (/≧#P=e (*hD8)  !Cl6Z (eT3`B4aZae9924 !(IB1?ǃ3gپ}DB%pKx9f֭tX,0 *a&pZӦMK/,dg.wڅW^yDoo/Ӄ3gfRii)qT>v, /FgBv+'[)PJ(|WHIg5Al;28Rۘ;<7\= 4hРA 4S!ݛlN,NI|6hɶ+rsqQq&p2Bgl0y8ݍW׭{ lʈSLF#PUceXy=9@'klK+ƎE(jEquq;^|>~`El  /l2'N|+[=Oh4`00 pfVZ ot"BȄxWv8 zxeNlaqrf;Z0x%%%-`Y6,U. n{mZl$R| {kEq;>fF OH ?N>mS$R?~-<)RYXXX|${nn!d,!d3a2!Sg4nlXm.*JHNVL  a$2PD"n2!R]KٮhBZrrr£-[>e_a&I̙f1<Ξ= ܴe˖By96.hmmÈ|^ &^Wo2cƏNϲq>=|p3desyEQl˓uGF#vzUj:űa`ِcHWbwWWBӳenHѣހa|ԩy@KNN8A!'J+'LlVkܛ- ;Ǎ۬:nwˑ JRRk&LQtc=o'2'LHR~yEL{J""nIjDgEEJ ))KTx G)Po|A,//N+6]3iRx 8yDٖ#;mTJ@Sgx2 pgQ1 wkpŞJJ>|{?^D 4hРA _%=X4>'`֜l߿?>h0 %HcZ9HQ[ !DJtf9b0!ьtV56.n8^~/,ꂛS)ɬ./;WL9TVhV4&ƍ jLfn=P4&(I+oJM\@4THs7A8h5کDu*sQA !@jjI'T.(?"YpFDn. mH Cjt:C ;.<~?  rړoZ¾I< <ĺ'+(A7դ.`unAQHcoI<h7 $,~}YI'I&2lA* OFb…$ ;+_567ϰL3˅SNd2q¯c׋'OOut B'?G6n޼w|eenQaX0pTEEoo; Ik@g,G%iRׇ J4ۡ#G2Ry˔@=|q}ֽgĉ602occn[wBIpRJMfm4O<08PJh0@5d]8 WKUdF"p 7?PT3x#? R8LIh4B0 4hРA 4@̇,8` f fpf!&D,&0Sm\P_:f BOo/6n/X6ӦՔ {zu۶!#`9;\2f ǰ$eYpW^;}t{^/}ȞeɚË20;oۨ=V4LBaK /BI]jUhDG( _@F\;5A@yM"P0ՒZŰEu($X|y*.&)y]4O-;;xT@2VQ]UUq\X I QvȂpv<5E@}P 9sq\ qPePaBPJRzҥKU/\EWPJIcm*;Φ/UV+Vg̜)a+jd ʜ8O:) ~E3tѢ5} J(bǎ-;^IZ} !| XjFkKK%0B8yd7Ȯ*Ix<=} 2}r9!!:vpB~y r$=u ǃN^3n&&NYrł_)Ϩoj͟/Ԉg)3JZߟ;o$:)Gr$-ƜfǍ'IɍbyE}G)TO5uubՄ 'N3Ҹ39-'gt"zߐœo ~SJ2Ix |xeBF l߽{2}+]ʎl#l=nOd^ 4hРAMD.JE =ä4B$wC'Bxo4z `0 nm~cFJ"L2gM_*; ٿD$xA@ 뮳+HDmω^BHnDorHBzeFtE"L@$@0b![ny^xEqmYHkĭN3CCk}}Yo<$/nZDYYYvIîHR;|sVÌUIpI@=iGPRrHi)GBlLd,AI;'J2ӧq&NDuM *;\_i5I 0ܫ\;4/}QőP*%%4[ROW Y3tf9 2M)ӥϘp;`_8PtP=3|S`匛@y, bvϼVM&kfU8{\Y/T aҬW4hРA @hM_ 4}/@hM_ pqN@hM_A 4hР!TR{OJ \zhمAWalm^+x7t'TWj F2I믺Sfj9mf$|X,Ҳeyl+V+~?z}㌴ƌ||SR3g~@&a1%%ʊ8i 477}>8 aZs3*&LxZƎӦ <i <ӟqswdBEdbQttb8Rhң>}5z-_^dZ_Fs1lRQzpv{< -xO>Y a>:˛YɈ{]q%3X 8x7 <5Bsׯ^spp0[8XXpJd to]g^x-'bH".kܹ&>သecY ۷`Pj:Q ǃSG|Y)Plx~䡱eeNeS‹HJpχ !%7Yk|TA@ ?^{ dgE@!qxg=[pߞy؄J/S97 SZzDuuM4J'=!C0:҅H\&^<2VGc^qIOQ0ua8H r4Aֳ%P(*0<'=~ݻ|6 IDATw1 zw =4df#o+5_pa(ıc:׿fV8y侙3g*++90xzz Ne8<h5}z$~:;;Jfmz<y/YX\11<>0'(%F) E99aGyze7VPJ p8ܠ7Ac¹s,&#ֶ8<WL-![L!tBCCCG}tkSc{CӧNEQYRUE;o~tl2exܹ"o'H[2idq֬Y₅ ܹi₋.!;aLZuyB!󟳐=+^EEc`/#(maa!DIo|vʔ)>+ړƤqlBlBW !oBvCQ .7dl+n0}'#.Ynlx8iSJ[+'L4eX5q"c] GTbYyyx_ .*.-1er„'\'&utqر.$ݗRzlh2JiWD'>R/)Ҏ'DiEJ) A)}tjZgmA 4hР!@hM_ 4}T/@hM_ 4} 4hРsYkN*C3Nx^py%0kqfK sؼ};6NV;dS,|㉺|>PW@>lD>gKT%`QBG !f¶6Fa֭8sR\J֭։j+n7@1f|>~?@v3cƨ\}]ЕW\Q5PV[{C>{ǿ+0,13~+"EǕW\=ǎuw<8&qbSٳ)74KDn1{6wv9 Lf3J9cpN515ǿd6=pg }Sr,=!gF(xz\rzHS:K| 'Hrv=O!N)شY@H pafC'{G0|my~3H2嗇#gƅ_,VMvl.$$߈fN :H@0S:bg= $Ij)SoCį/8vKrzJF ]'1>evu%;g~OYw‘׀$EZ'y~?PD'&8t@0x3SL'{ԢBXd` 4ދ_TMpA[{ L`F&QM`.+CAn.X.f(䉧B@q% B5]&q"c4=AimXZ]=lPbimm8}Ɓ}0s!>WXDݒ(B9KBpRJ;rYc[ĉr g}UMHYc[8XJ?01*۷m׿e9Vvi |Xh0!t2z6=B{Ǭ@/23fJaՠA 4// @h 4}/@hM_ g 4hРA w!ъhp$N~HKEӦLAqqMa%Ȼ>|};:/w&"phij(DQP A!Dv²غc|Pjܪda$AHTN@ `: $' `JCl|;x>@]CCK0B HooQ`4dZSET7AF8qNuvmټ@8,h;Əo2I5aR~D\";3IE~.A@k > ^2 AŹP&O?raû:\@"~~j8ԎBP\DEzU'#.I rwgpWߏG?jd4BR%/h9S4R`(n}L'Hokp*!dgDANn0a6Ó'njpPQQzc p&Bz{ J3'of{ k'M50Юq5P?}\z=@)xǙn<&LXJWn]t>B!djEoB)5` 榲R B NpoBz 0PD0,?Pz4 /H |;# eUYɇ:Kվow7SX_?G8<v+&Ԭ{}^v&̄I'"|[&BHd%QKqcZ\n_B]s C&p8/IRٵ`3`I&}iIe13N-T9iagib^BP^y ŕ [͑^&zkJI***(E$ B`YD\|`Ypp /7PANμ|ÐR~m}=3N' Cy2$[ 6ھ}X$SJՔ)Q,ԣ9\ 4hРA q@uqA=ҍyyvs@)B ^U!Ι3 Q>!Q,*/0ATj` 4hРA ʶ --HcVbۋSi(t'"-Y(ǹUD0,Bxuz:v!ΰ 8iEWL0P`@~``2`X`6a2`4qQlxݓR085S y^Z! beAWG&bo~˅@0Q `NϘ@iYYK8F5+J!d/߮*xCiii\99I`4⓽{7fZuoh [9 PJBl6.hhH8_"fatiݡP`Xvv6*ǡ ?? *L`ҥCjhq*I4+H#jAe]]T6ۅ_ c^}uӧ{~?DYa1#Ng0X49DQ?vu%&$`} "uMTa^\8wn+03%3^MG Ҫ#&iV ۍM >`#O!A+mӦ -f۷tBbJf3àI B$ ??++er%7{"> `^Mm!8tb`0@5WlQcQgUII$" @}t\S\\\``2OT;qYXXhgYnDa޷LH"L!;'{inƍvU ,v{Ku:p :ߏőH(U#Ha3|cJs3gx xLM]+cVV&G _!DX8e c 0{ N>O3"-T AOHpщ`X9dgI!Ξ=`0xBP[] (gϋdZ%wN]e"B yWQ]SJh21ҮO>,?LRCњZzw`{1$ڔ)}kРA 4ChM_ 4}/@hM_ 4}/8Ih 4hРAo,(.ވt3fg̞CZ640P4n Z,hܸQ'c1s@ՐGVV>h\j!ˉ NF2 ~?z , Qp3ŗ\B/YBk)֘nih&ј({)bo_8ss)T+#F)(Qģk@iF^1XMV+,V+b `_H}tM7@nشq `u<acY6ݎ!ABpF"@r#d=V+\G@X#s1F}T1mڴDj#{7!L3{~+ov9akݶfLje7}DVc.p!('įvs`~ P@" #16LG7OyaPH, ؞ڜa9#z62oJK#Y~js7,b ^j^G @?)t!uχ=鐓~qo\5'׿x aa6W%H5!K !K믗 GDj0i79#p749H[ PyЁc@U\Īl`A۶ .߶iS?D*Nuڴ" BTedbd4B$txg:_{mե\"=ջF U-F{|@8CnY f,?q=%fZ_d A">րwW ZV<^/\CC3ga[oٯxZ X?k]3w.S^^FCۍ^zDBMM-g͒$QlV+S[Sx=x=&?/3\:1~(GKEB%X$8|ٰan9s;ﰔp3l60JBț1iZ,tF HⓊ:cƌAWW***jkj@P.ဟR$`2t@D3!!K>!aݺujzʕ+$xXf"bY$dzI) +ĽRڵ+ Ͷ1FZ!)**d^FU:kE~ܱ?'7A(2T` B{|iDk 4hРA TG&Ϛ%Lp|G,[V1%#N 03֫bו+(ۚ,fΚ(ѶIi&@#D1*l(jGe3 )< &aT Gl PA}(c5\``̖b~[`Qt?qqK Yyc%$;o#4UQ! e"6pS*#$J@3擺 )ND׌99WXQ rR#QMPبhB8  6crhr=woXßQ@)5׷sjssh<~,pBHT\X8tW}|,,ջ!܆ummbQR:Rzf0Cd1n@s%!)·3$xB\Q{ fW0A I>'%2Y1>D)zzŸc#8gQϹ@縌 AjsE^E:_ܲFϰno[-jРA 4hyːc7 ,y͚J_<䌤 ?p8곎a# !J3؈}\؈#c 78;w"%JB܉>sˏg{QdHeC*2N'z-!CUwNJ\$[Z˅%&x@B5U<i@~yy5/Uȑ"q IDATH0f몪_v饦߀e_z*BB$`blƔto/VRL'IW('yκ8}Lv?)' "AX7JJJۏ~?da?5D&HDؽgd5K!Ti7EB|p'!$Fn7~i+j99#>_@^(,Q5:{:͍x9FbW70$g'vuj۔R%t@:xM"b< F|2Fg=]|v`h 4hРA 4^}_X&&Ϛ5MaoLƔ`lYH>Aqxz> (W Z!wQr JHbVAEY9Bߐ\F$;({<ɥjة擪 bPQ< mOHi BH3˔fE 42!P9TDA+Nvf*#,QҒ*.Fî87+/XɄ۷'fmI)+NT|`Zs3C#$Q{M$LwJE)'uTfÉڔBO0y@lŊN#ӝ. ¨/Rz0kP][[dz$]7DBNJ4R#<~!%i|p恌1R=TS/N9 ~:2 Frr"Rb(&8Q4k:0N90ݛF0 f4 ;{(R qioTNQ]pl]!ȿh̙(FV\7`D]='zq"&qT1wԫ2F@p<D+ JP) ¸(|9,(!xDžʄa7&5E  -q3J {Bam/HP7#x/@K?qʢPB *TP D~[n1 A<@_+/ ŧdA@@ sɢZ'+ $^ x$¿ '# Ƭ>4pO IPSx8./'ažXOA8D _ ;V >36@/PB *TPB'WZx1 (^aW)QHG>?ˆp>x|bGf(Os<"/_h_41w(G\dn o~ 1!wԩtXn0YRL!ֆ\~{UE& gKnА+55k̙3+!S 3Ӧٳ=N<Kj]5L&eY<)·~x~=nO_\0,䔗=w*ģ*;@PJ樂^"FO>kӦM{R:DoI)}RڦؐV\X6c_6cFd}44]j)(K) -3tD\(FU ఔy(oDrBKGBu%h/p7]oD}h{DC5hxh4_fߊ[eLTPB *B@ np;p1%cWjLs=WbW<3;%#׭c x 4 F(>;yG"^/8D5y!i))~ H Ky<c+аV*~GhI9 + 4[E(TH^:,@~ '?N4Sp&aS#|`N`,Vr@y!5K</^W\ h40 F23poHD6^Q8m6ptVWWX=pcϞ=*OOOMNN^V0o%;lQQá!\ۻ>_crL0@T?Tn0F`ew={@i`9|IuRڠXA,&2޽{nڴӧwQJG߯QJ V>RRj[!PTK8kxR.2 B!$3ZOD#Ms`}M@'*_B *TPB/,6,SHm=Q&)S,̄^#k4f 9qi:u㴩San$Vy\. ZކBc0l[um|[[[s='J u3 uRr؟{?6^c0l 7._ynP([oUwߍٹh"sј;@qӭt۷0?? &J˲`(!}0vu:ӭ }wp!9sSSR0:: b_tHNN|Jj7577r…51ŕ|sEqܹCmŕ$=u3fU:hZ-4};£8Vx<x^5Zm@L})]NIQ]]]F6!jj+rR[G >c(QJG[GAA㏷?QyG<(*tճ,--=h0zRSSyz~]~}^SRR௞} 9mKJBĊ#VlF_je# qUjKyUPB *TPB *A|n|nRY0=- z!,_ɓА^NE\onn>-=ݙ&y?.b_) __j m[}eUթŋW-))N\ZV~|kk+8wVQq6Q__,--=h2z4'OVOҡS ,ov~rnU55n㛚ͻQ.  fa,0IEm{KJ*q148a~ !dWLBY a 7)(^zndffrWQ^I ߺp!_;m8goPJ2N͜9o[7ULi4Kd~߄+pڵsΝt  +ROٴiOII_2ҹtiU!FS5nzñ߹OJ)քkkV!W j{*%DJ>joB] 5F[rEŞ+W޲m-1@Rz !˃~{}nX7y y]XSyp8ppsz(i ."^))p\ۀ+5%%p8w.DIKCNvd'L`anGJjjwpyGe ָ|ں:[nvhՁWz{m?\~"~v;>;~܆2Ji!UF(kD mJ9/y7PT^Xc.u* uf-ii;vf ɒE,I,':sd"{ oi8"Vի&%%vt Rx<$%%40iiC!tgZ,ՊH8sg%5Vg6XZ6 {zlᛳZm'N 8qbaVwCu7TB *TPBE\YÁqjVq3(}ǥ/uǫY  ^}?0>!Dxլ(UTCnϠ$@\!ī/BWߟ0^}?0>!Dx~u7TB *TPBx IJJ[!ȚPOʊk\ Xp Sgά> rsrv88njersr|f|3 3QG oʔٯEC$t{;t, 3bE'"DÁ?stre 3)SUh;>URJΝ?hnnU7} zbbpW H9C)} Jf1ml'9!a!x…XVQ"'E8۸κ^># !f[dԆrGmm Nb+ q϶mhR*/W~JOodt:|;qm&>r _:}zcǔ&lX$PMq bj4@tj'psOGBl.\<W!3+ 4+ǎig/X;HI|`s8"V?-7I|(V?$ wv~` R,Pq"|R0xi IDAT(: .#Lkׯan5jg461w>|Luny9+gb~Ju5׻rbBnH3WtY*wڸҊ ʦ|GCWWl̯dRp|++YuCd\K+h>ۈxbuUPB *_!|A- a_AC !#M 7f8= ޸$[~;!B$rM4$W)H4$ += +? '!m(-")n8Vr*K̄QEzF0n%!&WK3LR|Gx^Ai}q$-L@v <(hX4 F }ŷD J)B+`^a,*B *TH(j4dcTR:l7P/^ٶM)L\n7xJY(}}}Q,cecspgbKEp iE B#1/T;|Eٖ5GfCe⺺ƋeDNNNh\$Q1jA ឬA)Hy#GK:o^ĞJ#'4E>|D>ҀJ!'"!!#vyt#S?\<Ÿ=:|>/?OU|j@;s$z=FeeFwpPNѠ{~jUE4@JqI_VA <1p؉?S~^7h$, T>Nv=CjlS_=^ ch`IMſ%DXp ;w•+/ſ'n +*9eecSVͩ2IIޢbjTJ#B4 @ad ^b|~L˜nA^aW 8 /x hBJ(Ћ1 +< ӧN ","@(A8yV_O5(N`<ϩO u"+HfFƘVJq>00@.y-t!FRя~ĉZ1TAfCFfM=Pm@ !$bP ȅBr_K, awO> Vh+ZB<:#ebdtԴh,@RQ%#$cp9,x y8N,_ @YE#be{^l6|;(P^3eJ)'Kh `l{AtP^Yم": *wA8v| !'Z)S'ut9˙<@x<x('M $9,^t@5>!LLlcƲƂHs ^fn9#QK,f3xq8N&A㧃N䂂?AYgYY[,in/J NEPZ\q N1H\Ծdڹf (ǵL>==OKK- RJu:e*Q{βƔK--Zė>K研FyBٹRoƻ[iӧioY_hwRzRzD#C2` B&!d@*z7?֎}u!dWO~/G ۝.eu>xB]֭+v\. #D a @5w\A o߾fB?K# X_Pn@9͙5zq_җ~֢"@y . ;@:ڭgά8w\׍2?Jsa^xA_W.]lLP~iii=˔Ӕҧ)2~<-RNrr9*=(ҹ)?#ҧڹ *TP<|0aVJ`% 7KaޗFbKDu$[3%+>c"9$`0b@;. 6 `6ҹj͸4 , Eq˅'ORSc /IuG azzA'Yy<`0=-\ d&a,t:_::u F1[p80449煀#3xh4ZCX*op\!1X_Alu\V+?zå `l{>}:0jY{:|r, Q$F555≠{_"Os u9Xg9ih۫o[: o$q8DR n:ȑ#`KN'zS A&\8Bq,t,R*P Awa9@>>WpqX +bbm6?bK 2pc" (EG#F73,KVk -kLI8"䫈$Y+R^I~]p ""`4 C!_ *TPB>#c1&yfcZxBb!} 1raoKJ6VWT0VĆb{]|9q $S%˙5W:9ʻOL¯X>>iibڼbExDJWTl(.f<-6,vh4|cyI sx+_[V6 cv9,YB,YƬ,~يw/4qbڸxqaoiӘ! bq.z:;}u!<鵵Ѹ!B~kMUU u:=~zl/T 5VonߺݥjY- [ZB04:x˖)C*1?ҷoݺ:h4(>wx:VuuxmK|$*Ļ<.:=-}] WcpdwO{> E:d),[ ]W 7^!/>d6!L)C> *x*/=UE C##P3qGI|+*Dw/DXAYYaCBt@Ұ 084iӦWNB'`-HJڵd2ɓ |Oq -^\ @d8^SX>Q*x BnV'X+[@<)au:= *ȒUgkk+y裯tvonƷR#?7?޲嶡QCXRj1bڷn v}'Gvpq=2R>ڹmV0բx:߉Ӌ׭[.o+rqSax{ dE`מ(ĩ>tϞRD֮Jc{ces^g1Z{+a <'+ |}-I<$ 7'A/Py*TPBYko.ZC4 1 [{/32&gf"c$`0`pp188bO!ܦiӦ6: E)8<==ݒlh0``pn& ouXhM^QK/>) CCCOtYfd6?Weddd6TGG=x#$%r[Jp8088+W?'5R?VB2[ox?)**2n&t;A)%" k9'p`xx6ޏn"I*P1C9v\dV+o;7jOavf&\N'>ںp&!=y瀘ݙ-kRR XV\.x=]*[c0,WIcI4ϝ!Xt{ %- 6R}wOO톆arٲ6IUVJ8Wf8֮[p8222YPt, NJ <8A#B(6N. <8sg*~WTU5x^,EQi8;!A)trFJ),bzGCF0+(2"!$X 8t:{}Ld: w#؅F$;DBbH<9$jhHX@ ڗ{^ ;t/ҕArfGeYY31eˁzdz@ZmojZQq-9'}3&FwĉlU=WxV+/_m4B[ 鄆apO=FY%[,p݀^r劐LJO/6 >ǤyE!녫B$''k4|_/_0.!WgaXwΝ III<C)N)p69JiR}*TPB ySfÆ# /5&?ٸbj4BC@{vv~Y5ߜZS3j3g?w؟__LF`Z|2`@^g;ܹS -[۷BL×6<-f5w=zЮ]COC񻃄06lKS-!Qx\.fK/U۽v͑] #Qvw]P{չa5k;D&EBFjj<x׮]-]N'!s].-YRO_;}zŋ*(OXRsI&uS9XHV۶IY:46oa;y2b1:|; qh<ޒ.ee+JjxTBVm6 /W<==rӿ3ҿoAӦs*++;gϞ TUT,=wNv(!߆Gyx<fKI9#/&AIV W_xAGɅً- ӧ?x<زe r K { I))Yۍf"IDATӧOXh2$7 Zl6gʧ֖~zr͈񈣷#*G1 @+,bժUo̚5녬,t"5/o鍑xϞ "BZjjHOOuV Dlddd,w:/(c=?C--l^&F,wo'E)Mрj@Gݎk}}8u} b]t%=- ^4_ >u?r3R==ؽok?0Vfj4|W8(C'vqe:uJi?~g?;ƨjk322ٌ$.]8zt2ܑҌΓF^`Y绺p ҰHC-}dwaa@ZZZݤIMJ‡|p/D ȠZ(/S&O|lڴi|KK ߲`_\UK+|JJJs {!^PP୫*+PJ)[)99`]q 5T,yгǒK_H(K)ue>@j>-YT'OYXo>G/y 4f6JJq 5d7nPB *TPB 2l| q jEƸJJKqg쀘;6-வk7n&^nuu{ݺy#)u:PIٌ{RRQ1L1 ^Z(b0ZRж`ږ.DBɇ dR0LaZz:c6hBc7ZN۶o^!ĀhhERrJfrV&&32K#aY';:pر˵n+LsS /OԌJ}184n .@ 37͞  8PJt:skkqmjYUՏg׃zᑥr1 n###W,@vNQ33t<FWwp5a֬Y; D YWoa8J陔GVVMsr+9%%%|$+倫*.UU|˂|KK ?m4~(/ 59'g)VJi~jy|]}=_PoÆvI>B)i3[죔:)k%}Fd4^:yL|D~ŇG|}J( =̓'ҧhpXA)J)]9zTJ&ohL:& *TPB *T|||AT|@ b|PB *TPBAxDj<"5HG#RxDh*xD*TPB *TBn͆ GA_~kR4X޳{ZVšoNj3g;vO{(+3f!+kAiz=Ϟ8sN+^lo ]VK~Y;=~h׮SKKk{衧<VL`[n Rr1_zukR|Ų+*8l]mmwׅ ׮^O>mfn[曾CΞk2QTXw}M]gwKH؉?q')!R`JpxևiRyeKPqhZBY@TRjSnھ=\vIKRU+߹|;9G6DH$pgv6+W> 0Z,7 !p/f2C8>r9Pӗ.hq83ЙN& H066oɔxwb|gQR"_~%ra]c>_k;C|>g%rP}j=Q;r8,sT h;1 $j>;dIA@<GߏPB,VZ+a,S;]k{,s 89Vzb~;Lg!$]SuQy,C{{;N<*}%@ y^ll6DH;zz55R.Nേ)V@YY_&tTZ[=LχSoMzQW$׮ySYzHeEbp\#6Qʥib1ttt`bbBU>r`nR0nܸ (PJ("jXp-BR0fffPSS)(.̙39(ּbՁQ]] J? davfau8e?r 4hРAd9`&+crD-:x5y~2(؃t'+|t \Q^[_e/, O ~|><ǭh^3D)^X54w(}CCp(=~rްH ,C$!H,~^jly\e0(!Q(#8 6W5fD?44а77H2> {UtugeM$ٳkРA ?0/`hZ^IENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/magicline/0000755000175000017500000000000013437512115021522 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/magicline/images/0000755000175000017500000000000013437512115022767 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/magicline/images/icon.png0000644000175000017500000000020513437512115024422 0ustar domdomPNG  IHDR ftLIDATӅ10UڬBzb8 Qv X 0bܴI Punm줁vcB7/'ܸIENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/magicline/images/icon-rtl.png0000644000175000017500000000021213437512115025217 0ustar domdomPNG  IHDR ftQIDATA 5a!& k4NAee% ALHgNzmPs]lu=b& #3IENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/magicline/images/hidpi/0000755000175000017500000000000013437512115024064 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/magicline/images/hidpi/icon.png0000644000175000017500000000030713437512115025522 0ustar domdomPNG  IHDRrpyPLTE#~_tRNSWIDAT}0 ߕZ1>~ [)CC !!٭ mTXO!fg|-1%I?b }%NIENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/magicline/images/hidpi/icon-rtl.png0000644000175000017500000000026013437512115026317 0ustar domdomPNG  IHDRrpyPLTEHmtRNSoDIDATcPQa4+4 ÔBכMff0}iPD@&L & 3j'_S~R.IENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/table/0000755000175000017500000000000013437512115020661 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/table/dialogs/0000755000175000017500000000000013437512115022303 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/table/dialogs/table.js0000644000175000017500000002113413437512115023731 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ (function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;kl&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:" "},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0>$B 8 adaIX1ؖ1^ 6x}izU!!;Nw}w}"^@c.%f /_wu#111m۶M-Yd+c, , `S"2 ˯C_V9&/6 u]gv8y###8s y|y"zW^MV^NSx11000^PPn0x20>>jv:PVV(c֬Ycje~\~]H \}T[[$.B8ybޟ6.qEd4x@xAN3 `Vdl02c `@<G8 5GYQeDdU)aU)qAc%-AP{C*//:pX,p8h4~9zzz&5/]XX8rʕ+i߾}x<7-[z!|2`~~>x/v 1Ƥ@E{aƍF f c猱6ye>xw=#N}}}Eooo|pp=9'&&xor8f3FyV@&qBy||O>$l6p~gJGVbk酏X+c,={B6p0w\2D(B<GAAߏG/ҋ4 ڵ+s{FFF066<ٳW0~yDN":ED~"^ N͊:tP@M>$4P,gt:?Yt)x3tM ӓ xAt녬ȉ^@vhu_j<v)w nHNN~(}ŽbBX__+rV뫐`7 /^G_xll ˗/ZϋeV/W\uX,f^^]]y"lx<>CӉ>x}"`y WWW{{{{FQQQO>d׿;EEE72U/~^*qT8#H(??%EY5H5minnn x].Wɶmێh0^nnnnٳg999ﴶV"a?䓿#"Sb5=CD<#>_WD:>7zA "t_*q8$hhJv/|>\jUYΝË/x\$»LСCs;::9֭[P`pu%<qDZYfe5Z/I%;0Ȉ_"F˽ 0MQ:''G5 [ƅ/Y0 ſC̗/Sq&kadWK}*eU Po߾Cr`ښb'j>Or̞=; "ڠj† @ i]/@ :tEA=@ 0>յZ wDf10pA;TTT\[YYX,122p o[zo" A*_ 򠬬 122ҳbŊgfmR$JJJH$h4*Q->ccg||\*D$ ' @$AoU\MMM/D"R9Q&rWx1:ce˖?11!q*LHHX,h46f|;߿i```<(80l=(7:Yf}#\aXB֭[#)??`1v=cl  b_z/0+,,eh46gUUKFq%u^0@0b1sQQ9X`XV__k2%V痌=cU199-&3`tt. RG 8qp:o}_apjlX,f_ć1{)G^o֭[/,,@D>"z4RsС 1Zy-o !,Hn---E8Ƽy\R\499 >X,N:~_x{{{3Tgl8mkk E"hniiiB:|NNNEQ̝;&$u[].KKK?K?x<#sqPX?s}>ׇzNq:khhXz jMK0V^>^/hP _F ?I# ^h``pnOY<*yFɁ`t\ Ly^HWE! r:p8|puOWWhWWիWfM˗ӢEvV"ʄ߭-ڹl2B*V+= %#K "㧟~+V̚5y̙3gCrK?{yG~~~|<dc,%<@dbrl6>U`v}-89=vXuuR"X;aKKKK7ahhhV w@Dޞ_]{vٳFz(--Ō3qܯ16ɓ'KKKߞ1cqWwDuu5(oBRbA$JBŋǃ?Nj} "Sh"*))!+&imm=SVVF' pǴ+Б-t]/dt\OoMpB̙3VZx I8X,@JwZD`;1DsHN"vaafÜ9sJcs)c7+H<{x xѣx|?`ThT__/g] JWRo$ׯ_?'UUU4{li"qBӂJ&.,2#U%vcct8!r1^aX@ 7@"Z'@TqY~.%$@DJ? *!# !OD!hĐf X=>9>"zq%eE b >㋏@!@eeek2/Vq̙b3HXr1^ bzR9Ν@EǞ}YL^)Eа@m}oR)Y8w3]>B\^-":`BܻTqR,I&>GBȿ >/>!=6( t}9X,Wx鍴 ̌a)鯦C?lHd5p% H/~whj, c: ɝtjS'߉20Ty1Be:#6/_./D U:ޗ]}8"MEdA ;88/I@ODd}< .A/$csov} kFw{RfdCH+1Ƨ"@pn:t|I ;}6|x^FMo"ݻP3fQgmBEEj?>EE7aƌf*Tܮ[\8~5rrr ~_Jf; sV/CjoM:8*8;(HnR><W~]9$h䫑%PrT%!# gϞ" >R+ ļrn{{{2y|s (ܚs`%"DQ16*D.mYv&Jy;))) 6M)&"'OD."qsFXZtVʀ^֩ LWrCK/͜9*6crrY:/omN3pB!F#SSRx<#G8{,hry|>2HI9q(//c `'O + ʢ "F{M1-FL$" bR&7! "J\ ###&h8: "B0TALDtF'hhڵTTT}>=J (>y6_DtSrdbrf:/Eq]DЌPäBYPNyy^":& Sii)2 ;'''Z;WkmmV|j199IBЮ+JG(UVVFD*:r`2%%%[[j.())y1%o>` %8*v"Inݺۻf͚k֬y#.]nf"!v']mpv ey3ji:t ,ˎ@ pz`0|LSz1/..N F_Ν;w.cjZc$SN?Zzaݺu7mtʕ+lJ8D|0E/["jliiv vJKKٳVN@K/BDf"z{ 6"R)#d2Ֆ555P|̘1׋nB:<.N<)oݻywҥLu&͢DX:LD/jy:B8$ee:0wfB 74b;VXA+V ƪr3gM&L&fΜ`do_---*~Q?mliim=eP1ZJ3Fq`0{ekKɴd2}׾Q Z#a@Cgzե<--w#asF50 7Fq%@[F:. d+868!(&ym" ɾp5I_jS!~^`cZ@`;FKnx\YdwcǓ1i}L(6FRm|eZx˔5~:t|ɠB$3 d{5xaB! ] Ig#dR\|L6iF5?ۘ"{Sdn"|Ú@JD DtRqD떅GQV5kTVHbl 7J^^a NT(rM9&HyYY7LJ C jMNNH{.'p>^mmm)$+HIDAT"~o߾C܊ Q'>"Jc٠˱a աCM/8B !@Ii !YA! ]@B )~" 6gu. qdGPtPQ ]+]+t|N8K ,q HKKKegg':;;R)1#i:QU/Q $<!m7TVzojz1(Mt8%}R`۵QR~ 8`jWde!k-p8+`VHuy `0ٳx@8ѡ~; N3x& :t rA>BCxA Y MU eݙtD@xAZ".PZ,xAB%u/.Bg_8K$͵??{w^/}YU`yyyouuu'&&PSS3 n/Bh\[[#>//oSq;c*h]lYn8AĮªPWvaIWYZ"Fe[|NJ[lՍ,BF>=%pU (*++?oU# Q N}\CN -I-|XKʄ4mnhh8t:s o2*_d+cD787r78c]5Y K#fS~~ $,*4' \3gܹk׮-X˗LǗ=q'E!!Vhx< q50#qlp\X,F0 0L!p88BD `%\"]ĉ(//dޓ⌌1X,fCoo/l6"&P,8z{{%bFxG<Gaa&۷OeuY\.x9Ӹ@:6Mjkk5mchz" 3n;= hSIDKBUE֋a@VCtJLs6nxZH f6ͽ rrrn$^`EY|+nǣ~vIS'q1/ Ykllqw0;R .P.CFrLN'E ,FbaRB.Ǒv$7ϧ˗ ^y衇6677cQ7UvZ,#]wuwwD@@-~k0dZh(+]tM` ]fßZ,4f;F%={H$񓌱jca =}}}qj_*FGG{T>"jxg.XoPhZᶶ6ZbN"#Dj``X[[ۙ*5!rb_WO]x1'N'0%9577`00={朜m|j0x%{N"v/Q"n#DT&?JZuC"S ItmOu1hooGr@B}Ѻ7oNJ.LЄ`Sc,D3S4ۤ@ .]cL'aÉyja -N^{ ad2 ???&p#a'N bRNZ,a;::bO=&yEk?ɦN\aXDW:ɸ @|b Kv{p"Ng%xDDr+Β%K]tرWj޸qQ_'Hŋ}iӦƲZpSW^yx :t|n|;1 ISR*Kf4a&''ADZX,xrc v3fb򣨨(f20bP6is%ՙ5̀SsLYf2%(xdL8FA*fI)gPƴbN85Z`aZ DNiۈv_9> `ɒ%kl6[4IGL& W_G€_rʹF8Ni  W 󨫫㊊jK.裏F5kָhlly^w)ƘDӧOlذmmm&jjjxSS[===Nd%5"v9~Bj1fޗHul6o!)ݎd<@D:tA ^:?^#555ϛ7O#v$:͒ε #)??RPl$$w@fEhi5 yr%?RxM4M%%IK,?bڨ{eDN3 Yt:---tghj[oe~#]q>x7u$!=Hw9qG $8m[u?lX ?KE4&nIENDB`rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/find/0000755000175000017500000000000013437512115020512 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/find/dialogs/0000755000175000017500000000000013437512115022134 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/find/dialogs/find.js0000644000175000017500000002424313437512115023417 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ (function(){function y(c){return c.type==CKEDITOR.NODE_TEXT&&0b.length){var d=this._.walker.textNode;if(d)a.setStartAfter(d);else return null}else d=b[0],b=b[b.length-1],a.setStart(d.textNode,d.offset),a.setEnd(b.textNode,b.offset+1);return a},updateFromDomRange:function(a){var b=new l(a);this._.cursors=[];do a=b.next(),a.character&&this._.cursors.push(a); while(a.character);this._.rangeLength=this._.cursors.length},setMatched:function(){this._.isMatched=!0},clearMatched:function(){this._.isMatched=!1},isMatched:function(){return this._.isMatched},highlight:function(){if(!(1>this._.cursors.length)){this._.highlightRange&&this.removeHighlight();var a=this.toDomRange(),b=a.createBookmark();t.applyToRange(a,c);a.moveToBookmark(b);this._.highlightRange=a;b=a.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b.scrollIntoView();this.updateFromDomRange(a)}}, removeHighlight:function(){if(this._.highlightRange){var a=this._.highlightRange.createBookmark();t.removeFromRange(this._.highlightRange,c);this._.highlightRange.moveToBookmark(a);this.updateFromDomRange(this._.highlightRange);this._.highlightRange=null}},isReadOnly:function(){return!this._.highlightRange?0:this._.highlightRange.startContainer.isReadOnly()},moveBack:function(){var a=this._.walker.back(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.unshift(a);b.length>this._.rangeLength&& b.pop();return a},moveNext:function(){var a=this._.walker.next(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.push(a);b.length>this._.rangeLength&&b.shift();return a},getEndCharacter:function(){var a=this._.cursors;return 1>a.length?null:a[a.length-1].character},getNextCharacterRange:function(a){var b,d;d=this._.cursors;d=(b=d[d.length-1])&&b.textNode?new l(n(b)):this._.walker;return new q(d,a)},getCursors:function(){return this._.cursors}};var v=function(a,b){var d=[-1];b&&(a=a.toLowerCase()); for(var c=0;c=b||8192<=b&&8202>=b||z.test(a)},e={searchRange:null,matchRange:null,find:function(a,b,d,f,e,A){this.matchRange?(this.matchRange.removeHighlight(),this.matchRange=this.matchRange.getNextCharacterRange(a.length)):this.matchRange=new q(new l(this.searchRange),a.length);for(var i=new v(a,!b),j=0,k="%";null!==k;){for(this.matchRange.moveNext();k=this.matchRange.getEndCharacter();){j=i.feedCharacter(k);if(2==j)break;this.matchRange.moveNext().hitMatchBoundary&& i.reset()}if(2==j){if(d){var h=this.matchRange.getCursors(),m=h[h.length-1],h=h[0],g=c.createRange();g.setStartAt(c.editable(),CKEDITOR.POSITION_AFTER_START);g.setEnd(h.textNode,h.offset);h=g;m=n(m);h.trim();m.trim();h=new l(h,!0);m=new l(m,!0);if(!w(h.back().character)||!w(m.next().character))continue}this.matchRange.setMatched();!1!==e&&this.matchRange.highlight();return!0}}this.matchRange.clearMatched();this.matchRange.removeHighlight();return f&&!A?(this.searchRange=p(1),this.matchRange=null, arguments.callee.apply(this,Array.prototype.slice.call(arguments).concat([!0]))):!1},replaceCounter:0,replace:function(a,b,d,f,e,g,i){o=1;a=0;if(this.matchRange&&this.matchRange.isMatched()&&!this.matchRange._.isReplaced&&!this.matchRange.isReadOnly()){this.matchRange.removeHighlight();b=this.matchRange.toDomRange();d=c.document.createText(d);if(!i){var j=c.getSelection();j.selectRanges([b]);c.fire("saveSnapshot")}b.deleteContents();b.insertNode(d);i||(j.selectRanges([b]),c.fire("saveSnapshot")); this.matchRange.updateFromDomRange(b);i||this.matchRange.highlight();this.matchRange._.isReplaced=!0;this.replaceCounter++;a=1}else a=this.find(b,f,e,g,!i);o=0;return a}},f=c.lang.find;return{title:f.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:170,buttons:[CKEDITOR.dialog.cancelButton(c,{label:c.lang.common.close})],contents:[{id:"find",label:f.find,title:f.find,accessKey:"",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindFind",label:f.findWhat, isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFind",align:"left",style:"width:100%",label:f.find,onClick:function(){var a=this.getDialog();e.find(a.getValueOf("find","txtFindFind"),a.getValueOf("find","txtFindCaseChk"),a.getValueOf("find","txtFindWordChk"),a.getValueOf("find","txtFindCyclic"))||alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),style:"margin-top:29px",children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtFindCaseChk", isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtFindWordChk",isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtFindCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]},{id:"replace",label:f.replace,accessKey:"M",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindReplace",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFindReplace",align:"left",style:"width:100%",label:f.replace,onClick:function(){var a= this.getDialog();e.replace(a,a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),a.getValueOf("replace","txtReplaceCyclic"))||alert(f.notFoundMsg)}}]},{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtReplace",label:f.replaceWith,isChanged:!1,labelLayout:"horizontal",accessKey:"R"},{type:"button",id:"btnReplaceAll",align:"left",style:"width:100%",label:f.replaceAll,isChanged:!1, onClick:function(){var a=this.getDialog();e.replaceCounter=0;e.searchRange=p(1);e.matchRange&&(e.matchRange.removeHighlight(),e.matchRange=null);for(c.fire("saveSnapshot");e.replace(a,a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),!1,!0););e.replaceCounter?(alert(f.replaceSuccessMsg.replace(/%1/,e.replaceCounter)),c.fire("saveSnapshot")):alert(f.notFoundMsg)}}]},{type:"fieldset", label:CKEDITOR.tools.htmlEncode(f.findOptions),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtReplaceCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtReplaceWordChk",isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtReplaceCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]}],onLoad:function(){var a=this,b,c=0;this.on("hide",function(){c=0});this.on("show",function(){c=1});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(f){return function(e){f.call(a, e);var g=a._.tabs[e],i;i="find"===e?"txtFindWordChk":"txtReplaceWordChk";b=a.getContentElement(e,"find"===e?"txtFindFind":"txtFindReplace");a.getContentElement(e,i);g.initialized||(CKEDITOR.document.getById(b._.inputId),g.initialized=!0);if(c){var j,e="find"===e?1:0,g=1-e,k,h=r.length;for(k=0;kt)&&(s=a-t);t=a;c["cke:indent"]=s&&Math.ceil(a/s)+1||1}],[/^mso-list$/,null,function(a){a=a.split(" ");if(!(2>a.length)){var b=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(b!==w&&(c["cke:reset"]=1),w=b);c["cke:indent"]=a}}]])(c.style,a)||""),c["cke:indent"]||(t=0,c["cke:indent"]=1),CKEDITOR.tools.extend(c,b.attributes),!0;w=t=s=null;return!1},getStyleComponents:function(){var a= CKEDITOR.dom.element.createFromHtml('
          ',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);for(var c={},b=f.length,d=0;de)a.push(j=new CKEDITOR.htmlParser.element(m)),j.add(b),i.add(j);else{if(db.size?"small":"medium")),delete b.size),a.name="span",a.addStyle(d.join(";")))}},span:function(a){if(p(a.parent))return!1;a.filterChildren(c);if(n(a))return delete a.name,null;if(p(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),e=(b=b&&(b.value||"l."))&& b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(e)return b=h(e,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(e=(b=a.attributes)&&b.style)b.style=j([["line-height"],[/^font-family$/,null,!o?l(d.font_style,"family"):null],[/^font-size$/,null,!o?l(d.fontSize_style,"size"):null],[/^color$/,null,!o?l(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!o?l(d.colorButton_backStyle,"color"):null]])(e,a)||"";b.style|| delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),sup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript),a:function(a){var b=a.attributes;b.name&&b.name.match(/ole_link\d+/i)?delete a.name:b.href&&b.href.match(/^file:\/\/\/[\S]+#/i)&&(b.href=b.href.replace(/^file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&& delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:j(s?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left":"margin-right";if("margin"==c)a=r(c,a,[b])[b];else if(c!=b)return null;if(a&&!D.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}], [/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,D],["text-indent","0cm"],["page-break-before"],["tab-stops"],["display","none"],o?[/font-?/]:null],s),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":function(a,b){return b.classWhiteList&& -1!=b.classWhiteList.indexOf(" "+a+" ")?a:!1},bgcolor:i,valign:s?i:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(//),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src= d),c):!1}:i}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};CKEDITOR.cleanWord=function(a,c){a=a.replace(//g,"<\!--[$1]--\>");CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&&(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+)(<\!--\[endif\]--\>)/gi, "$1$2$3"));var b=new G,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire("beforeCleanWord",{filter:f});try{a=b.toHtml(a)}catch(d){c.showNotification(c.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(//g,"")}})();rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/0000755000175000017500000000000013437512115021216 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/0000755000175000017500000000000013437512115022640 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/0000755000175000017500000000000013437512115023561 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/bg.js0000644000175000017500000000760413437512115024516 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/cy.js0000644000175000017500000001022613437512115024533 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT+TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT+TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."}, {name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT+TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT+TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]}, {name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i fyned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."}, {name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/no.js0000644000175000017500000001027113437512115024534 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, {name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, {name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, {name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/hr.js0000644000175000017500000001007113437512115024527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT+TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."}, {name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT+TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT+TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]}, {name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."}, {name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/th.js0000644000175000017500000001037513437512115024540 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิกทำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้", legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ar.js0000644000175000017500000000762413437512115024532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"إضافة",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"فاصلة",dash:"Dash",period:"نقطة",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/sk.js0000644000175000017500000001114313437512115024534 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."}, {name:"Editorový dialóg",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."}, {name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT+TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]}, {name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu",legend:"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."}, {name:"Prejsť na ďalší ",legend:"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Stránka hore",pageDown:"Stránka dole", end:"End",home:"Home",leftArrow:"Šípka naľavo",upArrow:"Šípka hore",rightArrow:"Šípka napravo",downArrow:"Šípka dole",insert:"Insert","delete":"Delete",leftWindowKey:"Ľavé Windows tlačidlo",rightWindowKey:"Pravé Windows tlačidlo",selectKey:"Tlačidlo Select",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Násobenie",add:"Sčítanie",subtract:"Odčítanie", decimalPoint:"Desatinná čiarka",divide:"Delenie",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Bodkočiarka",equalSign:"Rovná sa",comma:"Čiarka",dash:"Pomĺčka",period:"Bodka",forwardSlash:"Lomítko",graveAccent:"Zdôrazňovanie prízvuku",openBracket:"Hranatá zátvorka otváracia",backSlash:"Backslash",closeBracket:"Hranatá zátvorka zatváracia",singleQuote:"Jednoduché úvodzovky"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ro.js0000644000175000017500000001023313437512115024536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT+TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului."}, {name:"Dialog editor",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor meniu contextual",legend:"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC."}, {name:"Editor Casetă Listă",legend:"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, {name:"Comenzi",items:[{name:" Undo command",legend:"Apasă ${undo}"},{name:"Comanda precedentă",legend:"Apasă ${redo}"},{name:"Comanda Îngroșat",legend:"Apasă ${bold}"},{name:"Comanda Inclinat",legend:"Apasă ${italic}"},{name:"Comanda Subliniere",legend:"Apasă ${underline}"},{name:"Comanda Legatură",legend:"Apasă ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ug.js0000644000175000017500000001360713437512115024541 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى", legend:"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]}, {name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."}, {name:"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape", pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract", decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/el.js0000644000175000017500000001552013437512115024522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT+TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."}, {name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]}, {name:"Εντολές",items:[{name:"Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:"Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:"Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:"Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:"Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:"Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:"Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. "}, {name:"Πρόσβαση στην επόμενη εντολή του χώρου εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. "},{name:"Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", end:"End",home:"Home",leftArrow:"Αριστερό Βέλος",upArrow:"Πάνω Βέλος",rightArrow:"Δεξί Βέλος",downArrow:"Κάτω Βέλος",insert:"Insert ","delete":"Delete",leftWindowKey:"Αριστερό Πλήκτρο Windows",rightWindowKey:"Δεξί Πλήκτρο Windows",selectKey:"Πλήκτρο Select",numpad0:"Αριθμητικό πληκτρολόγιο 0",numpad1:"Αριθμητικό Πληκτρολόγιο 1",numpad2:"Αριθμητικό πληκτρολόγιο 2",numpad3:"Αριθμητικό πληκτρολόγιο 3",numpad4:"Αριθμητικό πληκτρολόγιο 4",numpad5:"Αριθμητικό πληκτρολόγιο 5",numpad6:"Αριθμητικό πληκτρολόγιο 6", numpad7:"Αριθμητικό πληκτρολόγιο 7",numpad8:"Αριθμητικό πληκτρολόγιο 8",numpad9:"Αριθμητικό πληκτρολόγιο 9",multiply:"Πολλαπλασιασμός",add:"Πρόσθεση",subtract:"Αφαίρεση",decimalPoint:"Υποδιαστολή",divide:"Διαίρεση",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"6",f7:"7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ερωτηματικό",equalSign:"Σύμβολο Ισότητας",comma:"Κόμμα",dash:"Παύλα",period:"Τελεία",forwardSlash:"Κάθετος",graveAccent:"Βαρεία",openBracket:"Άνοιγμα Παρένθεσης", backSlash:"Ανάστροφη Κάθετος",closeBracket:"Κλείσιμο Παρένθεσης",singleQuote:"Απόστροφος"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/de.js0000644000175000017500000001072713437512115024516 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.",legend:[{name:"Allgemein",items:[{name:"Editorwerkzeugleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, {name:"Editordialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor-Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."}, {name:"Editor-Listenbox",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},{name:"Editor-Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]}, {name:"Befehle",items:[{name:"Rückgängig-Befehl",legend:"Drücken Sie ${undo}"},{name:"Wiederherstellen-Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift-Befehl",legend:"Drücken Sie ${bold}"},{name:"Kursiv-Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichen-Befehl",legend:"Drücken Sie ${underline}"},{name:"Link-Befehl",legend:"Drücken Sie ${link}"},{name:"Werkzeugleiste einklappen-Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "}, {name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],backspace:"Rücktaste",tab:"Tab",enter:"Eingabe",shift:"Umschalt",ctrl:"Strg",alt:"Alt",pause:"Pause",capslock:"Feststell",escape:"Escape",pageUp:"Bild auf",pageDown:"Bild ab", end:"Ende",home:"Pos1",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",downArrow:"Untere Pfeiltaste",insert:"Einfügen","delete":"Entfernen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8", numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich", closeBracket:"Schließende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/uk.js0000644000175000017500000001403713437512115024543 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT+TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів."},{name:"Діалог Редактора", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Контекстне Меню Редактора",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC."}, {name:"Скринька Списків Редактора",legend:"Всередині списку переходимо до наступного пункту списку клавішею TAB або СТРІЛКА ВНИЗ. Перейти до попереднього елемента списку можна SHIFT+TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список."},{name:"Шлях до елемента редактора",legend:"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі."}]}, {name:"Команди",items:[{name:"Відмінити команду",legend:"Натисніть ${undo}"},{name:"Повторити",legend:"Натисніть ${redo}"},{name:"Жирний",legend:"Натисніть ${bold}"},{name:"Курсив",legend:"Натисніть ${italic}"},{name:"Підкреслений",legend:"Натисніть ${underline}"},{name:"Посилання",legend:"Натисніть ${link}"},{name:"Згорнути панель інструментів",legend:"Натисніть ${toolbarCollapse}"},{name:"Доступ до попереднього місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."}, {name:"Доступ до наступного місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},{name:"Допомога з доступності",legend:"Натисніть ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down", end:"End",home:"Home",leftArrow:"Ліва стрілка",upArrow:"Стрілка вгору",rightArrow:"Права стрілка",downArrow:"Стрілка вниз",insert:"Вставити","delete":"Видалити",leftWindowKey:"Ліва клавіша Windows",rightWindowKey:"Права клавіша Windows",selectKey:"Виберіть клавішу",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Множення",add:"Додати",subtract:"Віднімання", decimalPoint:"Десяткова кома",divide:"Ділення",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Крапка з комою",equalSign:"Знак рівності",comma:"Кома",dash:"Тире",period:"Період",forwardSlash:"Коса риска",graveAccent:"Гравіс",openBracket:"Відкрити дужку",backSlash:"Зворотна коса риска",closeBracket:"Закрити дужку",singleQuote:"Одинарні лапки"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/sr-latn.js0000644000175000017500000000760713437512115025511 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/km.js0000644000175000017500000001164313437512115024533 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"ម៉ីនុយបរិបទអ្នកកែសម្រួល",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"ប្រអប់បញ្ជីអ្នកកែសម្រួល",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"ពាក្យបញ្ជា",items:[{name:"ការ​បញ្ជា​មិនធ្វើវិញ",legend:"ចុច ${undo}"},{name:"ការបញ្ជា​ធ្វើវិញ",legend:"ចុច ${redo}"},{name:"ការបញ្ជា​អក្សរ​ដិត",legend:"ចុច ${bold}"},{name:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម", legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"}]}],backspace:"លុបថយក្រោយ",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចេញ",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",end:"ចុង",home:"ផ្ទះ",leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល","delete":"លុប",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/fa.js0000644000175000017500000001335013437512115024507 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shift+Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."}, {name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]}, {name:"فرمان‌ها",items:[{name:"بازگشت به آخرین فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان درشت کردن متن",legend:"فشردن ${bold}"},{name:"فرمان کج کردن متن",legend:"فشردن ${italic}"},{name:"فرمان زیرخطدار کردن متن",legend:"فشردن ${underline}"},{name:"فرمان پیوند دادن",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:"دسترسی به فرمان محل تمرکز قبلی",legend:"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور."}, {name:"دسترسی به فضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}],backspace:"عقبگرد",tab:"برگه",enter:"ورود",shift:"تعویض",ctrl:"کنترل",alt:"دگرساز",pause:"توقف",capslock:"Caps Lock",escape:"گریز",pageUp:"صفحه به بالا",pageDown:"صفحه به پایین",end:"پایان",home:"خانه",leftArrow:"پیکان چپ", upArrow:"پیکان بالا",rightArrow:"پیکان راست",downArrow:"پیکان پایین",insert:"ورود","delete":"حذف",leftWindowKey:"کلید چپ ویندوز",rightWindowKey:"کلید راست ویندوز",selectKey:"انتخاب کلید",numpad0:"کلید شماره 0",numpad1:"کلید شماره 1",numpad2:"کلید شماره 2",numpad3:"کلید شماره 3",numpad4:"کلید شماره 4",numpad5:"کلید شماره 5",numpad6:"کلید شماره 6",numpad7:"کلید شماره 7",numpad8:"کلید شماره 8",numpad9:"کلید شماره 9",multiply:"ضرب",add:"افزودن",subtract:"تفریق",decimalPoint:"نقطه‌ی اعشار",divide:"جدا کردن", f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"علامت تساوی",comma:"کاما",dash:"خط تیره",period:"دوره",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/si.js0000644000175000017500000001356213437512115024541 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT+TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න."}, {name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."}]},{name:"විධාන",items:[{name:"විධානය වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.",legend:"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}"},{name:"තද අකුරින් විධාන",legend:"ඔබන්න ${තද }"}, {name:"බැධී අකුරු විධාන",legend:"ඔබන්න ${බැධී අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධාන.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධාන",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු හැකුලුම් විධාන",legend:"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }"},{name:"යොමුවීමට පෙර වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්‍රවේශ ",legend:"ඔබන්න ${a11y }"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl", alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8", numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/en.js0000644000175000017500000000760313437512115024527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/he.js0000644000175000017500000001131413437512115024513 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק", legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:"גישה למיקום המיקוד הקודם",legend:"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},{name:"גישה למיקום המיקוד הבא",legend:"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."}, {name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"חץ שמאלה",upArrow:"חץ למעלה",rightArrow:"חץ ימינה",downArrow:"חץ למטה",insert:"הכנס","delete":"מחק",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"בחר מקש",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"הוסף",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"סלאש",graveAccent:"Grave Accent", openBracket:"Open Bracket",backSlash:"סלאש הפוך",closeBracket:"Close Bracket",singleQuote:"ציטוט יחיד"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/lt.js0000644000175000017500000000761413437512115024546 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/lv.js0000644000175000017500000001112513437512115024540 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."}, {name:"Redaktora dialoga logs",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."}, {name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku."},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT+TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]}, {name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekšējai fokusa vietas komandai", legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},{name:"Piekļūt nākošā fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."}, {name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/eo.js0000644000175000017500000001115513437512115024525 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA+TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."}, {name:"Redaktildialogo",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."}, {name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]}, {name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:"Komando por atingi la antaŭan fokusan spacon",legend:"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn."}, {name:"Komando por atingi la sekvan fokusan spacon",legend:"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn"},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}],backspace:"Retropaŝo",tab:"Tabo",enter:"Enigi",shift:"Registrumo",ctrl:"Stirklavo",alt:"Alt-klavo",pause:"Paŭzo",capslock:"Majuskla baskulo",escape:"Eskapa klavo",pageUp:"Antaŭa Paĝo", pageDown:"Sekva Paĝo",end:"Fino",home:"Hejmo",leftArrow:"Sago Maldekstren",upArrow:"Sago Supren",rightArrow:"Sago Dekstren",downArrow:"Sago Suben",insert:"Enmeti","delete":"Forigi",leftWindowKey:"Maldekstra Windows-klavo",rightWindowKey:"Dekstra Windows-klavo",selectKey:"Selektklavo",numpad0:"Nombra Klavaro 0",numpad1:"Nombra Klavaro 1",numpad2:"Nombra Klavaro 2",numpad3:"Nombra Klavaro 3",numpad4:"Nombra Klavaro 4",numpad5:"Nombra Klavaro 5",numpad6:"Nombra Klavaro 6",numpad7:"Nombra Klavaro 7", numpad8:"Nombra Klavaro 8",numpad9:"Nombra Klavaro 9",multiply:"Obligi",add:"Almeti",subtract:"Subtrahi",decimalPoint:"Dekuma Punkto",divide:"Dividi",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nombra Baskulo",scrollLock:"Ruluma Baskulo",semiColon:"Punktokomo",equalSign:"Egalsigno",comma:"Komo",dash:"Haltostreko",period:"Punkto",forwardSlash:"Oblikvo",graveAccent:"Malakuto",openBracket:"Malferma Krampo",backSlash:"Retroklino",closeBracket:"Ferma Krampo", singleQuote:"Citilo"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ca.js0000644000175000017500000001072413437512115024506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT+TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."}, {name:"Editor de quadre de diàleg",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."}, {name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."},{name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]}, {name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"},{name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."}, {name:"Ordre per accedir al següent espai enfocat",legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}],backspace:"Retrocés",tab:"Tabulació",enter:"Intro",shift:"Majúscules",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloqueig de majúscules",escape:"Escape", pageUp:"Pàgina Amunt",pageDown:"Pàgina Avall",end:"Fi",home:"Inici",leftArrow:"Fletxa Esquerra",upArrow:"Fletxa Amunt",rightArrow:"Fletxa Dreta",downArrow:"Fletxa Avall",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Tecla Windows Esquerra",rightWindowKey:"Tecla Windows Dreta",selectKey:"Tecla Seleccionar",numpad0:"Teclat Numèric 0",numpad1:"Teclat Numèric 1",numpad2:"Teclat Numèric 2",numpad3:"Teclat Numèric 3",numpad4:"Teclat Numèric 4",numpad5:"Teclat Numèric 5",numpad6:"Teclat Numèric 6", numpad7:"Teclat Numèric 7",numpad8:"Teclat Numèric 8",numpad9:"Teclat Numèric 9",multiply:"Multiplicació",add:"Suma",subtract:"Resta",decimalPoint:"Punt Decimal",divide:"Divisió",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloqueig Teclat Numèric",scrollLock:"Bloqueig de Desplaçament",semiColon:"Punt i Coma",equalSign:"Símbol Igual",comma:"Coma",dash:"Guió",period:"Punt",forwardSlash:"Barra Diagonal",graveAccent:"Accent Obert",openBracket:"Claudàtor Obert", backSlash:"Barra Invertida",closeBracket:"Claudàtor Tancat",singleQuote:"Cometa Simple"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/hi.js0000644000175000017500000000762113437512115024525 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/_translationstatus.txt0000644000175000017500000000154513437512115030270 0ustar domdomCopyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license cs.js Found: 30 Missing: 0 cy.js Found: 30 Missing: 0 da.js Found: 12 Missing: 18 de.js Found: 30 Missing: 0 el.js Found: 25 Missing: 5 eo.js Found: 30 Missing: 0 fa.js Found: 30 Missing: 0 fi.js Found: 30 Missing: 0 fr.js Found: 30 Missing: 0 gu.js Found: 12 Missing: 18 he.js Found: 30 Missing: 0 it.js Found: 30 Missing: 0 mk.js Found: 5 Missing: 25 nb.js Found: 30 Missing: 0 nl.js Found: 30 Missing: 0 no.js Found: 30 Missing: 0 pt-br.js Found: 30 Missing: 0 ro.js Found: 6 Missing: 24 tr.js Found: 30 Missing: 0 ug.js Found: 27 Missing: 3 vi.js Found: 6 Missing: 24 zh-cn.js Found: 30 Missing: 0 rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/mk.js0000644000175000017500000001003213437512115024522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, {name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, {name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/mn.js0000644000175000017500000000761213437512115024537 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/gl.js0000644000175000017500000001060413437512115024522 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."}, {name:"Editor de diálogo",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."}, {name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS+TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."},{name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS+TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]}, {name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"},{name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."}, {name:"Orde «acceder ao seguinte espazo en foco»",legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}],backspace:"Ir atrás",tab:"Tabulador",enter:"Intro",shift:"Maiús",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Maiús",escape:"Escape",pageUp:"Páxina arriba", pageDown:"Páxina abaixo",end:"Fin",home:"Inicio",leftArrow:"Frecha esquerda",upArrow:"Frecha arriba",rightArrow:"Frecha dereita",downArrow:"Frecha abaixo",insert:"Inserir","delete":"Supr",leftWindowKey:"Tecla Windows esquerda",rightWindowKey:"Tecla Windows dereita",selectKey:"Escolla a tecla",numpad0:"Tec. numérico 0",numpad1:"Tec. numérico 1",numpad2:"Tec. numérico 2",numpad3:"Tec. numérico 3",numpad4:"Tec. numérico 4",numpad5:"Tec. numérico 5",numpad6:"Tec. numérico 6",numpad7:"Tec. numérico 7", numpad8:"Tec. numérico 8",numpad9:"Tec. numérico 9",multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloq. num.",scrollLock:"Bloq. despraz.",semiColon:"Punto e coma",equalSign:"Signo igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Barra inclinada",graveAccent:"Acento grave",openBracket:"Abrir corchete",backSlash:"Barra invertida", closeBracket:"Pechar corchete",singleQuote:"Comiña simple"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ko.js0000644000175000017500000001277113437512115024540 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"접근성 설명",contents:"도움말. 이 창을 닫으시려면 ESC 를 누르세요.",legend:[{name:"일반",items:[{name:"편집기 툴바",legend:"툴바를 탐색하시려면 ${toolbarFocus} 를 투르세요. 이전/다음 툴바 그룹으로 이동하시려면 TAB 키 또는 SHIFT+TAB 키를 누르세요. 이전/다음 툴바 버튼으로 이동하시려면 오른쪽 화살표 키 또는 왼쪽 화살표 키를 누르세요. 툴바 버튼을 활성화 하려면 SPACE 키 또는 ENTER 키를 누르세요."},{name:"편집기 다이얼로그",legend:"TAB 키를 누르면 다음 대화상자로 이동하고, SHIFT+TAB 키를 누르면 이전 대화상자로 이동합니다. 대화상자를 제출하려면 ENTER 키를 누르고, ESC 키를 누르면 대화상자를 취소합니다. 대화상자에 탭이 여러개 있을 때, ALT+F10 키 또는 TAB 키를 누르면 순서에 따라 탭 목록에 도달할 수 있습니다. 탭 목록에 초점이 맞을 때, 오른쪽과 왼쪽 화살표 키를 이용하면 각각 다음과 이전 탭으로 이동할 수 있습니다."}, {name:"편집기 환경 메뉴",legend:"${contextMenu} 또는 어플리케이션 키를 누르면 환경-메뉴를 열 수 있습니다. 환경-메뉴에서 TAB 키 또는 아래 화살표 키를 누르면 다음 메뉴 옵션으로 이동할 수 있습니다. 이전 옵션으로 이동은 SHIFT+TAB 키 또는 위 화살표 키를 눌러서 할 수 있습니다. 스페이스 키 또는 ENTER 키를 눌러서 메뉴 옵션을 선택할 수 있습니다. 스페이스 키 또는 ENTER 키 또는 오른쪽 화살표 키를 눌러서 하위 메뉴를 열 수 있습니다. 부모 메뉴 항목으로 돌아가려면 ESC 키 또는 왼쪽 화살표 키를 누릅니다. ESC 키를 눌러서 환경-메뉴를 닫습니다."},{name:"편집기 목록 박스",legend:"리스트-박스 내에서, 목록의 다음 항목으로 이동하려면 TAB 키 또는 아래쪽 화살표 키를 누릅니다. 목록의 이전 항목으로 이동하려면 SHIFT+TAB 키 또는 위쪽 화살표 키를 누릅니다. 스페이스 키 또는 ENTER 키를 누르면 목록의 해당 옵션을 선택합니다. ESC 키를 눌러서 리스트-박스를 닫을 수 있습니다."}, {name:"편집기 요소 경로 막대",legend:"${elementsPathFocus}를 눌러서 요소 경로 막대를 탐색할 수 있습니다. 다음 요소로 이동하려면 TAB 키 또는 오른쪽 화살표 키를 누릅니다. SHIFT+TAB 키 또는 왼쪽 화살표 키를 누르면 이전 버튼으로 이동할 수 있습니다. 스페이스 키나 ENTER 키를 누르면 편집기의 해당 항목을 선택합니다."}]},{name:"명령",items:[{name:" 명령 실행 취소",legend:"${undo} 누르시오"},{name:" 명령 다시 실행",legend:"${redo} 누르시오"},{name:" 굵게 명령",legend:"${bold} 누르시오"},{name:" 기울임 꼴 명령",legend:"${italic} 누르시오"},{name:" 밑줄 명령",legend:"${underline} 누르시오"},{name:" 링크 명령",legend:"${link} 누르시오"},{name:" 툴바 줄이기 명령",legend:"${toolbarCollapse} 누르시오"}, {name:" 이전 포커스 공간 접근 명령",legend:"탈자 기호(^) 이전에 ${accessPreviousSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다."},{name:"다음 포커스 공간 접근 명령",legend:"탈자 기호(^) 다음에 ${accessNextSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다. "},{name:" 접근성 도움말",legend:"${a11yHelp} 누르시오"}]}],backspace:"Backspace 키",tab:"탭 키",enter:"엔터 키",shift:"시프트 키",ctrl:"컨트롤 키",alt:"알트 키",pause:"일시정지 키",capslock:"캡스 록 키", escape:"이스케이프 키",pageUp:"페이지 업 키",pageDown:"페이지 다운 키",end:"엔드 키",home:"홈 키",leftArrow:"왼쪽 화살표 키",upArrow:"위쪽 화살표 키",rightArrow:"오른쪽 화살표 키",downArrow:"아래쪽 화살표 키",insert:"인서트 키","delete":"삭제 키",leftWindowKey:"왼쪽 윈도우 키",rightWindowKey:"오른쪽 윈도우 키",selectKey:"셀렉트 키",numpad0:"숫자 패드 0 키",numpad1:"숫자 패드 1 키",numpad2:"숫자 패드 2 키",numpad3:"숫자 패드 3 키",numpad4:"숫자 패드 4 키",numpad5:"숫자 패드 5 키",numpad6:"숫자 패드 6 키",numpad7:"숫자 패드 7 키",numpad8:"숫자 패드 8 키",numpad9:"숫자 패드 9 키",multiply:"곱셈(*) 키",add:"덧셈(+) 키",subtract:"뺄셈(-) 키", decimalPoint:"온점(.) 키",divide:"나눗셈(/) 키",f1:"F1 키",f2:"F2 키",f3:"F3 키",f4:"F4 키",f5:"F5 키",f6:"F6 키",f7:"F7 키",f8:"F8 키",f9:"F9 키",f10:"F10 키",f11:"F11 키",f12:"F12 키",numLock:"Num Lock 키",scrollLock:"Scroll Lock 키",semiColon:"세미콜론(;) 키",equalSign:"등호(=) 키",comma:"쉼표(,) 키",dash:"대시(-) 키",period:"온점(.) 키",forwardSlash:"슬래시(/) 키",graveAccent:"억음 악센트(`) 키",openBracket:"브라켓 열기([) 키",backSlash:"역슬래시(\\\\) 키",closeBracket:"브라켓 닫기(]) 키",singleQuote:"외 따옴표(') 키"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/zh.js0000644000175000017500000001011513437512115024536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指南",contents:"說明內容。若要關閉此對話框請按「ESC」。",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按 ${toolbarFocus} 以導覽到工具列。利用 TAB 或 SHIFT+TAB 以便移動到下一個及前一個工具列群組。利用右方向鍵或左方向鍵以便移動到下一個及上一個工具列按鈕。按下空白鍵或 ENTER 鍵啟用工具列按鈕。"},{name:"編輯器對話方塊",legend:"在對話框中,按下 TAB 鍵以導覽到下一個對話框元素,按下 SHIFT+TAB 以移動到上一個對話框元素,按下 ENTER 以遞交對話框,按下 ESC 以取消對話框。當對話框有多個分頁時,可以使用 ALT+F10 或是在對話框分頁順序中的一部份按下 TAB 以使用分頁列表。焦點在分頁列表上時,分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。"},{name:"編輯器內容功能表",legend:"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。"}, {name:"編輯器清單方塊",legend:"在清單方塊中,使用 TAB 或下方向鍵移動到下一個列表項目。使用 SHIFT+TAB 或上方向鍵移動到上一個列表項目。按下空白鍵或 ENTER 以選取列表選項。按下 ESC 以關閉清單方塊。"},{name:"編輯器元件路徑工具列",legend:"請按 ${elementsPathFocus} 以瀏覽元素路徑列。利用 TAB 或右方向鍵以便移動到下一個元素按鈕。利用 SHIFT 或左方向鍵以便移動到上一個按鈕。按下空白鍵或 ENTER 鍵來選取在編輯器中的元素。"}]},{name:"命令",items:[{name:"復原命令",legend:"請按下「${undo}」"},{name:"重複命令",legend:"請按下「 ${redo}」"},{name:"粗體命令",legend:"請按下「${bold}」"},{name:"斜體",legend:"請按下「${italic}」"},{name:"底線命令",legend:"請按下「${underline}」"},{name:"連結",legend:"請按下「${link}」"}, {name:"隱藏工具列",legend:"請按下「${toolbarCollapse}」"},{name:"存取前一個焦點空間命令",legend:"請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"存取下一個焦點空間命令",legend:"請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"協助工具說明",legend:"請按下「${a11yHelp}」"}]}],backspace:"退格鍵",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home", leftArrow:"向左箭號",upArrow:"向上鍵號",rightArrow:"向右鍵號",downArrow:"向下鍵號",insert:"插入","delete":"刪除",leftWindowKey:"左方 Windows 鍵",rightWindowKey:"右方 Windows 鍵",selectKey:"選擇鍵",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"乘號",add:"新增",subtract:"減號",decimalPoint:"小數點",divide:"除號",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10", f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"分號",equalSign:"等號",comma:"逗號",dash:"虛線",period:"句點",forwardSlash:"斜線",graveAccent:"抑音符號",openBracket:"左方括號",backSlash:"反斜線",closeBracket:"右方括號",singleQuote:"單引號"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/es.js0000644000175000017500000001110713437512115024526 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."}, {name:"Lista del Editor",legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]}, {name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."}, {name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],backspace:"Retroceso",tab:"Tabulador",enter:"Ingresar",shift:"Mayús.",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Mayús.",escape:"Escape",pageUp:"Regresar Página", pageDown:"Avanzar Página",end:"Fin",home:"Inicio",leftArrow:"Flecha Izquierda",upArrow:"Flecha Arriba",rightArrow:"Flecha Derecha",downArrow:"Flecha Abajo",insert:"Insertar","delete":"Suprimir",leftWindowKey:"Tecla Windows Izquierda",rightWindowKey:"Tecla Windows Derecha",selectKey:"Tecla de Selección",numpad0:"Tecla 0 del teclado numérico",numpad1:"Tecla 1 del teclado numérico",numpad2:"Tecla 2 del teclado numérico",numpad3:"Tecla 3 del teclado numérico",numpad4:"Tecla 4 del teclado numérico",numpad5:"Tecla 5 del teclado numérico", numpad6:"Tecla 6 del teclado numérico",numpad7:"Tecla 7 del teclado numérico",numpad8:"Tecla 8 del teclado numérico",numpad9:"Tecla 9 del teclado numérico",multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto Decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Punto y coma",equalSign:"Signo de Igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Diagonal", graveAccent:"Acento Grave",openBracket:"Abrir llave",backSlash:"Diagonal Invertida",closeBracket:"Cerrar llave",singleQuote:"Comillas simples"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/fo.js0000644000175000017500000000760513437512115024533 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fo",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Falda",add:"Pluss",subtract:"Frádráttar",decimalPoint:"Decimal Point",divide:"Býta",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Javnatekn",comma:"Komma",dash:"Dash",period:"Punktum",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/tt.js0000644000175000017500000001031413437512115024545 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Командалар",items:[{name:"Кайтару",legend:"${undo} басыгыз"},{name:"Кабатлау",legend:"${redo} басыгыз"},{name:"Калын",legend:"${bold} басыгыз"},{name:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"}, {name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",legend:"${toolbarCollapse} басыгыз"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"${a11yHelp} басыгыз"}]}],backspace:"Кайтару",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү","delete":"Бетерү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек сызык", graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",singleQuote:"Бер иңле куштырнаклар"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/it.js0000644000175000017500000001146713437512115024544 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti."}, {name:"Finestra Editor",legend:"All'interno di una finestra di dialogo è possibile premere TAB per passare all'elemento successivo della finestra, MAIUSC+TAB per passare a quello precedente; premere INVIO per inviare i dati della finestra, oppure ESC per annullare l'operazione. Quando una finestra di dialogo ha più schede, è possibile passare all'elenco delle schede sia con ALT+F10 che con TAB, in base all'ordine delle tabulazioni della finestra. Quando l'elenco delle schede è attivo, premere la FRECCIA DESTRA o la FRECCIA SINISTRA per passare rispettivamente alla scheda successiva o a quella precedente."}, {name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."}, {name:"Box Lista Editor",legend:"All'interno di un elenco di opzioni, per spostarsi all'elemento successivo premere TAB oppure FRECCIA GIÙ. Per spostarsi all'elemento precedente usare SHIFT+TAB oppure FRECCIA SU. Premere SPAZIO o INVIO per selezionare l'elemento della lista. Premere ESC per chiudere l'elenco di opzioni."},{name:"Barra percorso elementi editor",legend:"Premere ${elementsPathFocus} per passare agli elementi della barra del percorso. Usare TAB o FRECCIA DESTRA per passare al pulsante successivo. Per passare al pulsante precedente premere MAIUSC+TAB o FRECCIA SINISTRA. Premere SPAZIO o INVIO per selezionare l'elemento nell'editor."}]}, {name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."}, {name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Invio",shift:"Maiusc",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloc Maiusc",escape:"Esc",pageUp:"Pagina sù",pageDown:"Pagina giù", end:"Fine",home:"Inizio",leftArrow:"Freccia sinistra",upArrow:"Freccia su",rightArrow:"Freccia destra",downArrow:"Freccia giù",insert:"Ins","delete":"Canc",leftWindowKey:"Tasto di Windows sinistro",rightWindowKey:"Tasto di Windows destro",selectKey:"Tasto di selezione",numpad0:"0 sul tastierino numerico",numpad1:"1 sul tastierino numerico",numpad2:"2 sul tastierino numerico",numpad3:"3 sul tastierino numerico",numpad4:"4 sul tastierino numerico",numpad5:"5 sul tastierino numerico",numpad6:"6 sul tastierino numerico", numpad7:"7 sul tastierino numerico",numpad8:"8 sul tastierino numerico",numpad9:"9 sul tastierino numerico",multiply:"Moltiplicazione",add:"Più",subtract:"Sottrazione",decimalPoint:"Punto decimale",divide:"Divisione",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloc Num",scrollLock:"Bloc Scorr",semiColon:"Punto-e-virgola",equalSign:"Segno di uguale",comma:"Virgola",dash:"Trattino",period:"Punto",forwardSlash:"Barra",graveAccent:"Accento grave", openBracket:"Parentesi quadra aperta",backSlash:"Barra rovesciata",closeBracket:"Parentesi quadra chiusa",singleQuote:"Apostrofo"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/sv.js0000644000175000017500000001037213437512115024552 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT+TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck SPACE eller ENTER för att aktivera knappen i verktygsfältet."}, {name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan, tryck SKIFT+TAB för att flytta till föregående fält, tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT+F10 eller TAB för att navigera till fliklistan. med fliklistan vald flytta till nästa och föregående flik med HÖGER- eller VÄNSTERPIL."},{name:"Editor för innehållsmeny",legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."}, {name:"Editor för list-box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT+TAB eller UPPIL. Tryck SPACE eller ENTER för att välja listan alternativet. Tryck ESC för att stänga list-boxen."},{name:"Editor för elementens sökväg",legend:"Tryck på ${elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT+TAB eller VÄNSTERPIL. Tryck SPACE eller ENTER för att välja element i redigeraren."}]}, {name:"Kommandon",items:[{name:"Ångra kommando",legend:"Tryck på ${undo}"},{name:"Gör om kommando",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"},{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."}, {name:"Tillgå nästa fokuskommandots utrymme",legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}],backspace:"Backsteg",tab:"Tab",enter:"Retur",shift:"Skift",ctrl:"Ctrl",alt:"Alt",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",pageDown:"Sida Ned",end:"Slut", home:"Hem",leftArrow:"Vänsterpil",upArrow:"Uppil",rightArrow:"Högerpil",downArrow:"Nedåtpil",insert:"Infoga","delete":"Radera",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt", divide:"Dividera",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/gu.js0000644000175000017500000001012513437512115024531 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/tr.js0000644000175000017500000001077213437512115024553 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT+TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."}, {name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."}, {name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT+TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."}, {name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT+TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"}, {name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."}, {name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}],backspace:"Silme",tab:"Sekme tuşu",enter:"Gir tuşu",shift:'"Shift" Kaydırma tuşu',ctrl:'"Ctrl" Kontrol tuşu',alt:'"Alt" Anahtar tuşu',pause:"Durdurma tuşu",capslock:"Büyük harf tuşu",escape:"Vazgeç tuşu",pageUp:"Sayfa Yukarı",pageDown:"Sayfa Aşağı",end:"Sona",home:"En başa",leftArrow:"Sol ok",upArrow:"Yukarı ok",rightArrow:"Sağ ok",downArrow:"Aşağı ok",insert:"Araya gir","delete":"Silme",leftWindowKey:"Sol windows tuşu",rightWindowKey:"Sağ windows tuşu", selectKey:"Seçme tuşu",numpad0:"Nümerik 0",numpad1:"Nümerik 1",numpad2:"Nümerik 2",numpad3:"Nümerik 3",numpad4:"Nümerik 4",numpad5:"Nümerik 5",numpad6:"Nümerik 6",numpad7:"Nümerik 7",numpad8:"Nümerik 8",numpad9:"Nümerik 9",multiply:"Çarpma",add:"Toplama",subtract:"Çıkarma",decimalPoint:"Ondalık işareti",divide:"Bölme",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lk",scrollLock:"Scr Lk",semiColon:"Noktalı virgül",equalSign:"Eşittir", comma:"Virgül",dash:"Eksi",period:"Nokta",forwardSlash:"İleri eğik çizgi",graveAccent:"Üst tırnak",openBracket:"Parantez aç",backSlash:"Ters eğik çizgi",closeBracket:"Parantez kapa",singleQuote:"Tek tırnak"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/pl.js0000644000175000017500000001153013437512115024532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Naciśnij ${toolbarFocus}, by przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT+TAB. Przejdź do następnego i poprzedniego przycisku paska narzędzi za pomocą STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Naciśnij SPACJĘ lub ENTER by aktywować przycisk paska narzędzi."}, {name:"Okno dialogowe edytora",legend:"Wewnątrz okna dialogowego naciśnij TAB, by przejść do kolejnego elementu tego okna lub SHIFT+TAB, by przejść do poprzedniego elementu okna. Naciśnij ENTER w celu zatwierdzenia opcji okna dialogowego lub ESC w celu anulowania zmian. Jeśli okno dialogowe ma kilka zakładek, do listy zakładek można przejść za pomocą ALT+F10 lub TAB. Gdy lista zakładek jest aktywna, możesz przejść do kolejnej i poprzedniej zakładki za pomocą STRZAŁKI W PRAWO i STRZAŁKI W LEWO."}, {name:"Menu kontekstowe edytora",legend:"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC."},{name:"Lista w edytorze", legend:"Wewnątrz listy przejdź do kolejnego elementu listy za pomocą przycisku TAB lub STRZAŁKI W DÓŁ. Przejdź do poprzedniego elementu listy za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Naciśnij SPACJĘ lub ENTER w celu wybrania opcji z listy. Naciśnij ESC, by zamknąć listę."},{name:"Pasek ścieżki elementów edytora",legend:"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz TAB lub STRZAŁKI W PRAWO. W celu przejścia do poprzedniego elementu naciśnij klawisze SHIFT+TAB lub STRZAŁKI W LEWO. By wybrać element w edytorze, użyj klawisza SPACJI lub ENTER."}]}, {name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Strzałka w lewo", upArrow:"Strzałka w górę",rightArrow:"Strzałka w prawo",downArrow:"Strzałka w dół",insert:"Insert","delete":"Delete",leftWindowKey:"Lewy klawisz Windows",rightWindowKey:"Prawy klawisz Windows",selectKey:"Klawisz wyboru",numpad0:"Klawisz 0 na klawiaturze numerycznej",numpad1:"Klawisz 1 na klawiaturze numerycznej",numpad2:"Klawisz 2 na klawiaturze numerycznej",numpad3:"Klawisz 3 na klawiaturze numerycznej",numpad4:"Klawisz 4 na klawiaturze numerycznej",numpad5:"Klawisz 5 na klawiaturze numerycznej", numpad6:"Klawisz 6 na klawiaturze numerycznej",numpad7:"Klawisz 7 na klawiaturze numerycznej",numpad8:"Klawisz 8 na klawiaturze numerycznej",numpad9:"Klawisz 9 na klawiaturze numerycznej",multiply:"Przemnóż",add:"Plus",subtract:"Minus",decimalPoint:"Separator dziesiętny",divide:"Podziel",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Średnik",equalSign:"Znak równości",comma:"Przecinek",dash:"Pauza", period:"Kropka",forwardSlash:"Ukośnik prawy",graveAccent:"Akcent słaby",openBracket:"Nawias kwadratowy otwierający",backSlash:"Ukośnik lewy",closeBracket:"Nawias kwadratowy zamykający",singleQuote:"Apostrof"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/nb.js0000644000175000017500000001052513437512115024521 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogelement, trykk SHIFT+TAB for å flytte til forrige dialogelement, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. Når en dialog har flere faner, kan fanelisten nås med enten ALT+F10 eller med TAB. Når fanelisten er fokusert, går man til neste og forrige fane med henholdsvis HØYRE og VENSTRE PILTAST."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, {name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, {name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, {name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulator",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre piltast",upArrow:"Opp-piltast",rightArrow:"Høyre piltast",downArrow:"Ned-piltast",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows-tast",rightWindowKey:"Høyre Windows-tast",selectKey:"Velg nøkkel",numpad0:"Numerisk tastatur 0",numpad1:"Numerisk tastatur 1",numpad2:"Numerisk tastatur 2",numpad3:"Numerisk tastatur 3",numpad4:"Numerisk tastatur 4",numpad5:"Numerisk tastatur 5",numpad6:"Numerisk tastatur 6",numpad7:"Numerisk tastatur 7", numpad8:"Numerisk tastatur 8",numpad9:"Numerisk tastatur 9",multiply:"Multipliser",add:"Legg til",subtract:"Trekk fra",decimalPoint:"Desimaltegn",divide:"Divider",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Likhetstegn",comma:"Komma",dash:"Bindestrek",period:"Punktum",forwardSlash:"Forover skråstrek",graveAccent:"Grav aksent",openBracket:"Åpne parentes",backSlash:"Bakover skråstrek", closeBracket:"Lukk parentes",singleQuote:"Enkelt sitattegn"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/sl.js0000644000175000017500000001045713437512115024544 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila Dostopnosti",contents:"Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Urejevalna Orodna Vrstica",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT+TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."}, {name:"Urejevalno Pogovorno Okno",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Urejevalni Kontekstni Meni",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC."}, {name:"Urejevalno Seznamsko Polje",legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT+TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT+TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]}, {name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"Ležeči ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"Skrči Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejšnjega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."}, {name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},{name:"Pomoč Dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End", home:"Home",leftArrow:"Levo puščica",upArrow:"Gor puščica",rightArrow:"Desno puščica",downArrow:"Dol puščica",insert:"Insert","delete":"Delete",leftWindowKey:"Leva Windows tipka",rightWindowKey:"Desna Windows tipka",selectKey:"Select tipka",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Zmnoži",add:"Dodaj",subtract:"Odštej",decimalPoint:"Decimalna vejica", divide:"Deli",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Podpičje",equalSign:"enačaj",comma:"Vejica",dash:"Vezaj",period:"Pika",forwardSlash:"Desna poševnica",graveAccent:"Krativec",openBracket:"Oklepaj",backSlash:"Leva poševnica",closeBracket:"Oklepaj",singleQuote:"Opuščaj"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/fi.js0000644000175000017500000001101013437512115024506 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT+TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."}, {name:"Editorin dialogi",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editorin oheisvalikko",legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."}, {name:"Editorin listalaatikko",legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]}, {name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:"Siirry aiempaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."}, {name:"Siirry seuraavaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numeronäppäimistö 0",numpad1:"Numeronäppäimistö 1",numpad2:"Numeronäppäimistö 2",numpad3:"Numeronäppäimistö 3",numpad4:"Numeronäppäimistö 4",numpad5:"Numeronäppäimistö 5",numpad6:"Numeronäppäimistö 6",numpad7:"Numeronäppäimistö 7",numpad8:"Numeronäppäimistö 8", numpad9:"Numeronäppäimistö 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puolipiste",equalSign:"Equal Sign",comma:"Pilkku",dash:"Dash",period:"Piste",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/fr-ca.js0000644000175000017500000001125213437512115025110 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, {name:"Dialogue de l'éditeur",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."}, {name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT+TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, {name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."}, {name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home", leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1", f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ru.js0000644000175000017500000001350613437512115024552 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT+TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка", legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]}, {name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'}, {name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End", home:"Home",leftArrow:"Стрелка влево",upArrow:"Стрелка вверх",rightArrow:"Стрелка вправо",downArrow:"Стрелка вниз",insert:"Insert","delete":"Delete",leftWindowKey:"Левая клавиша Windows",rightWindowKey:"Правая клавиша Windows",selectKey:"Выбрать",numpad0:"Цифра 0",numpad1:"Цифра 1",numpad2:"Цифра 2",numpad3:"Цифра 3",numpad4:"Цифра 4",numpad5:"Цифра 5",numpad6:"Цифра 6",numpad7:"Цифра 7",numpad8:"Цифра 8",numpad9:"Цифра 9",multiply:"Умножить",add:"Плюс",subtract:"Вычесть",decimalPoint:"Десятичная точка", divide:"Делить",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Точка с запятой",equalSign:"Равно",comma:"Запятая",dash:"Тире",period:"Точка",forwardSlash:"Наклонная черта",graveAccent:"Апостроф",openBracket:"Открыть скобку",backSlash:"Обратная наклонная черта",closeBracket:"Закрыть скобку",singleQuote:"Одинарная кавычка"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/zh-cn.js0000644000175000017500000001010413437512115025132 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 切换到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内,按 TAB 键移动到下一个字段,按 SHIFT + TAB 组合键移动到上一个字段,按 ENTER 键提交对话框,按 ESC 键取消对话框。对于有多选项卡的对话框,可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表,当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"}, {name:"编辑器列表框",legend:"在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT+TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"}, {name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}],backspace:"退格键",tab:"Tab 键",enter:"回车键",shift:"Shift 键",ctrl:"Ctrl 键",alt:"Alt 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",end:"行尾键",home:"行首键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",downArrow:"向下箭头键", insert:"插入键","delete":"删除键",leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键", semiColon:"分号键",equalSign:"等号键",comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/cs.js0000644000175000017500000001133513437512115024527 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru", legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další prvek okna, stiskněte SHIFT+TAB pro přesun na předchozí prvek okna, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT+F10 pro zaměření seznamu karet, nebo TAB, pro posun podle pořadí karet.Při zaměření seznamu karet se můžete jimi posouvat pomocí ŠIPKY VPRAVO a VLEVO."},{name:"Kontextové menu editoru",legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."}, {name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT+TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."},{name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí tlačítko se přesunete pomocí SHIFT+TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]}, {name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva",legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."}, {name:"Příkaz pro přístup k dalšímu prostoru zaměření",legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulátor",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pauza",capslock:"Caps lock",escape:"Escape",pageUp:"Stránka nahoru", pageDown:"Stránka dolů",end:"Konec",home:"Domů",leftArrow:"Šipka vlevo",upArrow:"Šipka nahoru",rightArrow:"Šipka vpravo",downArrow:"Šipka dolů",insert:"Vložit","delete":"Smazat",leftWindowKey:"Levá klávesa Windows",rightWindowKey:"Pravá klávesa Windows",selectKey:"Vyberte klávesu",numpad0:"Numerická klávesa 0",numpad1:"Numerická klávesa 1",numpad2:"Numerická klávesa 2",numpad3:"Numerická klávesa 3",numpad4:"Numerická klávesa 4",numpad5:"Numerická klávesa 5",numpad6:"Numerická klávesa 6",numpad7:"Numerická klávesa 7", numpad8:"Numerická klávesa 8",numpad9:"Numerická klávesa 9",multiply:"Numerická klávesa násobení",add:"Přidat",subtract:"Numerická klávesa odečítání",decimalPoint:"Desetinná tečka",divide:"Numerická klávesa dělení",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num lock",scrollLock:"Scroll lock",semiColon:"Středník",equalSign:"Rovnítko",comma:"Čárka",dash:"Pomlčka",period:"Tečka",forwardSlash:"Lomítko",graveAccent:"Přízvuk",openBracket:"Otevřená hranatá závorka", backSlash:"Obrácené lomítko",closeBracket:"Uzavřená hranatá závorka",singleQuote:"Jednoduchá uvozovka"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/pt.js0000644000175000017500000001062113437512115024542 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de acessibilidade",contents:"Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de ferramentas do editor",legend:"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, {name:"Janela do Editor",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu de Contexto do Editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."}, {name:"Editor de caixa em lista",legend:"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista."},{name:"Caminho Barra Elemento Editor",legend:"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]}, {name:"Comandos",items:[{name:"Comando de Anular",legend:"Carregar ${undo}"},{name:"Comando de Refazer",legend:"Pressione ${redo}"},{name:"Comando de Negrito",legend:"Pressione ${bold}"},{name:"Comando de Itálico",legend:"Pressione ${italic}"},{name:"Comando de Sublinhado",legend:"Pressione ${underline}"},{name:"Comando de Hiperligação",legend:"Pressione ${link}"},{name:"Comando de Ocultar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acesso comando do espaço focus anterior", legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."}, {name:"Ajuda a acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Maiúsculas",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"Fim",home:"Entrada",leftArrow:"Seta esquerda",upArrow:"Seta para cima",rightArrow:"Seta direita",downArrow:"Seta para baixo",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0", numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiplicar",add:"Adicionar",subtract:"Subtrair",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Vírgula",dash:"Dash",period:"Period", forwardSlash:"Forward Slash",graveAccent:"Acento grave",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/pt-br.js0000644000175000017500000001106613437512115025147 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT+TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, {name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo elemento. Pressione SHIFT+TAB para mover para o elemento anterior. Pressione ENTER ara enviar o diálogo. pressione ESC para cancelar o diálogo. Quando um diálogo tem múltiplas abas, a lista de abas pode ser acessada com ALT+F10 ou TAB, como parte da ordem de tabulação do diálogo. Com a lista de abas em foco, mova para a próxima aba e para a aba anterior com a SETA DIREITA ou SETA ESQUERDA, respectivamente."}, {name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."}, {name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"}, {name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."}, {name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Tecla Backspace",tab:"Tecla Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Seta à Esquerda",upArrow:"Seta à Cima",rightArrow:"Seta à Direita",downArrow:"Seta à Baixo",insert:"Insert","delete":"Delete",leftWindowKey:"Tecla do Windows Esquerda",rightWindowKey:"Tecla do Windows Direita",selectKey:"Tecla Selecionar",numpad0:"0 do Teclado Numérico",numpad1:"1 do Teclado Numérico",numpad2:"2 do Teclado Numérico",numpad3:"3 do Teclado Numérico",numpad4:"4 do Teclado Numérico",numpad5:"5 do Teclado Numérico",numpad6:"6 do Teclado Numérico", numpad7:"7 do Teclado Numérico",numpad8:"8 do Teclado Numérico",numpad9:"9 do Teclado Numérico",multiply:"Multiplicar",add:"Mais",subtract:"Subtrair",decimalPoint:"Ponto",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ponto-e-vírgula",equalSign:"Igual",comma:"Vírgula",dash:"Hífen",period:"Ponto",forwardSlash:"Barra",graveAccent:"Acento Grave",openBracket:"Abrir Conchetes", backSlash:"Contra-barra",closeBracket:"Fechar Colchetes",singleQuote:"Aspas Simples"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/et.js0000644000175000017500000000761413437512115024537 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/da.js0000644000175000017500000000772413437512115024515 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Tryk ${toolbarFocus} for at navigere til værktøjslinjen. Flyt til næste eller forrige værktøjsline gruppe ved hjælp af TAB eller SHIFT+TAB. Flyt til næste eller forrige værktøjslinje knap med venstre- eller højre piltast. Tryk på SPACE eller ENTER for at aktivere værktøjslinje knappen."},{name:"Editor dialogboks", legend:"Inde i en dialogboks kan du, trykke på TAB for at navigere til næste element, trykke på SHIFT+TAB for at navigere til forrige element, trykke på ENTER for at afsende eller trykke på ESC for at lukke dialogboksen.\r\nNår en dialogboks har flere faner, fanelisten kan tilgås med ALT+F10 eller med TAB. Hvis fanelisten er i fokus kan du skifte til næste eller forrige tab, med højre- og venstre piltast."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, {name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, {name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:"Fed kommando",legend:"Klik ${bold}"},{name:"Kursiv kommando",legend:"Klik ${italic}"},{name:"Understregnings kommando",legend:"Klik ${underline}"},{name:"Link kommando",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Klik ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Tilgængelighedshjælp",legend:"Kilk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre pil", upArrow:"Pil op",rightArrow:"Højre pil",downArrow:"Pil ned",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows tast",rightWindowKey:"Højre Windows tast",selectKey:"Select-knap",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Gange",add:"Plus",subtract:"Minus",decimalPoint:"Komma",divide:"Divider",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5", f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lighedstegn",comma:"Komma",dash:"Bindestreg",period:"Punktum",forwardSlash:"Skråstreg",graveAccent:"Accent grave",openBracket:"Start klamme",backSlash:"Omvendt skråstreg",closeBracket:"Slut klamme",singleQuote:"Enkelt citationstegn"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/af.js0000644000175000017500000000766113437512115024517 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","af",{title:"Toeganglikheid instruksies",contents:"Hulp inhoud. Druk ESC om toe te maak.",legend:[{name:"Algemeen",items:[{name:"Bewerker balk",legend:"Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig."},{name:"Bewerker dialoog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Bewerkerinhoudmenu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pouse",capslock:"Hoofletterslot",escape:"Ontsnap",pageUp:"Blaaiop",pageDown:"Blaaiaf",end:"Einde",home:"Tuis",leftArrow:"Linkspyl",upArrow:"Oppyl",rightArrow:"Regterpyl",downArrow:"Afpyl",insert:"Toevoeg","delete":"Verwyder",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Nommerblok 0",numpad1:"Nommerblok 1", numpad2:"Nommerblok 2",numpad3:"Nommerblok 3",numpad4:"Nommerblok 4",numpad5:"Nommerblok 5",numpad6:"Nommerblok 6",numpad7:"Nommerblok 7",numpad8:"Nommerblok 8",numpad9:"Nommerblok 9",multiply:"Maal",add:"Plus",subtract:"Minus",decimalPoint:"Desimaalepunt",divide:"Gedeeldeur",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nommervergrendel",scrollLock:"Rolvergrendel",semiColon:"Kommapunt",equalSign:"Isgelykaan",comma:"Komma",dash:"Koppelteken", period:"Punt",forwardSlash:"Skuinsstreep",graveAccent:"Aksentteken",openBracket:"Oopblokhakkie",backSlash:"Trustreep",closeBracket:"Toeblokhakkie",singleQuote:"Enkelaanhaalingsteken"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/hu.js0000644000175000017500000001115513437512115024536 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT+TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Szerkesztő helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."}, {name:"Szerkesztő lista",legend:"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"Szerkesztő elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben."}]}, {name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."}, {name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", end:"End",home:"Home",leftArrow:"balra nyíl",upArrow:"felfelé nyíl",rightArrow:"jobbra nyíl",downArrow:"lefelé nyíl",insert:"Insert","delete":"Delete",leftWindowKey:"bal Windows-billentyű",rightWindowKey:"jobb Windows-billentyű",selectKey:"Billentyű választása",numpad0:"Számbillentyűk 0",numpad1:"Számbillentyűk 1",numpad2:"Számbillentyűk 2",numpad3:"Számbillentyűk 3",numpad4:"Számbillentyűk 4",numpad5:"Számbillentyűk 5",numpad6:"Számbillentyűk 6",numpad7:"Számbillentyűk 7",numpad8:"Számbillentyűk 8", numpad9:"Számbillentyűk 9",multiply:"Szorzás",add:"Hozzáadás",subtract:"Kivonás",decimalPoint:"Tizedespont",divide:"Osztás",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Pontosvessző",equalSign:"Egyenlőségjel",comma:"Vessző",dash:"Kötőjel",period:"Pont",forwardSlash:"Perjel",graveAccent:"Visszafelé dőlő ékezet",openBracket:"Nyitó szögletes zárójel",backSlash:"fordított perjel",closeBracket:"Záró szögletes zárójel", singleQuote:"szimpla idézőjel"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/sr.js0000644000175000017500000000760613437512115024554 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/nl.js0000644000175000017500000001050513437512115024531 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."}, {name:"Dialoog tekstverwerker",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."}, {name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."},{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]}, {name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht",legend:"Druk op ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."}, {name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", end:"End",home:"Home",leftArrow:"Pijl naar links",upArrow:"Pijl omhoog",rightArrow:"Pijl naar rechts",downArrow:"Pijl naar beneden",insert:"Invoegen","delete":"Verwijderen",leftWindowKey:"Linker Windows-toets",rightWindowKey:"Rechter Windows-toets",selectKey:"Selecteer toets",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Vermenigvuldigen",add:"Toevoegen", subtract:"Aftrekken",decimalPoint:"Decimaalteken",divide:"Delen",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puntkomma",equalSign:"Is gelijk-teken",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Slash",graveAccent:"Accent grave",openBracket:"Vierkant haakje openen",backSlash:"Backslash",closeBracket:"Vierkant haakje sluiten",singleQuote:"Apostrof"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/vi.js0000644000175000017500000001225713437512115024544 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT+TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh."}, {name:"Hộp danh sách trình biên tập",legend:"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím TAB hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím SHIFT+TAB hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím ENTER để chọn các tùy chọn trong danh sách. Nhấn phím ESC để đóng lại danh sách chọn."},{name:"Thanh đường dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím TAB hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím SHIFT+TAB hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc ENTER để chọn đối tượng trong trình soạn thảo."}]}, {name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dưới",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trước đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."}, {name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}],backspace:"Phím Backspace",tab:"Phím Tab",enter:"Phím Tab",shift:"Phím Shift",ctrl:"Phím Ctrl",alt:"Phím Alt",pause:"Phím Pause",capslock:"Phím Caps Lock", escape:"Phím Escape",pageUp:"Phím Page Up",pageDown:"Phím Page Down",end:"Phím End",home:"Phím Home",leftArrow:"Phím Left Arrow",upArrow:"Phím Up Arrow",rightArrow:"Phím Right Arrow",downArrow:"Phím Down Arrow",insert:"Chèn","delete":"Xóa",leftWindowKey:"Phím Left Windows",rightWindowKey:"Phím Right Windows ",selectKey:"Chọn phím",numpad0:"Phím 0",numpad1:"Phím 1",numpad2:"Phím 2",numpad3:"Phím 3",numpad4:"Phím 4",numpad5:"Phím 5",numpad6:"Phím 6",numpad7:"Phím 7",numpad8:"Phím 8",numpad9:"Phím 9", multiply:"Nhân",add:"Thêm",subtract:"Trừ",decimalPoint:"Điểm số thập phân",divide:"Chia",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Dấu chấm phẩy",equalSign:"Đăng nhập bằng",comma:"Dấu phẩy",dash:"Dấu gạch ngang",period:"Phím .",forwardSlash:"Phím /",graveAccent:"Phím `",openBracket:"Open Bracket",backSlash:"Dấu gạch chéo ngược",closeBracket:"Gần giá đỡ",singleQuote:"Trích dẫn"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ja.js0000644000175000017500000001171213437512115024513 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"エディターのメニュー",legend:"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。"},{name:"エディターリストボックス",legend:"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。"},{name:"エディター要素パスバー",legend:"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。"}]}, {name:"コマンド",items:[{name:"元に戻す",legend:"${undo} をクリック"},{name:"やり直し",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールバーを縮める",legend:"${toolbarCollapse} をクリック"},{name:"前のカーソル移動のできないポイントへ",legend:"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},{name:"次のカーソル移動のできないポイントへ",legend:"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"}, {name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"左矢印",upArrow:"上矢印",rightArrow:"右矢印",downArrow:"下矢印",insert:"Insert","delete":"Delete",leftWindowKey:"左Windowキー",rightWindowKey:"右のWindowキー",selectKey:"Select",numpad0:"Num 0",numpad1:"Num 1",numpad2:"Num 2",numpad3:"Num 3",numpad4:"Num 4",numpad5:"Num 5", numpad6:"Num 6",numpad7:"Num 7",numpad8:"Num 8",numpad9:"Num 9",multiply:"掛ける",add:"足す",subtract:"引く",decimalPoint:"小数点",divide:"割る",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"セミコロン",equalSign:"イコール記号",comma:"カンマ",dash:"ダッシュ",period:"ピリオド",forwardSlash:"フォワードスラッシュ",graveAccent:"グレイヴアクセント",openBracket:"開きカッコ",backSlash:"バックスラッシュ",closeBracket:"閉じカッコ",singleQuote:"シングルクォート"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/id.js0000644000175000017500000000757613437512115024532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Accessibility Instructions",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/en-gb.js0000644000175000017500000000760613437512115025120 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/sq.js0000644000175000017500000000771513437512115024554 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."}, {name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, {name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"}, {name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}],backspace:"Prapa",tab:"Fletë",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Shenja majtas",upArrow:"Shenja sipër",rightArrow:"Shenja djathtas",downArrow:"Shenja poshtë",insert:"Shto","delete":"Grise",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Shto",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Presje",dash:"vizë",period:"Pikë",forwardSlash:"Forward Slash", graveAccent:"Grave Accent",openBracket:"Hape kllapën",backSlash:"Backslash",closeBracket:"Mbylle kllapën",singleQuote:"Single Quote"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/ku.js0000644000175000017500000001254113437512115024541 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT+TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر", legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."}, {name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]}, {name:"فەرمانەکان",items:[{name:"پووچکردنەوەی فەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی فەرمان",legend:"کلیك ${redo}"},{name:"فەرمانی دەقی قەڵەو",legend:"کلیك ${bold}"},{name:"فەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"فەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, {name:"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"پەنجەرەی چەپ",rightWindowKey:"پەنجەرەی ڕاست",selectKey:"Select",numpad0:"Numpad 0",numpad1:"1",numpad2:"2",numpad3:"3",numpad4:"4",numpad5:"5",numpad6:"6",numpad7:"7",numpad8:"8",numpad9:"9",multiply:"*",add:"+",subtract:"-",decimalPoint:".",divide:"/",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock", semiColon:";",equalSign:"=",comma:",",dash:"-",period:".",forwardSlash:"/",graveAccent:"`",openBracket:"[",backSlash:"\\\\",closeBracket:"}",singleQuote:"'"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/lang/fr.js0000644000175000017500000001215513437512115024532 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche ÉCHAP (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches MAJ et MAJ+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLÈCHE DROITE et FLÈCHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRÉE pour activer le bouton de barre d'outils."}, {name:"Dialogue de l'éditeur",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l'option précédente avec les touches MAJ+TAB ou FLÈCHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTRÉE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTRÉE ou FLÈCHE DROITE. Revenir à l'élément de menu parent avec les touches ÉCHAP ou FLÈCHE GAUCHE. Fermer le menu contextuel avec ÉCHAP."}, {name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ+TAB ou FLÈCHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTRÉE pour sélectionner l'option dans la liste. Appuyer sur ÉCHAP pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLÈCHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLÈCHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTRÉE pour sélectionner l'élément dans l'éditeur."}]}, {name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Refaire la commande",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à la précédente commande d'espace de mise au point", legend:"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants."},{name:"Accès à la prochaine commande de l'espace de mise au point",legend:"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants."}, {name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Retour arrière",tab:"Tabulation",enter:"Entrée",shift:"Majuscule",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Verr. Maj.",escape:"Échap",pageUp:"Page supérieure",pageDown:"Page inférieure",end:"Fin",home:"Retour",leftArrow:"Flèche gauche",upArrow:"Flèche haute",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Insertion","delete":"Supprimer",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite", selectKey:"Touche menu",numpad0:"Pavé numérique 0",numpad1:"Pavé numérique 1",numpad2:"Pavé numérique 2",numpad3:"Pavé numérique 3",numpad4:"Pavé numérique 4",numpad5:"Pavé numérique 5",numpad6:"Pavé numérique 6",numpad7:"Pavé numérique 7",numpad8:"Pavé numérique 8",numpad9:"Pavé numérique 9",multiply:"Multiplier",add:"Addition",subtract:"Soustraire",decimalPoint:"Point décimal",divide:"Diviser",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12", numLock:"Verrouillage numérique",scrollLock:"Arrêt défilement",semiColon:"Point virgule",equalSign:"Signe égal",comma:"Virgule",dash:"Tiret",period:"Point",forwardSlash:"Barre oblique",graveAccent:"Accent grave",openBracket:"Parenthèse ouvrante",backSlash:"Barre oblique inverse",closeBracket:"Parenthèse fermante",singleQuote:"Apostrophe"});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/a11yhelp/dialogs/a11yhelp.js0000644000175000017500000000532313437512115024625 0ustar domdom/* Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add("a11yHelp",function(j){var a=j.lang.a11yhelp,l=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a["delete"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8, 105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT, CKEDITOR.CTRL],m=/\$\{(.*?)\}/g,p=function(){var a=j.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,i,k=[],d=0;d=h&&(b-=i,k.push(e[i]));k.push(e[b]||String.fromCharCode(b));b=k.join("+")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()}, html:function(){for(var e='
          %1
          '+a.contents+" ",g=[],c=a.legend,j=c.length,f=0;f%1
          %2
          ".replace("%1",n.name).replace("%2",o))}g.push("

          %1

          %2
          ".replace("%1",b.name).replace("%2",h.join("")))}return e.replace("%1", g.join(""))}()+''}]}], buttons:[CKEDITOR.dialog.cancelButton]}});rt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/scayt/0000755000175000017500000000000013437512115020715 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/scayt/dialogs/0000755000175000017500000000000013437512115022337 5ustar domdomrt-4.4.4/devel/third-party/ckeditor-4.5.3/plugins/scayt/dialogs/options.js0000644000175000017500000002100713437512115024370 0ustar domdomCKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='

          '+g.getLocal("version")+g.getVersion()+"

          "+g.getLocal("text_copyrights")+"

          ",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox", id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],c={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var b={type:"checkbox"};b.id=d;b.label=g.getLocal(c[d]);e.push(b)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e
      ',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"), elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,c=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=c.getUserDictionaryName()&&""!=c.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(c.getUserDictionaryName())},0)}},{type:"hbox", id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,c=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();c.createUserDictionary(d,function(b){b.error||e.toggleDictionaryButtons.call(a,!0);b.dialog=a;b.command="create";b.name=d;f.fire("scaytUserDictionaryAction",b)},function(b){b.dialog=a;b.command="create"; b.name=d;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,c=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(b){b.dialog=a;b.error||c.toggleDictionaryButtons.call(a,!0);b.command="restore";b.name=d;f.fire("scaytUserDictionaryAction",b)},function(b){b.dialog=a;b.command="restore";b.name=d;f.fire("scaytUserDictionaryActionError", b)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,c=j,d=a.getContentElement("dictionaries","dictionaryName"),b=d.getValue();e.removeUserDictionary(b,function(e){d.setValue("");e.error||c.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=b;f.fire("scaytUserDictionaryAction",e)},function(c){c.dialog= a;c.command="remove";c.name=b;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,c=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(c,function(d){d.dialog=a;d.command="rename";d.name=c;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=c;f.fire("scaytUserDictionaryActionError",d)})}}]}, {type:"html",id:"dicInfo",html:'
      '+g.getLocal("text_descriptionDic")+"
      "}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'
      '+k+"
      "}]}];f.on("scaytUserDictionaryAction",function(a){var e=SCAYT.prototype.UILib,c=a.data.dialog,d=c.getContentElement("dictionaries","dictionaryNote").getElement(),b=a.editor.scayt,f;void 0=== a.data.error?(f=b.getLocal("message_success_"+a.data.command+"Dic"),f=f.replace("%s",a.data.name),d.setText(f),e.css(d.$,{color:"blue"})):(""===a.data.name?d.setText(b.getLocal("message_info_emptyDic")):(f=b.getLocal("message_error_"+a.data.command+"Dic"),f=f.replace("%s",a.data.name),d.setText(f)),e.css(d.$,{color:"red"}),null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()?c.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName()):c.getContentElement("dictionaries", "dictionaryName").setValue(""))});f.on("scaytUserDictionaryActionError",function(a){var e=SCAYT.prototype.UILib,c=a.data.dialog,d=c.getContentElement("dictionaries","dictionaryNote").getElement(),b=a.editor.scayt,f;""===a.data.name?d.setText(b.getLocal("message_info_emptyDic")):(f=b.getLocal("message_error_"+a.data.command+"Dic"),f=f.replace("%s",a.data.name),d.setText(f));e.css(d.$,{color:"red"});null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()?c.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName()): c.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()}, onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),c=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();c.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),c.show()):(e.setValue(""), d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),c=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),c.hide()):(e.hide(),c.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options", "scaytOptions").getChild(),c=0;c'),g=new CKEDITOR.dom.element("label"),h=f.scayt;c.setStyles({"white-space":"normal",position:"relative", "padding-bottom":"2px"});b.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);c.append(b);c.append(g);e===h.getLang()&&(b.setAttribute("checked",!0),b.setAttribute("defaultChecked","defaultChecked"));return c},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),c=g.getLangList(),d={},b=[],i=0,h;for(h in c.ltr)d[h]=c.ltr[h];for(h in c.rtl)d[h]=c.rtl[h];for(h in d)b.push([h,d[h]]);b.sort(function(a, c){var b=0;a[1]>c[1]?b=1:a[1]"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align"); a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]}, f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()): a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor"); return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f, {type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", "bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;dCKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement)); b.getWindow().getFrame().removeCustomData("pendingFocus")&&f.focus()}var e=c.lang.clipboard;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data,method:"paste",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()})},null,null,1E3);return{title:e.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle|| e.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'
      '+e.securityMsg+"
      "},{type:"html",id:"pasteMsg",html:'
      '+e.pasteMsg+"
      "},{type:"html",id:"editing_area", style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(),b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='